IP management. Mson add methods.
This commit is contained in:
parent
e56dfd9c05
commit
ad7c63b88d
@ -27,6 +27,7 @@ import org.bukkit.event.player.PlayerRespawnEvent;
|
|||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.collections.MassiveMap;
|
||||||
import com.massivecraft.massivecore.event.EventMassiveCoreAfterPlayerRespawn;
|
import com.massivecraft.massivecore.event.EventMassiveCoreAfterPlayerRespawn;
|
||||||
import com.massivecraft.massivecore.event.EventMassiveCoreAfterPlayerTeleport;
|
import com.massivecraft.massivecore.event.EventMassiveCoreAfterPlayerTeleport;
|
||||||
import com.massivecraft.massivecore.event.EventMassiveCorePermissionDeniedFormat;
|
import com.massivecraft.massivecore.event.EventMassiveCorePermissionDeniedFormat;
|
||||||
@ -184,8 +185,10 @@ public class MassiveCoreEngineMain extends EngineAbstract
|
|||||||
// Note: For now we update both names and ids.
|
// Note: For now we update both names and ids.
|
||||||
// That way collections in plugins that haven't yet undergone update will still work.
|
// That way collections in plugins that haven't yet undergone update will still work.
|
||||||
|
|
||||||
|
public static Map<String, PlayerLoginEvent> idToPlayerLoginEvent = new MassiveMap<String, PlayerLoginEvent>();
|
||||||
|
|
||||||
// This method sets the sender reference to what you decide.
|
// This method sets the sender reference to what you decide.
|
||||||
public static void setSenderReferences(CommandSender sender, CommandSender reference)
|
public static void setSenderReferences(CommandSender sender, CommandSender reference, PlayerLoginEvent event)
|
||||||
{
|
{
|
||||||
if (MUtil.isntSender(sender)) return;
|
if (MUtil.isntSender(sender)) return;
|
||||||
|
|
||||||
@ -193,6 +196,14 @@ public class MassiveCoreEngineMain extends EngineAbstract
|
|||||||
if (id != null)
|
if (id != null)
|
||||||
{
|
{
|
||||||
SenderColl.setSenderReferences(id, reference);
|
SenderColl.setSenderReferences(id, reference);
|
||||||
|
if (event == null)
|
||||||
|
{
|
||||||
|
idToPlayerLoginEvent.remove(id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
idToPlayerLoginEvent.put(id, event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String name = IdUtil.getName(sender);
|
String name = IdUtil.getName(sender);
|
||||||
@ -203,22 +214,22 @@ public class MassiveCoreEngineMain extends EngineAbstract
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This method sets the sender reference based on it's online state.
|
// This method sets the sender reference based on it's online state.
|
||||||
public static void setSenderReferences(Player player)
|
public static void setSenderReferences(Player player, PlayerLoginEvent event)
|
||||||
{
|
{
|
||||||
Player reference = player;
|
Player reference = player;
|
||||||
if ( ! player.isOnline()) reference = null;
|
if ( ! player.isOnline()) reference = null;
|
||||||
setSenderReferences(player, reference);
|
setSenderReferences(player, reference, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Same as above but next tick.
|
// Same as above but next tick.
|
||||||
public static void setSenderReferencesSoon(final Player player)
|
public static void setSenderReferencesSoon(final Player player, final PlayerLoginEvent event)
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(MassiveCore.get(), new Runnable()
|
Bukkit.getScheduler().scheduleSyncDelayedTask(MassiveCore.get(), new Runnable()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
setSenderReferences(player);
|
setSenderReferences(player, event);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -229,11 +240,11 @@ public class MassiveCoreEngineMain extends EngineAbstract
|
|||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
|
|
||||||
// We set the reference at LOWEST so that it's present during this PlayerLoginEvent event.
|
// We set the reference at LOWEST so that it's present during this PlayerLoginEvent event.
|
||||||
setSenderReferences(player, player);
|
setSenderReferences(player, player, event);
|
||||||
|
|
||||||
// And the next tick we update the reference based on it's online state.
|
// And the next tick we update the reference based on it's online state.
|
||||||
// Not all players succeed in logging in. They may for example be banned.
|
// Not all players succeed in logging in. They may for example be banned.
|
||||||
setSenderReferencesSoon(player);
|
setSenderReferencesSoon(player, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
@ -241,21 +252,21 @@ public class MassiveCoreEngineMain extends EngineAbstract
|
|||||||
{
|
{
|
||||||
// PlayerQuitEvents are /probably/ trustworthy.
|
// PlayerQuitEvents are /probably/ trustworthy.
|
||||||
// We check ourselves the next tick just to be on the safe side.
|
// We check ourselves the next tick just to be on the safe side.
|
||||||
setSenderReferencesSoon(event.getPlayer());
|
setSenderReferencesSoon(event.getPlayer(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void setSenderReferencesRegisterMonitor(EventMassiveCoreSenderRegister event)
|
public void setSenderReferencesRegisterMonitor(EventMassiveCoreSenderRegister event)
|
||||||
{
|
{
|
||||||
// This one we can however trust.
|
// This one we can however trust.
|
||||||
setSenderReferences(event.getSender(), event.getSender());
|
setSenderReferences(event.getSender(), event.getSender(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void setSenderReferencesUnregisterMonitor(EventMassiveCoreSenderUnregister event)
|
public void setSenderReferencesUnregisterMonitor(EventMassiveCoreSenderUnregister event)
|
||||||
{
|
{
|
||||||
// This one we can however trust.
|
// This one we can however trust.
|
||||||
setSenderReferences(event.getSender(), null);
|
setSenderReferences(event.getSender(), null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -198,6 +198,10 @@ public class Mixin
|
|||||||
{
|
{
|
||||||
return getPlayedMixin().hasPlayedBefore(senderObject);
|
return getPlayedMixin().hasPlayedBefore(senderObject);
|
||||||
}
|
}
|
||||||
|
public static String getIp(Object senderObject)
|
||||||
|
{
|
||||||
|
return getPlayedMixin().getIp(senderObject);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// STATIC EXPOSE: VISIBILITY
|
// STATIC EXPOSE: VISIBILITY
|
||||||
|
@ -7,4 +7,5 @@ public interface PlayedMixin
|
|||||||
public Long getFirstPlayed(Object senderObject);
|
public Long getFirstPlayed(Object senderObject);
|
||||||
public Long getLastPlayed(Object senderObject);
|
public Long getLastPlayed(Object senderObject);
|
||||||
public boolean hasPlayedBefore(Object senderObject);
|
public boolean hasPlayedBefore(Object senderObject);
|
||||||
|
public String getIp(Object senderObject);
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,10 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import com.massivecraft.massivecore.util.IdUtil;
|
import com.massivecraft.massivecore.util.IdUtil;
|
||||||
|
import com.massivecraft.massivecore.util.MUtil;
|
||||||
|
|
||||||
public class PlayedMixinDefault extends PlayedMixinAbstract
|
public class PlayedMixinDefault extends PlayedMixinAbstract
|
||||||
{
|
{
|
||||||
@ -23,6 +25,8 @@ public class PlayedMixinDefault extends PlayedMixinAbstract
|
|||||||
@Override
|
@Override
|
||||||
public Long getFirstPlayed(Object senderObject)
|
public Long getFirstPlayed(Object senderObject)
|
||||||
{
|
{
|
||||||
|
if (MUtil.isNpc(senderObject)) return null;
|
||||||
|
|
||||||
UUID uuid = IdUtil.getUuid(senderObject);
|
UUID uuid = IdUtil.getUuid(senderObject);
|
||||||
if (uuid == null) return null;
|
if (uuid == null) return null;
|
||||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
||||||
@ -41,6 +45,8 @@ public class PlayedMixinDefault extends PlayedMixinAbstract
|
|||||||
// We do in fact NOT want this commented out behavior
|
// We do in fact NOT want this commented out behavior
|
||||||
// It's important we can check the previous played time on join!
|
// It's important we can check the previous played time on join!
|
||||||
|
|
||||||
|
if (MUtil.isNpc(senderObject)) return null;
|
||||||
|
|
||||||
UUID uuid = IdUtil.getUuid(senderObject);
|
UUID uuid = IdUtil.getUuid(senderObject);
|
||||||
if (uuid == null) return null;
|
if (uuid == null) return null;
|
||||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
||||||
@ -52,4 +58,12 @@ public class PlayedMixinDefault extends PlayedMixinAbstract
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIp(Object senderObject)
|
||||||
|
{
|
||||||
|
CommandSender sender = IdUtil.getSender(senderObject);
|
||||||
|
if (MUtil.isntPlayer(senderObject)) return null;
|
||||||
|
return MUtil.getIp(sender);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -238,6 +238,28 @@ public class Mson implements Serializable
|
|||||||
public Mson extra(Mson[] extra) { return Mson.valueOf(text, color, bold, italic, underlined, strikethrough, obfuscated, clickEvent, hoverEvent, insertionString, ImmutableList.copyOf(extra), parent); }
|
public Mson extra(Mson[] extra) { return Mson.valueOf(text, color, bold, italic, underlined, strikethrough, obfuscated, clickEvent, hoverEvent, insertionString, ImmutableList.copyOf(extra), parent); }
|
||||||
public Mson parent(Mson parent) { return Mson.valueOf(text, color, bold, italic, underlined, strikethrough, obfuscated, clickEvent, hoverEvent, insertionString, extra, parent); }
|
public Mson parent(Mson parent) { return Mson.valueOf(text, color, bold, italic, underlined, strikethrough, obfuscated, clickEvent, hoverEvent, insertionString, extra, parent); }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// ADD
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public Mson add(Object part)
|
||||||
|
{
|
||||||
|
return this.add(new Object[]{part});
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mson add(Object... parts)
|
||||||
|
{
|
||||||
|
return this.add(Arrays.asList(parts));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mson add(Iterable<?> parts)
|
||||||
|
{
|
||||||
|
List<Mson> extra = new ArrayList<Mson>(this.getExtra());
|
||||||
|
List<Mson> msons = msons(parts);
|
||||||
|
extra.addAll(msons);
|
||||||
|
return this.extra(extra);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONVENIENCE MSON EVENT
|
// CONVENIENCE MSON EVENT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -116,6 +116,11 @@ public abstract class SenderEntity<E extends SenderEntity<E>> extends Entity<E>
|
|||||||
return Mixin.hasPlayedBefore(this.getId());
|
return Mixin.hasPlayedBefore(this.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getIp()
|
||||||
|
{
|
||||||
|
return Mixin.getIp(this.getId());
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isVisible(Object watcherObject)
|
public boolean isVisible(Object watcherObject)
|
||||||
{
|
{
|
||||||
return Mixin.canSee(watcherObject, this);
|
return Mixin.canSee(watcherObject, this);
|
||||||
|
@ -3,6 +3,7 @@ package com.massivecraft.massivecore.util;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -45,6 +46,7 @@ import org.bukkit.event.entity.EntityDamageEvent;
|
|||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageModifier;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageModifier;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -174,11 +176,11 @@ public class MUtil
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
// The regex for a valid minecraft player name.
|
// The regex for a valid minecraft player name.
|
||||||
public final static Pattern playerNamePattern = Pattern.compile("^[a-zA-Z0-9_]{2,16}$");
|
public final static Pattern PATTERN_PLAYER_NAME = Pattern.compile("^[a-zA-Z0-9_]{2,16}$");
|
||||||
|
|
||||||
public static boolean isValidPlayerName(String string)
|
public static boolean isValidPlayerName(String string)
|
||||||
{
|
{
|
||||||
return playerNamePattern.matcher(string).matches();
|
return PATTERN_PLAYER_NAME.matcher(string).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -209,6 +211,63 @@ public class MUtil
|
|||||||
return asUuid(string) != null;
|
return asUuid(string) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// IP
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static String getIp(CommandSender sender)
|
||||||
|
{
|
||||||
|
if (!(sender instanceof Player)) return null;
|
||||||
|
Player player = (Player)sender;
|
||||||
|
|
||||||
|
InetSocketAddress address = player.getAddress();
|
||||||
|
if (address != null) return getIp(address);
|
||||||
|
|
||||||
|
String id = IdUtil.getId(player);
|
||||||
|
PlayerLoginEvent event = MassiveCoreEngineMain.idToPlayerLoginEvent.get(id);
|
||||||
|
if (event != null) return getIp(event);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getIp(InetSocketAddress address)
|
||||||
|
{
|
||||||
|
if (address == null) return null;
|
||||||
|
|
||||||
|
String ret = address.toString();
|
||||||
|
String[] parts = ret.split("/");
|
||||||
|
|
||||||
|
ret = parts[1];
|
||||||
|
parts = ret.split(":");
|
||||||
|
|
||||||
|
ret = parts[0];
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getIp(PlayerLoginEvent event)
|
||||||
|
{
|
||||||
|
InetAddress address = event.getAddress();
|
||||||
|
return getIp(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getIp(InetAddress address)
|
||||||
|
{
|
||||||
|
if (address == null) return null;
|
||||||
|
|
||||||
|
String ret = address.toString();
|
||||||
|
String[] parts = ret.split("/");
|
||||||
|
|
||||||
|
ret = parts[1];
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Pattern PATTERN_IPV4 = Pattern.compile("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
|
||||||
|
public static boolean isIp(String string)
|
||||||
|
{
|
||||||
|
if (string == null) return false;
|
||||||
|
return PATTERN_IPV4.matcher(string).matches();
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// IS(NT) NPC, SENDER, PLAYER
|
// IS(NT) NPC, SENDER, PLAYER
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -691,28 +750,6 @@ public class MUtil
|
|||||||
return Math.abs(d) <= Double.MAX_VALUE;
|
return Math.abs(d) <= Double.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// GET IP
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public static String getIp(CommandSender sender)
|
|
||||||
{
|
|
||||||
if (!(sender instanceof Player)) return null;
|
|
||||||
Player player = (Player)sender;
|
|
||||||
|
|
||||||
InetSocketAddress address = player.getAddress();
|
|
||||||
if (address == null) return null;
|
|
||||||
|
|
||||||
String ret = address.toString();
|
|
||||||
String[] parts = ret.split("/");
|
|
||||||
|
|
||||||
ret = parts[1];
|
|
||||||
parts = ret.split(":");
|
|
||||||
|
|
||||||
ret = parts[0];
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// PICK
|
// PICK
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
Loading…
Reference in New Issue
Block a user