more mixin and loads of other stuff
This commit is contained in:
parent
dba940f337
commit
022e05ceaa
@ -24,6 +24,8 @@ permissions:
|
|||||||
mcore.cmd.usys.aspect.use: {description: set multiverse for aspect, default: false}
|
mcore.cmd.usys.aspect.use: {description: set multiverse for aspect, default: false}
|
||||||
# mcore command
|
# mcore command
|
||||||
mcore.cmd.mcore: {description: use the mcore command, default: false}
|
mcore.cmd.mcore: {description: use the mcore command, default: false}
|
||||||
|
# misc
|
||||||
|
mcore.notpdelay: {description: teleport without delay, default: false}
|
||||||
# -------------------------------------------- #
|
# -------------------------------------------- #
|
||||||
# STAR NOTATION
|
# STAR NOTATION
|
||||||
# -------------------------------------------- #
|
# -------------------------------------------- #
|
||||||
@ -66,6 +68,7 @@ permissions:
|
|||||||
default: false
|
default: false
|
||||||
children:
|
children:
|
||||||
mcore.cmd.*: true
|
mcore.cmd.*: true
|
||||||
|
mcore.notpdelay: true
|
||||||
# -------------------------------------------- #
|
# -------------------------------------------- #
|
||||||
# KITS
|
# KITS
|
||||||
# -------------------------------------------- #
|
# -------------------------------------------- #
|
||||||
|
@ -21,6 +21,7 @@ public class Conf extends SimpleConfig
|
|||||||
CmdUsys.USYS, MUtil.list(CmdUsys.USYS),
|
CmdUsys.USYS, MUtil.list(CmdUsys.USYS),
|
||||||
CmdMcore.MCORE, MUtil.list(CmdMcore.MCORE)
|
CmdMcore.MCORE, MUtil.list(CmdMcore.MCORE)
|
||||||
);
|
);
|
||||||
|
public static int tpdelay = 10;
|
||||||
|
|
||||||
public static List<String> getCmdAliases(String name)
|
public static List<String> getCmdAliases(String name)
|
||||||
{
|
{
|
||||||
|
@ -2,8 +2,11 @@ package com.massivecraft.mcore5;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -13,6 +16,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|||||||
import org.bukkit.event.player.PlayerKickEvent;
|
import org.bukkit.event.player.PlayerKickEvent;
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
||||||
|
import org.bukkit.event.player.PlayerChatTabCompleteEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
@ -20,37 +24,60 @@ import org.bukkit.event.player.PlayerTeleportEvent;
|
|||||||
import com.massivecraft.mcore5.event.MCoreAfterPlayerRespawnEvent;
|
import com.massivecraft.mcore5.event.MCoreAfterPlayerRespawnEvent;
|
||||||
import com.massivecraft.mcore5.event.MCoreAfterPlayerTeleportEvent;
|
import com.massivecraft.mcore5.event.MCoreAfterPlayerTeleportEvent;
|
||||||
import com.massivecraft.mcore5.event.MCorePlayerLeaveEvent;
|
import com.massivecraft.mcore5.event.MCorePlayerLeaveEvent;
|
||||||
|
import com.massivecraft.mcore5.event.MCoreSenderRegisterEvent;
|
||||||
|
import com.massivecraft.mcore5.event.MCoreSenderUnregisterEvent;
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
import com.massivecraft.mcore5.store.Coll;
|
import com.massivecraft.mcore5.store.Coll;
|
||||||
import com.massivecraft.mcore5.store.SenderColl;
|
import com.massivecraft.mcore5.store.SenderColl;
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
import com.massivecraft.mcore5.util.SmokeUtil;
|
import com.massivecraft.mcore5.util.SmokeUtil;
|
||||||
|
|
||||||
public class InternalListener implements Listener
|
public class InternalListener implements Listener
|
||||||
{
|
{
|
||||||
MCore p;
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public InternalListener(MCore p)
|
private static InternalListener i = new InternalListener();
|
||||||
|
public static InternalListener get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// REGISTER
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public void setup()
|
||||||
{
|
{
|
||||||
this.p = p;
|
|
||||||
MCorePlayerLeaveEvent.player2event.clear();
|
MCorePlayerLeaveEvent.player2event.clear();
|
||||||
Bukkit.getServer().getPluginManager().registerEvents(this, this.p);
|
Bukkit.getPluginManager().registerEvents(this, MCore.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// -------------------------------------------- //
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
// CHAT TAB COMPLETE
|
||||||
public void onPlayerLogin(PlayerLoginEvent event)
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||||
|
public void chatTabComplete(PlayerChatTabCompleteEvent event)
|
||||||
{
|
{
|
||||||
String id = event.getPlayer().getName();
|
// So the player is watching ...
|
||||||
|
Player watcher = event.getPlayer();
|
||||||
|
|
||||||
for (Persist instance : Persist.instances)
|
// Get the lowercased token
|
||||||
|
String tokenlc = event.getLastToken().toLowerCase();
|
||||||
|
|
||||||
|
// Create a case insensitive set to check for already added stuff
|
||||||
|
Set<String> current = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
current.addAll(event.getTabCompletions());
|
||||||
|
|
||||||
|
// Add ids of all online senders that match and isn't added yet.
|
||||||
|
for (String senderId : Mixin.getOnlineSenderIds())
|
||||||
{
|
{
|
||||||
for (IClassManager<?> manager : instance.getClassManagers().values())
|
if (!senderId.toLowerCase().startsWith(tokenlc)) continue;
|
||||||
{
|
if (current.contains(senderId)) continue;
|
||||||
if (manager.idCanFix(Player.class) == false) continue;
|
if (!Mixin.isVisible(watcher, senderId)) continue;
|
||||||
if (manager.containsId(id)) continue;
|
|
||||||
manager.create(id);
|
event.getTabCompletions().add(senderId);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// EXPLOSION FX
|
// EXPLOSION FX
|
||||||
@ -75,32 +102,50 @@ public class InternalListener implements Listener
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void playerReferencesLoginLowest(PlayerLoginEvent event)
|
public void senderReferencesLoginLowest(PlayerLoginEvent event)
|
||||||
{
|
{
|
||||||
String id = event.getPlayer().getName();
|
String id = SenderUtil.getSenderId(event.getPlayer());
|
||||||
Player player = event.getPlayer();
|
CommandSender sender = event.getPlayer();
|
||||||
|
|
||||||
SenderColl.setSenderRefferences(id, player);
|
SenderColl.setSenderRefferences(id, sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void playerReferencesLoginMonitor(PlayerLoginEvent event)
|
public void senderReferencesLoginMonitor(PlayerLoginEvent event)
|
||||||
{
|
{
|
||||||
if (event.getResult() == Result.ALLOWED) return;
|
if (event.getResult() == Result.ALLOWED) return;
|
||||||
|
|
||||||
String id = event.getPlayer().getName();
|
String id = SenderUtil.getSenderId(event.getPlayer());
|
||||||
Player player = null;
|
CommandSender sender = null;
|
||||||
|
|
||||||
SenderColl.setSenderRefferences(id, player);
|
SenderColl.setSenderRefferences(id, sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void playerReferencesQuitMonitor(PlayerQuitEvent event)
|
public void senderReferencesQuitMonitor(PlayerQuitEvent event)
|
||||||
{
|
{
|
||||||
String id = event.getPlayer().getName();
|
String id = SenderUtil.getSenderId(event.getPlayer());
|
||||||
Player player = null;
|
CommandSender sender = null;
|
||||||
|
|
||||||
SenderColl.setSenderRefferences(id, player);
|
SenderColl.setSenderRefferences(id, sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void senderReferencesRegisterMonitor(MCoreSenderRegisterEvent event)
|
||||||
|
{
|
||||||
|
String id = SenderUtil.getSenderId(event.getSender());
|
||||||
|
CommandSender sender = event.getSender();
|
||||||
|
|
||||||
|
SenderColl.setSenderRefferences(id, sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void senderReferencesUnregisterMonitor(MCoreSenderUnregisterEvent event)
|
||||||
|
{
|
||||||
|
String id = SenderUtil.getSenderId(event.getSender());
|
||||||
|
CommandSender sender = null;
|
||||||
|
|
||||||
|
SenderColl.setSenderRefferences(id, sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -110,13 +155,13 @@ public class InternalListener implements Listener
|
|||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void after(PlayerTeleportEvent event)
|
public void after(PlayerTeleportEvent event)
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(p, new MCoreAfterPlayerTeleportEvent(event), 0);
|
Bukkit.getScheduler().scheduleSyncDelayedTask(MCore.get(), new MCoreAfterPlayerTeleportEvent(event), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void after(PlayerRespawnEvent event)
|
public void after(PlayerRespawnEvent event)
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(p, new MCoreAfterPlayerRespawnEvent(event, event.getPlayer().getLocation()), 0);
|
Bukkit.getScheduler().scheduleSyncDelayedTask(MCore.get(), new MCoreAfterPlayerRespawnEvent(event, event.getPlayer().getLocation()), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -182,17 +227,17 @@ public class InternalListener implements Listener
|
|||||||
// SYNC PLAYER ON LOGON AND LEAVE
|
// SYNC PLAYER ON LOGON AND LEAVE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||||
public void syncOnPlayerLogin(PlayerLoginEvent event)
|
public void syncOnPlayerLogin(PlayerLoginEvent event)
|
||||||
{
|
{
|
||||||
//p.log("syncOnPlayerLogin", event.getPlayer().getName());
|
MCore.get().log("LOWEST syncOnPlayerLogin", event.getPlayer().getName());
|
||||||
this.syncAllForPlayer(event.getPlayer());
|
this.syncAllForPlayer(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void syncOnPlayerLeave(MCorePlayerLeaveEvent event)
|
public void syncOnPlayerLeave(MCorePlayerLeaveEvent event)
|
||||||
{
|
{
|
||||||
//p.log("syncOnPlayerLeave", event.getPlayer().getName());
|
MCore.get().log("MONITOR syncOnPlayerLeave", event.getPlayer().getName());
|
||||||
this.syncAllForPlayer(event.getPlayer());
|
this.syncAllForPlayer(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
package com.massivecraft.mcore5;
|
package com.massivecraft.mcore5;
|
||||||
|
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@ -12,7 +15,8 @@ import com.massivecraft.mcore5.adapter.ItemStackAdapter;
|
|||||||
import com.massivecraft.mcore5.adapter.MongoURIAdapter;
|
import com.massivecraft.mcore5.adapter.MongoURIAdapter;
|
||||||
import com.massivecraft.mcore5.adapter.PSAdapter;
|
import com.massivecraft.mcore5.adapter.PSAdapter;
|
||||||
import com.massivecraft.mcore5.cmd.CmdMcore;
|
import com.massivecraft.mcore5.cmd.CmdMcore;
|
||||||
import com.massivecraft.mcore5.mixin.DefaultSenderIdMixin;
|
import com.massivecraft.mcore5.mixin.SenderIdMixinDefault;
|
||||||
|
import com.massivecraft.mcore5.mixin.ScheduledTeleportListener;
|
||||||
import com.massivecraft.mcore5.store.Coll;
|
import com.massivecraft.mcore5.store.Coll;
|
||||||
import com.massivecraft.mcore5.store.Db;
|
import com.massivecraft.mcore5.store.Db;
|
||||||
import com.massivecraft.mcore5.store.MStore;
|
import com.massivecraft.mcore5.store.MStore;
|
||||||
@ -20,6 +24,8 @@ import com.massivecraft.mcore5.usys.AspectColl;
|
|||||||
import com.massivecraft.mcore5.usys.MultiverseColl;
|
import com.massivecraft.mcore5.usys.MultiverseColl;
|
||||||
import com.massivecraft.mcore5.usys.cmd.CmdUsys;
|
import com.massivecraft.mcore5.usys.cmd.CmdUsys;
|
||||||
import com.massivecraft.mcore5.util.PlayerUtil;
|
import com.massivecraft.mcore5.util.PlayerUtil;
|
||||||
|
import com.massivecraft.mcore5.util.TimeDiffUtil;
|
||||||
|
import com.massivecraft.mcore5.util.TimeUnit;
|
||||||
import com.massivecraft.mcore5.xlib.gson.Gson;
|
import com.massivecraft.mcore5.xlib.gson.Gson;
|
||||||
import com.massivecraft.mcore5.xlib.gson.GsonBuilder;
|
import com.massivecraft.mcore5.xlib.gson.GsonBuilder;
|
||||||
import com.massivecraft.mcore5.xlib.mongodb.MongoURI;
|
import com.massivecraft.mcore5.xlib.mongodb.MongoURI;
|
||||||
@ -33,6 +39,14 @@ public class MCore extends MPlugin
|
|||||||
public final static String INSTANCE = "instance";
|
public final static String INSTANCE = "instance";
|
||||||
public final static String DEFAULT = "default";
|
public final static String DEFAULT = "default";
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static MCore p;
|
||||||
|
public static MCore get() { return p; }
|
||||||
|
public MCore() { p = this; }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// STATIC
|
// STATIC
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -57,19 +71,13 @@ public class MCore extends MPlugin
|
|||||||
public static Db<?> getDb() { return db; }
|
public static Db<?> getDb() { return db; }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONSTRUCT
|
// FIELDS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public static MCore p;
|
// Commands
|
||||||
public MCore()
|
public CmdUsys cmdUsys;
|
||||||
{
|
public CmdMcore cmdMcore;
|
||||||
p = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// NON STATIC :)
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private Runnable collTickTask = new Runnable()
|
private Runnable collTickTask = new Runnable()
|
||||||
{
|
{
|
||||||
public void run()
|
public void run()
|
||||||
@ -81,9 +89,9 @@ public class MCore extends MPlugin
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public InternalListener internalListener;
|
// -------------------------------------------- //
|
||||||
public CmdUsys cmdUsys;
|
// OVERRIDE
|
||||||
public CmdMcore cmdMcore;
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable()
|
public void onEnable()
|
||||||
@ -101,11 +109,11 @@ public class MCore extends MPlugin
|
|||||||
|
|
||||||
// Setup PlayerUtil and it's events
|
// Setup PlayerUtil and it's events
|
||||||
new PlayerUtil(this);
|
new PlayerUtil(this);
|
||||||
DefaultSenderIdMixin.get().register();
|
SenderIdMixinDefault.get().setup();
|
||||||
DefaultSenderIdMixin.get().setup();
|
|
||||||
|
|
||||||
// Register events
|
// Register events
|
||||||
this.internalListener = new InternalListener(this);
|
InternalListener.get().setup();
|
||||||
|
ScheduledTeleportListener.get().setup();
|
||||||
|
|
||||||
// Schedule the collection ticker.
|
// Schedule the collection ticker.
|
||||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this.collTickTask, 1, 1);
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this.collTickTask, 1, 1);
|
||||||
@ -121,7 +129,54 @@ public class MCore extends MPlugin
|
|||||||
this.cmdMcore = new CmdMcore();
|
this.cmdMcore = new CmdMcore();
|
||||||
this.cmdMcore.register(this, true);
|
this.cmdMcore.register(this, true);
|
||||||
|
|
||||||
|
/*
|
||||||
|
test("");
|
||||||
|
test("+1day");
|
||||||
|
test("1day");
|
||||||
|
test("1 day");
|
||||||
|
test("-1day");
|
||||||
|
test("1week4d");
|
||||||
|
test("+1week-4d");
|
||||||
|
test("day");
|
||||||
|
test("1month");
|
||||||
|
test("1months");
|
||||||
|
test("1months2ms");
|
||||||
|
*/
|
||||||
|
|
||||||
this.postEnable();
|
this.postEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void test(String diffString)
|
||||||
|
{
|
||||||
|
log("===========================");
|
||||||
|
log("Testing Diff String \""+diffString+"\":");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Map<TimeUnit, Long> unitcounts = TimeDiffUtil.unitcounts(diffString);
|
||||||
|
for (Entry<TimeUnit, Long> entry : unitcounts.entrySet())
|
||||||
|
{
|
||||||
|
System.out.println(entry.getValue()+": "+entry.getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("---");
|
||||||
|
|
||||||
|
long millis = TimeDiffUtil.millis(unitcounts);
|
||||||
|
log("millis: "+millis);
|
||||||
|
|
||||||
|
String verboose = ChatColor.stripColor(TimeDiffUtil.formatedVerboose(unitcounts));
|
||||||
|
String minimal = ChatColor.stripColor(TimeDiffUtil.formatedMinimal(unitcounts));
|
||||||
|
log("verboose: "+verboose);
|
||||||
|
log("minimal: "+minimal);
|
||||||
|
|
||||||
|
long millisRec = TimeDiffUtil.millis(minimal);
|
||||||
|
log("millisRec: "+millisRec);
|
||||||
|
log("matches: "+(millis == millisRec));
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,12 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.mixin.TeleportMixinDefault;
|
||||||
import com.massivecraft.mcore5.mixin.Mixin;
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
import com.massivecraft.mcore5.mixin.PsTeleporterException;
|
import com.massivecraft.mcore5.mixin.TeleporterException;
|
||||||
import com.massivecraft.mcore5.usys.Aspect;
|
import com.massivecraft.mcore5.usys.Aspect;
|
||||||
import com.massivecraft.mcore5.usys.Multiverse;
|
import com.massivecraft.mcore5.usys.Multiverse;
|
||||||
import com.massivecraft.mcore5.util.MUtil;
|
import com.massivecraft.mcore5.util.MUtil;
|
||||||
@ -486,9 +488,16 @@ public class PS implements Cloneable, Serializable
|
|||||||
// WRITERS
|
// WRITERS
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
|
|
||||||
public synchronized void write(Entity entity) throws PsTeleporterException
|
public synchronized void write(Entity entity) throws TeleporterException
|
||||||
{
|
{
|
||||||
Mixin.teleport(entity, this);
|
if (entity instanceof Player)
|
||||||
|
{
|
||||||
|
Mixin.teleport((Player)entity, this);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TeleportMixinDefault.teleportEntity(entity, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.massivecraft.mcore5;
|
package com.massivecraft.mcore5;
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.util.PermUtil;
|
import com.massivecraft.mcore5.util.PermUtil;
|
||||||
|
|
||||||
@ -22,6 +22,7 @@ public enum Permission
|
|||||||
CMD_USYS_ASPECT_SHOW("cmd.usys.aspect.show"),
|
CMD_USYS_ASPECT_SHOW("cmd.usys.aspect.show"),
|
||||||
CMD_USYS_ASPECT_USE("cmd.usys.aspect.use"),
|
CMD_USYS_ASPECT_USE("cmd.usys.aspect.use"),
|
||||||
CMD_MCORE("cmd.mcore"),
|
CMD_MCORE("cmd.mcore"),
|
||||||
|
NOTPDELAY("notpdelay"),
|
||||||
;
|
;
|
||||||
|
|
||||||
public final String node;
|
public final String node;
|
||||||
@ -31,13 +32,13 @@ public enum Permission
|
|||||||
this.node = "mcore."+permissionNode;
|
this.node = "mcore."+permissionNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean has(CommandSender sender, boolean informSenderIfNot)
|
public boolean has(Permissible permissible, boolean informSenderIfNot)
|
||||||
{
|
{
|
||||||
return PermUtil.has(sender, this.node, informSenderIfNot);
|
return PermUtil.has(permissible, this.node, informSenderIfNot);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean has(CommandSender sender)
|
public boolean has(Permissible permissible)
|
||||||
{
|
{
|
||||||
return has(sender, false);
|
return has(permissible, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
package com.massivecraft.mcore5.cmd;
|
package com.massivecraft.mcore5.cmd;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.MPlugin;
|
import com.massivecraft.mcore5.MPlugin;
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
import com.massivecraft.mcore5.util.Txt;
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
public class BukkitGlueCommand extends Command
|
public class BukkitGlueCommand extends Command
|
||||||
@ -27,4 +31,26 @@ public class BukkitGlueCommand extends Command
|
|||||||
this.mcommand.execute(sender, Txt.tokenizeArguments(Txt.implode(args, " ")));
|
this.mcommand.execute(sender, Txt.tokenizeArguments(Txt.implode(args, " ")));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
List<String> superRet = super.tabComplete(sender, alias, args);
|
||||||
|
if (args.length == 0) return superRet;
|
||||||
|
|
||||||
|
Set<String> ret = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
ret.addAll(superRet);
|
||||||
|
|
||||||
|
String tokenlc = args[args.length - 1].toLowerCase();
|
||||||
|
|
||||||
|
// Add ids of all online senders that match and isn't added yet.
|
||||||
|
for (String senderId : Mixin.getOnlineSenderIds())
|
||||||
|
{
|
||||||
|
if (!senderId.toLowerCase().startsWith(tokenlc)) continue;
|
||||||
|
if (!Mixin.isVisible(sender, senderId)) continue;
|
||||||
|
ret.add(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ArrayList<String>(ret);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,9 @@ import com.massivecraft.mcore5.cmd.arg.ArgReader;
|
|||||||
import com.massivecraft.mcore5.cmd.arg.ArgResult;
|
import com.massivecraft.mcore5.cmd.arg.ArgResult;
|
||||||
import com.massivecraft.mcore5.cmd.req.IReq;
|
import com.massivecraft.mcore5.cmd.req.IReq;
|
||||||
import com.massivecraft.mcore5.cmd.req.ReqHasPerm;
|
import com.massivecraft.mcore5.cmd.req.ReqHasPerm;
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
import com.massivecraft.mcore5.util.BukkitCommandUtil;
|
import com.massivecraft.mcore5.util.BukkitCommandUtil;
|
||||||
import com.massivecraft.mcore5.util.PermUtil;
|
import com.massivecraft.mcore5.util.PermUtil;
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
|
||||||
import com.massivecraft.mcore5.util.Txt;
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
public abstract class MCommand
|
public abstract class MCommand
|
||||||
@ -411,34 +411,34 @@ public abstract class MCommand
|
|||||||
|
|
||||||
public boolean sendMessage(String message)
|
public boolean sendMessage(String message)
|
||||||
{
|
{
|
||||||
return SenderUtil.sendMessage(this.sender, message);
|
return Mixin.message(this.sender, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendMessage(String... messages)
|
public boolean sendMessage(String... messages)
|
||||||
{
|
{
|
||||||
return SenderUtil.sendMessage(this.sender, messages);
|
return Mixin.message(this.sender, messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendMessage(Collection<String> messages)
|
public boolean sendMessage(Collection<String> messages)
|
||||||
{
|
{
|
||||||
return SenderUtil.sendMessage(this.sender, messages);
|
return Mixin.message(this.sender, messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CONVENIENCE MSG
|
// CONVENIENCE MSG
|
||||||
|
|
||||||
public boolean msg(String msg)
|
public boolean msg(String msg)
|
||||||
{
|
{
|
||||||
return SenderUtil.msg(this.sender, msg);
|
return Mixin.msg(this.sender, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean msg(String msg, Object... args)
|
public boolean msg(String msg, Object... args)
|
||||||
{
|
{
|
||||||
return SenderUtil.msg(this.sender, msg, args);
|
return Mixin.msg(this.sender, msg, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean msg(Collection<String> msgs)
|
public boolean msg(Collection<String> msgs)
|
||||||
{
|
{
|
||||||
return SenderUtil.msg(this.sender, msgs);
|
return Mixin.msg(this.sender, msgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
36
src/com/massivecraft/mcore5/cmd/arg/ARMillisDiff.java
Normal file
36
src/com/massivecraft/mcore5/cmd/arg/ARMillisDiff.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.TimeDiffUtil;
|
||||||
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
|
public class ARMillisDiff implements ArgReader<Long>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArgResult<Long> read(String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
ArgResult<Long> ret = new ArgResult<Long>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret.setResult(TimeDiffUtil.millis(arg));
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
ret.setErrors(Txt.parse("<b>")+e.getMessage());
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ARMillisDiff i = new ARMillisDiff();
|
||||||
|
public static ARMillisDiff get() { return i; }
|
||||||
|
|
||||||
|
}
|
@ -2,7 +2,7 @@ package com.massivecraft.mcore5.cmd.arg;
|
|||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.store.MixinSenderIdSource;
|
import com.massivecraft.mcore5.store.SenderIdSourceMixinAllSenderIds;
|
||||||
import com.massivecraft.mcore5.store.SenderIdSource;
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
@ -12,10 +12,10 @@ public class ARPlayer extends ARSenderIdAbstractPredsource<Player>
|
|||||||
// INSTANCE & CONSTRUCT
|
// INSTANCE & CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static final ARPlayer full = getFull(MixinSenderIdSource.get());
|
private static final ARPlayer full = getFull(SenderIdSourceMixinAllSenderIds.get());
|
||||||
public static ARPlayer getFull() { return full; }
|
public static ARPlayer getFull() { return full; }
|
||||||
|
|
||||||
private static final ARPlayer start = getStart(MixinSenderIdSource.get());
|
private static final ARPlayer start = getStart(SenderIdSourceMixinAllSenderIds.get());
|
||||||
public static ARPlayer getStart() { return start; }
|
public static ARPlayer getStart() { return start; }
|
||||||
|
|
||||||
public static ARPlayer getFull(SenderIdSource source)
|
public static ARPlayer getFull(SenderIdSource source)
|
||||||
|
@ -2,7 +2,7 @@ package com.massivecraft.mcore5.cmd.arg;
|
|||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.store.MixinSenderIdSource;
|
import com.massivecraft.mcore5.store.SenderIdSourceMixinAllSenderIds;
|
||||||
import com.massivecraft.mcore5.store.SenderIdSource;
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
@ -12,10 +12,10 @@ public class ARSender extends ARSenderIdAbstractPredsource<CommandSender>
|
|||||||
// INSTANCE & CONSTRUCT
|
// INSTANCE & CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static final ARSender full = getFull(MixinSenderIdSource.get());
|
private static final ARSender full = getFull(SenderIdSourceMixinAllSenderIds.get());
|
||||||
public static ARSender getFull() { return full; }
|
public static ARSender getFull() { return full; }
|
||||||
|
|
||||||
private static final ARSender start = getStart(MixinSenderIdSource.get());
|
private static final ARSender start = getStart(SenderIdSourceMixinAllSenderIds.get());
|
||||||
public static ARSender getStart() { return start; }
|
public static ARSender getStart() { return start; }
|
||||||
|
|
||||||
public static ARSender getFull(SenderIdSource source)
|
public static ARSender getFull(SenderIdSource source)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.store.MixinSenderIdSource;
|
import com.massivecraft.mcore5.store.SenderIdSourceMixinAllSenderIds;
|
||||||
import com.massivecraft.mcore5.store.SenderIdSource;
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
|
|
||||||
public class ARSenderId extends ARSenderIdAbstractPredsource<String>
|
public class ARSenderId extends ARSenderIdAbstractPredsource<String>
|
||||||
@ -9,10 +9,10 @@ public class ARSenderId extends ARSenderIdAbstractPredsource<String>
|
|||||||
// INSTANCE & CONSTRUCT
|
// INSTANCE & CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static final ARSenderId full = getFull(MixinSenderIdSource.get());
|
private static final ARSenderId full = getFull(SenderIdSourceMixinAllSenderIds.get());
|
||||||
public static ARSenderId getFull() { return full; }
|
public static ARSenderId getFull() { return full; }
|
||||||
|
|
||||||
private static final ARSenderId start = getStart(MixinSenderIdSource.get());
|
private static final ARSenderId start = getStart(SenderIdSourceMixinAllSenderIds.get());
|
||||||
public static ARSenderId getStart() { return start; }
|
public static ARSenderId getStart() { return start; }
|
||||||
|
|
||||||
public static ARSenderId getFull(SenderIdSource source)
|
public static ARSenderId getFull(SenderIdSource source)
|
||||||
|
@ -13,6 +13,12 @@ public abstract class ARSenderIdAbstract<T> implements ArgReader<T>
|
|||||||
// ABSTRACT
|
// ABSTRACT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public final static int MAX_COUNT = 10;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// ABSTRACT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public abstract String getTypename();
|
public abstract String getTypename();
|
||||||
|
|
||||||
public abstract T getResultForSenderId(String senderId);
|
public abstract T getResultForSenderId(String senderId);
|
||||||
@ -51,10 +57,10 @@ public abstract class ARSenderIdAbstract<T> implements ArgReader<T>
|
|||||||
{
|
{
|
||||||
// Ambigious!
|
// Ambigious!
|
||||||
ret.getErrors().add("<b>Online "+this.getTypename()+" matching \"<h>"+arg+"<b>\" is ambigious.");
|
ret.getErrors().add("<b>Online "+this.getTypename()+" matching \"<h>"+arg+"<b>\" is ambigious.");
|
||||||
if (senderIds.size() > 10)
|
if (senderIds.size() >= MAX_COUNT)
|
||||||
{
|
{
|
||||||
// To many to list
|
// To many to list
|
||||||
ret.getErrors().add("<b>Could be any of <h>"+senderIds.size()+" <b>possible alternatives.");
|
ret.getErrors().add("<b>More than "+MAX_COUNT+" possible alternatives.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
@ -41,18 +41,26 @@ public abstract class ARSenderIdAbstractPredsource<T> extends ARSenderIdAbstract
|
|||||||
@Override
|
@Override
|
||||||
public Collection<String> getSenderIdsFor(String arg, CommandSender sender)
|
public Collection<String> getSenderIdsFor(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
Collection<String> senderIds = this.source.getSenderIds();
|
|
||||||
arg = arg.toLowerCase();
|
arg = arg.toLowerCase();
|
||||||
|
|
||||||
Iterator<String> iter = senderIds.iterator();
|
TreeSet<String> ret = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
while(iter.hasNext())
|
|
||||||
|
for (Collection<String> coll : this.source.getSenderIdCollections())
|
||||||
{
|
{
|
||||||
String senderId = iter.next();
|
for (String senderId : coll)
|
||||||
if (this.isSenderIdOk(senderId, arg, sender)) continue;
|
{
|
||||||
iter.remove();
|
if (this.isSenderIdOk(senderId, arg, sender))
|
||||||
|
{
|
||||||
|
ret.add(senderId);
|
||||||
|
if (ret.size() >= MAX_COUNT)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return senderIds;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isSenderIdOk(String senderId, String arg, CommandSender sender)
|
protected boolean isSenderIdOk(String senderId, String arg, CommandSender sender)
|
||||||
|
@ -1,34 +1,35 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
public class ARWorld extends ARAbstractSelect<World>
|
public class ARWorld implements ArgReader<World>
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public String typename()
|
public ArgResult<World> read(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
return "world";
|
ArgResult<World> ret = new ArgResult<World>();
|
||||||
}
|
|
||||||
|
ArgResult<String> inner = ARWorldId.get().read(arg, sender);
|
||||||
@Override
|
if (inner.hasErrors())
|
||||||
public World select(String arg, CommandSender sender)
|
|
||||||
{
|
|
||||||
return Bukkit.getWorld(arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> altNames(CommandSender sender)
|
|
||||||
{
|
|
||||||
List<String> ret = new ArrayList<String>();
|
|
||||||
for (World world : Bukkit.getWorlds())
|
|
||||||
{
|
{
|
||||||
ret.add(world.getName());
|
ret.setErrors(inner.getErrors());
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String worldId = inner.getResult();
|
||||||
|
|
||||||
|
World world = Bukkit.getWorld(worldId);
|
||||||
|
if (world == null)
|
||||||
|
{
|
||||||
|
ret.setErrors("<b>The world could not be found.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret.setResult(world);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,4 +40,5 @@ public class ARWorld extends ARAbstractSelect<World>
|
|||||||
private static ARWorld i = new ARWorld();
|
private static ARWorld i = new ARWorld();
|
||||||
public static ARWorld get() { return i; }
|
public static ARWorld get() { return i; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
60
src/com/massivecraft/mcore5/cmd/arg/ARWorldId.java
Normal file
60
src/com/massivecraft/mcore5/cmd/arg/ARWorldId.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
|
|
||||||
|
public class ARWorldId extends ARAbstractSelect<String>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String typename()
|
||||||
|
{
|
||||||
|
return "world";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String select(String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
List<String> visibleWorldIds = Mixin.getVisibleWorldIds(sender);
|
||||||
|
|
||||||
|
for (String worldId : visibleWorldIds)
|
||||||
|
{
|
||||||
|
if (!Mixin.canSee(sender, worldId)) continue;
|
||||||
|
if (arg.equalsIgnoreCase(worldId)) return worldId;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String worldId : visibleWorldIds)
|
||||||
|
{
|
||||||
|
if (!Mixin.canSee(sender, worldId)) continue;
|
||||||
|
for (String worldAlias : Mixin.getWorldAliases(worldId))
|
||||||
|
{
|
||||||
|
if (arg.equalsIgnoreCase(worldAlias)) return worldId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> altNames(CommandSender sender)
|
||||||
|
{
|
||||||
|
List<String> ret = new ArrayList<String>();
|
||||||
|
for (String worldId : Mixin.getWorldIds())
|
||||||
|
{
|
||||||
|
if (!Mixin.canSee(sender, worldId)) continue;
|
||||||
|
ret.add(Mixin.getWorldDisplayName(worldId));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ARWorldId i = new ARWorldId();
|
||||||
|
public static ARWorldId get() { return i; }
|
||||||
|
|
||||||
|
}
|
18
src/com/massivecraft/mcore5/event/MCoreEvent.java
Normal file
18
src/com/massivecraft/mcore5/event/MCoreEvent.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package com.massivecraft.mcore5.event;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
|
||||||
|
public abstract class MCoreEvent extends Event implements Runnable
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// RUN
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
Bukkit.getPluginManager().callEvent(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
23
src/com/massivecraft/mcore5/event/MCoreSenderEvent.java
Normal file
23
src/com/massivecraft/mcore5/event/MCoreSenderEvent.java
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package com.massivecraft.mcore5.event;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public abstract class MCoreSenderEvent extends MCoreEvent
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private final CommandSender sender;
|
||||||
|
public CommandSender getSender() { return this.sender; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public MCoreSenderEvent(CommandSender sender)
|
||||||
|
{
|
||||||
|
this.sender = sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.massivecraft.mcore5.event;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public class MCoreSenderRegisterEvent extends MCoreSenderEvent
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// REQUIRED EVENT CODE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
@Override public HandlerList getHandlers() { return handlers; }
|
||||||
|
public static HandlerList getHandlerList() { return handlers; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public MCoreSenderRegisterEvent(CommandSender sender)
|
||||||
|
{
|
||||||
|
super(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.massivecraft.mcore5.event;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public class MCoreSenderUnregisterEvent extends MCoreSenderEvent
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// REQUIRED EVENT CODE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
@Override public HandlerList getHandlers() { return handlers; }
|
||||||
|
public static HandlerList getHandlerList() { return handlers; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public MCoreSenderUnregisterEvent(CommandSender sender)
|
||||||
|
{
|
||||||
|
super(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,67 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.mixin;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
|
||||||
|
|
||||||
public class DefaultDisplayNameMixin implements DisplayNameMixin
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE & CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static DefaultDisplayNameMixin i = new DefaultDisplayNameMixin();
|
|
||||||
public static DefaultDisplayNameMixin get() { return i; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// FIELDS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
protected Map<String, String> idToDisplayName = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String get(String senderId)
|
|
||||||
{
|
|
||||||
if (senderId == null) return null;
|
|
||||||
|
|
||||||
String ret = this.idToDisplayName.get(senderId);
|
|
||||||
if (ret != null) return ret;
|
|
||||||
|
|
||||||
Player player = Bukkit.getPlayerExact(senderId);
|
|
||||||
if (player != null) return player.getDisplayName();
|
|
||||||
|
|
||||||
return Mixin.tryFix(senderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(String senderId, String displayName)
|
|
||||||
{
|
|
||||||
this.idToDisplayName.put(senderId, displayName);
|
|
||||||
|
|
||||||
Player player = Bukkit.getPlayerExact(senderId);
|
|
||||||
if (player == null) return;
|
|
||||||
player.setDisplayName(displayName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String get(CommandSender sender)
|
|
||||||
{
|
|
||||||
return this.get(SenderUtil.getSenderId(sender));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(CommandSender sender, String displayName)
|
|
||||||
{
|
|
||||||
this.set(SenderUtil.getSenderId(sender), displayName);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.mixin;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
|
||||||
|
|
||||||
public class DefaultListNameMixin implements ListNameMixin
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE & CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static DefaultListNameMixin i = new DefaultListNameMixin();
|
|
||||||
public static DefaultListNameMixin get() { return i; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// FIELDS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
protected Map<String, String> idToListName = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String get(String senderId)
|
|
||||||
{
|
|
||||||
if (senderId == null) return null;
|
|
||||||
|
|
||||||
String ret = this.idToListName.get(senderId);
|
|
||||||
if (ret != null) return ret;
|
|
||||||
|
|
||||||
Player player = Bukkit.getPlayerExact(senderId);
|
|
||||||
if (player != null) return player.getDisplayName();
|
|
||||||
|
|
||||||
return Mixin.tryFix(senderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(String senderId, String listName)
|
|
||||||
{
|
|
||||||
this.idToListName.put(senderId, listName);
|
|
||||||
|
|
||||||
Player player = Bukkit.getPlayerExact(senderId);
|
|
||||||
if (player == null) return;
|
|
||||||
player.setDisplayName(listName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String get(CommandSender sender)
|
|
||||||
{
|
|
||||||
return this.get(SenderUtil.getSenderId(sender));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(CommandSender sender, String listName)
|
|
||||||
{
|
|
||||||
this.set(SenderUtil.getSenderId(sender), listName);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.mixin;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.PS;
|
|
||||||
import com.massivecraft.mcore5.util.Txt;
|
|
||||||
|
|
||||||
public class DefaultPsTeleporterMixin implements PsTeleporterMixin
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE & CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static DefaultPsTeleporterMixin i = new DefaultPsTeleporterMixin();
|
|
||||||
public static DefaultPsTeleporterMixin get() { return i; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void teleport(Entity entity, PS ps) throws PsTeleporterException
|
|
||||||
{
|
|
||||||
Location location = ps.calcLocation();
|
|
||||||
if (location == null) throw new PsTeleporterException(Txt.parse("<b>Could not calculate the location"));
|
|
||||||
|
|
||||||
entity.teleport(location);
|
|
||||||
|
|
||||||
Vector velocity = ps.getVelocity();
|
|
||||||
if (velocity == null) return;
|
|
||||||
|
|
||||||
entity.setVelocity(velocity);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,180 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.mixin;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.TreeSet;
|
|
||||||
import java.util.concurrent.ConcurrentSkipListMap;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.HandlerList;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.MCore;
|
|
||||||
import com.massivecraft.mcore5.util.MUtil;
|
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
|
||||||
|
|
||||||
public class DefaultSenderIdMixin implements SenderIdMixin, Listener
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE & CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static DefaultSenderIdMixin i = new DefaultSenderIdMixin();
|
|
||||||
public static DefaultSenderIdMixin get() { return i; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// REGISTER & UNREGISTER
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public void register()
|
|
||||||
{
|
|
||||||
Bukkit.getServer().getPluginManager().registerEvents(this, MCore.p);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregister()
|
|
||||||
{
|
|
||||||
HandlerList.unregisterAll(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// SETUP
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public void setup()
|
|
||||||
{
|
|
||||||
for (String playerName : MUtil.getPlayerDirectoryNames())
|
|
||||||
{
|
|
||||||
this.idToCorrectId.put(playerName, playerName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// FIELDS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
// This map will contain all players that ever were on the server.
|
|
||||||
// It will however not contain any senders registered through SenderUtil.
|
|
||||||
protected Map<String, String> idToCorrectId = new ConcurrentSkipListMap<String, String>(String.CASE_INSENSITIVE_ORDER);
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// LISTENER
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
|
||||||
public void onPlayerLogin(PlayerLoginEvent event)
|
|
||||||
{
|
|
||||||
String id = event.getPlayer().getName();
|
|
||||||
idToCorrectId.put(id, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE: FIX
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String reqFix(String senderId)
|
|
||||||
{
|
|
||||||
if (!SenderUtil.isPlayerId(senderId)) return senderId;
|
|
||||||
return this.idToCorrectId.get(senderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String tryFix(String senderId)
|
|
||||||
{
|
|
||||||
String ret = this.reqFix(senderId);
|
|
||||||
if (ret != null) return ret;
|
|
||||||
return senderId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canFix(String senderId)
|
|
||||||
{
|
|
||||||
return this.reqFix(senderId) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE: SIMPLES
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isOnline(String senderId)
|
|
||||||
{
|
|
||||||
if (senderId == null) return false;
|
|
||||||
if (SenderUtil.isPlayerId(senderId))
|
|
||||||
{
|
|
||||||
Player player = Bukkit.getPlayerExact(senderId);
|
|
||||||
return player != null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Non-players must be registered for us to consider them online.
|
|
||||||
CommandSender sender = SenderUtil.getSender(senderId);
|
|
||||||
return sender != null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isOffline(String senderId)
|
|
||||||
{
|
|
||||||
return !this.isOnline(senderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasBeenOnline(String senderId)
|
|
||||||
{
|
|
||||||
CommandSender sender = SenderUtil.getSender(senderId);
|
|
||||||
if (sender != null) return true;
|
|
||||||
return this.idToCorrectId.containsKey(senderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long getLastOnline(String senderId)
|
|
||||||
{
|
|
||||||
if (this.isOnline(senderId)) return System.currentTimeMillis();
|
|
||||||
|
|
||||||
String playerNameCC = this.reqFix(senderId);
|
|
||||||
if (playerNameCC == null) return null;
|
|
||||||
|
|
||||||
File playerFile = new File(MUtil.getPlayerDirectory(), playerNameCC+".dat");
|
|
||||||
return playerFile.lastModified();
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE: SETS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getAllSenderIds()
|
|
||||||
{
|
|
||||||
Set<String> ret = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
|
||||||
ret.addAll(SenderUtil.getIdToSender().keySet());
|
|
||||||
ret.addAll(this.idToCorrectId.keySet());
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getOnlineSenderIds()
|
|
||||||
{
|
|
||||||
Set<String> ret = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
|
||||||
ret.addAll(SenderUtil.getIdToSender().keySet());
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
ret.add(player.getName());
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getOfflineSenderIds()
|
|
||||||
{
|
|
||||||
Set<String> ret = this.getAllSenderIds();
|
|
||||||
ret.removeAll(this.getOnlineSenderIds());
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,8 +4,8 @@ import org.bukkit.command.CommandSender;
|
|||||||
|
|
||||||
public interface DisplayNameMixin
|
public interface DisplayNameMixin
|
||||||
{
|
{
|
||||||
public String get(String senderId);
|
public String getDisplayName(String senderId);
|
||||||
public void set(String senderId, String displayName);
|
public void setDisplayName(String senderId, String displayName);
|
||||||
public String get(CommandSender sender);
|
public String getDisplayName(CommandSender sender);
|
||||||
public void set(CommandSender sender, String displayName);
|
public void setDisplayName(CommandSender sender, String displayName);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public abstract class DisplayNameMixinAbstract implements DisplayNameMixin
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String getDisplayName(CommandSender sender)
|
||||||
|
{
|
||||||
|
return this.getDisplayName(SenderUtil.getSenderId(sender));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDisplayName(CommandSender sender, String displayName)
|
||||||
|
{
|
||||||
|
this.setDisplayName(SenderUtil.getSenderId(sender), displayName);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class DisplayNameMixinDefault extends DisplayNameMixinAbstract
|
||||||
|
{
|
||||||
|
public final static ChatColor DEFAULT_COLOR = ChatColor.WHITE;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static DisplayNameMixinDefault i = new DisplayNameMixinDefault();
|
||||||
|
public static DisplayNameMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
protected Map<String, String> idToDisplayName = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayName(String senderId)
|
||||||
|
{
|
||||||
|
if (senderId == null) return null;
|
||||||
|
|
||||||
|
// Try Our Map
|
||||||
|
String ret = this.idToDisplayName.get(senderId);
|
||||||
|
|
||||||
|
// Try Bukkit
|
||||||
|
if (ret == null)
|
||||||
|
{
|
||||||
|
Player player = Bukkit.getPlayerExact(senderId);
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
ret = player.getDisplayName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try Fixed Id
|
||||||
|
if (ret == null)
|
||||||
|
{
|
||||||
|
ret = Mixin.tryFix(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure Colored
|
||||||
|
if (ChatColor.stripColor(ret).equals(ret))
|
||||||
|
{
|
||||||
|
ret = DEFAULT_COLOR.toString()+ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDisplayName(String senderId, String displayName)
|
||||||
|
{
|
||||||
|
if (displayName == null)
|
||||||
|
{
|
||||||
|
this.idToDisplayName.remove(senderId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.idToDisplayName.put(senderId, displayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = Bukkit.getPlayerExact(senderId);
|
||||||
|
if (player == null) return;
|
||||||
|
player.setDisplayName(this.getDisplayName(senderId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
src/com/massivecraft/mcore5/mixin/KickMixin.java
Normal file
12
src/com/massivecraft/mcore5/mixin/KickMixin.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public interface KickMixin
|
||||||
|
{
|
||||||
|
public boolean kick(CommandSender sender);
|
||||||
|
public boolean kick(String senderId);
|
||||||
|
|
||||||
|
public boolean kick(CommandSender sender, String message);
|
||||||
|
public boolean kick(String senderId, String message);
|
||||||
|
}
|
18
src/com/massivecraft/mcore5/mixin/KickMixinAbstract.java
Normal file
18
src/com/massivecraft/mcore5/mixin/KickMixinAbstract.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public abstract class KickMixinAbstract implements KickMixin
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public boolean kick(CommandSender sender)
|
||||||
|
{
|
||||||
|
return this.kick(sender, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean kick(String senderId)
|
||||||
|
{
|
||||||
|
return this.kick(senderId, null);
|
||||||
|
}
|
||||||
|
}
|
39
src/com/massivecraft/mcore5/mixin/KickMixinDefault.java
Normal file
39
src/com/massivecraft/mcore5/mixin/KickMixinDefault.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public class KickMixinDefault extends KickMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static KickMixinDefault i = new KickMixinDefault();
|
||||||
|
public static KickMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean kick(CommandSender sender, String message)
|
||||||
|
{
|
||||||
|
Player player = SenderUtil.getAsPlayer(sender);
|
||||||
|
if (player == null) return false;
|
||||||
|
player.kickPlayer(message);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean kick(String senderId, String message)
|
||||||
|
{
|
||||||
|
Player player = SenderUtil.getPlayer(senderId);
|
||||||
|
if (player == null) return false;
|
||||||
|
player.kickPlayer(message);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -4,8 +4,8 @@ import org.bukkit.command.CommandSender;
|
|||||||
|
|
||||||
public interface ListNameMixin
|
public interface ListNameMixin
|
||||||
{
|
{
|
||||||
public String get(String senderId);
|
public String getListName(String senderId);
|
||||||
public void set(String senderId, String listName);
|
public void setListName(String senderId, String listName);
|
||||||
public String get(CommandSender sender);
|
public String getListName(CommandSender sender);
|
||||||
public void set(CommandSender sender, String listName);
|
public void setListName(CommandSender sender, String listName);
|
||||||
}
|
}
|
||||||
|
20
src/com/massivecraft/mcore5/mixin/ListNameMixinAbstract.java
Normal file
20
src/com/massivecraft/mcore5/mixin/ListNameMixinAbstract.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public abstract class ListNameMixinAbstract implements ListNameMixin
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String getListName(CommandSender sender)
|
||||||
|
{
|
||||||
|
return this.getListName(SenderUtil.getSenderId(sender));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setListName(CommandSender sender, String listName)
|
||||||
|
{
|
||||||
|
this.setListName(SenderUtil.getSenderId(sender), listName);
|
||||||
|
}
|
||||||
|
}
|
81
src/com/massivecraft/mcore5/mixin/ListNameMixinDefault.java
Normal file
81
src/com/massivecraft/mcore5/mixin/ListNameMixinDefault.java
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class ListNameMixinDefault extends ListNameMixinAbstract
|
||||||
|
{
|
||||||
|
public final static ChatColor DEFAULT_COLOR = ChatColor.WHITE;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ListNameMixinDefault i = new ListNameMixinDefault();
|
||||||
|
public static ListNameMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
protected Map<String, String> idToListName = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getListName(String senderId)
|
||||||
|
{
|
||||||
|
if (senderId == null) return null;
|
||||||
|
|
||||||
|
// Try Our Map
|
||||||
|
String ret = this.idToListName.get(senderId);
|
||||||
|
|
||||||
|
// Try Bukkit
|
||||||
|
if (ret == null)
|
||||||
|
{
|
||||||
|
Player player = Bukkit.getPlayerExact(senderId);
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
ret = player.getPlayerListName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try Fixed Id
|
||||||
|
if (ret == null)
|
||||||
|
{
|
||||||
|
ret = Mixin.tryFix(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure Colored
|
||||||
|
if (ChatColor.stripColor(ret).equals(ret))
|
||||||
|
{
|
||||||
|
ret = DEFAULT_COLOR.toString()+ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setListName(String senderId, String listName)
|
||||||
|
{
|
||||||
|
if (listName == null)
|
||||||
|
{
|
||||||
|
this.idToListName.remove(senderId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.idToListName.put(senderId, listName);
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = Bukkit.getPlayerExact(senderId);
|
||||||
|
if (player == null) return;
|
||||||
|
player.setPlayerListName(this.getListName(senderId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
src/com/massivecraft/mcore5/mixin/MessageMixin.java
Normal file
24
src/com/massivecraft/mcore5/mixin/MessageMixin.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public interface MessageMixin
|
||||||
|
{
|
||||||
|
public boolean message(CommandSender sender, String message);
|
||||||
|
public boolean message(CommandSender sender, Collection<String> messages);
|
||||||
|
public boolean message(CommandSender sender, String... messages);
|
||||||
|
|
||||||
|
public boolean message(String senderId, String message);
|
||||||
|
public boolean message(String senderId, Collection<String> messages);
|
||||||
|
public boolean message(String senderId, String... messages);
|
||||||
|
|
||||||
|
public boolean msg(CommandSender sender, String msg);
|
||||||
|
public boolean msg(CommandSender sender, String msg, Object... args);
|
||||||
|
public boolean msg(CommandSender sender, Collection<String> msgs);
|
||||||
|
|
||||||
|
public boolean msg(String senderId, String msg);
|
||||||
|
public boolean msg(String senderId, String msg, Object... args);
|
||||||
|
public boolean msg(String senderId, Collection<String> msgs);
|
||||||
|
}
|
76
src/com/massivecraft/mcore5/mixin/MessageMixinAbstract.java
Normal file
76
src/com/massivecraft/mcore5/mixin/MessageMixinAbstract.java
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
|
public abstract class MessageMixinAbstract implements MessageMixin
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public boolean message(CommandSender sender, String... messages)
|
||||||
|
{
|
||||||
|
Collection<String> coll = new ArrayList<String>(Arrays.asList(messages));
|
||||||
|
return this.message(sender, coll);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean message(String senderId, String... messages)
|
||||||
|
{
|
||||||
|
Collection<String> coll = new ArrayList<String>(Arrays.asList(messages));
|
||||||
|
return this.message(senderId, coll);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean msg(CommandSender sender, String msg)
|
||||||
|
{
|
||||||
|
return this.message(sender, Txt.parse(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean msg(CommandSender sender, String msg, Object... args)
|
||||||
|
{
|
||||||
|
return this.message(sender, Txt.parse(msg, args));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean msg(CommandSender sender, Collection<String> msgs)
|
||||||
|
{
|
||||||
|
List<String> messages = new ArrayList<String>();
|
||||||
|
for (String msg : msgs)
|
||||||
|
{
|
||||||
|
String message = Txt.parse(msg);
|
||||||
|
messages.add(message);
|
||||||
|
}
|
||||||
|
return this.message(sender, messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean msg(String senderId, String msg)
|
||||||
|
{
|
||||||
|
return this.message(senderId, Txt.parse(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean msg(String senderId, String msg, Object... args)
|
||||||
|
{
|
||||||
|
return this.message(senderId, Txt.parse(msg, args));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean msg(String senderId, Collection<String> msgs)
|
||||||
|
{
|
||||||
|
List<String> messages = new ArrayList<String>();
|
||||||
|
for (String msg : msgs)
|
||||||
|
{
|
||||||
|
String message = Txt.parse(msg);
|
||||||
|
messages.add(message);
|
||||||
|
}
|
||||||
|
return this.message(senderId, messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
55
src/com/massivecraft/mcore5/mixin/MessageMixinDefault.java
Normal file
55
src/com/massivecraft/mcore5/mixin/MessageMixinDefault.java
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public class MessageMixinDefault extends MessageMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static MessageMixinDefault i = new MessageMixinDefault();
|
||||||
|
public static MessageMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean message(CommandSender sender, String message)
|
||||||
|
{
|
||||||
|
if (sender == null) return false;
|
||||||
|
if (message == null) return false;
|
||||||
|
sender.sendMessage(message);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean message(CommandSender sender, Collection<String> messages)
|
||||||
|
{
|
||||||
|
if (sender == null) return false;
|
||||||
|
if (messages == null) return false;
|
||||||
|
for (String message : messages)
|
||||||
|
{
|
||||||
|
sender.sendMessage(message);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean message(String senderId, String message)
|
||||||
|
{
|
||||||
|
return this.message(SenderUtil.getSender(senderId), message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean message(String senderId, Collection<String> messages)
|
||||||
|
{
|
||||||
|
return this.message(SenderUtil.getSender(senderId), messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,9 +1,13 @@
|
|||||||
package com.massivecraft.mcore5.mixin;
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.PS;
|
import com.massivecraft.mcore5.PS;
|
||||||
|
|
||||||
@ -13,29 +17,98 @@ public class Mixin
|
|||||||
// GET/SET MIXINS
|
// GET/SET MIXINS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static PsTeleporterMixin psTeleporterMixin = DefaultPsTeleporterMixin.get();
|
private static WorldMixin worldMixin = WorldMixinDefault.get();
|
||||||
public static PsTeleporterMixin getPsTeleporterMixin() { return psTeleporterMixin; }
|
public static WorldMixin getWorldMixin() { return worldMixin; }
|
||||||
public static void setPsTeleporterMixin(PsTeleporterMixin val) { psTeleporterMixin = val; }
|
public static void setWorldMixin(WorldMixin val) { worldMixin = val; }
|
||||||
|
|
||||||
private static DisplayNameMixin displayNameMixin = DefaultDisplayNameMixin.get();
|
private static DisplayNameMixin displayNameMixin = DisplayNameMixinDefault.get();
|
||||||
public static DisplayNameMixin getDisplayNameMixin() { return displayNameMixin; }
|
public static DisplayNameMixin getDisplayNameMixin() { return displayNameMixin; }
|
||||||
public static void setDisplayNameMixin(DisplayNameMixin val) { displayNameMixin = val; }
|
public static void setDisplayNameMixin(DisplayNameMixin val) { displayNameMixin = val; }
|
||||||
|
|
||||||
private static ListNameMixin listNameMixin = DefaultListNameMixin.get();
|
private static ListNameMixin listNameMixin = ListNameMixinDefault.get();
|
||||||
public static ListNameMixin getListNameMixin() { return listNameMixin; }
|
public static ListNameMixin getListNameMixin() { return listNameMixin; }
|
||||||
public static void setListNameMixin(ListNameMixin val) { listNameMixin = val; }
|
public static void setListNameMixin(ListNameMixin val) { listNameMixin = val; }
|
||||||
|
|
||||||
private static SenderIdMixin senderIdMixin = DefaultSenderIdMixin.get();
|
private static SenderPsMixin senderPsMixin = SenderPsMixinDefault.get();
|
||||||
|
public static SenderPsMixin getSenderPsMixin() { return senderPsMixin; }
|
||||||
|
public static void setSenderPsMixin(SenderPsMixin val) { senderPsMixin = val; }
|
||||||
|
|
||||||
|
private static PlayedMixin playedMixin = PlayedMixinDefault.get();
|
||||||
|
public static PlayedMixin getPlayedMixin() { return playedMixin; }
|
||||||
|
public static void setPlayedMixin(PlayedMixin val) { playedMixin = val; }
|
||||||
|
|
||||||
|
private static VisibilityMixin visibilityMixin = VisibilityMixinDefault.get();
|
||||||
|
public static VisibilityMixin getVisibilityMixin() { return visibilityMixin; }
|
||||||
|
public static void setVisibilityMixin(VisibilityMixin val) { visibilityMixin = val; }
|
||||||
|
|
||||||
|
private static SenderIdMixin senderIdMixin = SenderIdMixinDefault.get();
|
||||||
public static SenderIdMixin getSenderIdMixin() { return senderIdMixin; }
|
public static SenderIdMixin getSenderIdMixin() { return senderIdMixin; }
|
||||||
public static void setSenderIdMixin(SenderIdMixin val) { senderIdMixin = val; }
|
public static void setSenderIdMixin(SenderIdMixin val) { senderIdMixin = val; }
|
||||||
|
|
||||||
|
private static TeleportMixin teleportMixin = TeleportMixinDefault.get();
|
||||||
|
public static TeleportMixin getTeleportMixin() { return teleportMixin; }
|
||||||
|
public static void setTeleportMixin(TeleportMixin val) { teleportMixin = val; }
|
||||||
|
|
||||||
|
private static MessageMixin messageMixin = MessageMixinDefault.get();
|
||||||
|
public static MessageMixin getMessageMixin() { return messageMixin; }
|
||||||
|
public static void setMessageMixin(MessageMixin val) { messageMixin = val; }
|
||||||
|
|
||||||
|
private static KickMixin kickMixin = KickMixinDefault.get();
|
||||||
|
public static KickMixin getKickMixin() { return kickMixin; }
|
||||||
|
public static void setKickMixin(KickMixin val) { kickMixin = val; }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// STATIC EXPOSE: PS TELEPORTER
|
// STATIC EXPOSE: WORLD
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public static void teleport(Entity entity, PS ps) throws PsTeleporterException
|
public static boolean canSee(Permissible permissible, String worldId)
|
||||||
{
|
{
|
||||||
getPsTeleporterMixin().teleport(entity, ps);
|
return getWorldMixin().canSee(permissible, worldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> getWorldIds()
|
||||||
|
{
|
||||||
|
return getWorldMixin().getWorldIds();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> getVisibleWorldIds(Permissible permissible)
|
||||||
|
{
|
||||||
|
return getWorldMixin().getVisibleWorldIds(permissible);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ChatColor getWorldColor(String worldId)
|
||||||
|
{
|
||||||
|
return getWorldMixin().getWorldColor(worldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> getWorldAliases(String worldId)
|
||||||
|
{
|
||||||
|
return getWorldAliases(worldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getWorldAliasOrId(String worldId)
|
||||||
|
{
|
||||||
|
return getWorldMixin().getWorldAliasOrId(worldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getWorldDisplayName(String worldId)
|
||||||
|
{
|
||||||
|
return getWorldMixin().getWorldDisplayName(worldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PS getWorldSpawnPs(String worldId)
|
||||||
|
{
|
||||||
|
return getWorldMixin().getWorldSpawnPs(worldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setWorldSpawnPs(String worldId, PS spawnPs)
|
||||||
|
{
|
||||||
|
getWorldMixin().setWorldSpawnPs(worldId, spawnPs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean trySetWorldSpawnWp(CommandSender sender, String worldId, PS spawnPs, boolean verbooseChange, boolean verbooseSame)
|
||||||
|
{
|
||||||
|
return getWorldMixin().trySetWorldSpawnWp(sender, worldId, spawnPs, verbooseChange, verbooseSame);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -44,22 +117,22 @@ public class Mixin
|
|||||||
|
|
||||||
public static String getDisplayName(String senderId)
|
public static String getDisplayName(String senderId)
|
||||||
{
|
{
|
||||||
return getDisplayNameMixin().get(senderId);
|
return getDisplayNameMixin().getDisplayName(senderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDisplayName(String senderId, String displayName)
|
public static void setDisplayName(String senderId, String displayName)
|
||||||
{
|
{
|
||||||
getDisplayNameMixin().set(senderId, displayName);
|
getDisplayNameMixin().setDisplayName(senderId, displayName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getDisplayName(CommandSender sender)
|
public static String getDisplayName(CommandSender sender)
|
||||||
{
|
{
|
||||||
return getDisplayNameMixin().get(sender);
|
return getDisplayNameMixin().getDisplayName(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDisplayName(CommandSender sender, String displayName)
|
public static void setDisplayName(CommandSender sender, String displayName)
|
||||||
{
|
{
|
||||||
getDisplayNameMixin().set(sender, displayName);
|
getDisplayNameMixin().setDisplayName(sender, displayName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -68,22 +141,99 @@ public class Mixin
|
|||||||
|
|
||||||
public static String getListName(String senderId)
|
public static String getListName(String senderId)
|
||||||
{
|
{
|
||||||
return getListNameMixin().get(senderId);
|
return getListNameMixin().getListName(senderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setListName(String senderId, String listName)
|
public static void setListName(String senderId, String listName)
|
||||||
{
|
{
|
||||||
getListNameMixin().set(senderId, listName);
|
getListNameMixin().setListName(senderId, listName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getListName(CommandSender sender)
|
public static String getListName(CommandSender sender)
|
||||||
{
|
{
|
||||||
return getListNameMixin().get(sender);
|
return getListNameMixin().getListName(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setListName(CommandSender sender, String listName)
|
public static void setListName(CommandSender sender, String listName)
|
||||||
{
|
{
|
||||||
getListNameMixin().set(sender, listName);
|
getListNameMixin().setListName(sender, listName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC EXPOSE: SENDER PS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static PS getSenderPs(String senderId)
|
||||||
|
{
|
||||||
|
return getSenderPsMixin().getSenderPs(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSenderPs(String senderId, PS ps)
|
||||||
|
{
|
||||||
|
getSenderPsMixin().setSenderPs(senderId, ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC EXPOSE: PLAYED
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static boolean isOnline(String senderId)
|
||||||
|
{
|
||||||
|
return getPlayedMixin().isOnline(senderId);
|
||||||
|
}
|
||||||
|
public static boolean isOffline(String senderId)
|
||||||
|
{
|
||||||
|
return getPlayedMixin().isOffline(senderId);
|
||||||
|
}
|
||||||
|
public static Long getLastPlayed(String senderId)
|
||||||
|
{
|
||||||
|
return getPlayedMixin().getLastPlayed(senderId);
|
||||||
|
}
|
||||||
|
public static Long getFirstPlayed(String senderId)
|
||||||
|
{
|
||||||
|
return getPlayedMixin().getFirstPlayed(senderId);
|
||||||
|
}
|
||||||
|
public static boolean hasPlayedBefore(String senderId)
|
||||||
|
{
|
||||||
|
return getPlayedMixin().hasPlayedBefore(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC EXPOSE: VISIBILITY
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static boolean isVisible(String watcherId, String watcheeId)
|
||||||
|
{
|
||||||
|
return getVisibilityMixin().isVisible(watcherId, watcheeId);
|
||||||
|
}
|
||||||
|
public static boolean isVisible(CommandSender watcher, String watcheeId)
|
||||||
|
{
|
||||||
|
return getVisibilityMixin().isVisible(watcher, watcheeId);
|
||||||
|
}
|
||||||
|
public static boolean isVisible(String watcherId, CommandSender watchee)
|
||||||
|
{
|
||||||
|
return getVisibilityMixin().isVisible(watcherId, watchee);
|
||||||
|
}
|
||||||
|
public static boolean isVisible(CommandSender watcher, CommandSender watchee)
|
||||||
|
{
|
||||||
|
return getVisibilityMixin().isVisible(watcher, watchee);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setVisible(String watcherId, String watcheeId, boolean visible)
|
||||||
|
{
|
||||||
|
getVisibilityMixin().setVisible(watcherId, watcheeId, visible);
|
||||||
|
}
|
||||||
|
public static void setVisible(CommandSender watcher, String watcheeId, boolean visible)
|
||||||
|
{
|
||||||
|
getVisibilityMixin().setVisible(watcher, watcheeId, visible);
|
||||||
|
}
|
||||||
|
public static void setVisible(String watcherId, CommandSender watchee, boolean visible)
|
||||||
|
{
|
||||||
|
getVisibilityMixin().setVisible(watcherId, watchee, visible);
|
||||||
|
}
|
||||||
|
public static void setVisible(CommandSender watcher, CommandSender watchee, boolean visible)
|
||||||
|
{
|
||||||
|
getVisibilityMixin().setVisible(watcher, watchee, visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -103,23 +253,6 @@ public class Mixin
|
|||||||
return getSenderIdMixin().canFix(senderId);
|
return getSenderIdMixin().canFix(senderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isOnline(String senderId)
|
|
||||||
{
|
|
||||||
return getSenderIdMixin().isOnline(senderId);
|
|
||||||
}
|
|
||||||
public static boolean isOffline(String senderId)
|
|
||||||
{
|
|
||||||
return getSenderIdMixin().isOffline(senderId);
|
|
||||||
}
|
|
||||||
public static boolean hasBeenOnline(String senderId)
|
|
||||||
{
|
|
||||||
return getSenderIdMixin().hasBeenOnline(senderId);
|
|
||||||
}
|
|
||||||
public static Long getLastOnline(String senderId)
|
|
||||||
{
|
|
||||||
return getSenderIdMixin().getLastOnline(senderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<String> getAllSenderIds()
|
public static Set<String> getAllSenderIds()
|
||||||
{
|
{
|
||||||
return getSenderIdMixin().getAllSenderIds();
|
return getSenderIdMixin().getAllSenderIds();
|
||||||
@ -133,4 +266,157 @@ public class Mixin
|
|||||||
return getSenderIdMixin().getOfflineSenderIds();
|
return getSenderIdMixin().getOfflineSenderIds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Set<String> getAllPlayerIds()
|
||||||
|
{
|
||||||
|
return getSenderIdMixin().getAllPlayerIds();
|
||||||
|
}
|
||||||
|
public static Set<String> getOnlinePlayerIds()
|
||||||
|
{
|
||||||
|
return getSenderIdMixin().getOnlinePlayerIds();
|
||||||
|
}
|
||||||
|
public static Set<String> getOfflinePlayerIds()
|
||||||
|
{
|
||||||
|
return getSenderIdMixin().getOfflinePlayerIds();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC EXPOSE: TELEPORTER
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static void teleport(Player teleportee, PS destinationPs) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleportee, destinationPs);
|
||||||
|
}
|
||||||
|
public static void teleport(Player teleportee, PS destinationPs, String destinationDesc) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleportee, destinationPs, destinationDesc);
|
||||||
|
}
|
||||||
|
public static void teleport(Player teleportee, PS destinationPs, String destinationDesc, Permissible delayPermissible) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleportee, destinationPs, destinationDesc, delayPermissible);
|
||||||
|
}
|
||||||
|
public static void teleport(Player teleportee, PS destinationPs, String destinationDesc, Permissible delayPermissible, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleportee, destinationPs, destinationDesc, delayPermissible, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
public static void teleport(Player teleportee, PS destinationPs, String destinationDesc, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleportee, destinationPs, destinationDesc, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
public static void teleport(Player teleportee, PS destinationPs, String destinationDesc, int delaySeconds, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleportee, destinationPs, destinationDesc, delaySeconds, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
public static void teleport(Player teleportee, PS destinationPs, String destinationDesc, int delaySeconds) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleportee, destinationPs, destinationDesc, delaySeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void teleport(String teleporteeId, PS destinationPs) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleporteeId, destinationPs);
|
||||||
|
}
|
||||||
|
public static void teleport(String teleporteeId, PS destinationPs, String destinationDesc) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleporteeId, destinationPs, destinationDesc);
|
||||||
|
}
|
||||||
|
public static void teleport(String teleporteeId, PS destinationPs, String destinationDesc, Permissible delayPermissible) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleporteeId, destinationPs, destinationDesc, delayPermissible);
|
||||||
|
}
|
||||||
|
public static void teleport(String teleporteeId, PS destinationPs, String destinationDesc, Permissible delayPermissible, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleporteeId, destinationPs, destinationDesc, delayPermissible, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
public static void teleport(String teleporteeId, PS destinationPs, String destinationDesc, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleporteeId, destinationPs, destinationDesc, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
public static void teleport(String teleporteeId, PS destinationPs, String destinationDesc, int delaySeconds, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleporteeId, destinationPs, destinationDesc, delaySeconds, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
public static void teleport(String teleporteeId, PS destinationPs, String destinationDesc, int delaySeconds) throws TeleporterException
|
||||||
|
{
|
||||||
|
getTeleportMixin().teleport(teleporteeId, destinationPs, destinationDesc, delaySeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC EXPOSE: MESSAGE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static boolean message(CommandSender sender, String message)
|
||||||
|
{
|
||||||
|
return getMessageMixin().message(sender, message);
|
||||||
|
}
|
||||||
|
public static boolean message(CommandSender sender, Collection<String> messages)
|
||||||
|
{
|
||||||
|
return getMessageMixin().message(sender, messages);
|
||||||
|
}
|
||||||
|
public static boolean message(CommandSender sender, String... messages)
|
||||||
|
{
|
||||||
|
return getMessageMixin().message(sender, messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean message(String senderId, String message)
|
||||||
|
{
|
||||||
|
return getMessageMixin().message(senderId, message);
|
||||||
|
}
|
||||||
|
public static boolean message(String senderId, Collection<String> messages)
|
||||||
|
{
|
||||||
|
return getMessageMixin().message(senderId, messages);
|
||||||
|
}
|
||||||
|
public static boolean message(String senderId, String... messages)
|
||||||
|
{
|
||||||
|
return getMessageMixin().message(senderId, messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean msg(CommandSender sender, String msg)
|
||||||
|
{
|
||||||
|
return getMessageMixin().msg(sender, msg);
|
||||||
|
}
|
||||||
|
public static boolean msg(CommandSender sender, String msg, Object... args)
|
||||||
|
{
|
||||||
|
return getMessageMixin().msg(sender, msg, args);
|
||||||
|
}
|
||||||
|
public static boolean msg(CommandSender sender, Collection<String> msgs)
|
||||||
|
{
|
||||||
|
return getMessageMixin().msg(sender, msgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean msg(String senderId, String msg)
|
||||||
|
{
|
||||||
|
return getMessageMixin().msg(senderId, msg);
|
||||||
|
}
|
||||||
|
public static boolean msg(String senderId, String msg, Object... args)
|
||||||
|
{
|
||||||
|
return getMessageMixin().msg(senderId, msg, args);
|
||||||
|
}
|
||||||
|
public static boolean msg(String senderId, Collection<String> msgs)
|
||||||
|
{
|
||||||
|
return getMessageMixin().msg(senderId, msgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC EXPOSE: KICK
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static boolean kick(CommandSender sender)
|
||||||
|
{
|
||||||
|
return getKickMixin().kick(sender);
|
||||||
|
}
|
||||||
|
public static boolean kick(String senderId)
|
||||||
|
{
|
||||||
|
return getKickMixin().kick(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean kick(CommandSender sender, String message)
|
||||||
|
{
|
||||||
|
return getKickMixin().kick(sender, message);
|
||||||
|
}
|
||||||
|
public static boolean kick(String senderId, String message)
|
||||||
|
{
|
||||||
|
return getKickMixin().kick(senderId, message);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
10
src/com/massivecraft/mcore5/mixin/PlayedMixin.java
Normal file
10
src/com/massivecraft/mcore5/mixin/PlayedMixin.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
public interface PlayedMixin
|
||||||
|
{
|
||||||
|
public boolean isOnline(String senderId);
|
||||||
|
public boolean isOffline(String senderId);
|
||||||
|
public Long getFirstPlayed(String senderId);
|
||||||
|
public Long getLastPlayed(String senderId);
|
||||||
|
public boolean hasPlayedBefore(String senderId);
|
||||||
|
}
|
19
src/com/massivecraft/mcore5/mixin/PlayedMixinAbstract.java
Normal file
19
src/com/massivecraft/mcore5/mixin/PlayedMixinAbstract.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
public abstract class PlayedMixinAbstract implements PlayedMixin
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOffline(String senderId)
|
||||||
|
{
|
||||||
|
return !this.isOnline(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPlayedBefore(String senderId)
|
||||||
|
{
|
||||||
|
Long firstPlayed = this.getFirstPlayed(senderId);
|
||||||
|
return firstPlayed != null && firstPlayed != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
56
src/com/massivecraft/mcore5/mixin/PlayedMixinDefault.java
Normal file
56
src/com/massivecraft/mcore5/mixin/PlayedMixinDefault.java
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.MUtil;
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public class PlayedMixinDefault extends PlayedMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static PlayedMixinDefault i = new PlayedMixinDefault();
|
||||||
|
public static PlayedMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOnline(String senderId)
|
||||||
|
{
|
||||||
|
if (senderId == null) return false;
|
||||||
|
CommandSender sender = SenderUtil.getSender(senderId);
|
||||||
|
return sender != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getFirstPlayed(String senderId)
|
||||||
|
{
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(senderId);
|
||||||
|
Long ret = offlinePlayer.getFirstPlayed();
|
||||||
|
if (ret == 0) ret = null;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getLastPlayed(String senderId)
|
||||||
|
{
|
||||||
|
if (this.isOnline(senderId)) return System.currentTimeMillis();
|
||||||
|
|
||||||
|
String playerNameCC = Mixin.reqFix(senderId);
|
||||||
|
if (playerNameCC == null) return null;
|
||||||
|
|
||||||
|
File playerFile = new File(MUtil.getPlayerDirectory(), playerNameCC+".dat");
|
||||||
|
long lastModified = playerFile.lastModified();
|
||||||
|
if (lastModified == 0) return null;
|
||||||
|
return lastModified;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,31 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.mixin;
|
|
||||||
|
|
||||||
public class PsTeleporterException extends Exception
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
public PsTeleporterException()
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PsTeleporterException(String message)
|
|
||||||
{
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PsTeleporterException(String message, Throwable cause)
|
|
||||||
{
|
|
||||||
super(message, cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PsTeleporterException(Throwable cause)
|
|
||||||
{
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected PsTeleporterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
|
|
||||||
{
|
|
||||||
super(message, cause, enableSuppression, writableStackTrace);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.mixin;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.PS;
|
|
||||||
|
|
||||||
public interface PsTeleporterMixin
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param entity The entity to be teleported
|
|
||||||
* @param ps The target PhysicalState
|
|
||||||
*/
|
|
||||||
public void teleport(Entity entity, PS ps) throws PsTeleporterException;
|
|
||||||
}
|
|
118
src/com/massivecraft/mcore5/mixin/ScheduledTeleport.java
Normal file
118
src/com/massivecraft/mcore5/mixin/ScheduledTeleport.java
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.MCore;
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
|
||||||
|
public class ScheduledTeleport implements Runnable
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTANTS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public final static transient int NON_SCHEDULED_TASK_ID = -1;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC INDEX
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static Map<Player, ScheduledTeleport> teleporteeToScheduledTeleport = new ConcurrentHashMap<Player, ScheduledTeleport>();
|
||||||
|
|
||||||
|
public static void schedule(ScheduledTeleport scheduledTeleport)
|
||||||
|
{
|
||||||
|
if (isScheduled(scheduledTeleport)) return;
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(MCore.get(), scheduledTeleport, scheduledTeleport.getDelaySeconds()*20);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isScheduled(ScheduledTeleport scheduledTeleport)
|
||||||
|
{
|
||||||
|
return teleporteeToScheduledTeleport.containsKey(scheduledTeleport.getTeleportee());
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS & RAW-DATA ACCESS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private final Player teleportee;
|
||||||
|
public Player getTeleportee() { return this.teleportee; }
|
||||||
|
|
||||||
|
private final PS destinationPs;
|
||||||
|
public PS getDestinationPs() { return this.destinationPs; }
|
||||||
|
|
||||||
|
private final String destinationDesc;
|
||||||
|
public String getDestinationDesc() { return this.destinationDesc; }
|
||||||
|
|
||||||
|
private final int delaySeconds;
|
||||||
|
public int getDelaySeconds() { return this.delaySeconds; }
|
||||||
|
|
||||||
|
private int taskId;
|
||||||
|
public int getTaskId() { return this.taskId; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public ScheduledTeleport(Player teleportee, PS destinationPs, String destinationDesc, int delaySeconds)
|
||||||
|
{
|
||||||
|
this.teleportee = teleportee;
|
||||||
|
this.destinationPs = destinationPs;
|
||||||
|
this.destinationDesc = destinationDesc;
|
||||||
|
this.delaySeconds = delaySeconds;
|
||||||
|
this.taskId = NON_SCHEDULED_TASK_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// SCHEDULING
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public boolean isScheduled()
|
||||||
|
{
|
||||||
|
return this.taskId != NON_SCHEDULED_TASK_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ScheduledTeleport schedule()
|
||||||
|
{
|
||||||
|
ScheduledTeleport old = teleporteeToScheduledTeleport.get(this.getTeleportee());
|
||||||
|
if (old != null) old.unschedule();
|
||||||
|
|
||||||
|
teleporteeToScheduledTeleport.put(this.getTeleportee(), this);
|
||||||
|
|
||||||
|
this.taskId = Bukkit.getScheduler().scheduleSyncDelayedTask(MCore.get(), this, this.getDelaySeconds()*20);
|
||||||
|
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean unschedule()
|
||||||
|
{
|
||||||
|
Bukkit.getScheduler().cancelTask(this.getTaskId());
|
||||||
|
|
||||||
|
this.taskId = NON_SCHEDULED_TASK_ID;
|
||||||
|
|
||||||
|
return teleporteeToScheduledTeleport.remove(this.getTeleportee()) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
this.unschedule();
|
||||||
|
if (!teleportee.isOnline()) return;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Mixin.teleport(this.teleportee, this.destinationPs, this.destinationDesc);
|
||||||
|
}
|
||||||
|
catch (TeleporterException e)
|
||||||
|
{
|
||||||
|
this.teleportee.sendMessage(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.MCore;
|
||||||
|
import com.massivecraft.mcore5.util.MUtil;
|
||||||
|
|
||||||
|
public class ScheduledTeleportListener implements Listener
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ScheduledTeleportListener i = new ScheduledTeleportListener();
|
||||||
|
public static ScheduledTeleportListener get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// SETUP
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public void setup()
|
||||||
|
{
|
||||||
|
Bukkit.getPluginManager().registerEvents(this, MCore.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// LISTENER
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
|
public void onPlayerMoved(PlayerMoveEvent event)
|
||||||
|
{
|
||||||
|
// If the player moved from one block to another ...
|
||||||
|
if (MUtil.isSameBlock(event.getFrom(), event.getTo())) return;
|
||||||
|
|
||||||
|
// ... and there is a ScheduledTeleport ...
|
||||||
|
ScheduledTeleport scheduledTeleport = ScheduledTeleport.teleporteeToScheduledTeleport.get(event.getPlayer());
|
||||||
|
if (scheduledTeleport == null) return;
|
||||||
|
|
||||||
|
// ... unschedule it ...
|
||||||
|
scheduledTeleport.unschedule();
|
||||||
|
|
||||||
|
// ... and inform the teleportee.
|
||||||
|
Mixin.msg(scheduledTeleport.getTeleportee(), "<rose>Cancelled <i>teleport to <h>"+scheduledTeleport.getDestinationDesc()+"<i>.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,14 +10,13 @@ public interface SenderIdMixin
|
|||||||
public String tryFix(String senderId);
|
public String tryFix(String senderId);
|
||||||
public boolean canFix(String senderId);
|
public boolean canFix(String senderId);
|
||||||
|
|
||||||
public boolean isOnline(String senderId);
|
// These may be unmodifiable. Don't expect them to be changeable.
|
||||||
public boolean isOffline(String senderId);
|
|
||||||
public boolean hasBeenOnline(String senderId);
|
|
||||||
public Long getLastOnline(String senderId);
|
|
||||||
|
|
||||||
// All of these are static snapshots that are alterable and won't change over time.
|
|
||||||
public Set<String> getAllSenderIds();
|
public Set<String> getAllSenderIds();
|
||||||
public Set<String> getOnlineSenderIds();
|
public Set<String> getOnlineSenderIds();
|
||||||
public Set<String> getOfflineSenderIds();
|
public Set<String> getOfflineSenderIds();
|
||||||
|
|
||||||
|
public Set<String> getAllPlayerIds();
|
||||||
|
public Set<String> getOnlinePlayerIds();
|
||||||
|
public Set<String> getOfflinePlayerIds();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
18
src/com/massivecraft/mcore5/mixin/SenderIdMixinAbstract.java
Normal file
18
src/com/massivecraft/mcore5/mixin/SenderIdMixinAbstract.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
public abstract class SenderIdMixinAbstract implements SenderIdMixin
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String tryFix(String senderId)
|
||||||
|
{
|
||||||
|
String ret = this.reqFix(senderId);
|
||||||
|
if (ret != null) return ret;
|
||||||
|
return senderId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canFix(String senderId)
|
||||||
|
{
|
||||||
|
return this.reqFix(senderId) != null;
|
||||||
|
}
|
||||||
|
}
|
232
src/com/massivecraft/mcore5/mixin/SenderIdMixinDefault.java
Normal file
232
src/com/massivecraft/mcore5/mixin/SenderIdMixinDefault.java
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
|
import java.util.concurrent.ConcurrentSkipListSet;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.MCore;
|
||||||
|
import com.massivecraft.mcore5.event.MCorePlayerLeaveEvent;
|
||||||
|
import com.massivecraft.mcore5.event.MCoreSenderRegisterEvent;
|
||||||
|
import com.massivecraft.mcore5.event.MCoreSenderUnregisterEvent;
|
||||||
|
import com.massivecraft.mcore5.util.MUtil;
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
|
public class SenderIdMixinDefault extends SenderIdMixinAbstract implements Listener
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static SenderIdMixinDefault i = new SenderIdMixinDefault();
|
||||||
|
public static SenderIdMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// SETUP
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public void setup()
|
||||||
|
{
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// Create new empty sets
|
||||||
|
this.allSenderIds = new ConcurrentSkipListMap<String, String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
this.onlineSenderIds = new ConcurrentSkipListSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
this.offlineSenderIds = new ConcurrentSkipListSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
|
||||||
|
this.allPlayerIds = new ConcurrentSkipListSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
this.onlinePlayerIds = new ConcurrentSkipListSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
this.offlinePlayerIds = new ConcurrentSkipListSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
|
||||||
|
// Add online players
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
|
{
|
||||||
|
String id = player.getName();
|
||||||
|
|
||||||
|
this.allSenderIds.put(id, id);
|
||||||
|
this.allPlayerIds.add(id);
|
||||||
|
|
||||||
|
this.onlineSenderIds.add(id);
|
||||||
|
this.onlinePlayerIds.add(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add offline players
|
||||||
|
for (String id : MUtil.getPlayerDirectoryNames())
|
||||||
|
{
|
||||||
|
// Check if this player was added already since it's online
|
||||||
|
if (this.onlinePlayerIds.contains(id)) continue;
|
||||||
|
|
||||||
|
this.allSenderIds.put(id, id);
|
||||||
|
this.allPlayerIds.add(id);
|
||||||
|
|
||||||
|
this.offlineSenderIds.add(id);
|
||||||
|
this.offlinePlayerIds.add(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add command senders
|
||||||
|
for (String id : SenderUtil.getIdToSender().keySet())
|
||||||
|
{
|
||||||
|
this.allSenderIds.put(id, id);
|
||||||
|
this.onlineSenderIds.add(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
Bukkit.getServer().getPluginManager().registerEvents(this, MCore.p);
|
||||||
|
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
MCore.get().log(Txt.parse("<i>Setup of SenderIdMixinDefault took <h>%d<i>ms.", end-start));
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
// The first field is a map since we use it for the "try" methods.
|
||||||
|
protected Map<String, String> allSenderIds;
|
||||||
|
protected Set<String> onlineSenderIds;
|
||||||
|
protected Set<String> offlineSenderIds;
|
||||||
|
|
||||||
|
protected Set<String> allPlayerIds;
|
||||||
|
protected Set<String> onlinePlayerIds;
|
||||||
|
protected Set<String> offlinePlayerIds;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// UTIL
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
protected void onOnlineChanged(CommandSender sender, boolean isOnline)
|
||||||
|
{
|
||||||
|
boolean isPlayer = SenderUtil.isPlayer(sender);
|
||||||
|
String id = SenderUtil.getSenderId(sender);
|
||||||
|
|
||||||
|
this.allSenderIds.put(id, id);
|
||||||
|
if (isPlayer)
|
||||||
|
{
|
||||||
|
this.allPlayerIds.add(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isOnline)
|
||||||
|
{
|
||||||
|
this.onlineSenderIds.add(id);
|
||||||
|
this.offlineSenderIds.remove(id);
|
||||||
|
if (isPlayer)
|
||||||
|
{
|
||||||
|
this.onlinePlayerIds.add(id);
|
||||||
|
this.offlinePlayerIds.remove(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.offlineSenderIds.add(id);
|
||||||
|
this.onlineSenderIds.remove(id);
|
||||||
|
if (isPlayer)
|
||||||
|
{
|
||||||
|
this.offlinePlayerIds.add(id);
|
||||||
|
this.onlinePlayerIds.remove(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// LISTENER
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
// We don't care if it's cancelled or not.
|
||||||
|
// We just wan't to make sure this id is known of and can be "fixed" asap.
|
||||||
|
// Online or not? We just use the mixin to get the actuall value.
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void playerLoginLowest(PlayerLoginEvent event)
|
||||||
|
{
|
||||||
|
boolean isOnline = Mixin.isOnline(SenderUtil.getSenderId(event.getPlayer()));
|
||||||
|
this.onOnlineChanged(event.getPlayer(), isOnline);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't be cancelled
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void playerJoinLowest(PlayerJoinEvent event)
|
||||||
|
{
|
||||||
|
this.onOnlineChanged(event.getPlayer(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't be cancelled
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void senderRegisterLowest(MCoreSenderRegisterEvent event)
|
||||||
|
{
|
||||||
|
this.onOnlineChanged(event.getSender(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't be cancelled
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void playerLeaveMonitor(MCorePlayerLeaveEvent event)
|
||||||
|
{
|
||||||
|
this.onOnlineChanged(event.getPlayer(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't be cancelled
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void senderUnregisterLowest(MCoreSenderUnregisterEvent event)
|
||||||
|
{
|
||||||
|
this.onOnlineChanged(event.getSender(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: FIX
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String reqFix(String senderId)
|
||||||
|
{
|
||||||
|
return this.allSenderIds.get(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE: SETS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getAllSenderIds()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableSet(this.allSenderIds.keySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getOnlineSenderIds()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableSet(this.onlineSenderIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getOfflineSenderIds()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableSet(this.offlineSenderIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getAllPlayerIds()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableSet(this.allPlayerIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getOnlinePlayerIds()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableSet(this.onlinePlayerIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getOfflinePlayerIds()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableSet(this.offlinePlayerIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
9
src/com/massivecraft/mcore5/mixin/SenderPsMixin.java
Normal file
9
src/com/massivecraft/mcore5/mixin/SenderPsMixin.java
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
|
||||||
|
public interface SenderPsMixin
|
||||||
|
{
|
||||||
|
public PS getSenderPs(String senderId);
|
||||||
|
public void setSenderPs(String senderId, PS ps);
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
public abstract class SenderPsMixinAbstract implements SenderPsMixin
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
34
src/com/massivecraft/mcore5/mixin/SenderPsMixinDefault.java
Normal file
34
src/com/massivecraft/mcore5/mixin/SenderPsMixinDefault.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
|
||||||
|
public class SenderPsMixinDefault extends SenderPsMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static SenderPsMixinDefault i = new SenderPsMixinDefault();
|
||||||
|
public static SenderPsMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PS getSenderPs(String senderId)
|
||||||
|
{
|
||||||
|
Player player = Bukkit.getPlayerExact(senderId);
|
||||||
|
if (player == null) return null;
|
||||||
|
return new PS(player.getLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSenderPs(String senderId, PS ps)
|
||||||
|
{
|
||||||
|
// Bukkit does not support setting the physical state for offline players for now.
|
||||||
|
}
|
||||||
|
}
|
50
src/com/massivecraft/mcore5/mixin/TeleportMixin.java
Normal file
50
src/com/massivecraft/mcore5/mixin/TeleportMixin.java
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
|
||||||
|
public interface TeleportMixin
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// MESSAGING
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public void sendPreTeleportMessage(Player teleportee, String destinationDesc, int delaySeconds);
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// PLAYER
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public void teleport(Player teleportee, PS destinationPs) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, Permissible delayPermissible) throws TeleporterException;
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, Permissible delayPermissible, CommandSender otherSender, String otherPerm) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, CommandSender otherSender, String otherPerm) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, int delaySeconds, CommandSender otherSender, String otherPerm) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, int delaySeconds) throws TeleporterException;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// PLAYER ID
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, Permissible delayPermissible) throws TeleporterException;
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, Permissible delayPermissible, CommandSender otherSender, String otherPerm) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, CommandSender otherSender, String otherPerm) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, int delaySeconds, CommandSender otherSender, String otherPerm) throws TeleporterException;
|
||||||
|
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, int delaySeconds) throws TeleporterException;
|
||||||
|
}
|
154
src/com/massivecraft/mcore5/mixin/TeleportMixinAbstract.java
Normal file
154
src/com/massivecraft/mcore5/mixin/TeleportMixinAbstract.java
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.Conf;
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
import com.massivecraft.mcore5.Permission;
|
||||||
|
import com.massivecraft.mcore5.util.PermUtil;
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
|
public abstract class TeleportMixinAbstract implements TeleportMixin
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendPreTeleportMessage(Player teleportee, String destinationDesc, int delaySeconds)
|
||||||
|
{
|
||||||
|
if (delaySeconds > 0)
|
||||||
|
{
|
||||||
|
if (destinationDesc != null)
|
||||||
|
{
|
||||||
|
Mixin.msg(teleportee, "<i>Teleporting to <h>"+destinationDesc+" <i>in <h>"+delaySeconds+"s <i>unless you move.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Mixin.msg(teleportee, "<i>Teleporting in <h>"+delaySeconds+"s <i>unless you move.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (destinationDesc != null)
|
||||||
|
{
|
||||||
|
Mixin.msg(teleportee, "<i>Teleporting to <h>"+destinationDesc+"<i>.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(Player teleportee, PS destinationPs) throws TeleporterException
|
||||||
|
{
|
||||||
|
this.teleport(teleportee, destinationPs, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc) throws TeleporterException
|
||||||
|
{
|
||||||
|
this.teleport(teleportee, destinationPs, destinationDesc, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, Permissible delayPermissible) throws TeleporterException
|
||||||
|
{
|
||||||
|
int delaySeconds = decideDelaySeconds(delayPermissible);
|
||||||
|
this.teleport(teleportee, destinationPs, destinationDesc, delaySeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, Permissible delayPermissible, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
int delaySeconds = decideDelaySeconds(delayPermissible);
|
||||||
|
this.teleport(teleportee, destinationPs, destinationDesc, delaySeconds, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
this.teleport(teleportee, destinationPs, destinationDesc, 0, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, int delaySeconds, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
otherPermCheck(SenderUtil.getSenderId(teleportee), otherSender, otherPerm);
|
||||||
|
this.teleport(teleportee, destinationPs, destinationDesc, delaySeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs) throws TeleporterException
|
||||||
|
{
|
||||||
|
this.teleport(teleporteeId, destinationPs, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc) throws TeleporterException
|
||||||
|
{
|
||||||
|
this.teleport(teleporteeId, destinationPs, destinationDesc, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, Permissible delayPermissible) throws TeleporterException
|
||||||
|
{
|
||||||
|
int delaySeconds = decideDelaySeconds(delayPermissible);
|
||||||
|
this.teleport(teleporteeId, destinationPs, destinationDesc, delaySeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, Permissible delayPermissible, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
int delaySeconds = decideDelaySeconds(delayPermissible);
|
||||||
|
this.teleport(teleporteeId, destinationPs, destinationDesc, delaySeconds, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
this.teleport(teleporteeId, destinationPs, destinationDesc, 0, otherSender, otherPerm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, int delaySeconds, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
otherPermCheck(teleporteeId, otherSender, otherPerm);
|
||||||
|
this.teleport(teleporteeId, destinationPs, destinationDesc, delaySeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// UTIL
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static int decideDelaySeconds(Permissible delayPermissible)
|
||||||
|
{
|
||||||
|
int ret = Conf.tpdelay;
|
||||||
|
if (Permission.NOTPDELAY.has(delayPermissible, false))
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
ret = Math.max(ret, 0);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void otherPermCheck(String teleporteeId, CommandSender otherSender, String otherPerm) throws TeleporterException
|
||||||
|
{
|
||||||
|
String otherSenderId = SenderUtil.getSenderId(otherSender);
|
||||||
|
if (otherSenderId.equalsIgnoreCase(teleporteeId)) return;
|
||||||
|
if (PermUtil.has(otherSender, otherPerm, false)) return;
|
||||||
|
throw new TeleporterException(PermUtil.getForbiddenMessage(otherPerm));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void validateTeleporteeId(String teleporteeId) throws TeleporterException
|
||||||
|
{
|
||||||
|
if (!SenderUtil.isPlayerId(teleporteeId)) throw new TeleporterException(Txt.parse("<white>%s <b>is not a player.", Mixin.getDisplayName(teleporteeId)));
|
||||||
|
if (Mixin.isOffline(teleporteeId)) throw new TeleporterException(Txt.parse("<white>%s <b>is offline.", Mixin.getDisplayName(teleporteeId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
73
src/com/massivecraft/mcore5/mixin/TeleportMixinDefault.java
Normal file
73
src/com/massivecraft/mcore5/mixin/TeleportMixinDefault.java
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
|
public class TeleportMixinDefault extends TeleportMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static TeleportMixinDefault i = new TeleportMixinDefault();
|
||||||
|
public static TeleportMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CORE LOGIC
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static void teleportEntity(Entity entity, PS ps) throws TeleporterException
|
||||||
|
{
|
||||||
|
// Use a local clone of the ps to avoid altering original
|
||||||
|
ps = ps.clone();
|
||||||
|
|
||||||
|
// Ensure the ps has a world name
|
||||||
|
if (ps.getWorldName() == null)
|
||||||
|
{
|
||||||
|
ps.setWorldName(entity.getWorld().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
Location location = ps.calcLocation();
|
||||||
|
if (location == null) throw new TeleporterException(Txt.parse("<b>Could not calculate the location."));
|
||||||
|
|
||||||
|
entity.teleport(location);
|
||||||
|
|
||||||
|
Vector velocity = ps.getVelocity();
|
||||||
|
if (velocity == null) return;
|
||||||
|
|
||||||
|
entity.setVelocity(velocity);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(Player teleportee, PS destinationPs, String destinationDesc, int delaySeconds) throws TeleporterException
|
||||||
|
{
|
||||||
|
this.sendPreTeleportMessage(teleportee, destinationDesc, delaySeconds);
|
||||||
|
if (delaySeconds > 0)
|
||||||
|
{
|
||||||
|
new ScheduledTeleport(teleportee, destinationPs, destinationDesc, delaySeconds).schedule();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
teleportEntity(teleportee, destinationPs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void teleport(String teleporteeId, PS destinationPs, String destinationDesc, int delaySeconds) throws TeleporterException
|
||||||
|
{
|
||||||
|
validateTeleporteeId(teleporteeId);
|
||||||
|
Player teleportee = SenderUtil.getPlayer(teleporteeId);
|
||||||
|
this.teleport(teleportee, destinationPs, destinationDesc, delaySeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
src/com/massivecraft/mcore5/mixin/TeleporterException.java
Normal file
31
src/com/massivecraft/mcore5/mixin/TeleporterException.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
public class TeleporterException extends Exception
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public TeleporterException()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TeleporterException(String message)
|
||||||
|
{
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TeleporterException(String message, Throwable cause)
|
||||||
|
{
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TeleporterException(Throwable cause)
|
||||||
|
{
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected TeleporterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
|
||||||
|
{
|
||||||
|
super(message, cause, enableSuppression, writableStackTrace);
|
||||||
|
}
|
||||||
|
}
|
16
src/com/massivecraft/mcore5/mixin/VisibilityMixin.java
Normal file
16
src/com/massivecraft/mcore5/mixin/VisibilityMixin.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public interface VisibilityMixin
|
||||||
|
{
|
||||||
|
public boolean isVisible(String watcherId, String watcheeId);
|
||||||
|
public boolean isVisible(CommandSender watcher, String watcheeId);
|
||||||
|
public boolean isVisible(String watcherId, CommandSender watchee);
|
||||||
|
public boolean isVisible(CommandSender watcher, CommandSender watchee);
|
||||||
|
|
||||||
|
public void setVisible(String watcherId, String watcheeId, boolean visible);
|
||||||
|
public void setVisible(CommandSender watcher, String watcheeId, boolean visible);
|
||||||
|
public void setVisible(String watcherId, CommandSender watchee, boolean visible);
|
||||||
|
public void setVisible(CommandSender watcher, CommandSender watchee, boolean visible);
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
public abstract class VisibilityMixinAbstract implements VisibilityMixin
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public class VisibilityMixinDefault extends VisibilityMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static VisibilityMixinDefault i = new VisibilityMixinDefault();
|
||||||
|
public static VisibilityMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisible(String watcherId, String watcheeId)
|
||||||
|
{
|
||||||
|
return this.isVisible(SenderUtil.getSender(watcherId), SenderUtil.getSender(watcheeId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisible(CommandSender watcher, String watcheeId)
|
||||||
|
{
|
||||||
|
return this.isVisible(watcher, SenderUtil.getSender(watcheeId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisible(String watcherId, CommandSender watchee)
|
||||||
|
{
|
||||||
|
return this.isVisible(SenderUtil.getSender(watcherId), watchee);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisible(CommandSender watcher, CommandSender watchee)
|
||||||
|
{
|
||||||
|
Player pwatcher = SenderUtil.getAsPlayer(watcher);
|
||||||
|
Player pwatchee = SenderUtil.getAsPlayer(watchee);
|
||||||
|
|
||||||
|
if (pwatcher == null) return true;
|
||||||
|
if (pwatchee == null) return true;
|
||||||
|
|
||||||
|
return pwatcher.canSee(pwatchee);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVisible(String watcherId, String watcheeId, boolean visible)
|
||||||
|
{
|
||||||
|
this.setVisible(SenderUtil.getSender(watcherId), SenderUtil.getSender(watcheeId), visible);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVisible(CommandSender watcher, String watcheeId, boolean visible)
|
||||||
|
{
|
||||||
|
this.setVisible(watcher, SenderUtil.getSender(watcheeId), visible);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVisible(String watcherId, CommandSender watchee, boolean visible)
|
||||||
|
{
|
||||||
|
this.setVisible(SenderUtil.getSender(watcherId), watchee, visible);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVisible(CommandSender watcher, CommandSender watchee, boolean visible)
|
||||||
|
{
|
||||||
|
Player pwatcher = SenderUtil.getAsPlayer(watcher);
|
||||||
|
Player pwatchee = SenderUtil.getAsPlayer(watchee);
|
||||||
|
|
||||||
|
if (pwatcher == null) return;
|
||||||
|
if (pwatchee == null) return;
|
||||||
|
|
||||||
|
if (visible)
|
||||||
|
{
|
||||||
|
pwatcher.showPlayer(pwatchee);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pwatcher.hidePlayer(pwatchee);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
src/com/massivecraft/mcore5/mixin/WorldMixin.java
Normal file
33
src/com/massivecraft/mcore5/mixin/WorldMixin.java
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
|
||||||
|
public interface WorldMixin
|
||||||
|
{
|
||||||
|
public boolean canSee(Permissible permissible, String worldId);
|
||||||
|
|
||||||
|
public List<String> getWorldIds();
|
||||||
|
|
||||||
|
public List<String> getVisibleWorldIds(Permissible permissible);
|
||||||
|
|
||||||
|
public ChatColor getWorldColor(String worldId);
|
||||||
|
|
||||||
|
public List<String> getWorldAliases(String worldId);
|
||||||
|
|
||||||
|
public String getWorldAliasOrId(String worldId);
|
||||||
|
|
||||||
|
public String getWorldDisplayName(String worldId);
|
||||||
|
|
||||||
|
public PS getWorldSpawnPs(String worldId);
|
||||||
|
|
||||||
|
public void setWorldSpawnPs(String worldId, PS spawnPs);
|
||||||
|
|
||||||
|
public boolean trySetWorldSpawnWp(CommandSender sender, String worldId, PS spawnPs, boolean verbooseChange, boolean verbooseSame);
|
||||||
|
|
||||||
|
}
|
40
src/com/massivecraft/mcore5/mixin/WorldMixinAbstract.java
Normal file
40
src/com/massivecraft/mcore5/mixin/WorldMixinAbstract.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
|
public abstract class WorldMixinAbstract implements WorldMixin
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getVisibleWorldIds(Permissible permissible)
|
||||||
|
{
|
||||||
|
List<String> ret = new ArrayList<String>();
|
||||||
|
for (String worldId : this.getWorldIds())
|
||||||
|
{
|
||||||
|
if (!this.canSee(permissible, worldId)) continue;
|
||||||
|
ret.add(worldId);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getWorldAliasOrId(String worldId)
|
||||||
|
{
|
||||||
|
List<String> aliases = this.getWorldAliases(worldId);
|
||||||
|
if (aliases.size() > 0) return aliases.get(0);
|
||||||
|
return worldId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getWorldDisplayName(String worldId)
|
||||||
|
{
|
||||||
|
return this.getWorldColor(worldId).toString()+this.getWorldAliasOrId(worldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
122
src/com/massivecraft/mcore5/mixin/WorldMixinDefault.java
Normal file
122
src/com/massivecraft/mcore5/mixin/WorldMixinDefault.java
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
package com.massivecraft.mcore5.mixin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.PS;
|
||||||
|
import com.massivecraft.mcore5.util.MUtil;
|
||||||
|
|
||||||
|
public class WorldMixinDefault extends WorldMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static WorldMixinDefault i = new WorldMixinDefault();
|
||||||
|
public static WorldMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canSee(Permissible permissible, String worldId)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getWorldIds()
|
||||||
|
{
|
||||||
|
List<String> ret = new ArrayList<String>();
|
||||||
|
for (World world : Bukkit.getWorlds())
|
||||||
|
{
|
||||||
|
ret.add(world.getName());
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChatColor getWorldColor(String worldId)
|
||||||
|
{
|
||||||
|
return ChatColor.WHITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getWorldAliases(String worldId)
|
||||||
|
{
|
||||||
|
return new ArrayList<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PS getWorldSpawnPs(String worldId)
|
||||||
|
{
|
||||||
|
World world = Bukkit.getWorld(worldId);
|
||||||
|
if (world == null) return null;
|
||||||
|
return new PS(world.getSpawnLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWorldSpawnPs(String worldId, PS spawnPs)
|
||||||
|
{
|
||||||
|
World world = Bukkit.getWorld(worldId);
|
||||||
|
if (world == null) return;
|
||||||
|
|
||||||
|
spawnPs = spawnPs.clone();
|
||||||
|
spawnPs.setWorldName(worldId);
|
||||||
|
Location location = spawnPs.calcLocation();
|
||||||
|
if (location == null) return;
|
||||||
|
|
||||||
|
world.setSpawnLocation(location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean trySetWorldSpawnWp(CommandSender sender, String worldId, PS goal, boolean verbooseChange, boolean verbooseSame)
|
||||||
|
{
|
||||||
|
World world = Bukkit.getWorld(worldId);
|
||||||
|
if (world == null)
|
||||||
|
{
|
||||||
|
if (verbooseChange || verbooseSame)
|
||||||
|
{
|
||||||
|
Mixin.msg(sender, "<b>Unknown world <h>%s<b>.", worldId);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pre Calculations
|
||||||
|
String worldDisplayName = Mixin.getWorldDisplayName(worldId);
|
||||||
|
PS current = this.getWorldSpawnPs(worldId);
|
||||||
|
String currentFormatted = current.getShortDesc();
|
||||||
|
String goalFormatted = goal.getShortDesc();
|
||||||
|
|
||||||
|
// No change?
|
||||||
|
if (MUtil.equals(goal, current))
|
||||||
|
{
|
||||||
|
if (verbooseSame)
|
||||||
|
{
|
||||||
|
Mixin.msg(sender, "<i>Spawn location is already <h>%s <i>for <h>%s<i>.", currentFormatted, worldDisplayName);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Report
|
||||||
|
if (verbooseChange)
|
||||||
|
{
|
||||||
|
Mixin.msg(sender, "<i>Changing spawn location from <h>%s <i>to <h>%s <i>for <h>%s<i>.", currentFormatted, goalFormatted, worldDisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set it
|
||||||
|
this.setWorldSpawnPs(worldId, goal);
|
||||||
|
|
||||||
|
// Return
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -5,6 +5,7 @@ import org.bukkit.Server;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.permissions.PermissibleBase;
|
import org.bukkit.permissions.PermissibleBase;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.MCore;
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
public class BasicCommandSender extends PermissibleBase implements CommandSender
|
public class BasicCommandSender extends PermissibleBase implements CommandSender
|
||||||
@ -55,6 +56,24 @@ public class BasicCommandSender extends PermissibleBase implements CommandSender
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean register()
|
public boolean register()
|
||||||
|
{
|
||||||
|
final BasicCommandSender ME = this;
|
||||||
|
|
||||||
|
// register later
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(MCore.get(), new Runnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
ME.registerImmediately();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// and register now
|
||||||
|
return this.registerImmediately();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean registerImmediately()
|
||||||
{
|
{
|
||||||
return SenderUtil.register(this);
|
return SenderUtil.register(this);
|
||||||
}
|
}
|
||||||
@ -63,4 +82,5 @@ public class BasicCommandSender extends PermissibleBase implements CommandSender
|
|||||||
{
|
{
|
||||||
return SenderUtil.unregister(this);
|
return SenderUtil.unregister(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -46,10 +46,7 @@ public abstract class Entity<E extends Entity<E, L>, L extends Comparable<? supe
|
|||||||
|
|
||||||
public boolean attached()
|
public boolean attached()
|
||||||
{
|
{
|
||||||
Coll<E, L> coll = this.getColl();
|
return this.getColl() != null;
|
||||||
if (coll == null) return false;
|
|
||||||
|
|
||||||
return coll.getAll().contains(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean detached()
|
public boolean detached()
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.store;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.mixin.Mixin;
|
|
||||||
|
|
||||||
public class MixinSenderIdSource implements SenderIdSource
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE & CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static MixinSenderIdSource i = new MixinSenderIdSource();
|
|
||||||
public static MixinSenderIdSource get() { return i; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getSenderIds()
|
|
||||||
{
|
|
||||||
return Mixin.getAllSenderIds();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,8 +1,9 @@
|
|||||||
package com.massivecraft.mcore5.store;
|
package com.massivecraft.mcore5.store;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.TreeSet;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
@ -31,7 +32,7 @@ public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String> imple
|
|||||||
protected boolean lowercasing;
|
protected boolean lowercasing;
|
||||||
public boolean isLowercasing() { return this.lowercasing; }
|
public boolean isLowercasing() { return this.lowercasing; }
|
||||||
|
|
||||||
protected final SenderIdSource mixinedIdSource = new SenderIdSourceCombined(this, MixinSenderIdSource.get());
|
protected final SenderIdSource mixinedIdSource = new SenderIdSourceCombined(this, SenderIdSourceMixinAllSenderIds.get());
|
||||||
public SenderIdSource getMixinedIdSource() { return this.mixinedIdSource; }
|
public SenderIdSource getMixinedIdSource() { return this.mixinedIdSource; }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -63,9 +64,9 @@ public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String> imple
|
|||||||
// EXTRAS
|
// EXTRAS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public TreeSet<String> getFixedIds()
|
public List<String> getFixedIds()
|
||||||
{
|
{
|
||||||
TreeSet<String> ret = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
List<String> ret = new ArrayList<String>();
|
||||||
for (String senderId : this.getIds())
|
for (String senderId : this.getIds())
|
||||||
{
|
{
|
||||||
ret.add(Mixin.tryFix(senderId));
|
ret.add(Mixin.tryFix(senderId));
|
||||||
@ -74,11 +75,14 @@ public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String> imple
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getSenderIds()
|
public Collection<Collection<String>> getSenderIdCollections()
|
||||||
{
|
{
|
||||||
return this.getFixedIds();
|
List<Collection<String>> ret = new ArrayList<Collection<String>>();
|
||||||
|
ret.add(this.getFixedIds());
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String fixId(Object oid)
|
public String fixId(Object oid)
|
||||||
{
|
{
|
||||||
|
@ -161,34 +161,34 @@ public abstract class SenderEntity<E extends SenderEntity<E>> extends Entity<E,
|
|||||||
|
|
||||||
public boolean sendMessage(String message)
|
public boolean sendMessage(String message)
|
||||||
{
|
{
|
||||||
return SenderUtil.sendMessage(this.getId(), message);
|
return Mixin.message(this.getId(), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendMessage(String... messages)
|
public boolean sendMessage(String... messages)
|
||||||
{
|
{
|
||||||
return SenderUtil.sendMessage(this.getId(), messages);
|
return Mixin.message(this.getId(), messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendMessage(Collection<String> messages)
|
public boolean sendMessage(Collection<String> messages)
|
||||||
{
|
{
|
||||||
return SenderUtil.sendMessage(this.getId(), messages);
|
return Mixin.message(this.getId(), messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CONVENIENCE MSG
|
// CONVENIENCE MSG
|
||||||
|
|
||||||
public boolean msg(String msg)
|
public boolean msg(String msg)
|
||||||
{
|
{
|
||||||
return SenderUtil.msg(this.getId(), msg);
|
return Mixin.msg(this.getId(), msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean msg(String msg, Object... args)
|
public boolean msg(String msg, Object... args)
|
||||||
{
|
{
|
||||||
return SenderUtil.msg(this.getId(), msg, args);
|
return Mixin.msg(this.getId(), msg, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean msg(Collection<String> msgs)
|
public boolean msg(Collection<String> msgs)
|
||||||
{
|
{
|
||||||
return SenderUtil.msg(this.getId(), msgs);
|
return Mixin.msg(this.getId(), msgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CONVENIENCE GAME-MODE
|
// CONVENIENCE GAME-MODE
|
||||||
|
@ -4,5 +4,5 @@ import java.util.Collection;
|
|||||||
|
|
||||||
public interface SenderIdSource
|
public interface SenderIdSource
|
||||||
{
|
{
|
||||||
public Collection<String> getSenderIds();
|
public Collection<Collection<String>> getSenderIdCollections();
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
public class SenderIdSourceCombined implements SenderIdSource
|
public class SenderIdSourceCombined implements SenderIdSource
|
||||||
{
|
{
|
||||||
@ -33,12 +32,12 @@ public class SenderIdSourceCombined implements SenderIdSource
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getSenderIds()
|
public Collection<Collection<String>> getSenderIdCollections()
|
||||||
{
|
{
|
||||||
TreeSet<String> ret = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
List<Collection<String>> ret = new ArrayList<Collection<String>>();
|
||||||
for (SenderIdSource source : this.sources)
|
for (SenderIdSource source : this.sources)
|
||||||
{
|
{
|
||||||
ret.addAll(source.getSenderIds());
|
ret.addAll(source.getSenderIdCollections());
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.massivecraft.mcore5.store;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
|
|
||||||
|
public class SenderIdSourceMixinAllPlayerIds implements SenderIdSource
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static SenderIdSourceMixinAllPlayerIds i = new SenderIdSourceMixinAllPlayerIds();
|
||||||
|
public static SenderIdSourceMixinAllPlayerIds get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Collection<String>> getSenderIdCollections()
|
||||||
|
{
|
||||||
|
List<Collection<String>> ret = new ArrayList<Collection<String>>();
|
||||||
|
ret.add(Mixin.getAllPlayerIds());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.massivecraft.mcore5.store;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
|
|
||||||
|
public class SenderIdSourceMixinAllSenderIds implements SenderIdSource
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static SenderIdSourceMixinAllSenderIds i = new SenderIdSourceMixinAllSenderIds();
|
||||||
|
public static SenderIdSourceMixinAllSenderIds get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Collection<String>> getSenderIdCollections()
|
||||||
|
{
|
||||||
|
List<Collection<String>> ret = new ArrayList<Collection<String>>();
|
||||||
|
ret.add(Mixin.getAllSenderIds());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -21,8 +21,10 @@ import java.util.TreeSet;
|
|||||||
import net.minecraft.server.v1_4_R1.DedicatedServer;
|
import net.minecraft.server.v1_4_R1.DedicatedServer;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.CraftServer;
|
import org.bukkit.craftbukkit.v1_4_R1.CraftServer;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@ -101,6 +103,85 @@ public class MUtil
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// PICK
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static <T> T regexPickFirstVal(String input, Map<String, T> regex2val)
|
||||||
|
{
|
||||||
|
if (regex2val == null) return null;
|
||||||
|
T ret = null;
|
||||||
|
|
||||||
|
for (Entry<String, T> entry : regex2val.entrySet())
|
||||||
|
{
|
||||||
|
ret = entry.getValue();
|
||||||
|
if (input == null) continue;
|
||||||
|
String regex = entry.getKey();
|
||||||
|
if (Pattern.matches(regex, input)) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <E, T> T equalsPickFirstVal(E input, Map<E, T> thing2val)
|
||||||
|
{
|
||||||
|
if (thing2val == null) return null;
|
||||||
|
T ret = null;
|
||||||
|
|
||||||
|
for (Entry<E, T> entry : thing2val.entrySet())
|
||||||
|
{
|
||||||
|
ret = entry.getValue();
|
||||||
|
if (input == null) continue;
|
||||||
|
E thing = entry.getKey();
|
||||||
|
if (MUtil.equals(input, thing)) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// BLOCK COMPARISON BY LOCATIONS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static boolean isSameBlock(Location one, Location two)
|
||||||
|
{
|
||||||
|
if (one.getBlockX() != two.getBlockX()) return false;
|
||||||
|
if (one.getBlockZ() != two.getBlockZ()) return false;
|
||||||
|
if (one.getBlockY() != two.getBlockY()) return false;
|
||||||
|
return one.getWorld().equals(two.getWorld());
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FACE AND YAW
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static Float getYaw(BlockFace face)
|
||||||
|
{
|
||||||
|
switch (face)
|
||||||
|
{
|
||||||
|
case NORTH: return 0f;
|
||||||
|
case EAST: return 90f;
|
||||||
|
case SOUTH: return 180f;
|
||||||
|
case WEST: return 270f;
|
||||||
|
case UP: return null;
|
||||||
|
case DOWN: return null;
|
||||||
|
case NORTH_EAST: return 45f;
|
||||||
|
case NORTH_WEST: return 315f;
|
||||||
|
case SOUTH_EAST: return 135f;
|
||||||
|
case SOUTH_WEST: return 225f;
|
||||||
|
case WEST_NORTH_WEST: return 292.5f;
|
||||||
|
case NORTH_NORTH_WEST: return 337.5f;
|
||||||
|
case NORTH_NORTH_EAST: return 22.5f;
|
||||||
|
case EAST_NORTH_EAST: return 67.5f;
|
||||||
|
case EAST_SOUTH_EAST: return 112.5f;
|
||||||
|
case SOUTH_SOUTH_EAST: return 157.5f;
|
||||||
|
case SOUTH_SOUTH_WEST: return 202.5f;
|
||||||
|
case WEST_SOUTH_WEST: return 247.5f;
|
||||||
|
case SELF: return null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// MATERIAL FACTS
|
// MATERIAL FACTS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -32,17 +32,17 @@ public class PermUtil
|
|||||||
{
|
{
|
||||||
return has(permissable, permission.getName(), verbose);
|
return has(permissable, permission.getName(), verbose);
|
||||||
}
|
}
|
||||||
public static boolean has(Permissible permissable, String perm, boolean verbose)
|
public static boolean has(Permissible permissible, String perm, boolean verbose)
|
||||||
{
|
{
|
||||||
if (has(permissable, perm))
|
if (has(permissible, perm))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (verbose && permissable != null)
|
else if (verbose && permissible != null)
|
||||||
{
|
{
|
||||||
if (permissable instanceof CommandSender)
|
if (permissible instanceof CommandSender)
|
||||||
{
|
{
|
||||||
CommandSender sender = (CommandSender)permissable;
|
CommandSender sender = (CommandSender)permissible;
|
||||||
sender.sendMessage(getForbiddenMessage(perm));
|
sender.sendMessage(getForbiddenMessage(perm));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package com.massivecraft.mcore5.util;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -12,7 +11,6 @@ import java.util.TreeMap;
|
|||||||
import net.minecraft.server.v1_4_R1.MinecraftServer;
|
import net.minecraft.server.v1_4_R1.MinecraftServer;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.command.BlockCommandSender;
|
import org.bukkit.command.BlockCommandSender;
|
||||||
@ -22,33 +20,18 @@ import org.bukkit.command.RemoteConsoleCommandSender;
|
|||||||
import org.bukkit.craftbukkit.v1_4_R1.CraftServer;
|
import org.bukkit.craftbukkit.v1_4_R1.CraftServer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.mixin.Mixin;
|
import com.massivecraft.mcore5.MCore;
|
||||||
|
import com.massivecraft.mcore5.event.MCoreSenderRegisterEvent;
|
||||||
|
import com.massivecraft.mcore5.event.MCoreSenderUnregisterEvent;
|
||||||
import com.massivecraft.mcore5.sender.FakeBlockCommandSender;
|
import com.massivecraft.mcore5.sender.FakeBlockCommandSender;
|
||||||
import com.massivecraft.mcore5.store.SenderColl;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This Util was created to fill out the void between the Player interface and other CommandSenders.
|
|
||||||
*
|
|
||||||
* +++ The ID +++
|
|
||||||
* We add an ID <--> CommandSender lookup feature.
|
* We add an ID <--> CommandSender lookup feature.
|
||||||
* Each player has an id which is the name of the player. Players are retrievable by id using Bukkit.getPlayerExact().
|
* Each player has an id which is the name of the player. Players are retrievable by id using Bukkit.getPlayerExact().
|
||||||
* Other command senders have no true id. We make it so they have.
|
* Other command senders have no true id. We make it so they have.
|
||||||
* Non-player-sender-ids always start with and ampersand (@). This is to avoid clashes with regular player names.
|
* Non-player-sender-ids always start with and ampersand (@). This is to avoid clashes with regular player names.
|
||||||
* The id is simply "@"+CommandSender.getName() with exception for the block command sender which we call "@block".
|
* The id is simply "@"+CommandSender.getName() with exception for the block command sender which we call "@block".
|
||||||
* Non standard CommandSenders must be manually registered to the util using the register method.
|
* Non standard CommandSenders must be manually registered to the util using the register method.
|
||||||
*
|
|
||||||
* +++ The DisplayName and ListName +++
|
|
||||||
* CommandSenders can have DisplayName and ListName just like normal Player.
|
|
||||||
*
|
|
||||||
* +++ Online/Offline +++
|
|
||||||
* Players may be Online/Offline. We allow CommandSenders to be Online/Offline as well.
|
|
||||||
* This is simply done by stating that everything non-player in online all the time.
|
|
||||||
* The ConsoleCommandSender is for example always online and never offline.
|
|
||||||
*
|
|
||||||
* +++ Easy sendMessage and dispatchCommand +++
|
|
||||||
* This feature isn't new "fake fields" like the ones above.
|
|
||||||
* Its a suite of useful utility methods for sending messages and dispatching commands as a certain sender.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class SenderUtil
|
public class SenderUtil
|
||||||
{
|
{
|
||||||
@ -80,16 +63,19 @@ public class SenderUtil
|
|||||||
{
|
{
|
||||||
if (sender == null) return false;
|
if (sender == null) return false;
|
||||||
String id = getSenderId(sender);
|
String id = getSenderId(sender);
|
||||||
CommandSender current = idToSender.get(id);
|
|
||||||
if (current != null) return current == sender;
|
|
||||||
idToSender.put(id, sender);
|
idToSender.put(id, sender);
|
||||||
SenderColl.setSenderRefferences(id, sender);
|
new MCoreSenderRegisterEvent(sender).run();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized boolean unregister(CommandSender sender)
|
public static synchronized boolean unregister(CommandSender sender)
|
||||||
{
|
{
|
||||||
return idToSender.remove(getSenderId(sender)) != null;
|
boolean ret = (idToSender.remove(getSenderId(sender)) != null);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
new MCoreSenderUnregisterEvent(sender).run();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, CommandSender> getIdToSender()
|
public static Map<String, CommandSender> getIdToSender()
|
||||||
@ -99,20 +85,17 @@ public class SenderUtil
|
|||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
// Register
|
// Since the console and rcon does not exist we schedule the register for these senders.
|
||||||
register(getConsole());
|
Bukkit.getScheduler().scheduleSyncDelayedTask(MCore.get(), new Runnable()
|
||||||
register(getRcon());
|
{
|
||||||
register(getBlock());
|
@Override
|
||||||
|
public void run()
|
||||||
// Display Name
|
{
|
||||||
Mixin.setDisplayName(ID_CONSOLE, ChatColor.RED.toString()+ID_CONSOLE.toUpperCase());
|
register(getConsole());
|
||||||
Mixin.setDisplayName(ID_RCON, ChatColor.RED.toString()+ID_RCON.toUpperCase());
|
register(getRcon());
|
||||||
Mixin.setDisplayName(ID_BLOCK, ChatColor.RED.toString()+ID_BLOCK.toUpperCase());
|
register(getBlock());
|
||||||
|
}
|
||||||
// List Name
|
});
|
||||||
Mixin.setListName(ID_CONSOLE, ChatColor.RED.toString()+ID_CONSOLE.toUpperCase());
|
|
||||||
Mixin.setListName(ID_RCON, ChatColor.RED.toString()+ID_RCON.toUpperCase());
|
|
||||||
Mixin.setListName(ID_BLOCK, ChatColor.RED.toString()+ID_BLOCK.toUpperCase());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -349,105 +332,6 @@ public class SenderUtil
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONVENIENCE CMD
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public static boolean cmd(CommandSender sender, String cmd)
|
|
||||||
{
|
|
||||||
return Bukkit.dispatchCommand(sender, cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONVENIENCE SEND MESSAGE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
// sender
|
|
||||||
|
|
||||||
public static boolean sendMessage(CommandSender sender, String message)
|
|
||||||
{
|
|
||||||
if (sender == null) return false;
|
|
||||||
sender.sendMessage(message);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean sendMessage(CommandSender sender, String... messages)
|
|
||||||
{
|
|
||||||
if (sender == null) return false;
|
|
||||||
sender.sendMessage(messages);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean sendMessage(CommandSender sender, Collection<String> messages)
|
|
||||||
{
|
|
||||||
if (sender == null) return false;
|
|
||||||
for (String message : messages)
|
|
||||||
{
|
|
||||||
sender.sendMessage(message);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// senderId
|
|
||||||
|
|
||||||
public static boolean sendMessage(String senderId, String message)
|
|
||||||
{
|
|
||||||
return sendMessage(getSender(senderId), message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean sendMessage(String senderId, String... messages)
|
|
||||||
{
|
|
||||||
return sendMessage(getSender(senderId), messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean sendMessage(String senderId, Collection<String> messages)
|
|
||||||
{
|
|
||||||
return sendMessage(getSender(senderId), messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONVENIENCE MSG
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
// sender
|
|
||||||
|
|
||||||
public static boolean msg(CommandSender sender, String msg)
|
|
||||||
{
|
|
||||||
return sendMessage(sender, Txt.parse(msg));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean msg(CommandSender sender, String msg, Object... args)
|
|
||||||
{
|
|
||||||
return sendMessage(sender, Txt.parse(msg, args));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean msg(CommandSender sender, Collection<String> msgs)
|
|
||||||
{
|
|
||||||
if (sender == null) return false;
|
|
||||||
for (String msg : msgs)
|
|
||||||
{
|
|
||||||
msg(sender, msg);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// senderId
|
|
||||||
|
|
||||||
public static boolean msg(String senderId, String msg)
|
|
||||||
{
|
|
||||||
return msg(getSender(senderId), msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean msg(String senderId, String msg, Object... args)
|
|
||||||
{
|
|
||||||
return msg(getSender(senderId), msg, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean msg(String senderId, Collection<String> msgs)
|
|
||||||
{
|
|
||||||
return msg(getSender(senderId), msgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONVENIENCE GAME-MODE
|
// CONVENIENCE GAME-MODE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
191
src/com/massivecraft/mcore5/util/TimeDiffUtil.java
Normal file
191
src/com/massivecraft/mcore5/util/TimeDiffUtil.java
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
package com.massivecraft.mcore5.util;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class TimeDiffUtil
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTANTS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public final static Pattern patternFull = Pattern.compile("^(?:([^a-zA-Z]+)([a-zA-Z]*))+$");
|
||||||
|
public final static Pattern patternPart = Pattern.compile("([^a-zA-Z]+)([a-zA-Z]*)");
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// MILLIS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static long millis(TimeUnit timeUnit, long count)
|
||||||
|
{
|
||||||
|
return timeUnit.millis*count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long millis(TimeUnit timeUnit)
|
||||||
|
{
|
||||||
|
return millis(timeUnit, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long millis(Map<TimeUnit, Long> unitcounts, long count)
|
||||||
|
{
|
||||||
|
long ret = 0;
|
||||||
|
for (Entry<TimeUnit, Long> entry : unitcounts.entrySet())
|
||||||
|
{
|
||||||
|
ret += millis(entry.getKey(), entry.getValue()*count);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long millis(Map<TimeUnit, Long> unitcounts)
|
||||||
|
{
|
||||||
|
return millis(unitcounts, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long millis(String formated, long count) throws Exception
|
||||||
|
{
|
||||||
|
Map<TimeUnit, Long> unitcount = unitcounts(formated);
|
||||||
|
return millis(unitcount, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long millis(String formated) throws Exception
|
||||||
|
{
|
||||||
|
return millis(formated, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// UNITCOUNT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static LinkedHashMap<TimeUnit, Long> unitcounts(String formated) throws Exception
|
||||||
|
{
|
||||||
|
if (formated == null) throw new NullPointerException("The string can't be null.");
|
||||||
|
|
||||||
|
Matcher matcherFull = patternFull.matcher(formated);
|
||||||
|
if (!matcherFull.matches()) throw new NullPointerException("Invalid time diff format.");
|
||||||
|
|
||||||
|
LinkedHashMap<TimeUnit, Long> ret = new LinkedHashMap<TimeUnit, Long>();
|
||||||
|
|
||||||
|
Matcher matcherPart = patternPart.matcher(formated);
|
||||||
|
while (matcherPart.find())
|
||||||
|
{
|
||||||
|
// Parse the count
|
||||||
|
String countString = matcherPart.group(1);
|
||||||
|
String countStringFixed = countString.replaceAll("[\\+\\s]", "");
|
||||||
|
long count = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
count = Long.parseLong(countStringFixed);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new Exception("\""+countString+"\" is not a valid integer.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the time unit
|
||||||
|
String unitString = matcherPart.group(2);
|
||||||
|
TimeUnit unit = TimeUnit.get(unitString);
|
||||||
|
if (unit == null)
|
||||||
|
{
|
||||||
|
throw new Exception("\""+unit+"\" is not a valid time unit.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add to the return map
|
||||||
|
if (ret.put(unit, count) != null)
|
||||||
|
{
|
||||||
|
throw new Exception("Multiple "+unit.singularName+" entries is not allowed.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LinkedHashMap<TimeUnit, Long> unitcounts(long millis, TreeSet<TimeUnit> units)
|
||||||
|
{
|
||||||
|
// Create non-negative millis decumulator
|
||||||
|
long millisLeft = Math.abs(millis);
|
||||||
|
|
||||||
|
LinkedHashMap<TimeUnit, Long> ret = new LinkedHashMap<TimeUnit, Long>();
|
||||||
|
|
||||||
|
for (TimeUnit unit : units)
|
||||||
|
{
|
||||||
|
long count = (long) Math.floor(millisLeft / unit.millis);
|
||||||
|
if (count < 1) continue;
|
||||||
|
millisLeft -= unit.millis*count;
|
||||||
|
ret.put(unit, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LinkedHashMap<TimeUnit, Long> unitcounts(long millis)
|
||||||
|
{
|
||||||
|
return unitcounts(millis, TimeUnit.getAll());
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FORMAT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static final String FORMAT_ENTRY_VERBOOSE = Txt.parse("<v>%1$d<k>%3$s");
|
||||||
|
public static final String FORMAT_COMMA_VERBOOSE = "%s, ";
|
||||||
|
public static final String FORMAT_AND_VERBOOSE = " %sand ";
|
||||||
|
|
||||||
|
public static final String FORMAT_ENTRY_MINIMAL = Txt.parse("<v>%1$d<k>%2$s");
|
||||||
|
public static final String FORMAT_COMMA_MINIMAL = "%s";
|
||||||
|
public static final String FORMAT_AND_MINIMAL = "%s";
|
||||||
|
|
||||||
|
public static String formated(TimeUnit unit, long count, String formatEntry)
|
||||||
|
{
|
||||||
|
return String.format(formatEntry, count, unit.getUnitString(count), unit.getNameString(count));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formated(Map<TimeUnit, Long> unitcounts, String entryFormat, String commaFormat, String andFormat, String color)
|
||||||
|
{
|
||||||
|
String comma = String.format(commaFormat, Txt.parse(color));
|
||||||
|
String and = String.format(andFormat, Txt.parse(color));
|
||||||
|
|
||||||
|
List<String> parts = new ArrayList<String>();
|
||||||
|
for (Entry<TimeUnit, Long> entry : unitcounts.entrySet())
|
||||||
|
{
|
||||||
|
parts.add(formated(entry.getKey(), entry.getValue(), entryFormat));
|
||||||
|
}
|
||||||
|
return Txt.implodeCommaAnd(parts, comma, and);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatedVerboose(TimeUnit unit, long count)
|
||||||
|
{
|
||||||
|
return formated(unit, count, FORMAT_ENTRY_VERBOOSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatedVerboose(Map<TimeUnit, Long> unitcounts, String color)
|
||||||
|
{
|
||||||
|
return formated(unitcounts, FORMAT_ENTRY_VERBOOSE, FORMAT_COMMA_VERBOOSE, FORMAT_AND_VERBOOSE, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatedVerboose(Map<TimeUnit, Long> unitcounts)
|
||||||
|
{
|
||||||
|
return formatedVerboose(unitcounts, "<i>");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatedMinimal(TimeUnit unit, long count)
|
||||||
|
{
|
||||||
|
return formated(unit, count, FORMAT_ENTRY_MINIMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatedMinimal(Map<TimeUnit, Long> unitcounts, String color)
|
||||||
|
{
|
||||||
|
return formated(unitcounts, FORMAT_ENTRY_MINIMAL, FORMAT_COMMA_MINIMAL, FORMAT_AND_MINIMAL, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatedMinimal(Map<TimeUnit, Long> unitcounts)
|
||||||
|
{
|
||||||
|
return formatedMinimal(unitcounts, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
138
src/com/massivecraft/mcore5/util/TimeUnit.java
Normal file
138
src/com/massivecraft/mcore5/util/TimeUnit.java
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
package com.massivecraft.mcore5.util;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
public class TimeUnit implements Comparable<TimeUnit>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTANTS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static final long MILLIS_PER_MILLISECOND = 1L;
|
||||||
|
public static final long MILLIS_PER_SECOND = 1000L * MILLIS_PER_MILLISECOND;
|
||||||
|
public static final long MILLIS_PER_MINUTE = 60L * MILLIS_PER_SECOND;
|
||||||
|
public static final long MILLIS_PER_HOUR = 60L * MILLIS_PER_MINUTE;
|
||||||
|
public static final long MILLIS_PER_DAY = 24L * MILLIS_PER_HOUR;
|
||||||
|
public static final long MILLIS_PER_WEEK = 7L * MILLIS_PER_DAY;
|
||||||
|
public static final long MILLIS_PER_MONTH = 31L * MILLIS_PER_DAY;
|
||||||
|
public static final long MILLIS_PER_MONTHUP = 32L * MILLIS_PER_DAY;
|
||||||
|
public static final long MILLIS_PER_YEAR = 365L * MILLIS_PER_DAY;
|
||||||
|
|
||||||
|
public static final TimeUnit YEAR = new TimeUnit(MILLIS_PER_YEAR, "year", "years", "year", "years", "y", "year", "years");
|
||||||
|
public static final TimeUnit MONTH = new TimeUnit(MILLIS_PER_MONTH, "month", "months", "month", "months", "month", "months");
|
||||||
|
public static final TimeUnit WEEK = new TimeUnit(MILLIS_PER_WEEK, "week", "weeks", "week", "weeks", "w", "week", "weeks");
|
||||||
|
public static final TimeUnit DAY = new TimeUnit(MILLIS_PER_DAY, "day", "days", "day", "days", "d", "day", "days");
|
||||||
|
public static final TimeUnit HOUR = new TimeUnit(MILLIS_PER_HOUR, "hour", "hours", "h", "h", "h", "hs", "hour", "hours");
|
||||||
|
public static final TimeUnit MINUTE = new TimeUnit(MILLIS_PER_MINUTE, "minute", "minutes", "min", "min", "m", "min", "mins", "minute", "minutes");
|
||||||
|
public static final TimeUnit SECOND = new TimeUnit(MILLIS_PER_SECOND, "second", "seconds", "s", "s", "s", "sec", "secs", "second", "seconds");
|
||||||
|
public static final TimeUnit MILLISECOND = new TimeUnit(MILLIS_PER_MILLISECOND, "millisecond", "milliseconds", "ms", "ms", "millis", "millisec", "millisecs", "millisecond", "milliseconds", "ms", "msec", "msecs", "msecond", "mseconds");
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// REGISTRY
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static final TreeSet<TimeUnit> all = new TreeSet<TimeUnit>();
|
||||||
|
public static TreeSet<TimeUnit> getAll() { return new TreeSet<TimeUnit>(all); }
|
||||||
|
|
||||||
|
public static TimeUnit get(String timeUnitString)
|
||||||
|
{
|
||||||
|
if (timeUnitString == null) return null;
|
||||||
|
String timeUnitStringLowerCase = timeUnitString.toLowerCase();
|
||||||
|
for(TimeUnit timeUnit : all)
|
||||||
|
{
|
||||||
|
for (String alias : timeUnit.aliases)
|
||||||
|
{
|
||||||
|
if (alias.equals(timeUnitStringLowerCase))
|
||||||
|
{
|
||||||
|
return timeUnit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean register(TimeUnit timeUnit)
|
||||||
|
{
|
||||||
|
return all.add(timeUnit);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
register(YEAR);
|
||||||
|
register(MONTH);
|
||||||
|
register(WEEK);
|
||||||
|
register(DAY);
|
||||||
|
register(HOUR);
|
||||||
|
register(MINUTE);
|
||||||
|
register(SECOND);
|
||||||
|
register(MILLISECOND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public final long millis;
|
||||||
|
public final String singularName;
|
||||||
|
public final String pluralName;
|
||||||
|
public final String singularUnit;
|
||||||
|
public final String pluralUnit;
|
||||||
|
public final Collection<String> aliases;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private TimeUnit(long millis, String singularName, String pluralName, String singularUnit, String pluralUnit, String... aliases)
|
||||||
|
{
|
||||||
|
this.millis = millis;
|
||||||
|
this.singularName = singularName;
|
||||||
|
this.pluralName = pluralName;
|
||||||
|
this.singularUnit = singularUnit;
|
||||||
|
this.pluralUnit = pluralUnit;
|
||||||
|
this.aliases = new ArrayList<String>(Arrays.asList(aliases));
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// UTIL
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public String getUnitString(long amount)
|
||||||
|
{
|
||||||
|
if (amount == 1) return this.singularUnit;
|
||||||
|
return this.pluralUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNameString(long amount)
|
||||||
|
{
|
||||||
|
if (amount == 1) return this.singularName;
|
||||||
|
return this.pluralName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// BASIC
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return this.singularName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(TimeUnit that)
|
||||||
|
{
|
||||||
|
return Long.valueOf(this.millis).compareTo(that.millis) * -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final boolean equals(Object other)
|
||||||
|
{
|
||||||
|
if (! (other instanceof TimeUnit)) return false;
|
||||||
|
return this.millis == ((TimeUnit)other).millis;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user