public boolean okMessage(final Environmental myHost, final CMMsg msg) { if (!super.okMessage(myHost, msg)) return false; if (msg.amITarget(this)) { MOB mob = msg.source(); switch (msg.targetMinor()) { case CMMsg.TYP_DRINK: if ((mob.isMine(this)) || (phyStats().weight() > 1000) || (!CMLib.flags().isGettable(this))) { if (!containsDrink()) { mob.tell(name() + " is empty."); return false; } if ((liquidType() == RawMaterial.RESOURCE_SALTWATER) || (liquidType() == RawMaterial.RESOURCE_LAMPOIL)) { mob.tell( "You don't want to be drinking " + RawMaterial.CODES.NAME(liquidType()).toLowerCase() + "."); return false; } return true; } mob.tell("You don't have that."); return false; case CMMsg.TYP_FILL: if ((liquidRemaining() >= amountOfLiquidHeld) && (liquidHeld() < 500000)) { mob.tell(name() + " is full."); return false; } if ((msg.tool() != null) && (msg.tool() != msg.target()) && (msg.tool() instanceof Drink)) { Drink thePuddle = (Drink) msg.tool(); if (!thePuddle.containsDrink()) { mob.tell(thePuddle.name() + " is empty."); return false; } if ((liquidRemaining() > 0) && (liquidType() != thePuddle.liquidType())) { mob.tell( "There is still some " + RawMaterial.CODES.NAME(liquidType()).toLowerCase() + " left in " + name() + ". You must empty it before you can fill it with " + RawMaterial.CODES.NAME(thePuddle.liquidType()).toLowerCase() + "."); return false; } return true; } mob.tell("You can't fill " + name() + " from that."); return false; default: break; } } return true; }
public void executeMsg(final Environmental myHost, final CMMsg msg) { if (msg.source().riding() == this) { CMLib.commands().handleHygenicMessage(msg, 0, PlayerStats.HYGIENE_WATERCLEAN); } if (msg.amITarget(this)) { MOB mob = msg.source(); switch (msg.targetMinor()) { case CMMsg.TYP_DRINK: amountOfLiquidRemaining -= amountOfThirstQuenched; boolean thirsty = mob.curState().getThirst() <= 0; boolean full = !mob.curState() .adjThirst(amountOfThirstQuenched, mob.maxState().maxThirst(mob.baseWeight())); if (thirsty) mob.tell("You are no longer thirsty."); else if (full) mob.tell("You have drunk all you can."); if (disappearsAfterDrinking) { destroy(); return; } break; case CMMsg.TYP_FILL: if ((msg.tool() != null) && (msg.tool() instanceof Drink)) { Drink thePuddle = (Drink) msg.tool(); int amountToTake = amountTakenToFillMe(thePuddle); thePuddle.setLiquidRemaining(thePuddle.liquidRemaining() - amountToTake); if (amountOfLiquidRemaining <= 0) setLiquidType(thePuddle.liquidType()); if (((long) amountOfLiquidRemaining + (long) amountToTake) <= (long) Integer.MAX_VALUE) amountOfLiquidRemaining += amountToTake; if (amountOfLiquidRemaining > amountOfLiquidHeld) amountOfLiquidRemaining = amountOfLiquidHeld; if ((amountOfLiquidRemaining <= 0) && (disappearsAfterDrinking)) { destroy(); return; } } break; default: break; } } super.executeMsg(myHost, msg); }