Added /wentity admin command

This commit is contained in:
LemADEC 2016-02-07 15:44:35 +01:00
parent bce770c28f
commit cc1b537d46
2 changed files with 122 additions and 0 deletions

View file

@ -92,6 +92,7 @@ import cr0s.warpdrive.block.passive.ItemBlockDecorative;
import cr0s.warpdrive.block.weapon.BlockLaserCamera; import cr0s.warpdrive.block.weapon.BlockLaserCamera;
import cr0s.warpdrive.block.weapon.TileEntityLaserCamera; import cr0s.warpdrive.block.weapon.TileEntityLaserCamera;
import cr0s.warpdrive.command.CommandDebug; import cr0s.warpdrive.command.CommandDebug;
import cr0s.warpdrive.command.CommandEntity;
import cr0s.warpdrive.command.CommandGenerate; import cr0s.warpdrive.command.CommandGenerate;
import cr0s.warpdrive.command.CommandInvisible; import cr0s.warpdrive.command.CommandInvisible;
import cr0s.warpdrive.command.CommandJumpgates; import cr0s.warpdrive.command.CommandJumpgates;
@ -487,6 +488,7 @@ public class WarpDrive implements LoadingCallback {
event.registerServerCommand(new CommandInvisible()); event.registerServerCommand(new CommandInvisible());
event.registerServerCommand(new CommandJumpgates()); event.registerServerCommand(new CommandJumpgates());
event.registerServerCommand(new CommandDebug()); event.registerServerCommand(new CommandDebug());
event.registerServerCommand(new CommandEntity());
} }
public Ticket registerChunkLoadTE(TileEntityAbstractChunkLoading tileEntity, boolean refreshLoading) { public Ticket registerChunkLoadTE(TileEntityAbstractChunkLoading tileEntity, boolean refreshLoading) {

View file

@ -0,0 +1,120 @@
package cr0s.warpdrive.command;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map.Entry;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.AxisAlignedBB;
import cr0s.warpdrive.WarpDrive;
/*
* /wentity <radius> <filter> <kill?>
*/
public class CommandEntity extends CommandBase {
@Override
public String getCommandName() {
return "wentity";
}
@Override
public int getRequiredPermissionLevel() {
return 2;
}
@Override
public String getCommandUsage(ICommandSender par1ICommandSender) {
return "/" + getCommandName() + " <radius> <filter> <kill?>"
+ "\nradius: - or <= 0 to check all loaded in current world, 1+ blocks around player"
+ "\nfilter: * to get all, anything else is a case insensitive string"
+ "\nkill: yes/y/1 to kill, anything else is ignored";
}
@Override
public void processCommand(ICommandSender icommandsender, String[] params) {
EntityPlayerMP player = (EntityPlayerMP) icommandsender;
if (params.length > 3) {
WarpDrive.addChatMessage(player, getCommandUsage(icommandsender));
return;
}
int radius = 20;
String filter = "";
boolean kill = false;
try {
if (params.length > 0) {
String par = params[0].toLowerCase();
if (par.equals("-") || par.equals("world") || par.equals("global") || par.equals("*")) {
radius = -1;
} else {
radius = Integer.parseInt(par);
}
}
if (params.length > 1) {
if (!params[1].equalsIgnoreCase("*")) {
filter = params[1];
}
}
if (params.length > 2) {
String par = params[2].toLowerCase();
kill = par.equals("y") || par.equals("yes") || par.equals("1");
}
} catch (Exception exception) {
exception.printStackTrace();
WarpDrive.addChatMessage(player, getCommandUsage(icommandsender));
return;
}
WarpDrive.logger.info("/" + getCommandName() + " " + radius + " '*" + filter + "*' " + kill);
Collection<Object> entities;
if (radius <= 0) {
entities = new ArrayList<Object>();
entities.addAll(player.worldObj.loadedEntityList);
} else {
entities = player.worldObj.getEntitiesWithinAABBExcludingEntity(player, AxisAlignedBB.getBoundingBox(
Math.floor(player.posX ), Math.floor(player.posY ), Math.floor(player.posZ ),
Math.floor(player.posX + 1), Math.floor(player.posY + 1), Math.floor(player.posZ + 1)).expand(radius, radius, radius));
}
HashMap<String, Integer> counts = new HashMap<String, Integer>(entities.size());
for (Object object : entities) {
if (object instanceof Entity) {
String name = object.getClass().getTypeName();
if (filter.isEmpty() || name.contains(filter)) {
if (!counts.containsKey(name)) {
counts.put(name, 1);
} else {
counts.put(name, counts.get(name) + 1);
}
if (kill && !((Entity) object).invulnerable) {
((Entity) object).setDead();
}
}
}
}
if (counts.isEmpty()) {
WarpDrive.addChatMessage(player, "No matching entities found in range");
return;
}
WarpDrive.addChatMessage(player, "&6Matching entities within range:");
if (counts.size() < 10) {
for (Entry<String, Integer> entry : counts.entrySet()) {
WarpDrive.addChatMessage(player, entry.getValue() + " x " + entry.getKey());
}
} else {
String message = "";
for (Entry<String, Integer> entry : counts.entrySet()) {
if (!message.isEmpty()) {
message += ", ";
}
message += entry.getValue() + " x " + entry.getKey();
}
WarpDrive.addChatMessage(player, message);
}
}
}