Skocz do zawartości
  • 0

Jak moge pobrac z maina do innej klasy?


Pytanie

Witam, pisze sobie plugin na moj serwer i mam maly problem. Zrobiles sobie package w package aby kod byl czytelny. W package commands zrobilem chat.

Wyglada on tak:

package pl.hotangel2k18.core.commands;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

import pl.hotangel2k18.core.Main;

public class Chat implements CommandExecutor{
	
	public static Boolean chat;

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(sender.hasPermission("trypvp.chat")){
			if(args.length == 1){
				if(args[0].equalsIgnoreCase("c")){
					int i = 0;
					while(i < 101){
						Bukkit.broadcastMessage(" ");
						i++;
					}
					for(String chatC : Main.getPlugin(Main.class).getConfig().getStringList("chat.clear")){
						chatC = chatC.replace("&", "§");
						chatC = chatC.replace("_PLAYER_", sender.getName());
						Bukkit.broadcastMessage(chatC);
						return true;
					}
					
				}
				if(args[0].equalsIgnoreCase("on")){
					if(!chat){
						chat = true;
						int i = 0;
						while(i < 101){
							Bukkit.broadcastMessage(" ");
							i++;
						}
						for(String chatON : Main.getPlugin(Main.class).getConfig().getStringList("chat.enable")){
							chatON = chatON.replace("&", "§");
							chatON = chatON.replace("_PLAYER_", sender.getName());
							Bukkit.broadcastMessage(chatON);		
							return true;
						}
					}
					else
					{
						for(String chatONerror : Main.getPlugin(Main.class).getConfig().getStringList("chat.enable-error")){
							chatONerror = chatONerror.replace("&", "§");
							sender.sendMessage(chatONerror);
							return true;
						}
					}
				}
				if(args[0].equalsIgnoreCase("off")){
					if(chat){
						chat = false;
						int i = 0;
						while(i < 101){
							Bukkit.broadcastMessage(" ");
							i++;
						}
						for(String chatOFF : Main.getPlugin(Main.class).getConfig().getStringList("chat.disable")){
							chatOFF = chatOFF.replace("&", "§");
							chatOFF = chatOFF.replace("_PLAYER_", sender.getName());
							Bukkit.broadcastMessage(chatOFF);
							return true;
						}
					}
					else
					{
						for(String chatOFFerror : Main.getPlugin(Main.class).getConfig().getStringList("chat.disable-error")){
							chatOFFerror = chatOFFerror.replace("&", "§");
							sender.sendMessage(chatOFFerror);
							return true;
						}
					}
				}
			}
			else
			{
				for(String usage : Main.getPlugin(Main.class).getConfig().getStringList("chat-usage")){
					usage = usage.replace("&", "§");
					sender.sendMessage(usage);
					return true;
				}
			}
		}
		else
		{
			for(String permission : Main.getPlugin(Main.class).getConfig().getStringList("chat-permission")){
				permission = permission.replace("&", "§");
				sender.sendMessage(permission);
				return true;
			}
		}
		return false;
	}
	
	

}

Zmienna "chat" zostala ustawiona w main w sposob onEnable.

Wyglada on tak:

Chat.chat = true;

Zmienna chat zostala ustawiona na true.

Teraz w package listeners chce ta zmienna pobrac czy jest off.

Jak mam to zrobic?

package pl.hotangel2k18.core.listener;

import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

import pl.hotangel2k18.core.Main;

public class ChatListener implements Listener{
	
	@EventHandler
	public void onChat(AsyncPlayerChatEvent e){
		if(!chat){
			for(String chatDISABLE : Main.getPlugin(Main.class).getConfig().getStringList("chat.disable-message")){
				chatDISABLE = chatDISABLE.replace("&", "§");
				chatDISABLE = chatDISABLE.replace("_PLAYER_", e.getPlayer().getName());
				e.getPlayer().sendMessage(chatDISABLE);
			}
		}
	}

}

 

