Remove that old stuff and add in some new herp.
This commit is contained in:
parent
9068618e8c
commit
dba940f337
@ -21,7 +21,6 @@ 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.store.Coll;
|
import com.massivecraft.mcore5.store.Coll;
|
||||||
import com.massivecraft.mcore5.store.PlayerColl;
|
|
||||||
import com.massivecraft.mcore5.store.SenderColl;
|
import com.massivecraft.mcore5.store.SenderColl;
|
||||||
import com.massivecraft.mcore5.util.SmokeUtil;
|
import com.massivecraft.mcore5.util.SmokeUtil;
|
||||||
|
|
||||||
@ -81,7 +80,6 @@ public class InternalListener implements Listener
|
|||||||
String id = event.getPlayer().getName();
|
String id = event.getPlayer().getName();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
PlayerColl.setPlayerRefferences(id, player);
|
|
||||||
SenderColl.setSenderRefferences(id, player);
|
SenderColl.setSenderRefferences(id, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,7 +91,6 @@ public class InternalListener implements Listener
|
|||||||
String id = event.getPlayer().getName();
|
String id = event.getPlayer().getName();
|
||||||
Player player = null;
|
Player player = null;
|
||||||
|
|
||||||
PlayerColl.setPlayerRefferences(id, player);
|
|
||||||
SenderColl.setSenderRefferences(id, player);
|
SenderColl.setSenderRefferences(id, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +100,6 @@ public class InternalListener implements Listener
|
|||||||
String id = event.getPlayer().getName();
|
String id = event.getPlayer().getName();
|
||||||
Player player = null;
|
Player player = null;
|
||||||
|
|
||||||
PlayerColl.setPlayerRefferences(id, player);
|
|
||||||
SenderColl.setSenderRefferences(id, player);
|
SenderColl.setSenderRefferences(id, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,8 +201,8 @@ public class InternalListener implements Listener
|
|||||||
String playerName = player.getName();
|
String playerName = player.getName();
|
||||||
for (Coll<?, ?> coll : Coll.instances)
|
for (Coll<?, ?> coll : Coll.instances)
|
||||||
{
|
{
|
||||||
if (!(coll instanceof PlayerColl)) continue;
|
if (!(coll instanceof SenderColl)) continue;
|
||||||
PlayerColl<?> pcoll = (PlayerColl<?>)coll;
|
SenderColl<?> pcoll = (SenderColl<?>)coll;
|
||||||
pcoll.syncId(playerName);
|
pcoll.syncId(playerName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,20 +5,20 @@ import org.bukkit.command.CommandSender;
|
|||||||
public abstract class ARAbstractPrimitive<T> implements ArgReader<T>
|
public abstract class ARAbstractPrimitive<T> implements ArgReader<T>
|
||||||
{
|
{
|
||||||
public abstract String typename();
|
public abstract String typename();
|
||||||
public abstract T convert(String str) throws Exception;
|
public abstract T convert(String arg) throws Exception;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArgResult<T> read(String str, CommandSender sender)
|
public ArgResult<T> read(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
ArgResult<T> result = new ArgResult<T>();
|
ArgResult<T> result = new ArgResult<T>();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
result.setResult(this.convert(str));
|
result.setResult(this.convert(arg));
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
result.getErrors().add("<b>Invalid "+this.typename()+" \"<h>"+str+"\"<b>.");
|
result.getErrors().add("<b>Invalid "+this.typename()+" \"<h>"+arg+"\"<b>.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -14,13 +14,13 @@ public abstract class ARAbstractSelect<T> implements ArgReader<T>
|
|||||||
public boolean canList(CommandSender sender) { return true; }
|
public boolean canList(CommandSender sender) { return true; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArgResult<T> read(String str, CommandSender sender)
|
public ArgResult<T> read(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
ArgResult<T> result = new ArgResult<T>(this.select(str, sender));
|
ArgResult<T> result = new ArgResult<T>(this.select(arg, sender));
|
||||||
|
|
||||||
if (!result.hasResult())
|
if (!result.hasResult())
|
||||||
{
|
{
|
||||||
result.getErrors().add("<b>No "+this.typename()+" matches \"<h>"+str+"<b>\".");
|
result.getErrors().add("<b>No "+this.typename()+" matches \"<h>"+arg+"<b>\".");
|
||||||
if (this.canList(sender))
|
if (this.canList(sender))
|
||||||
{
|
{
|
||||||
Collection<String> names = this.altNames(sender);
|
Collection<String> names = this.altNames(sender);
|
||||||
|
@ -1,95 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.util.Txt;
|
|
||||||
|
|
||||||
public abstract class ARAbstractStringMatch implements ArgReader<String>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// IMPLEMENTATION
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ArgResult<String> read(String str, CommandSender sender)
|
|
||||||
{
|
|
||||||
ArgResult<String> result = new ArgResult<String>();
|
|
||||||
|
|
||||||
// Find all matches
|
|
||||||
Set<String> matches = new HashSet<String>();
|
|
||||||
String perfectMatch = null;
|
|
||||||
|
|
||||||
outerloop:
|
|
||||||
for (Collection<String> altColl : this.altColls())
|
|
||||||
{
|
|
||||||
for (String alt : altColl)
|
|
||||||
{
|
|
||||||
Integer matchDistance = this.matches(str, alt);
|
|
||||||
if (matchDistance == null) continue;
|
|
||||||
if (matchDistance == 0)
|
|
||||||
{
|
|
||||||
perfectMatch = alt;
|
|
||||||
break outerloop;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
matches.add(alt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set result and errors
|
|
||||||
if (perfectMatch != null)
|
|
||||||
{
|
|
||||||
result.setResult(perfectMatch);
|
|
||||||
}
|
|
||||||
else if (matches.size() == 1)
|
|
||||||
{
|
|
||||||
result.setResult(matches.iterator().next());
|
|
||||||
}
|
|
||||||
else if (matches.size() > 1)
|
|
||||||
{
|
|
||||||
result.getErrors().add("<b>"+Txt.upperCaseFirst(this.typename())+" matching \"<h>"+str+"<b>\" is ambigious.");
|
|
||||||
result.getErrors().add("<b>Did you mean "+Txt.implodeCommaAndDot(matches, "<h>%s", "<b>, ", " <b>or ", "<b>?"));
|
|
||||||
}
|
|
||||||
else if (matches.size() == 0)
|
|
||||||
{
|
|
||||||
result.getErrors().add("<b>No "+this.typename()+" matching \"<h>"+str+"<b>\".");
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// ABSTRACT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
// return null if no match
|
|
||||||
// return 0 if perfect match
|
|
||||||
// return >0 to declare distance from perfect match
|
|
||||||
public abstract Integer matches(String arg, String alt);
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// FIELDS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
protected String typename;
|
|
||||||
public String typename() { return this.typename; }
|
|
||||||
|
|
||||||
protected Collection<Collection<String>> altColls;
|
|
||||||
public Collection<Collection<String>> altColls() { return this.altColls; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public ARAbstractStringMatch(String typename, Collection<Collection<String>> altColls)
|
|
||||||
{
|
|
||||||
this.typename = typename;
|
|
||||||
this.altColls = altColls;
|
|
||||||
}
|
|
||||||
}
|
|
@ -17,9 +17,9 @@ public class ARAspect extends ARAbstractSelect<Aspect>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Aspect select(String str, CommandSender sender)
|
public Aspect select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
return AspectColl.i.get(str);
|
return AspectColl.i.get(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -9,10 +9,10 @@ public class ARBoolean extends ARAbstractPrimitive<Boolean>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean convert(String str) throws Exception
|
public Boolean convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
str = str.toLowerCase();
|
arg = arg.toLowerCase();
|
||||||
if (str.startsWith("y") || str.startsWith("t") || str.startsWith("on") || str.startsWith("+") || str.startsWith("1"))
|
if (arg.startsWith("y") || arg.startsWith("t") || arg.startsWith("on") || arg.startsWith("+") || arg.startsWith("1"))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,9 @@ public class ARByte extends ARAbstractPrimitive<Byte>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Byte convert(String str) throws Exception
|
public Byte convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
return Byte.parseByte(str);
|
return Byte.parseByte(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -16,18 +16,18 @@ public class ARChatColor extends ARAbstractSelect<ChatColor>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChatColor select(String str, CommandSender sender)
|
public ChatColor select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
ChatColor ret = null;
|
ChatColor ret = null;
|
||||||
|
|
||||||
str = getToCompare(str);
|
arg = getToCompare(arg);
|
||||||
|
|
||||||
for (ChatColor cc : ChatColor.values())
|
for (ChatColor cc : ChatColor.values())
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
String ccstr = getToCompare(cc.name());
|
String ccstr = getToCompare(cc.name());
|
||||||
if ( ! ccstr.equals(str)) continue;
|
if ( ! ccstr.equals(arg)) continue;
|
||||||
ret = cc;
|
ret = cc;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -15,9 +15,9 @@ public class ARDate extends ARAbstractPrimitive<Date>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date convert(String str) throws Exception
|
public Date convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
return df.parse(str);
|
return df.parse(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -16,25 +16,25 @@ public class ARDifficulty extends ARAbstractSelect<Difficulty>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Difficulty select(String str, CommandSender sender)
|
public Difficulty select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
Difficulty ret = null;
|
Difficulty ret = null;
|
||||||
|
|
||||||
str = str.toLowerCase();
|
arg = arg.toLowerCase();
|
||||||
|
|
||||||
if (str.startsWith("p"))
|
if (arg.startsWith("p"))
|
||||||
{
|
{
|
||||||
ret = Difficulty.PEACEFUL;
|
ret = Difficulty.PEACEFUL;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("e"))
|
else if (arg.startsWith("e"))
|
||||||
{
|
{
|
||||||
ret = Difficulty.EASY;
|
ret = Difficulty.EASY;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("n"))
|
else if (arg.startsWith("n"))
|
||||||
{
|
{
|
||||||
ret = Difficulty.NORMAL;
|
ret = Difficulty.NORMAL;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("h"))
|
else if (arg.startsWith("h"))
|
||||||
{
|
{
|
||||||
ret = Difficulty.HARD;
|
ret = Difficulty.HARD;
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,9 @@ public class ARDouble extends ARAbstractPrimitive<Double>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Double convert(String str) throws Exception
|
public Double convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
return Double.parseDouble(str);
|
return Double.parseDouble(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -16,26 +16,26 @@ public class AREnvironment extends ARAbstractSelect<Environment>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Environment select(String str, CommandSender sender)
|
public Environment select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
Environment ret = null;
|
Environment ret = null;
|
||||||
|
|
||||||
// "THE_END" --> "end"
|
// "THE_END" --> "end"
|
||||||
str = str.toLowerCase();
|
arg = arg.toLowerCase();
|
||||||
str = str.replace("_", "");
|
arg = arg.replace("_", "");
|
||||||
str = str.replace("the", "");
|
arg = arg.replace("the", "");
|
||||||
|
|
||||||
if (str.startsWith("no") || str.startsWith("d"))
|
if (arg.startsWith("no") || arg.startsWith("d"))
|
||||||
{
|
{
|
||||||
// "normal" or "default"
|
// "normal" or "default"
|
||||||
ret = Environment.NORMAL;
|
ret = Environment.NORMAL;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("ne"))
|
else if (arg.startsWith("ne"))
|
||||||
{
|
{
|
||||||
// "nether"
|
// "nether"
|
||||||
ret = Environment.NETHER;
|
ret = Environment.NETHER;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("e"))
|
else if (arg.startsWith("e"))
|
||||||
{
|
{
|
||||||
// "end"
|
// "end"
|
||||||
ret = Environment.THE_END;
|
ret = Environment.THE_END;
|
||||||
|
@ -9,9 +9,9 @@ public class ARFloat extends ARAbstractPrimitive<Float>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Float convert(String str) throws Exception
|
public Float convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
return Float.parseFloat(str);
|
return Float.parseFloat(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -16,21 +16,21 @@ public class ARGameMode extends ARAbstractSelect<GameMode>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GameMode select(String str, CommandSender sender)
|
public GameMode select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
GameMode ret = null;
|
GameMode ret = null;
|
||||||
|
|
||||||
str = str.toLowerCase();
|
arg = arg.toLowerCase();
|
||||||
|
|
||||||
if (str.startsWith("s"))
|
if (arg.startsWith("s"))
|
||||||
{
|
{
|
||||||
ret = GameMode.SURVIVAL;
|
ret = GameMode.SURVIVAL;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("c"))
|
else if (arg.startsWith("c"))
|
||||||
{
|
{
|
||||||
ret = GameMode.CREATIVE;
|
ret = GameMode.CREATIVE;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("a"))
|
else if (arg.startsWith("a"))
|
||||||
{
|
{
|
||||||
ret = GameMode.ADVENTURE;
|
ret = GameMode.ADVENTURE;
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,9 @@ public class ARInteger extends ARAbstractPrimitive<Integer>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer convert(String str) throws Exception
|
public Integer convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
return Integer.parseInt(str);
|
return Integer.parseInt(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -9,9 +9,9 @@ public class ARLong extends ARAbstractPrimitive<Long>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long convert(String str) throws Exception
|
public Long convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
return Long.parseLong(str);
|
return Long.parseLong(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -6,12 +6,12 @@ import org.bukkit.command.CommandSender;
|
|||||||
public class ARMaterial implements ArgReader<Material>
|
public class ARMaterial implements ArgReader<Material>
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public ArgResult<Material> read(String str, CommandSender sender)
|
public ArgResult<Material> read(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
ArgResult<Material> result = new ArgResult<Material>(Material.matchMaterial(str));
|
ArgResult<Material> result = new ArgResult<Material>(Material.matchMaterial(arg));
|
||||||
if (!result.hasResult())
|
if (!result.hasResult())
|
||||||
{
|
{
|
||||||
result.getErrors().add("<b>No material matches <h>"+str+"<b>.");
|
result.getErrors().add("<b>No material matches <h>"+arg+"<b>.");
|
||||||
result.getErrors().add("<i>Suggestion: <aqua>http://www.minecraftwiki.net/wiki/Data_values");
|
result.getErrors().add("<i>Suggestion: <aqua>http://www.minecraftwiki.net/wiki/Data_values");
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -17,9 +17,9 @@ public class ARMultiverse extends ARAbstractSelect<Multiverse>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Multiverse select(String str, CommandSender sender)
|
public Multiverse select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
return MultiverseColl.i.get(str);
|
return MultiverseColl.i.get(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AROnlinePlayerExact implements ArgReader<Player>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public ArgResult<Player> read(String str, CommandSender sender)
|
|
||||||
{
|
|
||||||
ArgResult<Player> result = new ArgResult<Player>();
|
|
||||||
Player player = Bukkit.getServer().getPlayerExact(str);
|
|
||||||
result.setResult(player);
|
|
||||||
|
|
||||||
if (!result.hasResult())
|
|
||||||
{
|
|
||||||
result.getErrors().add("<b>No online player with exact name \"<h>"+str+"<b>\".");
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static AROnlinePlayerExact i = new AROnlinePlayerExact();
|
|
||||||
public static AROnlinePlayerExact get() { return i; }
|
|
||||||
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.util.Txt;
|
|
||||||
|
|
||||||
public class AROnlinePlayerMatch implements ArgReader<Player>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public ArgResult<Player> read(String str, CommandSender sender)
|
|
||||||
{
|
|
||||||
ArgResult<Player> result = new ArgResult<Player>();
|
|
||||||
|
|
||||||
List<Player> players = Bukkit.getServer().matchPlayer(str);
|
|
||||||
if (players.size() == 1)
|
|
||||||
{
|
|
||||||
result.setResult(players.get(0));
|
|
||||||
}
|
|
||||||
else if (players.size() > 1)
|
|
||||||
{
|
|
||||||
List<String> names = new ArrayList<String>();
|
|
||||||
for (Player player : players)
|
|
||||||
{
|
|
||||||
names.add(player.getName());
|
|
||||||
}
|
|
||||||
result.getErrors().add("<b>Online player matching \"<h>"+str+"<b>\" is ambigious.");
|
|
||||||
result.getErrors().add("<b>Did you mean "+Txt.implodeCommaAndDot(names, "<h>%s", "<b>, ", " <b>or ", "<b>?"));
|
|
||||||
}
|
|
||||||
else if (players.size() == 0)
|
|
||||||
{
|
|
||||||
result.getErrors().add("<b>No online player matching \"<h>"+str+"<b>\".");
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// INSTANCE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private static AROnlinePlayerMatch i = new AROnlinePlayerMatch();
|
|
||||||
public static AROnlinePlayerMatch get() { return i; }
|
|
||||||
|
|
||||||
}
|
|
46
src/com/massivecraft/mcore5/cmd/arg/ARPlayer.java
Normal file
46
src/com/massivecraft/mcore5/cmd/arg/ARPlayer.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.store.MixinSenderIdSource;
|
||||||
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public class ARPlayer extends ARSenderIdAbstractPredsource<Player>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static final ARPlayer full = getFull(MixinSenderIdSource.get());
|
||||||
|
public static ARPlayer getFull() { return full; }
|
||||||
|
|
||||||
|
private static final ARPlayer start = getStart(MixinSenderIdSource.get());
|
||||||
|
public static ARPlayer getStart() { return start; }
|
||||||
|
|
||||||
|
public static ARPlayer getFull(SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARPlayer(source, "player", ArgPredictateStringEqualsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ARPlayer getStart(SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARPlayer(source, "player", ArgPredictateStringStartsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ARPlayer(SenderIdSource source, String typename, ArgPredictate<String> argPredictate)
|
||||||
|
{
|
||||||
|
super(source, typename, argPredictate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Player getResultForSenderId(String senderId)
|
||||||
|
{
|
||||||
|
return SenderUtil.getPlayer(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
46
src/com/massivecraft/mcore5/cmd/arg/ARSender.java
Normal file
46
src/com/massivecraft/mcore5/cmd/arg/ARSender.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.store.MixinSenderIdSource;
|
||||||
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
|
public class ARSender extends ARSenderIdAbstractPredsource<CommandSender>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static final ARSender full = getFull(MixinSenderIdSource.get());
|
||||||
|
public static ARSender getFull() { return full; }
|
||||||
|
|
||||||
|
private static final ARSender start = getStart(MixinSenderIdSource.get());
|
||||||
|
public static ARSender getStart() { return start; }
|
||||||
|
|
||||||
|
public static ARSender getFull(SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSender(source, "sender", ArgPredictateStringEqualsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ARSender getStart(SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSender(source, "sender", ArgPredictateStringStartsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ARSender(SenderIdSource source, String typename, ArgPredictate<String> argPredictate)
|
||||||
|
{
|
||||||
|
super(source, typename, argPredictate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandSender getResultForSenderId(String senderId)
|
||||||
|
{
|
||||||
|
return SenderUtil.getSender(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
63
src/com/massivecraft/mcore5/cmd/arg/ARSenderEntity.java
Normal file
63
src/com/massivecraft/mcore5/cmd/arg/ARSenderEntity.java
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
|
import com.massivecraft.mcore5.store.SenderColl;
|
||||||
|
import com.massivecraft.mcore5.store.SenderEntity;
|
||||||
|
|
||||||
|
public class ARSenderEntity<T extends SenderEntity<T>> extends ARSenderIdAbstractPredsource<T>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private final SenderColl<T> coll;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getFullAny(SenderColl<T> coll) { return getFullAny(coll, coll.isCreative() ? coll.getMixinedIdSource() : coll); }
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getStartAny(SenderColl<T> coll) { return getStartAny(coll, coll.isCreative() ? coll.getMixinedIdSource() : coll); }
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getFullOnline(SenderColl<T> coll) { return getFullOnline(coll, coll.isCreative() ? coll.getMixinedIdSource() : coll); }
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getStartOnline(SenderColl<T> coll) { return getStartOnline(coll, coll.isCreative() ? coll.getMixinedIdSource() : coll); }
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getFullOnline(SenderColl<T> coll, SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSenderEntity<T>(coll, source, "player", new ArgPredictateAnd<String>(ArgPredictateStringEqualsLC.get(), ArgPredictateStringIsOnlineSenderId.get()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getStartOnline(SenderColl<T> coll, SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSenderEntity<T>(coll, source, "player", new ArgPredictateAnd<String>(ArgPredictateStringStartsLC.get(), ArgPredictateStringIsOnlineSenderId.get()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getFullAny(SenderColl<T> coll, SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSenderEntity<T>(coll, source, "player", ArgPredictateStringEqualsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends SenderEntity<T>> ARSenderEntity<T> getStartAny(SenderColl<T> coll, SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSenderEntity<T>(coll, source, "player", ArgPredictateStringStartsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ARSenderEntity(SenderColl<T> coll, SenderIdSource source, String typename, ArgPredictate<String> argPredictate)
|
||||||
|
{
|
||||||
|
super(source, typename, argPredictate);
|
||||||
|
this.coll = coll;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T getResultForSenderId(String senderId)
|
||||||
|
{
|
||||||
|
return this.coll.get(senderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
src/com/massivecraft/mcore5/cmd/arg/ARSenderId.java
Normal file
43
src/com/massivecraft/mcore5/cmd/arg/ARSenderId.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.store.MixinSenderIdSource;
|
||||||
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
|
|
||||||
|
public class ARSenderId extends ARSenderIdAbstractPredsource<String>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static final ARSenderId full = getFull(MixinSenderIdSource.get());
|
||||||
|
public static ARSenderId getFull() { return full; }
|
||||||
|
|
||||||
|
private static final ARSenderId start = getStart(MixinSenderIdSource.get());
|
||||||
|
public static ARSenderId getStart() { return start; }
|
||||||
|
|
||||||
|
public static ARSenderId getFull(SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSenderId(source, "player", ArgPredictateStringEqualsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ARSenderId getStart(SenderIdSource source)
|
||||||
|
{
|
||||||
|
return new ARSenderId(source, "player", ArgPredictateStringStartsLC.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ARSenderId(SenderIdSource source, String typename, ArgPredictate<String> argPredictate)
|
||||||
|
{
|
||||||
|
super(source, typename, argPredictate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getResultForSenderId(String senderId)
|
||||||
|
{
|
||||||
|
return senderId;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
69
src/com/massivecraft/mcore5/cmd/arg/ARSenderIdAbstract.java
Normal file
69
src/com/massivecraft/mcore5/cmd/arg/ARSenderIdAbstract.java
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
|
import com.massivecraft.mcore5.util.Txt;
|
||||||
|
|
||||||
|
public abstract class ARSenderIdAbstract<T> implements ArgReader<T>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// ABSTRACT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public abstract String getTypename();
|
||||||
|
|
||||||
|
public abstract T getResultForSenderId(String senderId);
|
||||||
|
|
||||||
|
public abstract Collection<String> getSenderIdsFor(String arg, CommandSender sender);
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArgResult<T> read(String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
ArgResult<T> ret = new ArgResult<T>();
|
||||||
|
|
||||||
|
Collection<String> senderIds = this.getSenderIdsFor(arg, sender);
|
||||||
|
|
||||||
|
if (senderIds.size() == 0)
|
||||||
|
{
|
||||||
|
// No alternatives found
|
||||||
|
ret.setErrors("<b>No "+this.getTypename()+" matches \"<h>"+arg+"<b>\".");
|
||||||
|
}
|
||||||
|
else if (senderIds.size() == 1)
|
||||||
|
{
|
||||||
|
// Only one alternative found
|
||||||
|
String senderId = senderIds.iterator().next();
|
||||||
|
ret.setResult(this.getResultForSenderId(senderId));
|
||||||
|
}
|
||||||
|
else if (senderIds.contains(arg))
|
||||||
|
{
|
||||||
|
// Exact match
|
||||||
|
String senderId = Mixin.tryFix(arg);
|
||||||
|
ret.setResult(this.getResultForSenderId(senderId));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Ambigious!
|
||||||
|
ret.getErrors().add("<b>Online "+this.getTypename()+" matching \"<h>"+arg+"<b>\" is ambigious.");
|
||||||
|
if (senderIds.size() > 10)
|
||||||
|
{
|
||||||
|
// To many to list
|
||||||
|
ret.getErrors().add("<b>Could be any of <h>"+senderIds.size()+" <b>possible alternatives.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// List the alternatives
|
||||||
|
ret.getErrors().add("<b>Did you mean "+Txt.implodeCommaAndDot(senderIds, "<h>%s", "<b>, ", " <b>or ", "<b>?"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.store.SenderIdSource;
|
||||||
|
|
||||||
|
public abstract class ARSenderIdAbstractPredsource<T> extends ARSenderIdAbstract<T>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private final SenderIdSource source;
|
||||||
|
private final String typename;
|
||||||
|
private final ArgPredictate<String> argPredictate;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public ARSenderIdAbstractPredsource(SenderIdSource source, String typename, ArgPredictate<String> argPredictate)
|
||||||
|
{
|
||||||
|
this.source = source;
|
||||||
|
this.typename = typename;
|
||||||
|
this.argPredictate = argPredictate;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTypename()
|
||||||
|
{
|
||||||
|
return this.typename;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> getSenderIdsFor(String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
Collection<String> senderIds = this.source.getSenderIds();
|
||||||
|
arg = arg.toLowerCase();
|
||||||
|
|
||||||
|
Iterator<String> iter = senderIds.iterator();
|
||||||
|
while(iter.hasNext())
|
||||||
|
{
|
||||||
|
String senderId = iter.next();
|
||||||
|
if (this.isSenderIdOk(senderId, arg, sender)) continue;
|
||||||
|
iter.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
return senderIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean isSenderIdOk(String senderId, String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
// If the predictate applies ...
|
||||||
|
if (!this.argPredictate.apply(senderId, arg, sender)) return false;
|
||||||
|
|
||||||
|
// ... and the result is non null ...
|
||||||
|
T result = this.getResultForSenderId(senderId);
|
||||||
|
if (result == null) return false;
|
||||||
|
|
||||||
|
// ... then the senderId is ok.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -9,9 +9,9 @@ public class ARString extends ARAbstractPrimitive<String>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String convert(String str) throws Exception
|
public String convert(String arg) throws Exception
|
||||||
{
|
{
|
||||||
return str;
|
return arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.store.Coll;
|
|
||||||
import com.massivecraft.mcore5.store.Entity;
|
|
||||||
|
|
||||||
public class ARStringEntity<E extends Entity<E, String>> implements ArgReader<E>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// IMPLEMENTATION
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ArgResult<E> read(String str, CommandSender sender)
|
|
||||||
{
|
|
||||||
ArgResult<E> result = new ArgResult<E>();
|
|
||||||
ArgResult<String> innerResult = this.stringReader().read(str, sender);
|
|
||||||
|
|
||||||
if (innerResult.hasResult())
|
|
||||||
{
|
|
||||||
String playerName = innerResult.getResult();
|
|
||||||
E entity = this.coll().get(playerName);
|
|
||||||
result.setResult(entity);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.setErrors(innerResult.getErrors());
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// FIELDS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
protected ArgReader<String> stringReader;
|
|
||||||
public ArgReader<String> stringReader() { return this.stringReader; }
|
|
||||||
|
|
||||||
protected Coll<E, String> coll;
|
|
||||||
public Coll<E, String> coll() { return this.coll; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public ARStringEntity(ArgReader<String> stringReader, Coll<E, String> coll)
|
|
||||||
{
|
|
||||||
this.stringReader = stringReader;
|
|
||||||
this.coll = coll;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
public class ARStringMatchFull extends ARAbstractStringMatch
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// IMPLEMENTATION
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer matches(String arg, String alt)
|
|
||||||
{
|
|
||||||
return alt.equalsIgnoreCase(arg) ? 0 : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public ARStringMatchFull(String typename, Collection<Collection<String>> altColls)
|
|
||||||
{
|
|
||||||
super(typename, altColls);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.cmd.arg;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
public class ARStringMatchStart extends ARAbstractStringMatch
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// IMPLEMENTATION
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer matches(String arg, String alt)
|
|
||||||
{
|
|
||||||
arg = arg.toLowerCase();
|
|
||||||
alt = alt.toLowerCase();
|
|
||||||
if (alt.startsWith(arg))
|
|
||||||
{
|
|
||||||
return alt.length() - arg.length();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public ARStringMatchStart(String typename, Collection<Collection<String>> altColls)
|
|
||||||
{
|
|
||||||
super(typename, altColls);
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,17 +15,17 @@ public class ARUniverse implements ArgReader<String>
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArgResult<String> read(String str, CommandSender sender)
|
public ArgResult<String> read(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
ArgResult<String> result = new ArgResult<String>();
|
ArgResult<String> result = new ArgResult<String>();
|
||||||
|
|
||||||
if (multiverse.containsUniverse(str))
|
if (multiverse.containsUniverse(arg))
|
||||||
{
|
{
|
||||||
result.setResult(str);
|
result.setResult(arg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result.getErrors().add("<b>No universe \"<h>"+str+"<b>\" exists in multiverse <h>"+this.multiverse.getId()+"<b>.");
|
result.getErrors().add("<b>No universe \"<h>"+arg+"<b>\" exists in multiverse <h>"+this.multiverse.getId()+"<b>.");
|
||||||
|
|
||||||
Collection<String> names = new ArrayList<String>(multiverse.getUniverses());
|
Collection<String> names = new ArrayList<String>(multiverse.getUniverses());
|
||||||
result.getErrors().add("<i>Use "+Txt.implodeCommaAndDot(names, "<h>%s", "<i>, ", " <i>or ", "<i>."));
|
result.getErrors().add("<i>Use "+Txt.implodeCommaAndDot(names, "<h>%s", "<i>, ", " <i>or ", "<i>."));
|
||||||
|
@ -16,9 +16,9 @@ public class ARWorld extends ARAbstractSelect<World>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public World select(String str, CommandSender sender)
|
public World select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
return Bukkit.getWorld(str);
|
return Bukkit.getWorld(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,36 +16,36 @@ public class ARWorldType extends ARAbstractSelect<WorldType>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WorldType select(String str, CommandSender sender)
|
public WorldType select(String arg, CommandSender sender)
|
||||||
{
|
{
|
||||||
WorldType ret = null;
|
WorldType ret = null;
|
||||||
|
|
||||||
// "DEFAULT_1_1" --> "11"
|
// "DEFAULT_1_1" --> "11"
|
||||||
// "LARGE_BIOMES" --> "large"
|
// "LARGE_BIOMES" --> "large"
|
||||||
// "Default" --> ""
|
// "Default" --> ""
|
||||||
str = str.toLowerCase();
|
arg = arg.toLowerCase();
|
||||||
str = str.replace("_", "");
|
arg = arg.replace("_", "");
|
||||||
str = str.replace(".", "");
|
arg = arg.replace(".", "");
|
||||||
str = str.replace("normal", "");
|
arg = arg.replace("normal", "");
|
||||||
str = str.replace("default", "");
|
arg = arg.replace("default", "");
|
||||||
str = str.replace("large", "");
|
arg = arg.replace("large", "");
|
||||||
|
|
||||||
if (str.equals(""))
|
if (arg.equals(""))
|
||||||
{
|
{
|
||||||
// "normal" or "default"
|
// "normal" or "default"
|
||||||
ret = WorldType.NORMAL;
|
ret = WorldType.NORMAL;
|
||||||
}
|
}
|
||||||
else if (str.startsWith("flat"))
|
else if (arg.startsWith("flat"))
|
||||||
{
|
{
|
||||||
// "flat"
|
// "flat"
|
||||||
ret = WorldType.FLAT;
|
ret = WorldType.FLAT;
|
||||||
}
|
}
|
||||||
else if (str.contains("11"))
|
else if (arg.contains("11"))
|
||||||
{
|
{
|
||||||
// "VERSION_1_1"
|
// "VERSION_1_1"
|
||||||
ret = WorldType.VERSION_1_1;
|
ret = WorldType.VERSION_1_1;
|
||||||
}
|
}
|
||||||
else if (str.contains("large"))
|
else if (arg.contains("large"))
|
||||||
{
|
{
|
||||||
// "LARGE_BIOMES"
|
// "LARGE_BIOMES"
|
||||||
ret = WorldType.LARGE_BIOMES;
|
ret = WorldType.LARGE_BIOMES;
|
||||||
|
8
src/com/massivecraft/mcore5/cmd/arg/ArgPredictate.java
Normal file
8
src/com/massivecraft/mcore5/cmd/arg/ArgPredictate.java
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public interface ArgPredictate<T>
|
||||||
|
{
|
||||||
|
public boolean apply(T type, String arg, CommandSender sender);
|
||||||
|
}
|
31
src/com/massivecraft/mcore5/cmd/arg/ArgPredictateAnd.java
Normal file
31
src/com/massivecraft/mcore5/cmd/arg/ArgPredictateAnd.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public class ArgPredictateAnd<T> implements ArgPredictate<T>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private final ArgPredictate<T> one;
|
||||||
|
private final ArgPredictate<T> two;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public ArgPredictateAnd(ArgPredictate<T> one, ArgPredictate<T>two)
|
||||||
|
{
|
||||||
|
this.one = one;
|
||||||
|
this.two = two;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(T type, String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
if (!this.one.apply(type, arg, sender)) return false;
|
||||||
|
return this.two.apply(type, arg, sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public class ArgPredictateStringEqualsLC implements ArgPredictate<String>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ArgPredictateStringEqualsLC i = new ArgPredictateStringEqualsLC();
|
||||||
|
public static ArgPredictateStringEqualsLC get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(String string, String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
return string.toLowerCase().equals(arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
|
|
||||||
|
public class ArgPredictateStringIsOnlineSenderId implements ArgPredictate<String>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ArgPredictateStringIsOnlineSenderId i = new ArgPredictateStringIsOnlineSenderId();
|
||||||
|
public static ArgPredictateStringIsOnlineSenderId get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(String string, String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
return Mixin.isOnline(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.massivecraft.mcore5.cmd.arg;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
public class ArgPredictateStringStartsLC implements ArgPredictate<String>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ArgPredictateStringStartsLC i = new ArgPredictateStringStartsLC();
|
||||||
|
public static ArgPredictateStringStartsLC get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(String string, String arg, CommandSender sender)
|
||||||
|
{
|
||||||
|
return string.toLowerCase().startsWith(arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -4,5 +4,5 @@ import org.bukkit.command.CommandSender;
|
|||||||
|
|
||||||
public interface ArgReader<T>
|
public interface ArgReader<T>
|
||||||
{
|
{
|
||||||
public ArgResult<T> read(String str, CommandSender sender);
|
public ArgResult<T> read(String arg, CommandSender sender);
|
||||||
}
|
}
|
26
src/com/massivecraft/mcore5/store/MixinSenderIdSource.java
Normal file
26
src/com/massivecraft/mcore5/store/MixinSenderIdSource.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
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,155 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.store;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.MCore;
|
|
||||||
import com.massivecraft.mcore5.MPlugin;
|
|
||||||
import com.massivecraft.mcore5.Predictate;
|
|
||||||
import com.massivecraft.mcore5.cmd.arg.ARStringEntity;
|
|
||||||
import com.massivecraft.mcore5.cmd.arg.ARStringMatchFull;
|
|
||||||
import com.massivecraft.mcore5.cmd.arg.ARStringMatchStart;
|
|
||||||
import com.massivecraft.mcore5.cmd.arg.ArgReader;
|
|
||||||
import com.massivecraft.mcore5.util.MUtil;
|
|
||||||
import com.massivecraft.mcore5.util.PlayerUtil;
|
|
||||||
|
|
||||||
public class PlayerColl<E extends PlayerEntity<E>> extends Coll<E, String>
|
|
||||||
{
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// FIELDS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
// Note that the lowercasing should be kept at either true or false.
|
|
||||||
protected boolean lowercasing = false;
|
|
||||||
public boolean isLowercasing() { return this.lowercasing; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONSTRUCT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public PlayerColl(Db<?> db, MPlugin mplugin, String name, Class<E> entityClass, boolean creative, boolean lowercasing)
|
|
||||||
{
|
|
||||||
super(db, mplugin, "ai", name, entityClass, String.class, creative);
|
|
||||||
this.lowercasing = lowercasing;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerColl(Db<?> db, MPlugin mplugin, String name, Class<E> entityClass, boolean creative)
|
|
||||||
{
|
|
||||||
this(db, mplugin, name, entityClass, creative, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerColl(Db<?> db, MPlugin mplugin, String name, Class<E> entityClass)
|
|
||||||
{
|
|
||||||
this(db, mplugin, name, entityClass, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerColl(MPlugin mplugin, String name, Class<E> entityClass, boolean creative, boolean lowercasing)
|
|
||||||
{
|
|
||||||
this(MCore.getDb(), mplugin, name, entityClass, creative, lowercasing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerColl(MPlugin mplugin, String name, Class<E> entityClass, boolean creative)
|
|
||||||
{
|
|
||||||
this(MCore.getDb(), mplugin, name, entityClass, creative);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerColl(MPlugin mplugin, String name, Class<E> entityClass)
|
|
||||||
{
|
|
||||||
this(MCore.getDb(), mplugin, name, entityClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// EXTRAS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String fixId(Object oid)
|
|
||||||
{
|
|
||||||
if (oid == null) return null;
|
|
||||||
String ret = MUtil.extract(String.class, "playerName", oid);
|
|
||||||
if (ret == null) return ret;
|
|
||||||
return this.lowercasing ? ret.toLowerCase() : ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<E> getAllOnline()
|
|
||||||
{
|
|
||||||
List<E> ret = new ArrayList<E>();
|
|
||||||
for(Player player : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
E entity = this.get(player.getName());
|
|
||||||
if (entity == null) continue;
|
|
||||||
ret.add(entity);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<E> getAllOffline()
|
|
||||||
{
|
|
||||||
return this.getAll(new Predictate<E>()
|
|
||||||
{
|
|
||||||
public boolean apply(E entity)
|
|
||||||
{
|
|
||||||
return entity.isOffline();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// PLAYER REFFERENCE MANAGEMENT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
protected void setPlayerRefference(String playerName, Player player)
|
|
||||||
{
|
|
||||||
E pentity = this.get(playerName, false);
|
|
||||||
if (pentity == null) return;
|
|
||||||
pentity.player = player;
|
|
||||||
pentity.playerInitiated = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setPlayerRefferences(String playerName, Player player)
|
|
||||||
{
|
|
||||||
for (Coll<?, ?> coll : Coll.instances)
|
|
||||||
{
|
|
||||||
if (!(coll instanceof PlayerColl)) continue;
|
|
||||||
PlayerColl<?> pcoll = (PlayerColl<?>)coll;
|
|
||||||
pcoll.setPlayerRefference(playerName, player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// ARGUMENT READERS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
protected Collection<Collection<String>> forgeAltColls()
|
|
||||||
{
|
|
||||||
Collection<Collection<String>> ret = new ArrayList<Collection<String>>();
|
|
||||||
ret.add(this.getIds());
|
|
||||||
if (this.isCreative()) ret.add(PlayerUtil.getAllVisitorNames());
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArgReader<String> argReaderPlayerNameFull()
|
|
||||||
{
|
|
||||||
return new ARStringMatchFull("player", this.forgeAltColls());
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArgReader<String> argReaderPlayerNameStart()
|
|
||||||
{
|
|
||||||
return new ARStringMatchStart("player", this.forgeAltColls());
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArgReader<E> argReaderPlayerFull()
|
|
||||||
{
|
|
||||||
return new ARStringEntity<E>(this.argReaderPlayerNameFull(), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArgReader<E> argReaderPlayerStart()
|
|
||||||
{
|
|
||||||
return new ARStringEntity<E>(this.argReaderPlayerNameStart(), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,122 +0,0 @@
|
|||||||
package com.massivecraft.mcore5.store;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.GameMode;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.massivecraft.mcore5.util.Txt;
|
|
||||||
|
|
||||||
public abstract class PlayerEntity<E extends PlayerEntity<E>> extends Entity<E, String>
|
|
||||||
{
|
|
||||||
// The Bukkit player reference is initiated here
|
|
||||||
// It's kept updated using the InternalListener
|
|
||||||
protected transient Player player = null;
|
|
||||||
protected transient boolean playerInitiated = false;
|
|
||||||
public Player getPlayer()
|
|
||||||
{
|
|
||||||
if ( ! this.playerInitiated)
|
|
||||||
{
|
|
||||||
this.player = Bukkit.getPlayerExact(this.getId());
|
|
||||||
this.playerInitiated = true;
|
|
||||||
}
|
|
||||||
return this.player;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PlayerColl<E> getColl()
|
|
||||||
{
|
|
||||||
return (PlayerColl<E>) super.getColl();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOnline()
|
|
||||||
{
|
|
||||||
return this.getPlayer() != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isOffline()
|
|
||||||
{
|
|
||||||
return ! isOnline();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*public String getCurrentUniverse()
|
|
||||||
{
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
if (player == null) return null;
|
|
||||||
|
|
||||||
String aspectId = this.getColl().nameAspect();
|
|
||||||
Aspect aspect = Aspect.get(aspectId);
|
|
||||||
|
|
||||||
aspect.
|
|
||||||
|
|
||||||
return USelColl.i.get(aspect).select(player.getWorld().getName());
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
vi ska returna ett universeId
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isInThisUniverse()
|
|
||||||
{
|
|
||||||
String universe = this.getUniverse();
|
|
||||||
if (universe == null) return false;
|
|
||||||
|
|
||||||
String currentUniverse = this.getCurrentUniverse();
|
|
||||||
if (currentUniverse == null) return false;
|
|
||||||
|
|
||||||
return universe.equals(currentUniverse);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CHECKER UTILS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
public boolean isGameMode(GameMode gm, boolean defaultIfOffline)
|
|
||||||
{
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
if (player == null || ! player.isOnline()) return defaultIfOffline;
|
|
||||||
return player.getGameMode() == gm;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// Message Sending Helpers
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public void sendMessage(String msg)
|
|
||||||
{
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
if (player == null) return;
|
|
||||||
player.sendMessage(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendMessage(Collection<String> msgs)
|
|
||||||
{
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
if (player == null) return;
|
|
||||||
for(String msg : msgs)
|
|
||||||
{
|
|
||||||
player.sendMessage(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void msg(String msg)
|
|
||||||
{
|
|
||||||
this.sendMessage(Txt.parse(msg));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void msg(String msg, Object... args)
|
|
||||||
{
|
|
||||||
this.sendMessage(Txt.parse(msg, args));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void msg(Collection<String> msgs)
|
|
||||||
{
|
|
||||||
Player player = this.getPlayer();
|
|
||||||
if (player == null) return;
|
|
||||||
for(String msg : msgs)
|
|
||||||
{
|
|
||||||
player.sendMessage(Txt.parse(msg));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,5 @@
|
|||||||
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.TreeSet;
|
||||||
@ -9,16 +8,10 @@ import org.bukkit.command.CommandSender;
|
|||||||
|
|
||||||
import com.massivecraft.mcore5.MPlugin;
|
import com.massivecraft.mcore5.MPlugin;
|
||||||
import com.massivecraft.mcore5.Predictate;
|
import com.massivecraft.mcore5.Predictate;
|
||||||
import com.massivecraft.mcore5.cmd.arg.ARStringEntity;
|
|
||||||
import com.massivecraft.mcore5.cmd.arg.ARStringMatchFull;
|
|
||||||
import com.massivecraft.mcore5.cmd.arg.ARStringMatchStart;
|
|
||||||
import com.massivecraft.mcore5.cmd.arg.ArgReader;
|
|
||||||
import com.massivecraft.mcore5.mixin.Mixin;
|
import com.massivecraft.mcore5.mixin.Mixin;
|
||||||
import com.massivecraft.mcore5.util.MUtil;
|
import com.massivecraft.mcore5.util.MUtil;
|
||||||
import com.massivecraft.mcore5.util.PlayerUtil;
|
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
|
||||||
|
|
||||||
public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String>
|
public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String> implements SenderIdSource
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONSTANTS
|
// CONSTANTS
|
||||||
@ -38,6 +31,9 @@ public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String>
|
|||||||
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());
|
||||||
|
public SenderIdSource getMixinedIdSource() { return this.mixinedIdSource; }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONSTRUCT
|
// CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -77,6 +73,12 @@ public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String>
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> getSenderIds()
|
||||||
|
{
|
||||||
|
return this.getFixedIds();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String fixId(Object oid)
|
public String fixId(Object oid)
|
||||||
{
|
{
|
||||||
@ -134,36 +136,14 @@ public class SenderColl<E extends SenderEntity<E>> extends Coll<E, String>
|
|||||||
// ARGUMENT READERS
|
// ARGUMENT READERS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
protected Collection<Collection<String>> forgeAltColls()
|
/*public ArgReader<E> getARFullAny()
|
||||||
{
|
{
|
||||||
Collection<Collection<String>> ret = new ArrayList<Collection<String>>();
|
return ARSenderEntity.getFullAny(this);
|
||||||
ret.add(this.getIds());
|
|
||||||
if (this.isCreative())
|
|
||||||
{
|
|
||||||
ret.add(PlayerUtil.getAllVisitorNames());
|
|
||||||
ret.add(SenderUtil.getIdToSender().keySet());
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArgReader<String> argReaderSenderIdFull()
|
public ArgReader<E> getARStartAny()
|
||||||
{
|
{
|
||||||
return new ARStringMatchFull("player", this.forgeAltColls());
|
return ARSenderEntity.getStartAny(this);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
public ArgReader<String> argReaderSenderIdStart()
|
|
||||||
{
|
|
||||||
return new ARStringMatchStart("player", this.forgeAltColls());
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArgReader<E> argReaderEntityFull()
|
|
||||||
{
|
|
||||||
return new ARStringEntity<E>(this.argReaderSenderIdFull(), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArgReader<E> argReaderEntityStart()
|
|
||||||
{
|
|
||||||
return new ARStringEntity<E>(this.argReaderSenderIdStart(), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,15 @@ public abstract class SenderEntity<E extends SenderEntity<E>> extends Entity<E,
|
|||||||
return this.sender;
|
return this.sender;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIXED ID
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public String getFixedId()
|
||||||
|
{
|
||||||
|
return Mixin.tryFix(this.getId());
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDES
|
// OVERRIDES
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -116,12 +125,12 @@ public abstract class SenderEntity<E extends SenderEntity<E>> extends Entity<E,
|
|||||||
|
|
||||||
public boolean isOnline()
|
public boolean isOnline()
|
||||||
{
|
{
|
||||||
return this.getSender() != null;
|
return Mixin.isOnline(this.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOffline()
|
public boolean isOffline()
|
||||||
{
|
{
|
||||||
return ! isOnline();
|
return Mixin.isOffline(this.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// DISPLAY NAME
|
// DISPLAY NAME
|
||||||
|
8
src/com/massivecraft/mcore5/store/SenderIdSource.java
Normal file
8
src/com/massivecraft/mcore5/store/SenderIdSource.java
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package com.massivecraft.mcore5.store;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
public interface SenderIdSource
|
||||||
|
{
|
||||||
|
public Collection<String> getSenderIds();
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.massivecraft.mcore5.store;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
public class SenderIdSourceCombined implements SenderIdSource
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private final List<SenderIdSource> sources;
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public SenderIdSourceCombined(SenderIdSource... sources)
|
||||||
|
{
|
||||||
|
this.sources = new ArrayList<SenderIdSource>(Arrays.asList(sources));
|
||||||
|
}
|
||||||
|
|
||||||
|
public SenderIdSourceCombined(Collection<SenderIdSource> sources)
|
||||||
|
{
|
||||||
|
this.sources = new ArrayList<SenderIdSource>(sources);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> getSenderIds()
|
||||||
|
{
|
||||||
|
TreeSet<String> ret = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
for (SenderIdSource source : this.sources)
|
||||||
|
{
|
||||||
|
ret.addAll(source.getSenderIds());
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -26,7 +26,6 @@ import org.bukkit.event.vehicle.VehicleEvent;
|
|||||||
import org.bukkit.event.vehicle.VehicleExitEvent;
|
import org.bukkit.event.vehicle.VehicleExitEvent;
|
||||||
|
|
||||||
import com.massivecraft.mcore5.PS;
|
import com.massivecraft.mcore5.PS;
|
||||||
import com.massivecraft.mcore5.store.PlayerEntity;
|
|
||||||
import com.massivecraft.mcore5.store.SenderEntity;
|
import com.massivecraft.mcore5.store.SenderEntity;
|
||||||
import com.massivecraft.mcore5.util.SenderUtil;
|
import com.massivecraft.mcore5.util.SenderUtil;
|
||||||
|
|
||||||
@ -97,7 +96,7 @@ public class ExtractorLogic
|
|||||||
if (o == null) return null;
|
if (o == null) return null;
|
||||||
if (o instanceof String) return (String)o;
|
if (o instanceof String) return (String)o;
|
||||||
if (o instanceof SenderEntity) return ((SenderEntity<?>)o).getId();
|
if (o instanceof SenderEntity) return ((SenderEntity<?>)o).getId();
|
||||||
if (o instanceof PlayerEntity) return ((PlayerEntity<?>)o).getId();
|
if (o instanceof SenderEntity) return ((SenderEntity<?>)o).getId();
|
||||||
CommandSender sender = senderFromObject(o);
|
CommandSender sender = senderFromObject(o);
|
||||||
if (sender == null) return null;
|
if (sender == null) return null;
|
||||||
return SenderUtil.getSenderId(sender);
|
return SenderUtil.getSenderId(sender);
|
||||||
|
Loading…
Reference in New Issue
Block a user