pokemon-cmd/Potion.java
EpicKnarvik97 8860f39f2c Rewrote some methods as non-static.
Functions for getting potions, pokeballs and pokemon are now in non-static classes.
This will make it easier to manage other npc trainers in the future.
2017-11-27 20:48:24 +01:00

106 lines
2.8 KiB
Java

import java.util.ArrayList;
public class Potion {
public static enum Potions { POTION, SUPERPOTION, HYPERPOTION, MAXPOTION, REVIVE }
private String name;
private String description;
private Potions type;
private boolean alive;
private int amount;
public Potion(String name, String description, int amount, Potions type) {
this.type = type;
this.name = name;
this.description = description;
this.alive = true;
this.amount = amount;
}
public Potion(String name, String description, int amount, Potions type, boolean alive) {
this.type = Potions.valueOf(name.toUpperCase().replace(" ", ""));
this.name = name;
this.description = description;
this.alive = alive;
this.amount = amount;
}
public String toString() {
return String.format("(%d) %s: %s", this.amount, this.name, this.description);
}
public String saveString() {
return String.format("%s;%s;%d;%b", this.name, this.description, this.amount, this.alive);
}
public int getAmount() {
return this.amount;
}
public String getName() {
return this.name;
}
/** Checks if an item should be used on alive or fainted pokemon. */
public boolean needsAlive() {
return alive;
}
/**
* Spends an item and does something based on the type of item.
* @param target Which pokemon should the item be used on.
* @return True if nothing went wrong. False otherwise.
*/
public boolean use(Pokemon target) {
if (this.amount > 0) {
switch (this.type) {
case POTION:
return potion(target, 20);
case SUPERPOTION:
return potion(target, 50);
case HYPERPOTION:
return potion(target, 200);
case MAXPOTION:
return potion(target, -1);
case REVIVE:
if (!target.isConscious()) {
this.amount--;
target.revive();
System.out.printf("%s was revived.%n", target.getName());
return true;
} else {
System.out.println("You can't revive a conscious pokemon.");
return false;
}
default:
System.out.printf("Invalid item %s%n", name);
return false;
}
} else {
System.out.println("No cheating!");
return false;
}
}
/**
* Checks if a pokemon is able to, and in need of a potion. If it is, heal it.
* @param target The pokemon to heal.
* @param amount The amount to heal the pokemon.
* @return True if nothing went wrong. False otherwise.
*/
private boolean potion(Pokemon target, int amount) {
if (target.isConscious()) {
if (target.isDamaged()) {
this.amount--;
int healed = target.heal(amount);
System.out.printf("%s was healed for %d HP and now has %d HP.%n", target.getName(), healed, target.getHP());
return true;
} else {
System.out.printf("%s has not taken damage, and does not require a potion.%n", target.getName());
return false;
}
} else {
System.out.println("You can't heal a fainted pokemon.");
return false;
}
}
}