fixed some teleportation bugs and a bit of cleanup

This commit is contained in:
NewGarbo 2016-03-05 22:50:06 +00:00
parent e88736c1aa
commit d92f817efc
8 changed files with 112 additions and 167 deletions

View File

@ -62,4 +62,14 @@ public class DelayedTask extends MiniClientPlugin<DelayedTaskClient>
{
return new DelayedTaskClient(Bukkit.getPlayer(player));
}
public boolean HasTask(Player player, String task)
{
return Get(player).getStartTime(task) != -1;
}
public boolean HasTask(String player, String task)
{
return HasTask(Bukkit.getPlayer(player), task);
}
}

View File

@ -94,7 +94,6 @@ import mineplex.game.clans.clans.redis.ClanLoadCommandHandler;
import mineplex.game.clans.clans.regions.ClansRegions;
import mineplex.game.clans.clans.scoreboard.ClansScoreboardManager;
import mineplex.game.clans.clans.siege.SiegeManager;
import mineplex.game.clans.clans.stuck.StuckManager;
import mineplex.game.clans.clans.supplyDrop.SupplyDropManager;
import mineplex.game.clans.clans.tntGenerator.TntGeneratorManager;
import mineplex.game.clans.clans.war.WarManager;
@ -281,7 +280,6 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
new ObserverManager(plugin, _condition, this);
new ClanEnergyTracker(plugin, this);
new StuckManager(this);
// new ClansAlphaManager(this, taskManager);

View File

@ -1,3 +1,4 @@
package mineplex.game.clans.clans.commands;
import java.util.Collections;
@ -9,7 +10,6 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import com.google.common.collect.Lists;
@ -20,7 +20,6 @@ import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilInput;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTextMiddle;
@ -372,6 +371,13 @@ public class ClansCommand extends CommandBase<ClansManager>
return;
}
if (DelayedTask.Instance.HasTask(caller, "Spawn Teleport"))
{
_clansManager.message(caller, "You are already unsticking yourself.");
return;
}
ClanTerritory territory = Plugin.getClanUtility().getClaim(caller.getLocation());
String clanName = Plugin.getClanUtility().getClanByPlayer(caller) == null ? null : Plugin.getClanUtility().getClanByPlayer(caller).getName();
@ -913,7 +919,7 @@ public class ClansCommand extends CommandBase<ClansManager>
* }
*/
if (!Recharge.Instance.use(caller, "Home Teleport", 5 * 60 * 1000, true, false))
if (!Recharge.Instance.usable(caller, "Home Teleport", true))
{
return;
}
@ -921,6 +927,8 @@ public class ClansCommand extends CommandBase<ClansManager>
DelayedTask.Instance.doDelay(caller, "Home Teleport", new Callback<DelayedTaskClient>() {
public void run(DelayedTaskClient player)
{
Recharge.Instance.use(caller, "Home Teleport", 5 * 60 * 1000, true, false);
// Do
Plugin.getTeleport().TP(caller, clan.getHome().add(0, 1, 0));

View File

@ -1,109 +0,0 @@
package mineplex.game.clans.clans.stuck;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.core.MiniClientPlugin;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTime.TimeUnit;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.stuck.commands.StuckCommand;
import mineplex.game.clans.spawn.Spawn;
public class StuckManager extends MiniClientPlugin<StuckClient>
{
public static final long UNSTICK_WAIT_TIME = UtilTime.convert(35, TimeUnit.SECONDS, TimeUnit.MILLISECONDS);
public StuckManager(ClansManager clans)
{
super("Stuck Handler", clans.getPlugin());
}
@Override
public void addCommands()
{
addCommand(new StuckCommand(this));
}
@Override
protected StuckClient AddPlayer(String player)
{
return new StuckClient();
}
public void unstick(Player player)
{
Get(player).UnstickStartTime = System.currentTimeMillis();
Get(player).UnstickEndTime = Get(player).UnstickStartTime + UNSTICK_WAIT_TIME;
Get(player).StartLoc = player.getLocation();
}
public boolean isUnsticking(Player caller)
{
return Get(caller).UnstickStartTime != -1;
}
@EventHandler
public void updateTeleport(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTER)
{
for (Player player : Bukkit.getOnlinePlayers())
{
if (isUnsticking(player))
{
if (player.getLocation().distance(Get(player).StartLoc) >= 0.75)
{
cancelTeleport(player);
break;
}
UtilTextMiddle.display("", "Teleporting to Spawn in " + F.elem(UtilTime.MakeStr(Get(player).getTimeLeft())), 0, 20, 60, player);
if (Get(player).getTimeLeft() <= 500)
{
teleport(player);
}
}
}
}
}
private void cancelTeleport(Player player)
{
UtilPlayer.message(player, F.main("Clans", "You have moved, and cancelled the teleport."));
Get(player).UnstickStartTime = -1;
Get(player).UnstickEndTime = -1;
Get(player).StartLoc = null;
}
private void teleport(Player player)
{
Recharge.Instance.use(player, "Spawn Teleport", UtilTime.convert(15, TimeUnit.MINUTES, TimeUnit.MILLISECONDS), false, false);
UtilPlayer.message(player, F.main("Clans", "You have been teleported to Spawn."));
Get(player).UnstickStartTime = -1;
Get(player).UnstickEndTime = -1;
Get(player).StartLoc = null;
if (Math.random() < .5)
{
player.teleport(Spawn.getEastSpawn());
}
else
{
player.teleport(Spawn.getWestSpawn());
}
}
}

View File

@ -0,0 +1,77 @@
package mineplex.game.clans.clans.stuck.commands;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.common.util.UtilTime;
import mineplex.core.delayedtask.DelayedTask;
import mineplex.core.delayedtask.DelayedTaskClient;
import mineplex.core.recharge.Recharge;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.spawn.Spawn;
public class ClansSpawnCommand extends CommandBase<Spawn>
{
public ClansSpawnCommand(Spawn spawn)
{
super(spawn, Rank.ALL, "spawn", "stuck", "unstick", "unstuck");
}
@Override
public void Execute(Player caller, String[] args)
{
if (DelayedTask.Instance.HasTask(caller, "Spawn Teleport"))
{
UtilPlayer.message(caller, F.main("Clans", "You are already teleporting to Spawn."));
return;
}
if (!Recharge.Instance.usable(caller, "Spawn Teleport", true))
{
return;
}
if(ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()) != null && !ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()).Owner.equals("Borderlands") &&
!ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()).Owner.equals("Shops") && !ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()).Owner.equals("Spawn"))
{
UtilPlayer.message(caller, F.main("Clans", "You must be in the Wilderness/Borderlands/Shops/Spawn to use this command."));
return;
}
DelayedTask.Instance.doDelay(caller, "Spawn Teleport", new Callback<DelayedTaskClient>() {
public void run(DelayedTaskClient player)
{
// Do
if (Math.random() < .5)
{
caller.teleport(Spawn.getEastSpawn());
}
else
{
caller.teleport(Spawn.getWestSpawn());
}
// Inform
Plugin.getClansManager().getTutorials().sendTutorialMsg(caller, F.main("Clans", "You have been teleported to Spawn."));
}
}, new Callback<DelayedTaskClient>() {
public void run(DelayedTaskClient client)
{
UtilTextMiddle.display("", "Teleporting to Spawn in " + F.elem(UtilTime.MakeStr(Math.max(0, client.getTimeLeft("Spawn Teleport")))), 0, 5, 0, client.getPlayer());
}
}, new Callback<DelayedTaskClient>() {
public void run(DelayedTaskClient client)
{
UtilPlayer.message(client.getPlayer(), F.main("Clans", "Teleport has been cancelled due to movement."));
}
}, 2 * 60 * 1000, false);
}
}

