tcr/java/src/game/command/EntityListParser.java

91 lines
2.8 KiB
Java
Raw Normal View History

2025-03-25 17:02:41 +01:00
package game.command;
import java.util.List;
2025-03-25 23:10:40 +01:00
import java.util.Set;
2025-03-25 17:02:41 +01:00
import game.collect.Lists;
2025-03-25 23:10:40 +01:00
import game.collect.Sets;
2025-03-25 17:02:41 +01:00
import game.entity.Entity;
import game.entity.types.EntityLiving;
import game.init.EntityRegistry;
import game.network.Player;
2025-03-25 17:02:41 +01:00
import game.world.WorldServer;
public class EntityListParser extends EntityParser {
public EntityListParser(String name, boolean useSender, boolean livingOnly) {
super(name, useSender, livingOnly);
}
2025-03-25 23:10:40 +01:00
public Object parse(CommandEnvironment env, String input) {
2025-03-25 17:02:41 +01:00
if(input.equals("**")) {
List<Entity> list = Lists.newArrayList();
for(WorldServer world : env.getServer().getWorlds()) {
if(this.livingOnly) {
for(Entity ent : world.getEntities()) {
if(ent instanceof EntityLiving)
list.add(ent);
}
}
else {
list.addAll(world.getEntities());
}
}
if(list.isEmpty())
2025-03-25 23:10:40 +01:00
throw new RunException(this.livingOnly ? "Keine lebendigen Objekte gefunden" : "Keine Objekte gefunden");
2025-03-25 17:02:41 +01:00
return list;
}
else if(input.equals("*")) {
List<Entity> list = Lists.newArrayList();
for(Player plr : env.getServer().getPlayers()) {
2025-03-25 17:02:41 +01:00
if(plr.getEntity() != null)
list.add(plr.getEntity());
}
if(list.isEmpty())
2025-03-25 23:10:40 +01:00
throw new RunException("Keine Spieler gefunden");
2025-03-25 17:02:41 +01:00
return list;
}
2025-03-25 23:10:40 +01:00
Set<Entity> set = Sets.newHashSet();
for(String tok : input.split(",", -1)) {
Class<? extends Entity> clazz = EntityRegistry.getEntityClass(tok);
if(clazz != null) {
if(this.livingOnly && !EntityLiving.class.isAssignableFrom(clazz))
throw new RunException("Objekttyp %s ist nicht lebendig", EntityRegistry.getEntityName(EntityRegistry.getEntityString(clazz)));
for(WorldServer world : env.getServer().getWorlds()) {
for(Entity ent : world.getEntities()) {
if(clazz.isAssignableFrom(ent.getClass()))
set.add(ent);
}
2025-03-25 17:02:41 +01:00
}
}
2025-03-25 23:10:40 +01:00
else {
set.add((Entity)super.parse(env, tok));
}
2025-03-25 17:02:41 +01:00
}
2025-03-25 23:10:40 +01:00
if(set.isEmpty())
throw new RunException("Keine Objekte gefunden");
return Lists.newArrayList(set);
2025-03-25 17:02:41 +01:00
}
2025-03-25 23:10:40 +01:00
public Object getDefault(CommandEnvironment env) {
2025-03-25 17:02:41 +01:00
Entity entity = (Entity)super.getDefault(env);
return entity == null ? null : Lists.newArrayList(entity);
}
2025-03-25 23:10:40 +01:00
public String[] getCompletions(CommandEnvironment env) {
2025-03-25 17:02:41 +01:00
Entity target = env.getExecutor().getPointedEntity();
List<String> comp = target == null || (this.livingOnly && !(target instanceof EntityLiving)) ? Lists.newArrayList() : Lists.newArrayList("#" + target.getId());
comp.addAll(env.getServer().getAllUsernames());
comp.add("*");
for(Class<? extends Entity> clazz : EntityRegistry.getAllClasses()) {
if(!this.livingOnly || EntityLiving.class.isAssignableFrom(clazz))
comp.add(EntityRegistry.getEntityString(clazz));
}
comp.add("**");
return comp.toArray(new String[comp.size()]);
}
public Class<?> getTypeClass() {
return List.class;
}
}