summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java3
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java5
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsTimer.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/ISettings.java2
-rw-r--r--Essentials/src/com/earth2me/essentials/Settings.java8
-rw-r--r--Essentials/src/com/earth2me/essentials/User.java26
-rw-r--r--Essentials/src/config.yml4
7 files changed, 44 insertions, 5 deletions
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
index 524edc16f..029288530 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java
@@ -32,6 +32,9 @@ public class EssentialsEntityListener implements Listener
{
final User defender = ess.getUser(eDefend);
final User attacker = ess.getUser(eAttack);
+ if (attacker.hasInvulnerabilityAfterTeleport() || defender.hasInvulnerabilityAfterTeleport()) {
+ event.setCancelled(true);
+ }
attacker.updateActivity(true);
final List<String> commandList = attacker.getPowertool(attacker.getItemInHand());
if (commandList != null && !commandList.isEmpty())
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
index 6b6b4a034..97ced232d 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
@@ -229,14 +229,13 @@ public class EssentialsPlayerListener implements Listener
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerTeleport(final PlayerTeleportEvent event)
{
-
+ final User user = ess.getUser(event.getPlayer());
//There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports.
if ((event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND) && ess.getSettings().registerBackInListener())
{
- final User user = ess.getUser(event.getPlayer());
user.setLastLocation();
}
-
+ user.enableInvulnerabilityAfterTeleport();
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java
index 0c413bfc8..18f980a62 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsTimer.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsTimer.java
@@ -48,6 +48,7 @@ public class EssentialsTimer implements Runnable
}
user.checkMuteTimeout(currentTime);
user.checkJailTimeout(currentTime);
+ user.resetInvulnerabilityAfterTeleport();
}
}
}
diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java
index 1ef8feaa9..74942640e 100644
--- a/Essentials/src/com/earth2me/essentials/ISettings.java
+++ b/Essentials/src/com/earth2me/essentials/ISettings.java
@@ -169,4 +169,6 @@ public interface ISettings extends IConf
boolean isMetricsEnabled();
void setMetricsEnabled(boolean metricsEnabled);
+
+ public long getTeleportInvulnerability();
}
diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java
index 08c3b74db..9dee4e990 100644
--- a/Essentials/src/com/earth2me/essentials/Settings.java
+++ b/Essentials/src/com/earth2me/essentials/Settings.java
@@ -609,7 +609,7 @@ public class Settings implements ISettings
{
return config.getBoolean("change-displayname", true);
}
-
+
@Override
public boolean changePlayerListName()
{
@@ -745,4 +745,10 @@ public class Settings implements ISettings
{
this.metricsEnabled = metricsEnabled;
}
+
+ @Override
+ public long getTeleportInvulnerability()
+ {
+ return config.getLong("teleport-invulnerability", 0) * 1000;
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java
index cfa6a4a4a..f931b07d9 100644
--- a/Essentials/src/com/earth2me/essentials/User.java
+++ b/Essentials/src/com/earth2me/essentials/User.java
@@ -603,8 +603,32 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
return invSee;
}
- public void setInvSee(boolean set)
+ public void setInvSee(final boolean set)
{
invSee = set;
}
+ private transient long teleportInvulnerabilityTimestamp = 0;
+
+ public void enableInvulnerabilityAfterTeleport()
+ {
+ final long time = ess.getSettings().getTeleportInvulnerability();
+ if (time > 0)
+ {
+ teleportInvulnerabilityTimestamp = System.currentTimeMillis() + time;
+ }
+ }
+
+ public void resetInvulnerabilityAfterTeleport()
+ {
+ if (teleportInvulnerabilityTimestamp != 0
+ && teleportInvulnerabilityTimestamp < System.currentTimeMillis())
+ {
+ teleportInvulnerabilityTimestamp = 0;
+ }
+ }
+
+ public boolean hasInvulnerabilityAfterTeleport()
+ {
+ return teleportInvulnerabilityTimestamp != 0 && teleportInvulnerabilityTimestamp >= System.currentTimeMillis();
+ }
}
diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml
index 133557030..ec1f3fc8d 100644
--- a/Essentials/src/config.yml
+++ b/Essentials/src/config.yml
@@ -50,6 +50,10 @@ teleport-cooldown: 0
# The delay, in seconds, before a user actually teleports. If the user moves or gets attacked in this timeframe, the teleport never occurs.
teleport-delay: 0
+# The delay, in seconds, a player can't be attacked by other players after he has been teleported by a command
+# This will also prevent that the player can attack other players
+teleport-invulnerability: 0
+
# The delay, in seconds, required between /heal attempts
heal-cooldown: 60