Skocz do zawartości
  • 0

Wysyłanie się wiadomości dwa razy i czekanko


Pytanie

Cześć urwisy! :) 

Więc takk.... Posiadam taki sobie ciąg znaczków:

	public void onJoin(PlayerJoinEvent e) {
				Player p = e.getPlayer();
				OfflinePlayer p2 = (OfflinePlayer) p;
				setPlayerLoggedVar(p2, false);
				if (getPlayerPassword(p2).equals("")) {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToRegister")));
					return;
				} else {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));
					return;
				} 
	}

I dwa pytania:

Wiadomość howToRegister wyświetla się dwa razy, a howToLogin nawet więcej D:) Jakżem to naprawić?

i drugie pytanko - jak poczekać powiedzmy 1 tick przed wykonaniem kodu? To znaczy, w sensie, żem graczek wejdzie i dopiero po 1 ticku się wykona ten kod.

Dziękuje za wszystkie odpowiedzi, pozdrawiam łobuzy :> 

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/
Udostępnij na innych stronach

13 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

@Queito Znaczy no mam jeszcze w jednej klasie zaimplementowany listener, no ale bez niego to by nie działało więc nie mogem usunąć D; 

 

EDIT: Zrobiłem coś takiego:

        new BukkitRunnable() {
			@Override
			public void run() {
				Player p = e.getPlayer();
				OfflinePlayer p2 = (OfflinePlayer) p;
				setPlayerLoggedVar(p2, false);
				if (getPlayerPassword(p2).equals("")) {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToRegister")));
					return;
				} else {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));
					return;
				} 
			}
        }.runTaskLater(this.plugin, 20);

i nadal brzydalstwo nie działa

Edytowane przez Rafep
Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233316
Udostępnij na innych stronach

  • 0
2 godziny temu, Rafep napisał:

@Queito Znaczy no mam jeszcze w jednej klasie zaimplementowany listener, no ale bez niego to by nie działało więc nie mogem usunąć D; 

 

EDIT: Zrobiłem coś takiego:


        new BukkitRunnable() {
			@Override
			public void run() {
				Player p = e.getPlayer();
				OfflinePlayer p2 = (OfflinePlayer) p;
				setPlayerLoggedVar(p2, false);
				if (getPlayerPassword(p2).equals("")) {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToRegister")));
					return;
				} else {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));
					return;
				} 
			}
        }.runTaskLater(this.plugin, 20);

i nadal brzydalstwo nie działa

spróbuj tak

Bukkit.getScheduler().runTaskLater(this, new Runnable() {
  @Override
  public void run() {
    // code
  }
}, time);

i pokaż całą klasę najlepiej

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233321
Udostępnij na innych stronach

  • 0

1. Nie rób tak: 

p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));

Tylko przypisz sobie to do jakiegoś stringa podczas ladowania configu i tego stringa wysyłaj

2. Ten drugi return jest zbędny, chyba, że dalej masz jeszcze jakiś kod

3. Pokaż mi Stringa getPlayerPassword()

4. Czemu OfflinePlayer? 

5. Co do taska to koledzy wyżej wyjaśnili

Edytowane przez TakiJakTy
TakiJakTy

Usuwam formatowanie oraz wstawiam w code.

Notatka dodana przez TakiJakTy

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233324
Udostępnij na innych stronach

  • 0

Pierwszy return też useless, od sprawdzania czy string jest pusty masz metodę String#isEmpty, aby zrobić to 'czystsze' to mógłbyś w obiekcie zrobić coś jak metodę:

playerPassword() - jeżeli jest hasło to je zwracasz, nie ma to rzucasz np. NoPasswordException/UnregisteredAccountException itp a w listenerze tylko try/catch itp no i już o wiele czystsze i ładniej wyglada

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233325
Udostępnij na innych stronach

  • 0
3 godziny temu, yooniks napisał:

Pierwszy return też useless, od sprawdzania czy string jest pusty masz metodę String#isEmpty, aby zrobić to 'czystsze' to mógłbyś w obiekcie zrobić coś jak metodę:

playerPassword() - jeżeli jest hasło to je zwracasz, nie ma to rzucasz np. NoPasswordException/UnregisteredAccountException itp a w listenerze tylko try/catch itp no i już o wiele czystsze i ładniej wyglada

Zgadza się

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233328
Udostępnij na innych stronach

  • 0
17 godzin temu, Queito napisał:

spróbuj tak


Bukkit.getScheduler().runTaskLater(this, new Runnable() {
  @Override
  public void run() {
    // code
  }
}, time);

i pokaż całą klasę najlepiej

Nie działa. Taki błąd wyskakuje w Eclipse: "The method runTaskLater(Plugin, Runnable, long) in the type BukkitScheduler is not applicable for the arguments (LoginMenager, new Runnable(){}, long)".

10 godzin temu, yooniks napisał:

Bukkit.getScheduler()#runTaskLaterAsynchrously

Pokaz cały kod a nie urywki, debuguj

	public void onJoin(PlayerJoinEvent e) {
		Bukkit.getScheduler()#runTaskLaterAsynchrously(Plugin plugin, {
			@Override
			public void run() {
				Player p = e.getPlayer();
				OfflinePlayer p2 = (OfflinePlayer) p;
				setPlayerLoggedVar(p2, false);
				if (getPlayerPassword(p2).equals("")) {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToRegister")));
				} else {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));
				} 
			}
        }, 20L);

takie żem coś zrobiłem i nie działa D:) 

11 godzin temu, paweU napisał:

1. Nie rób tak: 


p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));

Tylko przypisz sobie to do jakiegoś stringa podczas ladowania configu i tego stringa wysyłaj

2. Ten drugi return jest zbędny, chyba, że dalej masz jeszcze jakiś kod

