package net.sourceforge.pain.logic.event.console.command;
import net.sourceforge.pain.data.type.*;
import net.sourceforge.pain.logic.event.console.*;
import net.sourceforge.pain.logic.fn.*;
import net.sourceforge.pain.logic.fn.util.*;
public final class Give extends CommandHandler {
public boolean isAccessible() {
return super.isAccessible() && player.is(Creature.class);
}
public void processCommand() throws Exception {
if (commandParams == null || commandParams.length() == 0) {
MessageOutFn.outln(console, "Give what to whom?");
return;
}
String[] tokens = Utils.WHITESPACE_SPLIT_PATTERN.split(commandParams.toLowerCase());
if (tokens.length == 1 || (tokens.length == 2 && "to".equals(tokens[1]))) {
MessageOutFn.outln(console, "Give to whom?");
return;
}
String objName = tokens[0];
String targetName = tokens.length > 2 && "to".equals(tokens[1]) ? tokens[2] : tokens[1];
// look for obj
Creature creature = (Creature) player.getRole(Creature.class);
final Located plocated = player.asLocated();
Interactive iObj = SpaceFindFn.findByPrefix(plocated, creature.getInventory(), objName);
Physical physObj = iObj != null ? (Physical) iObj.getRole(Physical.class) : null;
if (physObj == null) {
if (iObj != null) {
MessageOutFn.outln(console, "You failed.");
} else {
MessageOutFn.outln(console, "You do not have that item.");
}
return;
}
// look for target
Interactive iTarget = SpaceFindFn.findByPrefix(plocated, targetName);
Creature cTarget = iTarget != null ? (Creature) iTarget.getRole(Creature.class) : null;
if (cTarget == null) {
if (iTarget != null) {
MessageOutFn.outln(console, "You failed.");
} else {
MessageOutFn.outln(console, "They aren't here.");
}
return;
}
if (cTarget.sameObjectAs(player)) {
MessageOutFn.outln(console, "You failed.");
return;
}
GiveFn.give(creature, physObj, cTarget);
}
public void showHelp() {
MessageOutFn.outln(console, command.name + ": use this command to give items to other persons");
}
}