Odnośnik do komentarza
https://skript.pl/temat/27577-jak-moge-pobrac-z-maina-do-innej-klasy/
Udostępnij na innych stronach

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
if (!Chat.chat) {
} 

?

Do tego:

Cytat

				chatDISABLE = chatDISABLE.replace("&", "§");

bukkit ma swoja metode od kolorowania wiadomosci: ChatColor.translateAlternateColorCodes('&', text);

No i oczywiscie warto tez wspomniec ze nowe linie mozesz tworzyc w zwyklym stringu uzywajac "\n" (no i mozna tez innymi sposobami, ale teraz nie bede tlumaczyl), i wtedy mozesz wyslac po prostu jeden string wygladajacy mniej wiecej tak:

my-message: "first line \n second line"

a wiadomosc bedzie wygladac tak:

first line
second line

 

oraz:

Cytat

						int i = 0;
						while(i < 101){
							Bukkit.broadcastMessage(" ");
							i++;
						}

mozesz to zastapic w prosty sposob:

for (int i = 0; i < 101; i++) {
	//czyszczenie czatu
}

+ bukkit.broadcast bedzie ci spamilo w konsoli oraz logach, slaby pomysl

no i oczywiscie wspomne o tym ze zamiast wykonywac 100 razy metode dla jednego gracza [czyli byloby to np. 1000 metod jak byloby 10 graczy (chyba)], to mozesz wyslac po prostu ogromny znak do kazdego gracza, ktory zastapi wykonywanie tej petli.

    private char[] chars;

    protected void init() {
        Arrays.fill(chars = new char[7680], ' ');
    }

no i wysylasz uzywajac:

player.sendMessage(String.valueOf(this.chars));

(ogolnie to slaba nazwa dla takiego fielda, zmien sobie) - no i oczywiscie ten pomysl nie jest moj, ktos gdzies to pisal kiedys na discordach i po prostu podczas nauki podlapalem to.

Odnośnik do komentarza
https://skript.pl/temat/27577-jak-moge-pobrac-z-maina-do-innej-klasy/#findComment-182445
Udostępnij na innych stronach

  • 0
W dniu 8.06.2018 o 10:41, HotAngel2K17 napisał:

chatOFF = chatOFF.replace("&", "§");

chatOFF = chatOFF.replace("_PLAYER_", sender.getName());

Nie lepiej tego zrobic od razu gdy wysyla message?

Jezeli chcesz odczytywac mozesz wpisac ten kod:

 

private Chat czat = new Chat();

(Chat to nazwa klasy)
Potem to z górki robisz: if(czat.chat == false){

Odnośnik do komentarza
https://skript.pl/temat/27577-jak-moge-pobrac-z-maina-do-innej-klasy/#findComment-182512
Udostępnij na innych stronach

  • 0
30 minut temu, JanekMaSkrypta_ napisał:

Nie lepiej tego zrobic od razu gdy wysyla message?

Jezeli chcesz odczytywac mozesz wpisac ten kod:

 


private Chat czat = new Chat();

(Chat to nazwa klasy)
Potem to z górki robisz: if(czat.chat == false){

Poprawnie powinno być:

if(!czat.chat)

 

Odnośnik do komentarza
https://skript.pl/temat/27577-jak-moge-pobrac-z-maina-do-innej-klasy/#findComment-182515
Udostępnij na innych stronach

  • 0
22 godziny temu, JanekMaSkrypta_ napisał:

Nie lepiej tego zrobic od razu gdy wysyla message?

Jezeli chcesz odczytywac mozesz wpisac ten kod:

 


private Chat czat = new Chat();

(Chat to nazwa klasy)
Potem to z górki robisz: if(czat.chat == false){

jak juz to final i StringUtils.replace, bo te ze stringa jest wolne

22 godziny temu, KrejzolekPRO napisał:

Poprawnie powinno być:


if(!czat.chat)

 

Obydwie formy są poprawne

Odnośnik do komentarza
https://skript.pl/temat/27577-jak-moge-pobrac-z-maina-do-innej-klasy/#findComment-182527
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Odpowiedz na pytanie...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

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