Skocz do zawartości
krzysek

PropertyGuilds - System gildii dla serwera Minecraft 1.13.2

Rekomendowane odpowiedzi

Użytkownik

QWu1DYg.png

PropertyGuilds
System gildii na serwer Minecraft 1.13.2
(nie jest to finalna forma PropertyGuilds, jej ostateczna forma może znacznie odbiegać od aktualnej)

Wymagane pluginy: NameManager (Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!)

Inne wymagania: MySQL

Uprawnienia:

  • propertyguilds.default - podstawowy dostęp
  • propertyguilds.reload - dostęp do komendy /guilds reload

Komendy:

  • /guilds - pomoc PropertyGuilds
  • /guilds items - gui z przedmiotami potrzebnymi do utworzenia gildii
  • /guilds create [tag] [nazwa] - tworzenie gildii
  • /guilds invite [nick] - zaprasza gracza do gildii
  • /guilds accept [tag] - akceptuje zaproszenie do gildii
  • /guilds decline [tag] - odrzuca zaproszenie do gildii
  • /guilds kick [nick] - wyrzuca gracza z gildii
  • /guilds ally invite [tag] - zaprasza gildię do sojuszu
  • /guilds ally accept [tag] - akceptuje zaproszenie do sojuszu gildii
  • /guilds ally decline [tag] - odrzuca zaproszenie do sojuszu gildii
  • /guilds ally remove [tag] - zrywa sojusz z gildią
  • /guilds leave - opuszcza gildię
  • /guilds delete [tag] - usuwa gildię
  • /guilds info [tag*] - pokazuje informacje o gildii (podanie [tag]'u gildii nie jest wymagane)
  • /guilds base - teleportuje to bazy gildii
  • /guilds chat [global/guild/ally] - przełącza pomiędzy chatem (globalnym, gildii, sojuszników)
  • /guilds top - pokazuje top 10 gildii
  • /guilds reload - przeładowywuje pliki konfiguracyjne PropertyGuilds

Plik konfiguracyjny (config.yml):

# PropertyGuilds plugin
# version: 0.1
# core: 1.13.2
# © loonypl (/deew, mc: krzysek)
# Permissions: propertyguilds.default, propertyguilds.reload
# MySQL configuration
#  host - MySQL server address
#  port - MySQL server port
#  user - MySQL server user
#  password - MySQL server password
#  database - the database must be create before plugin installation
mysql:
  host: 'localhost'
  port: '3306'
  user: 'root'
  password: '123'
  database: 'PropertyGuilds_plugin'
#
chat:
  # Enable chat formatting (color messages - propertyguilds.chatcolor)
  enable: true
  # Chat format
  # %guild-tag%, %guild-name%, %guild-points%, %name%, %kills%, %deaths%, %points%, %world%, %message%
  format: '&8[&c&f%guild-tag%&8] &8[&6%points%&8] &r%name% &6> &r%message%'
guild-chat:
  # Guild chat format
  # %guild-tag%, %guild-name%, %guild-points%, %name%, %kills%, %deaths%, %points%, %world%, %message%
  format: '&c&l%guild-tag% &r%name% &6> &r&o%message%'
ally-chat:
  # Ally chat format
  # %guild-tag%, %guild-name%, %guild-points%, %name%, %kills%, %deaths%, %points%, %world%, %message%
  format: '&a&l%guild-tag% &r%name% &6> &r&o%message%'
create-require-items:
  # Need items for creating guild
  enable: true
  # Gui size
  gui-size: 9
  # Items needed for creating guild (creating-require-items: true)
  list:
    - '[email protected]'
    - '[email protected]'
guild:
  # Tag lengths
  tag:
    # Min tag length
    min: 3
    # Max tag length
    max: 6
  # Name lengths
  name:
    # Min name length
    min: 3
    # Max name length
    max: 16
  # Property
  property:
    # Property radius
    radius: 10
    # World's spawn protection radius
    spawn-radius: 500
  # Points
  points:
    # Amount of guild points that guild starts with
    default: 0
  # Actions after successfully creating guild
  create:
    # Broadcast opts
    broadcast:
      # Send broadcast message
      enable: true
    # Private opts
    private:
      # Send private message
      enable: false
  # Actions after successfully deleting guild
  delete:
    # Broadcast opts
    broadcast:
      # Send broadcast message
      enable: true
    # Private opts
    private:
      # Send private message
      enable: false
  # Blocks options
  blocks:
    # Chests
    chests:
      # Allow chests opening
      allow-open: false
  # Cooldowns
  cooldowns:
    # Base teleportation cooldown
    base-teleport: 5
  # Damage
  damage:
    # Allow to deal damage between guild members
    friendly-fire:
      enable: false
    # Allow to deal damage between alliances
    alliances:
      enable: false
# Points
points:
  # Points for kill
  kill:
    # Points for killing player without guild
    player-without-guild: 5
    # Points for killing player with guild
    player-with-guild: 10
    # Points for kill that goes to player's guild [is he has]
    to-guild: 5
  # Points for death
  death:
    # Points for death (player without guild)
    player-without-guild: -5
    # Points for death (player with guild)
    player-with-guild: -10
    # Points for death that goes to player's guild [if he has]
    to-guild: -5

Plik konfiguracyjny (lang.yml):

# PropertyGuilds plugin
# version: 0.1
# core: 1.13.2
# © loonypl (/deew, mc: krzysek)
# Permissions: propertyguilds.default, propertyguilds.reload
console-execute: 'You cannot execute this command from console state'
no-permission: '&cYou do not have access to this command'
wrong-syntax: '&cWrong syntax ! &f/guilds'
plugin-reload: '&aPlugin has been reloaded'
guilds-help:
  - '&e/guilds &7- &fGuilds help'
  - '&e/guilds items &7- &fItems needed for creating guild'
  - '&e/guilds create [tag] [name] &7- &fCreate guild'
  - '&e/guilds invite [nick] &7- &fInvite player to guild'
  - '&e/guilds accept [tag] &7- &fAccept guild invite'
  - '&e/guilds decline [tag] &7- &fDecline guild invite'
  - '&e/guilds ally invite [tag] &7- &fSent ally invite to guild'
  - '&e/guilds ally accept [tag] &7- &fAccept guild ally invite'
  - '&e/guilds ally decline [tag] &7- &fDecline guild ally invite'
  - '&e/guilds ally remove [tag] &7- &fRemove guild ally'
  - '&e/guilds leave &7- &fLeave guild'
  - '&e/guilds kick [nick] &7- &fKick guild member'
  - '&e/guilds delete [tag] &7- &fDelete guild'
  - '&e/guilds info [tag] &7- &fGuild info'
  - '&e/guilds base &7- &fTeleport to guild base'
  - '&e/guilds chat [global/guild/ally] &7- &fSwitch between chats'
  - '&e/guilds top &7- &fTop 10 guilds'
  - '&e/guilds reload &7- &fReload plugin'
none-create-require-items: '&cYou do not need any items for creating guild'
create-require-items-gui-name: '&a&lRequired items'
has-guild: '&cYou are already in guild'
has-not-guild: '&cYou do not belong to any guild'
guild-not-exists: '&cGuild %tag% does not exists'
cannot-break: '&cThis block belongs to guild property'
guild:
  tag:
    length: '&cTag length must be &f>= %min% &cand &f<= %max%'
    exists: '&cGiven tag is already in-use'
  name:
    length: '&cName length must be &f>= %min% &cand &f<= %max%'
    exists: '&cGiven name is already in-use'
  property:
    exists: '&cYou can not create guild on property of another one'
    too-close: '&cYou are too close to property of another guild. You have to be at least &f%distance% &cblocks away from there'
    too-close-spawn: '&cYou are too close to spawn. You have to be at least &f%distance% &cblocks away from spawn'
    entered: '&cYou entered &7%tag% &cguild property'
    left: '&aYou left &7%tag% &aguild property'
  items:
    not-enough: '&cYou dont have enough items to create guild &f/guilds items'
  create:
    broadcast:
      message: '&8[&f%tag%&8] &f%name% &aguild has been created by &f%leader% &a!'
    private:
      enable: true
      message: '&8[&f%tag%&8] &f%name% &aguild has been created by &f%leader% &a!'
  delete:
    not-leader: '&cYou are not leader of this guild'
    broadcast:
      message: '&8[&f%tag%&8] &f%name% &cguild has been deleted by &f%leader% &c!'
    private:
      enable: true
      message: '&8[&f%tag%&8] &f%name% &cguild has been deleted by &f%leader% &c!'
  blocks:
    chests:
      cannot-open: '&cYou can not open chests that belongs to other guilds'
  teleport:
    base:
      remaining: '&aYou will be teleported to guild base in &f%time% seconds&a. Do not move'
      abort: '&cBase teleportation has been aborted'
      done: '&aYou have been teleported to your guild base'
      already: '&aWait for teleport. Do not move'
  chat:
    global-toggle: '&aToggled to global chat'
    guild-toggle: '&aToggled to guild chat'
    ally-toggle: '&aToggled to ally chat'
  invite:
    not-leader: '&cYou are not leader of your guild'
    offline: '&cThere is no online player with this nickname'
    has-guild: '&cThis player already has guild'
    already: '&cThis player is already invited'
    sent: '&aYou have invited &f%invited% &ato guild'
    recieved: '&aYou have been invited to &f%guild% &aguild'
    already-member: '&cYou are already in guild'
    guild-not-exists: '&cGuild with this tag does not exists'
    not-invited: '&cYou have not been invited to this guild'
    accepted: '&f%invited% &aaccepted invitation to guild'
    success-accepted: '&aYou have accepted &f%guild% &aguild invite'
    declined: '&f%invited% &cdeclined invitation to guild'
    success-declined: '&cYou have declined &f%guild% &cguild invite'
  leave:
    leader: '&cYou can not leave a guild while being its leader'
    left: '&cYou have left &f%guild% &cguild'
    broadcast:
      enable: true
      left: '&f%player% &cleft &f%guild% &cguild'
  kick:
    leader: '&cYou are not guild leader'
    has-not-guild: '&cThis player has not guild'
    not-belong: '&cThis player do not belong to your guild'
    leader-given: '&cYou can not kick leader'
    kicked: '&f%player% &chas been kicked from your guild'
    kick-recieve: '&cYou have been kicked from &f%guild% &cguild'
  damage:
    friendly-fire:
      message: '&cYou can not hurt guild members'
    alliances:
      message: '&cYou can not hurt alliances of your guild'
  ally:
    leader: '&cYou are not guild leader'
    guild-not-exists: '&cGuild with this tag does not exists'
    already-allied: '&cYour guild is already allied with this guild'
    already-sent: '&cYour guild have already sent ally invite to this guild'
    leader-not-online: '&cLeader of &f%guild% &cguild is not online'
    own-guild: '&cYou can not sent ally invite to your own guild'
    sent: '&aAlly invitation has been sent to &f%guild% &aguild'
    ally-recieve: '&f%guild% &ahas sent your guild ally invitation'
    not-recieved: '&cYour guild has not recieved ally invitation from this guild'
    declined: '&cYour guild has declined ally invitation from &f%guild% &cguild'
    accepted: '&aYour guild has accepted ally invitation form &f%guild% &aguild'
    accepted-recieve: '&f%guild% &aguild has accepted your guild ally invitation'
    not-allied: '&cYour guild has not allied with &f%guild% &cguild'
    remove:
      removed-ally: '&cYour guild has removed guild ally &f%guild%'
      broadcast:
        enable: true
        message: '&f%remover% &cguild has removed guild ally with &f%ally% &cguild'
guild-info:
  tag: 'Tag'
  name: 'Name'
  leader: 'Leader'
  members-list: 'Members list'
  alliances-list: 'Alliances list'
  members: 'Members'
  alliances: 'Alliances'
  points: 'Points'

 

Mediafire: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
Skan linku: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
Skan .jar: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

 

Masz jakieś pomysły, problemy, uwagi ? Podziel się nimi: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!
Zanim coś napiszesz, sprawdź zakładkę Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Edytowane przez krzysek
update 0.1.1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
W dniu 4.02.2019 o 09:10, HotAngel2K17 napisał:

Ogólnie plugin dosyć fajny ale brakuje mi tu smaczka jak EventPriority w listenerach

po co tu priorytety xd jak juz to ja bym chyba wolal dac na lowest zeby lepiej sprawdzalo czy event zostal juz zcancelowany, zeby kazdy inny listener w innych pluginach poszedl predzej bo moga cos zmieniac itd(chyba że to na odwrót było to uj) 

a tak to jak najbardziej to co napisal Ixidi, szczegolow takich jak logika w getterach itd. juz nie bede wymienial bo to chyba nie ma sensu

ale jednego nie rozumiem xd 

- obiekt guild jest w utilsach, 

public void addMember(final String member) {
        String members = getInfo("members");
        String members_list = getInfo("members_list");
        MySQL mysql = PropertyGuilds.getInstance().getMySQL();
        try {
            PreparedStatement ps = mysql.getConnection().prepareStatement(
                    "UPDATE `guilds` SET `members`=?, `members_list`=? WHERE `tag`='" + this.tag + "'"
            );
            ps.setInt(1, Integer.parseInt(members) + 1);
            ps.setString(2, members_list + ";" + member);
            ps.executeUpdate();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public String getInfo(final String info) {
        MySQL mysql = PropertyGuilds.getInstance().getMySQL();
        try {
            PreparedStatement checkStatement = mysql.getConnection().prepareStatement(
                    "SELECT * FROM `guilds` WHERE tag=?"
            );
            checkStatement.setString(1, this.tag);
            ResultSet result = checkStatement.executeQuery();
            String has;
            if (result.next()) {
                String str = result.getString(info);
                if (result.wasNull()) has = null;
                else has = str;
            } else return null;
            checkStatement.close();
            result.close();
            return has;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

taki obiekt powinien byc budowany tylko raz, np. przy onenable, w ladowaniu wsyzstkich gildii (a np. gracz przy wejsciu, lub tez onenable), a ty za kazdym razem robisz tak:

    @EventHandler(priority = EventPriority.HIGH)
    public void playerDeath(final PlayerDeathEvent e) {
        if (e.getEntity().getKiller() != null) {
            ConfigUtils config = new ConfigUtils(ConfigMessageType.CONFIG);
            User user = new User(e.getEntity());
            User killer = new User(e.getEntity().getKiller());
            if (user.hasGuild()) {
                killer.updateStats("points", config.getInt("points.kill.player-with-guild"));
                user.updateStats("points", config.getInt("points.death.player-with-guild"));
                if (killer.hasGuild()) new Guild(killer.getGuild()).points(config.getInt("points.kill.to-guild"));
                new Guild(user.getGuild()).points(config.getInt("points.death.to-guild"));
            }

no i do tego config tez budowany caly czas od nowa xd

    protected String tag, name, leader, members_list, alliances_list, location;

zamiast np. member_list sprowadzac z bazy (ze stringa) do listy i pozniej mozesz nawet z tego wyciagnac wielkoscl isty, latwiej loopowac memberow itd. to ty za kazdym razem dodajesz po prostu do stringa ":" + nick, jak dla mnie to bardzo duzo do zmiany. tymbardziej ze te akcje ktore musisz wykonac asynchronicznie - nie wiem jak toz robisz bo masz bardzo dziwnie i przy kazdym getterze wykonujesz nowe zapytanei do bazy zamiast pobierac obecne i tylko przy wylaczeniu pluginu zapisywac/updateowac 

- i to dopiero po sprawdzaniu chyba 2-4 klas

Edytowane przez yooniks

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik

Ciągłe wysyłanie danych do bazy (lub ciągłe pobieranie z niej), brak lokalnego przechowywania danych w np. bazie sqlite, ogromne schodki zagnieżdżeń kodu w komendach, robienie nowych obiektów ciągle (np. w Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!), ciągłe pobieranie danych z configu... No, może i ten plugin działa, ale na pewno nie działa wydajnie i zakładam, że przy większej ilości graczy mógłby nieźle lagować :/

Patrząc na kod pluginu - nie polecam używania go, lepiej poszukać innego, który będzie lepiej napisany

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Użytkownik
16 minut temu, krzysek napisał:

Update 0.1.1

  • Usprawniono pobieranie danych z plików konfiguracyjnych;
  • Zmieniono kolejność ładowania pluginu na POSTWORLD;

TODO:

  • Usprawnić pobieranie danych z bazy danych MySQL;

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Powinien być update 0.0.0.0.1 :nokappa:

Po co tworzysz taki obiekt

public class User {

    protected Player player;

    public User(final Player player) {
        this.player = player;
    }

skoro po prostu mozesz uzywac playera? XD

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×