Skocz do zawartości
  • 0

Problem z argumentami


deusowy_yt

Pytanie

Czesc, postanowiłem, że teraz czas na argumenty i stworzyłem oto taki paskudny kod:

package me.neroos.rangi.cmd;

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

public class Komendy implements CommandExecutor{
	
	boolean vip_14d = false;
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(cmd.getName().equalsIgnoreCase("neroranga")) {
			if(args.length >=3) {
				p.sendMessage("ZLA LICZBA ARGUMENTOW");
			}else {
				if(args[0].equalsIgnoreCase("vip14d")) {
					String Gracz = args[1];
					if(Bukkit.getPlayer(Gracz) !=null) {
						Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "pex user" + args[1] + "group set vip");
						vip_14d = true;
						return true;
					}
				}
			}
		}
		if(cmd.getName().equalsIgnoreCase("ppranga")) {
			if(vip_14d == true) {
				sender.sendMessage("VIP NA 14 DNI: AKTYWNY");
			}else {
				sender.sendMessage("VIP NA 14 DNI: BRAK");
				return true;
			}
		}
		return false;
	}
}

Generalnie  ktoś kto się zna na javie pewnie będzie wiedział o co chodzi, ale dla tych co chcą wiedzieć to chodzi mi o to, aby po wpisaniu komendy neroranga vip14d [GRACZ], dalo rangę argumentowi 1. Niestety tak się nie dzieje tym razem proszę o wytłumaczenie, a nie podanie kodu. Z góry dzięki za pomoc

Nicku

Zmieniam nazwę tematu.

Notatka dodana przez Nicku

Odnośnik do komentarza
https://skript.pl/temat/27615-problem-z-argumentami/
Udostępnij na innych stronach

10 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
Godzinę temu, SzymiTV napisał:

Jeżeli są jakieś błędy podaj mi je, postaram ci pomóc chodź teraz jestem w szkole i dużo nie zdziałam.

Nie wiem po co sie wypowiadacie i piszecie takie glupoty jak "sprobuje ci pomoc, ale napisz co jest zle" - skoro widac jasno:

Cytat

						Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "pex user" + args[1] + "group set vip");
Cytat

pex user" + args[1] + "group set vip

to tak jakbys wpisal: pex user yooniksgroup set vip - nie zadziala.

poza tym permissionsex ma swoje api dla developerow ktorego mozesz uzyc, bez wykonywania komend z konsoli.

do tego masz jeden boolean na wszystkich graczy, nie bedzie to dzialalo prawidlowo ;/

Cytat

public class Komendy implements CommandExecutor{
	
	boolean vip_14d = false;
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(cmd.getName().equalsIgnoreCase("neroranga")) {
			if(args.length >=3) {
				p.sendMessage("ZLA LICZBA ARGUMENTOW");
			}else {
				if(args[0].equalsIgnoreCase("vip14d")) {
					String Gracz = args[1];

nazwy zmiennych z malej litery! "gracz/player"- nie "Gracz"!

Cytat

		Player p = (Player) sender;
		if(cmd.getName().equalsIgnoreCase("neroranga")) {

castujesz od razu playera do commandsendera, nawet nie sprawdzasz czy to jest gracz, a jak komende wykona konsola to zacznie sypac ci bledami i kod nie przejdzie dalej ;/

tak samo po co sprawdzasz nazwe komendy skoro to jasne, bo juz w onenable nadajesz komendzie okreslona nazwe, rejestrujac ja ;/

@edit

do tego: 

Cytat

		return false;

zwracajac false informujesz bukkit'a, ze cos poszlo zle podczas wykonywania komendy i informujesz go ,ze ma wyswietlic poprawne uzycie.

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/command/CommandExecutor.html#onCommand(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[])

Edytowane przez yooniks
Odnośnik do komentarza
https://skript.pl/temat/27615-problem-z-argumentami/#findComment-182733
Udostępnij na innych stronach

  • 0

@yooniksOk, i tak byłem pewny, że ten kod będzie paskudny. Dzięki za radę, będę się do nich dostosowywać, ale nie mam pojęcia jak przypisać zmienną boolean dla gracza. Wątpię, abym znalazł coś w internetach.

Edytowane przez deusowy_yt
Literowka
Odnośnik do komentarza
https://skript.pl/temat/27615-problem-z-argumentami/#findComment-182814
Udostępnij na innych stronach

  • 0
11 minut temu, deusowy_yt napisał:

@yooniksOk, i tak byłem pewny, że ten kod będzie paskudny. Dzięki za radę, będę się do nich dostosowywać, ale nie mam pojęcia jak przypisać zmienną boolean dla gracza. Wątpię, abym znalazł coś w internetach.

Masz od tego mapki, obiekty itd.

Tak samo jak istnieje obiekt Player w bukkicie mozesz sobie zrobic obiekt SimpleUser i tam trzymac okreslone dane uzytkownika, a pozniej tylko je w jakis sposob ladowac.

private final Map<UUID, String> simpleMap = new HashMap<>();
  
private void simpleMethod() {
	final UUID simpleUUID = UUID.randomUUID();
  	this.simpleMap.put(simpleUUID, "to jest jakas wartosc dla okreslonego klucza (uuid)!");
  
	System.out.println("Klucz uuid: " + simpleUUID.toString() + " z mapki wynosi: " + this.simpleMap.get(simpleUUID));
}

no ale tez nie ogarniesz wszystkiego od razu, wszystko przychodzi z czasem

Edytowane przez yooniks
literowka
Odnośnik do komentarza
https://skript.pl/temat/27615-problem-z-argumentami/#findComment-182824
Udostępnij na innych stronach

  • 0

@yooniksNo nic nie rozumiem z kawałka kodu jedynie  troche z pierwszej linijki

Napisales wczesniej po co sprawdzam nazwe komendy wiec mam pytanie:

	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "broadcast elo");
		return true;

Wystarczy zarejestrowac komendy w onEnable i to juz bedzie dzialac?

Odnośnik do komentarza
https://skript.pl/temat/27615-problem-z-argumentami/#findComment-182825
Udostępnij na innych stronach

  • 0
2 godziny temu, deusowy_yt napisał:

@yooniksNo nic nie rozumiem z kawałka kodu jedynie  troche z pierwszej linijki

Napisales wczesniej po co sprawdzam nazwe komendy wiec mam pytanie:


	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "broadcast elo");
		return true;

Wystarczy zarejestrowac komendy w onEnable i to juz bedzie dzialac?

tak, jezeli robisz cos typu:

//javaplugin
this.getCommand("simpleCommand").setExecutor(new ClassImplementingCommandExecutor());

 

Odnośnik do komentarza
https://skript.pl/temat/27615-problem-z-argumentami/#findComment-182857
Udostępnij na innych stronach

  • 0
Teraz, deusowy_yt napisał:

Ok, czyli wystarczy jedna linijka do onEnable i nie musze sprawdzac nazwe komendy np w innej klasie@yooniks

tak, a jak juz masz sprawdzac, bo np. robisz to w np. mainie i chcesz sprawdzac kilka komend to mozesz uzyc od razu parametru String -> label/commandlabel, a nie cmd.getName()

Odnośnik do komentarza
https://skript.pl/temat/27615-problem-z-argumentami/#findComment-182859
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ę...