public void doCommandWith(AdventureCommand c, AdventureEngine e, AdventureWindow w) throws DoNotUnderstandException { String key = myDirectObjectCommands.get(c.getVerb()); if (key != null && key.equals("use") && myIndirectObjectCommands.contains(key) && ((Target) c.getDirectObject()).getUsable() && myUseListIO.containsKey(((Target) c.getDirectObject()).getName())) { String[] effects = myUseListIO.get(((Target) c.getDirectObject()).getName()); w.println(effects[0]); ((Target) c.getIndirectObject()).setUsable(true); ((Target) c.getDirectObject()).setUsable(false); e.removeFromPlayerInventory(c.getDirectObject()); ((Location) e.getPlayerLocation()).updateDescription(effects[1]); if (myDirectObjectCommands.containsKey("use")) { boolean canBe = myIndirectObjectCommands.contains(key); if (canBe && key.equals("examine")) { new ExamineStrategy().doCommand(c, e, w); } else if (canBe && key.equals("take")) { new TakeStrategy().doCommand(c, e, w); } else if (canBe && key.equals("drop")) { new DropStrategy().doCommand(c, e, w); } else if (canBe && key.equals("damage")) { new DamageStrategy().doCommand(c, e, w); } } } else { w.println("You might want to pick that up first.\n"); } }