View File

@ -1,48 +0,0 @@
package mineplex.game.clans.clans.stuck.commands;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.recharge.Recharge;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.stuck.StuckManager;
public class StuckCommand extends CommandBase<StuckManager>
{
public StuckCommand(StuckManager plugin)
{
super(plugin, Rank.ALL, "spawn", "stuck", "unstick", "unstuck");
}
@Override
public void Execute(Player caller, String[] args)
{
if (Plugin.isUnsticking(caller))
{
UtilPlayer.message(caller, F.main("Clans", "You are already teleporting to Spawn."));
return;
}
if (!Recharge.Instance.usable(caller, "Spawn Teleport", true))
{
return;
}
if(ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()) != null && !ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()).Owner.equals("Borderlands") &&
!ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()).Owner.equals("Shops") && !ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()).Owner.equals("Spawn"))
{
UtilPlayer.message(caller, F.main("Clans", "You must be in the Wilderness/Borderlands/Shops/Spawn to use this command."));
return;
}
UtilPlayer.message(caller, F.main("Clans", "Teleporting to Spawn... Please do not move for " + F.elem(UtilTime.MakeStr(StuckManager.UNSTICK_WAIT_TIME))) + ".");
Plugin.unstick(caller);
}
}

View File

@ -50,7 +50,7 @@ public class ChitauriScepter extends LegendaryItem
{
if ((System.currentTimeMillis() - _lastBlock) < 98 && (System.currentTimeMillis() - _interactWait) >= 98)
{
if (Recharge.Instance.use(wielder, getDisplayName(), 4000, true, true))
if (Recharge.Instance.use(wielder, "Chitauri Scepter", 4000, true, true))
{
fire(wielder);
@ -93,11 +93,12 @@ public class ChitauriScepter extends LegendaryItem
{
if (entity != player)
{
ClansManager.getInstance().getDamageManager().NewDamageEvent(entity, player, null, DamageCause.CUSTOM, damage, true,
true, false, getDisplayName(), getDisplayName());
ClansManager.getInstance().getDamageManager().NewDamageEvent(entity, player, null,
DamageCause.CUSTOM, damage, true, true, false,
player.getName(), "Chitauri Scepter");
UtilPlayer.message(entity, F.main("Clans", F.elem(entity.getName()) + " hit you with a " + getDisplayName() + C.mBody + "."));
UtilPlayer.message(player, F.main("Clans", "You hit " + F.elem(player.getName()) + " with your " + getDisplayName() + C.mBody + "."));
UtilPlayer.message(entity, F.main("Clans", F.elem(entity.getName()) + " hit you with a " + F.elem("Chitauri Scepter") + C.mBody + "."));
UtilPlayer.message(player, F.main("Clans", "You hit " + F.elem(player.getName()) + " with your " + F.elem("Chitauri Scepter") + C.mBody + "."));
}
}
}

View File

@ -42,6 +42,7 @@ import mineplex.core.common.util.UtilTime.TimeUnit;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.stuck.commands.ClansSpawnCommand;
import mineplex.core.common.weight.WeightSet;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
import mineplex.minecraft.game.classcombat.item.event.WebTossEvent;
@ -77,6 +78,8 @@ public class Spawn extends MiniPlugin
_spawns = new WeightSet<Location>(getEastSpawn(), getWestSpawn());
_shops = new WeightSet<Location>(getNorthTown(), getSouthTown());
_clansManager = clansManager;
addCommand(new ClansSpawnCommand(this));
}
/**
@ -537,4 +540,9 @@ public class Spawn extends MiniPlugin
_songWestLast = System.currentTimeMillis();
}
}
public ClansManager getClansManager()
{
return _clansManager;
}
}