• 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!

Programmierung von Lizens Plugin

gmb32

Kuhfänger
Registriert
17 Juni 2014
Beiträge
84
Diamanten
0
Hey Ho,
Kennt ihr eine Methode eine Waffenlizens, Eigentümerlizens oder Sonstiges Programmieren kann?
Bestimmte Spieler mit Permissions sollen abfragen können ob der Spieler die jeweilige Lizens hat.
Hat einer eine Idee?
 

TheSimufreak

Kuhfänger
Registriert
28 Juni 2012
Beiträge
78
Diamanten
0
Du implementierst deine Lizenz(en) als eigene Klasse (Optional mit einer abstrakten Superklasse) und speicherst diese zusammen mit dem entsprechenden Spieler in einer Map. Das hat Vorteil dass du zu jeder ausgestellten Lizenz weitere Daten speicher kannst (wie z.B. Gültigkeitszeitraum, Aussteller, Einschränkungen etc).
 

PSandro

Kuhfänger
Registriert
7 November 2016
Beiträge
51
Diamanten
302
Du implementierst deine Lizenz(en) als eigene Klasse (Optional mit einer abstrakten Superklasse) und speicherst diese zusammen mit dem entsprechenden Spieler in einer Map. Das hat Vorteil dass du zu jeder ausgestellten Lizenz weitere Daten speicher kannst (wie z.B. Gültigkeitszeitraum, Aussteller, Einschränkungen etc).
Gut da gibt es ein Problem :) Ich weis nicht wie man das ganze macht bin kein Profi sry :)
Du hast eine Oberklasse z.B. namens License. Und von dieser Klasse kannst du dir beliebig viele Spezialisierungen erstellen, versicherst aber stets, dass zum beispiel eine CarLicense mindestens alle Fähigkeiten einer License hat. Ich weiß nicht inwiefern du schon etwas mit abstrakten Klassen zu tun gehabt hast. Falls nichts hier eine kurze Anmerkung. Eine Klasse ist unter anderem auch abstrakt, da sie in der Vorstellung einer objektorientieren Programmstruktur nicht instanziert werden kann. Das heißt, du kannst keine normale Lizenz erstellen... warum auch? Was ist denn in der Realität eine reine Lizenz?

Setzt man das grob zusammen, kann das so aussehen:
Code:
package de.verschraubt.license;

import com.google.common.base.Preconditions;
import org.bukkit.OfflinePlayer;

/**
* Created by Verschraubt on 05.03.2017 for Tests.
*/
public abstract class License {

    private final OfflinePlayer player;
    private final OfflinePlayer exhibitor;
    private final Long validity;

    public License(OfflinePlayer player, OfflinePlayer exhibitor, Long validity) {
        Preconditions.checkNotNull(player, "The player cannot be null");
        Preconditions.checkNotNull(exhibitor, "The exhibitor cannot be null");
        Preconditions.checkNotNull(validity, "The validity cannot be null");

        this.player = player;
        this.exhibitor = exhibitor;
        this.validity = validity;
    }

    public Long getValidity() {
        return this.validity;
    }

    public OfflinePlayer getExhibitor() {
        return this.exhibitor;
    }

    public OfflinePlayer getPlayer() {
        return this.player;
    }

    abstract String getLicenseName();

    abstract void removeLicense();

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        License license = (License) o;

        if (!player.equals(license.player)) return false;
        if (!exhibitor.equals(license.exhibitor)) return false;
        return validity.equals(license.validity);
    }

    @Override
    public int hashCode() {
        int result = player.hashCode();
        result = 31 * result + exhibitor.hashCode();
        result = 31 * result + validity.hashCode();
        return result;
    }
}
Code:
package de.verschraubt.license;

import com.google.common.base.Preconditions;
import org.bukkit.OfflinePlayer;

/**
* Created by Verschraubt on 05.03.2017 for Tests.
*/
public class CarLicense extends License {

    private final Integer maxSpeed;

    public CarLicense(OfflinePlayer player, OfflinePlayer exhibitor, Long validity, Integer maxSpeed) {
        super(player, exhibitor, validity);
        Preconditions.checkNotNull(maxSpeed, "The maxSpeed cannot be null");
        this.maxSpeed = maxSpeed;
    }

    @Override
    String getLicenseName() {
        return "Autoführerschein";
    }

    @Override
    void removeLicense() {
        //TODO remove from persistence
    }

    public Integer getMaxSpeed() {
        return this.maxSpeed;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        CarLicense that = (CarLicense) o;

        return maxSpeed.equals(that.maxSpeed);
    }

    @Override
    public int hashCode() {
        return maxSpeed.hashCode();
    }
}
Code:
package de.verschraubt.license;

import com.google.common.base.Preconditions;
import org.bukkit.OfflinePlayer;

/**
* Created by Verschraubt on 05.03.2017 for Tests.
*/
public class WeaponLicense extends License {

    private final Integer caliber;

    public WeaponLicense(OfflinePlayer player, OfflinePlayer exhibitor, Long validity, Integer caliber) {
        super(player, exhibitor, validity);
        Preconditions.checkNotNull(caliber, "The caliber cannot be null");
        this.caliber = caliber;
    }

    @Override
    String getLicenseName() {
        return "Waffenschein";
    }

    @Override
    void removeLicense() {
        //TODO remove from persistence
    }

    public Integer getCaliber() {
        return this.caliber;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        WeaponLicense that = (WeaponLicense) o;

        return caliber.equals(that.caliber);
    }

    @Override
    public int hashCode() {
        return caliber.hashCode();
    }
}
 
Oben