Paarthurnax
Minecrafter
Hey,
Ich programmiere gerade an einem Plugin, und wie im Titel schon steht habe ich ein Problem.
Ich werde als aller erstes meine Klassen (die wichtigen) hier posten, und danach näher erläutern:
Dann wird der folgende Konstruktor aufgerufen:
PS: Der Konstruktor ist für manche wahrscheinlich etwas "unaufgeräumt" wird aber später geändert.
Der wiederum diesen Konstruktor aufruft:
Und dieser ruft zu guter letzt den "BaseBlock" Konstruktor auf:
So, mein Problem ist wie im Titel schon steht, dass der BaseBlock Konstruktor zweimal aufgerufen wird. (Durch Debug Nachrichten heraus gefunden.)
Also: Wenn ich den ersten Block setzte, wird in einer extra File die blockIds um eins erhöht. Alles gut, bis jetzt. Doch dann setze ich den zweiten Block und in der File wird "blockIds" diesmal um zwei erhöht. (Was nicht sein sollte.) Dass, sie um zwei erhöht wird, ist die folge davon dass der "BaseBlock" Konstruktor zweimal aufgerufen wird.
Hier noch die Methode wie ich eine neue ID erzeuge:
Ich kann mir das irgendwie nicht erklären.
Vielleicht weiß einer von euch woran es liegt und ggf die Lösung.
Sollte noch etwas vom Code her gebraucht werden, einfach schreiben. Werde es dann hinzufügen.
MfG
EncryptDev
EDIT: Sollte es im falschen Unter Forum sein, bitte ich es darum zu verschieben
Ich programmiere gerade an einem Plugin, und wie im Titel schon steht habe ich ein Problem.
Ich werde als aller erstes meine Klassen (die wichtigen) hier posten, und danach näher erläutern:
Code:
public static GeneratorBlock getNewGeneratorBlock(BlockList bl, UUID owner, Location location) {
switch(bl) {
case AIR_GENERATOR:
return new AirGenerator(owner, location, AIR_GENERATOR.getMaterial());
case WATER_GENERATOR:
return new WaterGenerator(owner, location, WATER_GENERATOR.getMaterial());
}
return null;
}
Dann wird der folgende Konstruktor aufgerufen:
Code:
public WaterGenerator(UUID owner, Location location, Material material) {
super(owner, location, material, Constants.WATER_GENERATOR_CAPACITY, 0,20, 10, 20,
new BlockInformation(location, new String[]{BlockList.WATER_GENERATOR.getBlockItemName(),
"§5Owner: §e" + Bukkit.getOfflinePlayer(owner).getName(), Constants.ENERGY_FORMAT.replace("{EnergyCount}",
"0" + Constants.ENERGY_NAME + "/" + Constants.WATER_GENERATOR_CAPACITY + Constants.ENERGY_NAME),
MessageTranslator.getTranslatedItemMessageLore("water_generator").get(Constants.JSON_DATA_LINE_RUNNING)}));
this.down = location.clone().subtract(0, 1, 0).getBlock();
}
Der wiederum diesen Konstruktor aufruft:
Code:
public GeneratorBlock(UUID owner, Location location, Material material, double maxEnergyCapacity, double generateEnergyAmount, double energyPerPeriod, double output, int period, BlockInformation blockInformation) {
super(owner, location, material, period, blockInformation);
this.maxEnergyCapacity = maxEnergyCapacity;
this.generateEnergyAmount = generateEnergyAmount;
this.energyPerPeriod = energyPerPeriod;
this.output = output;
this.energyConnections = new ArrayList<>();
}
Und dieser ruft zu guter letzt den "BaseBlock" Konstruktor auf:
Code:
public BaseBlock(UUID owner, Location location, Material material, int period, BlockInformation blockInformation) {
this.owner = owner;
this.location = location;
this.material = material;
this.location.getBlock().setType(material);
this.bukkitBlock = this.location.getBlock();
this.rightDirection();
this.blockInformation = blockInformation;
this.pause = false;
this.period = period;
this.id = StaticUtil.getNewId();
this.bukkitBlock.setMetadata(META_DATA_BLOCK_OWNER, new FixedMetadataValue(MultiMechanicsPlugin.getInstance(), owner));
this.bukkitBlock.setMetadata(META_DATA_BLOCK_ID, new FixedMetadataValue(MultiMechanicsPlugin.getInstance(), id));
this.initData();
this.runnable = new BukkitRunnable() {
@Override
public void run() {
execute();
}
};
}
So, mein Problem ist wie im Titel schon steht, dass der BaseBlock Konstruktor zweimal aufgerufen wird. (Durch Debug Nachrichten heraus gefunden.)
Also: Wenn ich den ersten Block setzte, wird in einer extra File die blockIds um eins erhöht. Alles gut, bis jetzt. Doch dann setze ich den zweiten Block und in der File wird "blockIds" diesmal um zwei erhöht. (Was nicht sein sollte.) Dass, sie um zwei erhöht wird, ist die folge davon dass der "BaseBlock" Konstruktor zweimal aufgerufen wird.
Hier noch die Methode wie ich eine neue ID erzeuge:
Code:
public static int getNewId() {
if (!ID_FILE.contains("blockIds")) {
ID_FILE.set("blockIds", 1);
return 1;
}
int id = ID_FILE.get("blockIds", int.class);
id++;
ID_FILE.set("blockIds", id);
return id;
}
Ich kann mir das irgendwie nicht erklären.
Vielleicht weiß einer von euch woran es liegt und ggf die Lösung.
Sollte noch etwas vom Code her gebraucht werden, einfach schreiben. Werde es dann hinzufügen.
MfG
EncryptDev
EDIT: Sollte es im falschen Unter Forum sein, bitte ich es darum zu verschieben