Questa è più una domanda sulla struttura che sulla codifica. Quindi ho una classe di nome Pianeta e tutti i pianeti hanno i loro modificatori per esempio: è riproducibile? Damageable? ecc. Ho già una classe base per il pianeta, ma non so come lo farò in modo scalabile visto che ho bisogno di verificare se qualche pianeta ha un determinato modificatore.
Classe BasePlanet:
public class BasePlanet {
private String name;
private String[] about;
private long entranceTax;
private boolean locked, pvp;
private int minRank;
private World planetWorld;
private Location spawn;
private Material icon;
public BasePlanet() {
}
public BasePlanet(String name, int minRank, long entranceTax,
boolean pvp, boolean locked,
Material icon, String... about) {
this.name = name;
this.about = about;
this.minRank = minRank;
this.entranceTax = entranceTax;
this.locked = locked;
this.icon = icon;
this.pvp = pvp;
this.planetWorld.setPVP(pvp);
}
... Getters and Setters
Implementazione di BasePlanet
public class Mars extends BasePlanet{
public Mars() {
super("Mars", 0, 0,
true,
false, Material.RED_SANDSTONE,
"Este planeta contém pedras preciosas",
"e itens especiais que nenhum outro planeta tem,",
"ao menos que alguém tenha comercializado até",
"este pequeno e cheio de surpresas, planeta vermelho."
);
}
}
Risolto Dal momento che avevo bisogno di tutti i modificatori per avere un nome e un tipo ho attraversato un modo più semplice e ho appena creato una classe in cui conteneva le 2 proprietà (nome e tipo) e ciascun modificatore è stato esteso da quella classe.
Classe modificatore:
public abstract class Modifier {
private String name;
private ModifierType type;
public Modifier(String name, ModifierType type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ModifierType getType() {
return type;
}
public void setType(ModifierType type) {
this.type = type;
}
public abstract void apply(Player player);
}
Modificatore di gravità (esempio):
import org.bukkit.entity.Player;
public class Gravity extends Modifier {
private int gravity;
public Gravity() {
super("Gravity", ModifierType.ITEM_NEEDED);
}
public void apply(Player player){
//TODO: apply gravity
}
}
Per la classe planet ho appena aggiunto una nuova proprietà per memorizzare tutti i modificatori che devono essere inclusi nel pianeta
private List<Modifier> modifiers;