• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PlugIn unerwarteter IllegalAccessError

CubBossa

Schafhirte
Registriert
17 Juli 2015
Beiträge
125
Diamanten
369
Minecraft
CubBossa
Hallöchen :D
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 :D

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:31) ~[?:?]

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.
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Nutzt du irgendein Plugin um dein Plugin zur Laufzeit zu entladen und wieder zu laden? Oder nutzt du den reload-Befehl?
Beides könnte unter Umständen zu so einen Problem führen.

Ansonsten solltest du vielleicht den Modifier in ItemBuilder zu protected ändern, dann sollte das Problem nicht mehr auftreten.
 

CubBossa

Schafhirte
Registriert
17 Juli 2015
Beiträge
125
Diamanten
369
Minecraft
CubBossa
spannend, das protected hats gelöst :D aber woran lag es denn nun? Ich dachte, protected ist eine variable dann, wenn sie private ist aber trotzdem für child-klassen zugänglich sein soll.

Danke für die Hilfe!

Plugman nutz ich zwar, aber ich hab es auch mit Restarts getestet gehabt, eben wegen den möglichen Problemen.
 
Oben