package admincommands; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import com.aionemu.gameserver.model.gameobjects.Creature; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.templates.zone.ZoneType; import com.aionemu.gameserver.utils.chathandlers.AdminCommand; import com.aionemu.gameserver.world.zone.ZoneInstance; import com.aionemu.gameserver.world.zone.ZoneName; /** * @author ATracer */ public class Zone extends AdminCommand { public Zone() { super("zone"); // @formatter:off setSyntaxInfo( "[zone name] - Shows info about your target's current zone(s) (default: all zones, optional: filtered by given zone name).", " - Refreshes your zones." ); // @formatter:on } @Override public void execute(Player admin, String... params) { if (params.length > 1) { sendInfo(admin); return; } if (params.length == 1 && "refresh".equalsIgnoreCase(params[0])) { admin.revalidateZones(); return; } Creature target = admin.getTarget() instanceof Creature creature ? creature : admin; String zoneNameParam = params.length == 0 ? null : params[0]; List zones = findZones(target, zoneNameParam); String zoneTypes = Arrays.stream(ZoneType.values()).filter(target::isInsideZoneType).map(ZoneType::name).collect(Collectors.joining(", ")); if (!zoneTypes.isEmpty()) sendInfo(admin, target.getName() + "'s zone types: " + zoneTypes); if (zones.isEmpty()) { sendInfo(admin, target.getName() + " is not in " + (zoneNameParam == null ? "any zone" : zoneNameParam) + '.'); } else { sendInfo(admin, target.getName() + "'s " + (zones.size() == 1 ? "zone" : "zones") + ':'); for (ZoneInstance zone : zones) { sendInfo(admin, zone.getAreaTemplate().getZoneName().name()); sendInfo(admin, "Fly: " + zone.canFly() + "; Glide: " + zone.canGlide()); sendInfo(admin, "Ride: " + zone.canRide() + "; Fly-ride: " + zone.canFlyRide()); sendInfo(admin, "Kisk: " + zone.canPutKisk() + "; Recall: " + zone.canRecall()); sendInfo(admin, "Same race duels: " + zone.isSameRaceDuelsAllowed() + "; Other race duels: " + zone.isOtherRaceDuelsAllowed()); sendInfo(admin, "PvP: " + zone.isPvpAllowed()); sendInfo(admin, "canReturnBattle: " + zone.canReturnToBattle()); } } } private List findZones(Creature creature, String zoneNameFilter) { List zones = creature.findZones(); if (zoneNameFilter != null) { ZoneName zoneName = ZoneName.get(zoneNameFilter); if (zoneName == ZoneName.NONE) throw new IllegalArgumentException("Invalid zone name."); zones = zones.stream().filter(zone -> zone.getZoneTemplate().getName() == zoneName).toList(); } return zones; } }