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

85 lines
2.8 KiB
Java
Raw Normal View History

2025-03-25 17:02:41 +01:00
package game.command;
import java.util.List;
import game.collect.Lists;
import game.entity.Entity;
import game.entity.types.EntityLiving;
import game.init.EntityRegistry;
import game.network.NetHandlerPlayServer;
import game.world.WorldServer;
public class EntityListParser extends EntityParser {
public EntityListParser(String name, boolean useSender, boolean livingOnly) {
super(name, useSender, livingOnly);
}
public Object parse(ScriptEnvironment env, String input) {
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())
throw new ScriptException(this.livingOnly ? "Keine lebendigen Objekte gefunden" : "Keine Objekte gefunden");
return list;
}
else if(input.equals("*")) {
List<Entity> list = Lists.newArrayList();
for(NetHandlerPlayServer plr : env.getServer().getPlayers()) {
if(plr.getEntity() != null)
list.add(plr.getEntity());
}
if(list.isEmpty())
throw new ScriptException("Keine Spieler gefunden");
return list;
}
Class<? extends Entity> clazz = EntityRegistry.getEntityClass(input);
if(clazz != null) {
if(this.livingOnly && !EntityLiving.class.isAssignableFrom(clazz))
throw new ScriptException("Objekttyp %s ist nicht lebendig", EntityRegistry.getEntityName(EntityRegistry.getEntityString(clazz)));
List<Entity> list = Lists.newArrayList();
for(WorldServer world : env.getServer().getWorlds()) {
for(Entity ent : world.getEntities()) {
if(clazz.isAssignableFrom(ent.getClass()))
list.add(ent);
}
}
if(list.isEmpty())
throw new ScriptException("Kein Objekt des Typs %s gefunden", EntityRegistry.getEntityName(EntityRegistry.getEntityString(clazz)));
return list;
}
return Lists.newArrayList((Entity)super.parse(env, input));
}
public Object getDefault(ScriptEnvironment env) {
Entity entity = (Entity)super.getDefault(env);
return entity == null ? null : Lists.newArrayList(entity);
}
public String[] getCompletions(ScriptEnvironment env) {
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;
}
}