3. Pokaż mi Stringa getPlayerPassword()

4. Czemu OfflinePlayer? 

5. Co do taska to koledzy wyżej wyjaśnili

Dobrze, przepraszam, będę ładował config i stringa wysyłał :< 

Tak, w sumie to jest zbędny ten return ._. 

getPlayerPassword ma w cielku to:

	public String getPlayerPassword(OfflinePlayer p) {
		if (haslo.get(p.getUniqueId().toString()) != null) {
			return haslo.get(p.getUniqueId().toString());
		} else {
			return "";
		}
	}

i wysłałem sobie dla testu, żeby wypisało na chacie wartość tego co wychodzi z getPlayerPassword i wychodzi "".

Czemu OfflinePlayer? Bo tak w funkcji/metodzie to działa. (to dobre wytłumaczenie? ekhem ekhem)

9 godzin temu, yooniks napisał:

Pierwszy return też useless, od sprawdzania czy string jest pusty masz metodę String#isEmpty, aby zrobić to 'czystsze' to mógłbyś w obiekcie zrobić coś jak metodę:

playerPassword() - jeżeli jest hasło to je zwracasz, nie ma to rzucasz np. NoPasswordException/UnregisteredAccountException itp a w listenerze tylko try/catch itp no i już o wiele czystsze i ładniej wyglada

Nie za bardzo troszkem wiem o co chodzi D:}

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233347
Udostępnij na innych stronach

  • 0
11 minut temu, Rafep napisał:

Nie działa. Taki błąd wyskakuje w Eclipse: "The method runTaskLater(Plugin, Runnable, long) in the type BukkitScheduler is not applicable for the arguments (LoginMenager, new Runnable(){}, long)".


	public void onJoin(PlayerJoinEvent e) {
		Bukkit.getScheduler()#runTaskLaterAsynchrously(Plugin plugin, {
			@Override
			public void run() {
				Player p = e.getPlayer();
				OfflinePlayer p2 = (OfflinePlayer) p;
				setPlayerLoggedVar(p2, false);
				if (getPlayerPassword(p2).equals("")) {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToRegister")));
				} else {
					p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));
				} 
			}
        }, 20L);

takie żem coś zrobiłem i nie działa D:) 

Dobrze, przepraszam, będę ładował config i stringa wysyłał :<

Tak, w sumie to jest zbędny ten return ._.

getPlayerPassword ma w cielku to:


	public String getPlayerPassword(OfflinePlayer p) {
		if (haslo.get(p.getUniqueId().toString()) != null) {
			return haslo.get(p.getUniqueId().toString());
		} else {
			return "";
		}
	}

i wysłałem sobie dla testu, żeby wypisało na chacie wartość tego co wychodzi z getPlayerPassword i wychodzi "".

Czemu OfflinePlayer? Bo tak w funkcji/metodzie to działa. (to dobre wytłumaczenie? ekhem ekhem)

Nie za bardzo troszkem wiem o co chodzi D:}

 

1. Masz, poprawiłem Tobie

    public void onJoin(PlayerJoinEvent e) {
        new BukkitRunnable() {
            public void run() {
                Player p = e.getPlayer();
                OfflinePlayer p2 = (OfflinePlayer) p;
                setPlayerLoggedVar(p2, false);
                if (getPlayerPassword(p2).equals("")) {
                    p.sendMessage(Utils.tl(plugin.getConfig().getString("howToRegister")));
                } else {
                    p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));
                }
            }
        }.runTaskLater(plugin, 20L);
    }

 

2. Pokaż mapę "haslo"

Edytowane przez paweU
Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233348
Udostępnij na innych stronach

  • 0

@paweU O działa! :D 

A co do tego hasła, to chodzi jak ją tworzę? Sorry, że nie rozumiem zbyt o co chodzi, ale zaczynam dopiero w tych pluginach . -.

Jeśli o to chodzi, to proszę:

public static HashMap<String, String> haslo = new HashMap<String, String>();

 

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233349
Udostępnij na innych stronach

  • 0
13 minut temu, Rafep napisał:

@paweU O działa! :D 

A co do tego hasła, to chodzi jak ją tworzę? Sorry, że nie rozumiem zbyt o co chodzi, ale zaczynam dopiero w tych pluginach . -.

Jeśli o to chodzi, to proszę:


public static HashMap<String, String> haslo = new HashMap<String, String>();

 

zrób sobie:

 public static HashMap<UUID, String> haslo = new HashMap<UUID, String>();

i wtedy:

 public String getPlayerPassword(OfflinePlayer p) {
        if (haslo.get(p.getUniqueId()) != null) {
            return haslo.get(p.getUniqueId());
        } else {
            return "";
        }
    }

 

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233352
Udostępnij na innych stronach

  • 0
11 minut temu, Rafep napisał:

@paweU  Zamieniłem sobie String na UUID. Klawo.

Ale jakżem zrobić, aby się nie wysyłało dwa razy?

Popraw sobie swój kod na ten:

 

        public void onJoin(PlayerJoinEvent e) {
            new BukkitRunnable() {
                public void run() {
                    Player p = e.getPlayer();
                    OfflinePlayer p2 = (OfflinePlayer) p;
                    setPlayerLoggedVar(p2, false);
                    if (getPlayerPassword(p2.getUniqueId()).isEmpty()) {
                        p.sendMessage(Utils.tl(plugin.getConfig().getString("howToRegister")));
                    } else {
                        p.sendMessage(Utils.tl(plugin.getConfig().getString("howToLogin")));
                    }
                }
            }.runTaskLater(plugin, 20L);
        }

 

Odnośnik do komentarza
https://skript.pl/temat/36529-wysy%C5%82anie-si%C4%99-wiadomo%C5%9Bci-dwa-razy-i-czekanko/#findComment-233362
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...