command completion

This commit is contained in:
Sen 2025-03-17 18:21:41 +01:00
parent 0839beb98e
commit a8f6af2b37
11 changed files with 400 additions and 347 deletions

View file

@ -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);
}
// }