Hallöchen 
Ich habe eine ItemBuilder und eine SkullBuilder Klasse. Eigentlich arbeiten beide Klassen vernünftig. Jetzt habe ich nur zwei mal den IllegalAccessError Fehler bekommen. Vielleicht kann mir kurz einer auf die Sprünge helfen, weil ich gar nicht verstehe, was falsch läuft. IllegalAccessError bedeutet ja, wenn ich zum Beispiel bei einem for-Loop über einem Array ein Element löschen möchte. Macht ja dann auch Sinn. In diesem SkullBuilder Fall wüsste ich aber nicht, wieso er die i Variable nicht accessen darf.
Hier wäre mal mein Code in Kurzform. Wenn da jemand mal einen kurzen Blick drauf werfen könnte, um mir einen Hint in die richtige Richtung zu geben, wäre ich sehr dankbar! Bin sehr willig, da was neues zu lernen und Fehler in Zukunft zu vermeiden
Dann der Skullbuilder
Und mein Fehler:
Die Verwendung des Skullbuilders sieht so aus:
SkullBuilder Zeile 40 ist in der überschriebenen loadMeta die Zeile skullMeta = (SkullMeta) i.getItemMeta();
SkullBuilder Zeile 31 ist dann der Aufruf dieser Methode zu Beginn von withSkullOwner(UUID uuid)
Im PlayerPreprocessEvent wird das GUI geöffnet, in dem der Kopf liegt.
Ich habe eine ItemBuilder und eine SkullBuilder Klasse. Eigentlich arbeiten beide Klassen vernünftig. Jetzt habe ich nur zwei mal den IllegalAccessError Fehler bekommen. Vielleicht kann mir kurz einer auf die Sprünge helfen, weil ich gar nicht verstehe, was falsch läuft. IllegalAccessError bedeutet ja, wenn ich zum Beispiel bei einem for-Loop über einem Array ein Element löschen möchte. Macht ja dann auch Sinn. In diesem SkullBuilder Fall wüsste ich aber nicht, wieso er die i Variable nicht accessen darf.
Hier wäre mal mein Code in Kurzform. Wenn da jemand mal einen kurzen Blick drauf werfen könnte, um mir einen Hint in die richtige Richtung zu geben, wäre ich sehr dankbar! Bin sehr willig, da was neues zu lernen und Fehler in Zukunft zu vermeiden
Hier der ItemBuilder gekürzt:
public class ItemBuilder {
ItemStack i;
ItemMeta meta;
public ItemBuilder(ItemStack i) {
this.i = i;
}
public ItemBuilder(Material m) {
i = new ItemStack(m);
}
//methoden um den ItemStack zu bearbeiten wie public ItemBuilder withAmount(int amount)
public ItemStack get() {
return i;
}
protected void loadMeta() {
meta = i.getItemMeta();
}
}
Dann der Skullbuilder
Java:
public class SkullBuilder extends ItemBuilder {
SkullMeta skullMeta;
public SkullBuilder() {
super(Material.PLAYER_HEAD);
}
public SkullBuilder withSkullOwner(UUID uuid) {
loadMeta();
skullMeta.setOwningPlayer(Bukkit.getOfflinePlayer(uuid));
i.setItemMeta(skullMeta);
return this;
}
@Override
protected void loadMeta() {
super.loadMeta();
skullMeta = (SkullMeta) i.getItemMeta();
}
}
Und mein Fehler:
[11:52:29 ERROR]: Could not pass event PlayerCommandPreprocessEvent to BasisSkyblock v1.0.0
java.lang.IllegalAccessError: class main.de.bossascrew.core.paper.inventory.SkullBuilder tried to access field main.de.bossascrew.core.paper.inventory.ItemBuilder.i (main.de.bossascrew.core.paper.inventory.SkullBuilder is in unnamed module of loader org.bukkit.plugin.java.PluginClassLoader @31c1bcda; main.de.bossascrew.core.paper.inventory.ItemBuilder is in unnamed module of loader org.bukkit.plugin.java.PluginClassLoader @71b045fd)
at main.de.bossascrew.core.paper.inventory.SkullBuilder.loadMeta(SkullBuilder.java:40) ~[?:?]
at main.de.bossascrew.core.paper.inventory.SkullBuilder.withSkullOwner(SkullBuilder.java
1) ~[?:?]
java.lang.IllegalAccessError: class main.de.bossascrew.core.paper.inventory.SkullBuilder tried to access field main.de.bossascrew.core.paper.inventory.ItemBuilder.i (main.de.bossascrew.core.paper.inventory.SkullBuilder is in unnamed module of loader org.bukkit.plugin.java.PluginClassLoader @31c1bcda; main.de.bossascrew.core.paper.inventory.ItemBuilder is in unnamed module of loader org.bukkit.plugin.java.PluginClassLoader @71b045fd)
at main.de.bossascrew.core.paper.inventory.SkullBuilder.loadMeta(SkullBuilder.java:40) ~[?:?]
at main.de.bossascrew.core.paper.inventory.SkullBuilder.withSkullOwner(SkullBuilder.java
Die Verwendung des Skullbuilders sieht so aus:
Java:
ItemStack it = new SkullBuilder().withSkullOwner(uuids.get(i)).withDisplayName("§f§n"+Bukkit.getOfflinePlayer(uuids.get(i)).getName())
.withLore("§7Dieser Spieler ist: " + Rank + (isOwner ? "\n\n§7Inselmitglied verwalten" : "")).get();
SkullBuilder Zeile 40 ist in der überschriebenen loadMeta die Zeile skullMeta = (SkullMeta) i.getItemMeta();
SkullBuilder Zeile 31 ist dann der Aufruf dieser Methode zu Beginn von withSkullOwner(UUID uuid)
Im PlayerPreprocessEvent wird das GUI geöffnet, in dem der Kopf liegt.