command completion
This commit is contained in:
parent
0839beb98e
commit
a8f6af2b37
11 changed files with 400 additions and 347 deletions
|
@ -1628,7 +1628,7 @@ public class NetHandlerPlayServer extends NetHandler implements ICrafting
|
|||
}
|
||||
|
||||
private boolean setVar(String line) {
|
||||
if(!this.isAdmin() || !line.startsWith("#"))
|
||||
if(!this.isAdmin())
|
||||
return false;
|
||||
if(line.length() < 2) {
|
||||
for(Entry<String, Config.Value> entry : Config.VARS.entrySet()) {
|
||||
|
@ -1650,7 +1650,7 @@ public class NetHandlerPlayServer extends NetHandler implements ICrafting
|
|||
this.addFeed(TextColor.GREEN + "SVARs insgesamt registriert: %d", Config.VARS.size());
|
||||
return true;
|
||||
}
|
||||
line = line.substring(1).trim();
|
||||
line = line.trim();
|
||||
String[] args = /* line.isEmpty() ? new String[0] : */ line.split(" ", -1);
|
||||
if(args.length == 1) {
|
||||
// case 0:
|
||||
|
@ -1838,114 +1838,120 @@ public class NetHandlerPlayServer extends NetHandler implements ICrafting
|
|||
}
|
||||
|
||||
private boolean teleport(String line) {
|
||||
if((!Config.teleportAllowed && !this.isAdmin()) || !line.startsWith("/"))
|
||||
if(!Config.teleportAllowed && !this.isAdmin())
|
||||
return false;
|
||||
line = line.substring(1).trim();
|
||||
line = line.trim();
|
||||
String[] argv = line.split(" ", -1);
|
||||
if(line.isEmpty() || argv.length == 0 || argv.length == 2) {
|
||||
this.addFeed(TextColor.DRED + "Spieler, @Warp, *Dimension oder X Y Z [Dimension]");
|
||||
return true;
|
||||
}
|
||||
if(argv.length != 1) {
|
||||
Double ax = parseCoordinate(argv[0], true);
|
||||
// if(line.isEmpty() || argv.length == 0 || argv.length == 2) {
|
||||
// this.addFeed(TextColor.DRED + "+Spieler, @Warp, *Dimension oder X Y Z [Dimension]");
|
||||
// return true;
|
||||
// }
|
||||
String tgt = argv[0];
|
||||
if(tgt.equals("#")) {
|
||||
if(argv.length < 4) {
|
||||
this.addFeed(TextColor.DRED + "# X Y Z [Dimension]");
|
||||
return true;
|
||||
}
|
||||
Double ax = parseCoordinate(argv[1], true);
|
||||
if(ax == null)
|
||||
return true;
|
||||
Double ay = parseCoordinate(argv[1], false);
|
||||
Double ay = parseCoordinate(argv[2], false);
|
||||
if(ay == null)
|
||||
return true;
|
||||
Double az = parseCoordinate(argv[2], true);
|
||||
Double az = parseCoordinate(argv[3], true);
|
||||
if(az == null)
|
||||
return true;
|
||||
int dimension = this.entity.worldObj.dimension.getDimensionId();
|
||||
if(argv.length > 3) {
|
||||
if(argv.length > 4) {
|
||||
WorldServer world;
|
||||
try {
|
||||
world = this.server.getWorld(Integer.parseInt(argv[3]));
|
||||
world = this.server.getWorld(Integer.parseInt(argv[4]));
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
world = this.server.getWorld(argv[3]);
|
||||
world = this.server.getWorld(argv[4]);
|
||||
}
|
||||
if(world == null) {
|
||||
this.addFeed(TextColor.DRED + "Dimension '%s' existiert nicht", argv[3]);
|
||||
this.addFeed(TextColor.DRED + "Dimension '%s' existiert nicht", argv[4]);
|
||||
return true;
|
||||
}
|
||||
dimension = world.dimension.getDimensionId();
|
||||
}
|
||||
this.entity.teleport(ax, ay, az, this.entity.rotYaw, this.entity.rotPitch, dimension);
|
||||
}
|
||||
else {
|
||||
String tgt = argv[0];
|
||||
if(tgt.startsWith("@")) {
|
||||
tgt = tgt.substring(1);
|
||||
if(tgt.equals("spawn")) {
|
||||
WorldServer world = this.server.getWorld(Config.spawnDim);
|
||||
world = world == null ? this.server.getSpace() : world;
|
||||
int y = Config.spawnY;
|
||||
while(world.getState(new BlockPos(Config.spawnX, y, Config.spawnZ)).getBlock().getMaterial().blocksMovement() && y < 511)
|
||||
y++;
|
||||
this.entity.teleport(Config.spawnX + 0.5d, (double)y, Config.spawnZ + 0.5d,
|
||||
Config.spawnYaw, Config.spawnPitch, world.dimension.getDimensionId());
|
||||
}
|
||||
else {
|
||||
Position pos = this.server.getWarps().get(tgt);
|
||||
if(pos == null) {
|
||||
this.addFeed(TextColor.DRED + "Warp '%s' existiert nicht", tgt);
|
||||
return true;
|
||||
}
|
||||
if(this.server.getWorld(pos.dim) == null) {
|
||||
this.addFeed(TextColor.DRED + "Warp '%s' hat kein Level (%s)", tgt, pos.dim);
|
||||
return true;
|
||||
}
|
||||
this.entity.teleport(pos);
|
||||
}
|
||||
}
|
||||
else if(tgt.startsWith("*")) {
|
||||
tgt = tgt.substring(1);
|
||||
WorldServer world;
|
||||
try {
|
||||
world = this.server.getWorld(Integer.parseInt(tgt));
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
world = this.server.getWorld(tgt);
|
||||
}
|
||||
if(world == null) {
|
||||
this.addFeed(TextColor.DRED + "Dimension '%s' existiert nicht", tgt);
|
||||
return true;
|
||||
}
|
||||
// int dimension = world.dimension.getDimensionId();
|
||||
// int dimension = parseDimension(sender, tgt);
|
||||
BlockPos pos = this.entity.getPosition();
|
||||
// WorldServer world = Server.getServer().getWorld(dimension);
|
||||
pos = pos.getY() < 0 ? new BlockPos(pos.getX(), 0, pos.getZ()) : pos;
|
||||
if(world.getState(pos).getBlock().getMaterial().blocksMovement() || world.getState(pos).getBlock().getMaterial().isLiquid()) {
|
||||
while((world.getState(pos).getBlock().getMaterial().blocksMovement() || world.getState(pos).getBlock().getMaterial().isLiquid()) && pos.getY() < 511)
|
||||
pos = pos.up();
|
||||
}
|
||||
else {
|
||||
while(!(world.getState(pos).getBlock().getMaterial().blocksMovement() || world.getState(pos).getBlock().getMaterial().isLiquid()) && pos.getY() > 0)
|
||||
pos = pos.down();
|
||||
pos = pos.up();
|
||||
}
|
||||
this.entity.teleport(pos, world.dimension.getDimensionId());
|
||||
if(tgt.startsWith("@")) {
|
||||
tgt = tgt.substring(1);
|
||||
if(tgt.equals("spawn")) {
|
||||
WorldServer world = this.server.getWorld(Config.spawnDim);
|
||||
world = world == null ? this.server.getSpace() : world;
|
||||
int y = Config.spawnY;
|
||||
while(world.getState(new BlockPos(Config.spawnX, y, Config.spawnZ)).getBlock().getMaterial().blocksMovement() && y < 511)
|
||||
y++;
|
||||
this.entity.teleport(Config.spawnX + 0.5d, (double)y, Config.spawnZ + 0.5d,
|
||||
Config.spawnYaw, Config.spawnPitch, world.dimension.getDimensionId());
|
||||
}
|
||||
else {
|
||||
NetHandlerPlayServer conn = this.server.getPlayer(tgt);
|
||||
if(conn == null) {
|
||||
Position pos = this.server.getOfflinePosition(tgt);
|
||||
if(pos == null) {
|
||||
this.addFeed(TextColor.DRED + "Spieler '%s' konnte nicht gefunden werden", tgt);
|
||||
return true;
|
||||
}
|
||||
this.entity.teleport(pos);
|
||||
Position pos = this.server.getWarps().get(tgt);
|
||||
if(pos == null) {
|
||||
this.addFeed(TextColor.DRED + "Warp '%s' existiert nicht", tgt);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
EntityNPC dest = conn.getEntity();
|
||||
if(dest != null)
|
||||
this.entity.teleport(dest.posX, dest.posY, dest.posZ, dest.rotYaw, dest.rotPitch, dest.worldObj.dimension.getDimensionId());
|
||||
if(this.server.getWorld(pos.dim) == null) {
|
||||
this.addFeed(TextColor.DRED + "Warp '%s' hat kein Level (%s)", tgt, pos.dim);
|
||||
return true;
|
||||
}
|
||||
this.entity.teleport(pos);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
else if(tgt.startsWith("*")) {
|
||||
tgt = tgt.substring(1);
|
||||
WorldServer world;
|
||||
try {
|
||||
world = this.server.getWorld(Integer.parseInt(tgt));
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
world = this.server.getWorld(tgt);
|
||||
}
|
||||
if(world == null) {
|
||||
this.addFeed(TextColor.DRED + "Dimension '%s' existiert nicht", tgt);
|
||||
return true;
|
||||
}
|
||||
// int dimension = world.dimension.getDimensionId();
|
||||
// int dimension = parseDimension(sender, tgt);
|
||||
BlockPos pos = this.entity.getPosition();
|
||||
// WorldServer world = Server.getServer().getWorld(dimension);
|
||||
pos = pos.getY() < 0 ? new BlockPos(pos.getX(), 0, pos.getZ()) : pos;
|
||||
if(world.getState(pos).getBlock().getMaterial().blocksMovement() || world.getState(pos).getBlock().getMaterial().isLiquid()) {
|
||||
while((world.getState(pos).getBlock().getMaterial().blocksMovement() || world.getState(pos).getBlock().getMaterial().isLiquid()) && pos.getY() < 511)
|
||||
pos = pos.up();
|
||||
}
|
||||
else {
|
||||
while(!(world.getState(pos).getBlock().getMaterial().blocksMovement() || world.getState(pos).getBlock().getMaterial().isLiquid()) && pos.getY() > 0)
|
||||
pos = pos.down();
|
||||
pos = pos.up();
|
||||
}
|
||||
this.entity.teleport(pos, world.dimension.getDimensionId());
|
||||
return true;
|
||||
}
|
||||
else if(tgt.startsWith("+")) {
|
||||
tgt = tgt.substring(1);
|
||||
NetHandlerPlayServer conn = this.server.getPlayer(tgt);
|
||||
if(conn == null) {
|
||||
Position pos = this.server.getOfflinePosition(tgt);
|
||||
if(pos == null) {
|
||||
this.addFeed(TextColor.DRED + "Spieler '%s' konnte nicht gefunden werden", tgt);
|
||||
return true;
|
||||
}
|
||||
this.entity.teleport(pos);
|
||||
}
|
||||
else {
|
||||
EntityNPC dest = conn.getEntity();
|
||||
if(dest != null)
|
||||
this.entity.teleport(dest.posX, dest.posY, dest.posZ, dest.rotYaw, dest.rotPitch, dest.worldObj.dimension.getDimensionId());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void processMessage(CPacketMessage packetIn)
|
||||
|
@ -1959,11 +1965,16 @@ public class NetHandlerPlayServer extends NetHandler implements ICrafting
|
|||
throw new IllegalArgumentException("Ungültige Zeichen in Nachricht");
|
||||
}
|
||||
switch(packetIn.getType()) {
|
||||
case COMMAND:
|
||||
if(!this.teleport(msg) && !this.setVar(msg) && !this.setAdmin(msg))
|
||||
this.addFeed(TextColor.RED + "Befehl wurde nicht gefunden");
|
||||
break;
|
||||
|
||||
case CHAT:
|
||||
if(!this.teleport(msg) && !this.sendPlayer(msg) && !this.setVar(msg) && !this.setAdmin(msg))
|
||||
if(!this.sendPlayer(msg))
|
||||
this.server.sendPacket(new SPacketMessage(String.format("%s %s", this.entity.getColoredName(TextColor.LGRAY), msg)));
|
||||
break;
|
||||
|
||||
|
||||
case DISPLAY:
|
||||
if(msg.isEmpty() || !isValidNick(msg) || msg.length() > MAX_NICK_LENGTH)
|
||||
throw new IllegalArgumentException("Ungültiger Anzeigename");
|
||||
|
@ -2891,16 +2902,20 @@ public class NetHandlerPlayServer extends NetHandler implements ICrafting
|
|||
}
|
||||
}
|
||||
|
||||
private List<String> getWarpList() {
|
||||
List<String> warps = Lists.newArrayList(this.server.getUsers());
|
||||
warps.add("@spawn");
|
||||
for(String warp : this.server.getWarps().keySet()) {
|
||||
warps.add("@" + warp);
|
||||
private Iterable<String> getWarpList(char pre) {
|
||||
switch(pre) {
|
||||
case '+':
|
||||
return Lists.newArrayList(this.server.getUsers());
|
||||
case '@':
|
||||
List<String> warps = Lists.newArrayList("spawn");
|
||||
for(String warp : this.server.getWarps().keySet()) {
|
||||
warps.add(warp);
|
||||
}
|
||||
return warps;
|
||||
case '*':
|
||||
return UniverseRegistry.getWorldNames();
|
||||
}
|
||||
for(String dim : UniverseRegistry.getWorldNames()) {
|
||||
warps.add("*" + dim);
|
||||
}
|
||||
return warps;
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
|
||||
private static List<String> getVarList() {
|
||||
|
@ -2933,15 +2948,14 @@ public class NetHandlerPlayServer extends NetHandler implements ICrafting
|
|||
// if(list == null) {
|
||||
// list = Lists.<String>newArrayList();
|
||||
String s = packetIn.getMessage();
|
||||
char pre = s.startsWith("@") || (this.isAdmin() && (s.startsWith("#") || s.startsWith("!"))) || ((Config.teleportAllowed || this.isAdmin()) && s.startsWith("/")) ? s.charAt(0) : 0;
|
||||
char pre = s.startsWith("#") || s.startsWith("!") || s.startsWith("+") || s.startsWith("*") || s.startsWith("@") ? s.charAt(0) : 0;
|
||||
s = pre == 0 ? s : s.substring(1);
|
||||
String[] argv = s.split(" ", -1);
|
||||
s = argv[argv.length - 1];
|
||||
Iterable<String> res = pre == '#' ?
|
||||
(argv.length == 1 ? getVarList() : (argv.length == 2 ? (argv[0].equals("time") ? Lists.newArrayList("day", "night", "noon", "midnight", "sunrise", "sunset") : getVarCompletion(argv[0])) : Lists.newArrayList())) : (pre == '/' ? (argv.length == 4 ? UniverseRegistry.getWorldNames() : (argv.length == 1 ? this.getWarpList() : Lists.newArrayList())) : this.server.getAllUsernames());
|
||||
Iterable<String> res = pre == '#' && (Config.teleportAllowed || this.isAdmin()) ? (argv.length == 5 ? UniverseRegistry.getWorldNames() : Lists.newArrayList()) : ((pre == '+' || pre == '*' || pre == '@') && (Config.teleportAllowed || this.isAdmin()) ? (argv.length == 1 ? this.getWarpList(pre) : Lists.newArrayList()) : (pre == '!' && this.isAdmin() ? this.server.getAllUsernames() : ((this.isAdmin() ? (argv.length == 1 ? getVarList() : (argv.length == 2 ? (argv[0].equals("time") ? Lists.newArrayList("day", "night", "noon", "midnight", "sunrise", "sunset") : getVarCompletion(argv[0])) : Lists.newArrayList())) : Lists.newArrayList()))));
|
||||
for(String s1 : res) {
|
||||
if(s1.regionMatches(true, 0, s, 0, s.length()))
|
||||
list.add((argv.length == 1 ? pre : "") + s1);
|
||||
list.add((argv.length == 1 && pre != 0 ? pre : "") + s1);
|
||||
}
|
||||
// }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue