Skocz do zawartości
  • 0

problem z 17 linijka w eclipsie


Pytanie

package pl.lipex.cmds;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class Gamemode implements CommandExecutor{

	public Gamemode(Main M){
		M.getCommand("gamemode").setExecutor(this);
	}
	@SuppressWarnings("deprecation")
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String lab,String[] args){
		if(cmd.getName().equalsIgnoreCase("gamemode")){
			if(!(sender instanceof Player)){
				sender.sendMessage("§4Ta komenda jest przeznaczona tylko dla graczy.");
				return false;			
			}
			if(!(sender.hasPermission("gamemode.cmd"))){
				sender.sendMessage("§4Brak uprawnien! §8(§cgamemode.cmd§8)");
				return false;		
			}
			if(args.length==1){
				if(args[0].equals(0) || args[0].equalsIgnoreCase("survival")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.SURVIVAL);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSURVIVAL§7.");
					return true;
				}
				if(args[0].equals(1) || args[0].equalsIgnoreCase("creative")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.CREATIVE);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aCREATIVE§7.");
					return true;
				}
				if(args[0].equals(2) || args[0].equalsIgnoreCase("adventure")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.ADVENTURE);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aADVENTURE§7.");
					return true;
				}
				if(args[0].equals(3) || args[0].equalsIgnoreCase("spectator")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.SPECTATOR);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSPECTATOR§7.");
					return true;		
				}
			}
			if(args.length==2){
				Player cel = Bukkit.getPlayerExact(args [1]);
				if(cel!=null){
					if(args[0].equals(0) || args[0].equalsIgnoreCase("survival")){
						cel.setGameMode(GameMode.SURVIVAL);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSURVIVAL§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aSURVIVAL§7.");
						return true;
					}
					if(args[0].equals(1) || args[0].equalsIgnoreCase("creative")){
						cel.setGameMode(GameMode.CREATIVE);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aCREATIVE§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aCREATIVE§7.");
						return true;
					}
					if(args[0].equals(2) || args[0].equalsIgnoreCase("adventure")){
						cel.setGameMode(GameMode.ADVENTURE);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aADVENTURE§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aADVENTURE§7.");
						return true;
					}
					if(args[0].equals(0) || args[0].equalsIgnoreCase("spectator")){
						cel.setGameMode(GameMode.SPECTATOR);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSPECTATOR§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aSPECTATOR§7.");
						return true;
					}
				} else{
					sender.sendMessage("§4Nie ma takiego gracza aktualnie na serwerze!");
					return false;
				}
			} else{
				sender.sendMessage("&cZastosowanie: /gamemode <tryb> [gracz]");
				return false;
			}
			return false;
		}
	}
}

w 17 linijce wyskakuje mi blad wie ktos jak to naprawic?

Edytowane przez LjayPL789
Nicku

Ustawiam składnię code na Java.

Notatka dodana przez Nicku

bludis

Zmieniam stronę "pastebin" na stronę code.skript z składnią "Java"

Notatka dodana przez bludis

Odnośnik do komentarza
https://skript.pl/temat/28590-problem-z-17-linijka-w-eclipsie/
Udostępnij na innych stronach

9 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
2 godziny temu, Rejszpat napisał:

spacji brakuje


public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

 

xd, nie, to juz jak kto woli, klamra jest? jest

23 godziny temu, Lipex napisał:

package pl.lipex.cmds;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class Gamemode implements CommandExecutor{

	public Gamemode(Main M){
		M.getCommand("gamemode").setExecutor(this);
	}
	@SuppressWarnings("deprecation")
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String lab,String[] args){
		if(cmd.getName().equalsIgnoreCase("gamemode")){
			if(!(sender instanceof Player)){
				sender.sendMessage("§4Ta komenda jest przeznaczona tylko dla graczy.");
				return false;			
			}
			if(!(sender.hasPermission("gamemode.cmd"))){
				sender.sendMessage("§4Brak uprawnien! §8(§cgamemode.cmd§8)");
				return false;		
			}
			if(args.length==1){
				if(args[0].equals(0) || args[0].equalsIgnoreCase("survival")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.SURVIVAL);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSURVIVAL§7.");
					return true;
				}
				if(args[0].equals(1) || args[0].equalsIgnoreCase("creative")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.CREATIVE);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aCREATIVE§7.");
					return true;
				}
				if(args[0].equals(2) || args[0].equalsIgnoreCase("adventure")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.ADVENTURE);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aADVENTURE§7.");
					return true;
				}
				if(args[0].equals(3) || args[0].equalsIgnoreCase("spectator")){
					Player p = (Player) sender;
					p.setGameMode(GameMode.SPECTATOR);
					p.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSPECTATOR§7.");
					return true;		
				}
			}
			if(args.length==2){
				Player cel = Bukkit.getPlayerExact(args [1]);
				if(cel!=null){
					if(args[0].equals(0) || args[0].equalsIgnoreCase("survival")){
						cel.setGameMode(GameMode.SURVIVAL);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSURVIVAL§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aSURVIVAL§7.");
						return true;
					}
					if(args[0].equals(1) || args[0].equalsIgnoreCase("creative")){
						cel.setGameMode(GameMode.CREATIVE);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aCREATIVE§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aCREATIVE§7.");
						return true;
					}
					if(args[0].equals(2) || args[0].equalsIgnoreCase("adventure")){
						cel.setGameMode(GameMode.ADVENTURE);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aADVENTURE§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aADVENTURE§7.");
						return true;
					}
					if(args[0].equals(0) || args[0].equalsIgnoreCase("spectator")){
						cel.setGameMode(GameMode.SPECTATOR);
						cel.sendMessage("§7Twoj tryb gry zostal zmieniony na §aSPECTATOR§7.");
						sender.sendMessage("§7Zmieniles tryb gry dla gracza §a"+cel.getName()+" §7na §aSPECTATOR§7.");
						return true;
					}
				} else{
					sender.sendMessage("§4Nie ma takiego gracza aktualnie na serwerze!");
					return false;
				}
			} else{
				sender.sendMessage("&cZastosowanie: /gamemode <tryb> [gracz]");
				return false;
			}
			return false;
		}
	}
}

https://pastebin.com/nhUeGUgF

w 17 linijce wyskakuje mi blad wie ktos jak to naprawic?

tak jest jak sie nie potrafi czytac stacktrace i jak cos wyskoczy o 17 linijka, uj ze to tylko pokazuje source do bledu (czyli w tym przypadku metode, a ona jest w 17 lini, wiec na nią ci wskazuje, a dalej ci pisze co jest dokladnie zle, ale przeciez ty wiesz lepiej i nie wkleisz stacktrace)

błąd jest zapewne tutaj:

Cytat

				if(args[0].equals(0)

porównujesz string z integerem, to dwa różne typy, popraw na "0" z 0

do tego nie uzywaj paragrafow bo pozniej masz syf w kodzie jak to przenosisz itd =/

i nie rozumiem po co wszyscy robią sprawdzanie czy liczba argumentow jest równa 1 lub 2, przecież może być równa 3, i co? wtedy już wysyłasz poprawne użycie, a przecież ma jeden/dwa wymagane argumenty podane..

Cytat
  1. public class Gamemode implements CommandExecutor{
  2.  
  3.     public Gamemode(Main M){
  4.         M.getCommand("gamemode").setExecutor(this);
  5.     }

 

nazwy parameterów z małej litery, i najlepiej pełnymi nazwami, to tak jakby ktoś do ciebie krzyczał (przyjmijmy, że masz na imie Mateusz i koledzy na ciebie mówią M) ty wiesz o co chodzi, ale już ktoś kto cie nie zna - nie wie o co chodzi, tak samo masz z kodem, ty wiesz o co chodzi, ale ktoś kto będzie to w przeszłości edytował lub czytał nie będzie wiedział (czepiam sie trochę bo widać, że main, ale tak samo masz z resztą)

do tego side-effects:

Cytat
  1.         M.getCommand("gamemode").setExecutor(this);
  2.  

wiadomo, tak jest wygodniej, ale powinienes to robić gdzieś indziej, np. w głownej klasie podczas gdy rejestrujesz wszystko, a nie podczas tworzenia instancji tej klasy, bo skąd ktoś ma wiedzieć co tam robisz, to ma tworzyć obiekt, a nie go od razu wszędzie rejestrować itd =/

Odnośnik do komentarza
https://skript.pl/temat/28590-problem-z-17-linijka-w-eclipsie/#findComment-189149
Udostępnij na innych stronach

  • 0

https://code.skript.pl/SZxmy3ht nie testowane

discord jakby coś nie działało: https://discordapp.com/invite/suRRy3U (tylko na pw do mnie)

Edytowane przez LjayPL789
HeezQ

Usuwam formatowanie.

Notatka dodana przez HeezQ

bludis

Zamieniam pastebin na code.sk

Notatka dodana przez bludis

Odnośnik do komentarza
https://skript.pl/temat/28590-problem-z-17-linijka-w-eclipsie/#findComment-191281
Udostępnij na innych stronach

  • 0
W dniu 15.08.2018 o 16:44, DamageDMG1 napisał:

https://code.skript.pl/SZxmy3ht nie testowane

discord jakby coś nie działało: https://discordapp.com/invite/suRRy3U (tylko na pw do mnie)

zwracasz false, czyli informujesz ze cos poszlo nie tak, dostep do komendy ma KAZDY GRACZ nawet bez uprawnien,

jedyne co poprawiłeś to dałeś string zamiast int

Edytowane przez LjayPL789
Odnośnik do komentarza
https://skript.pl/temat/28590-problem-z-17-linijka-w-eclipsie/#findComment-191295
Udostępnij na innych stronach

  • 0
12 godzin temu, DamageDMG1 napisał:

@yooniks sprawdzanie uprawnień do komendy jest na samej jej początku, co do returnów mogłem się pomylić, bazowałem na kopiuj -> wklej jego kodu, później luknę

wiem, slepy nie jestem:

            if(sender instanceof Player || sender.hasPermission("gamemode.cmd")) {

szybka lekcja:

|| - lub

&& - i

warunek sie wykona jezeli wykonujacy komende jest graczem LUB ma permisje (tutaj tez bedzie dzialala pewnie konsola) 

poprawnie powinno byc && zamiast || i byłoby git.

Odnośnik do komentarza
https://skript.pl/temat/28590-problem-z-17-linijka-w-eclipsie/#findComment-191368
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ę...