Skocz do zawartości
  • 0

MALY PROBLEM


deusowy_yt

Pytanie

Witam,  moglby mi ktos wyjasnic dlaczego w 16 linijce kodu jest blad? "inv.setItem(0, s);"

package me.neroos.falseandtrue;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{
	
		Inventory inv = Bukkit.createInventory(null, 9, "PRAWDA CZY FALSZ");{
			inv.setItem(0, s);
	}
	
	boolean b = true;
	
	ItemStack s = new ItemStack(Material.STONE);{
		ItemMeta im = s.getItemMeta();
		im.setDisplayName("STONE");
		s.setItemMeta(im);
	}
		
	
	@Override
	public void onEnable() {
		System.out.println("ON");
	}
	

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(p.hasPermission("test.test")) {
			if(cmd.getName().equalsIgnoreCase("czyfalse")) {
				if(b == true) {
					p.sendMessage("true");
				}else {
					p.sendMessage("false");
					
				}
				
			}
			if(p.hasPermission("test.test")) {
				if(cmd.getName().equalsIgnoreCase("false")) {
					b = false;
				}
				
			}
			if(p.hasPermission("test.test")) {
				if(cmd.getName().equalsIgnoreCase("true")) {
					b = true;
				}
			}
			if(cmd.getName().equalsIgnoreCase("gui")) {
				if(b == true) {
					p.openInventory(inv);
				}else {
					p.sendMessage("TO JEST FALSE I NIE OTWORZY CI SIE GUI");
				}
				
			}
			
		}
		return false;
	}
}

 

Edytowane przez deusowy_yt
.
Odnośnik do komentarza
https://skript.pl/temat/27554-maly-problem/
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

@yooniksPomógłbyś mi z blokowaniem wyciągania itemów? Mozna powiedzieć ze ten kod działa jak enderchest wyciagne item i wloze cos innego to te itemy zostaja w gui. Oczywiscie po restarcie wszystko wraca do normy. Podejrzewam, ze to bedzie trzeba zrobic eventem kod:

package me.neroos.falseandtrue;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{
	
	boolean b = true;
	
	ItemStack s = new ItemStack(Material.STONE);{
		ItemMeta im = s.getItemMeta();
		im.setDisplayName("STONE");
		s.setItemMeta(im);
	}
	
	Inventory inv = Bukkit.createInventory(null, 9, "FALSE CZY TRUE");{
		inv.setItem(0, s);
	}
		
	
	@Override
	public void onEnable() {
		System.out.println("ON");
	}
		
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(p.hasPermission("test.test")) {
			if(cmd.getName().equalsIgnoreCase("czyfalse")) {
				if(b == true) {
					p.sendMessage("true");
				}else {
					p.sendMessage("false");
					
				}
				
			}
			if(p.hasPermission("test.test")) {
				if(cmd.getName().equalsIgnoreCase("false")) {
					b = false;
				}
				
			}
			if(p.hasPermission("test.test")) {
				if(cmd.getName().equalsIgnoreCase("true")) {
					b = true;
				}
			}
			if(cmd.getName().equalsIgnoreCase("gui")) {
				if(b == true) {
					p.openInventory(inv);
				}else {
					p.sendMessage("TO JEST FALSE I NIE OTWORZY CI SIE GUI");
				}
			}
		}
		return false;
	}
	
}

 

Odnośnik do komentarza
https://skript.pl/temat/27554-maly-problem/#findComment-182196
Udostępnij na innych stronach

  • 0
2 godziny temu, Sh1ft_S napisał:

@up

Ty chcesz to do skrypta dać xD?

nic nie bede pisac, po prostu "X  D"

3 godziny temu, deusowy_yt napisał:

@yooniksPomógłbyś mi z blokowaniem wyciągania itemów? Mozna powiedzieć ze ten kod działa jak enderchest wyciagne item i wloze cos innego to te itemy zostaja w gui. Oczywiscie po restarcie wszystko wraca do normy. Podejrzewam, ze to bedzie trzeba zrobic eventem kod:


package me.neroos.falseandtrue;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{
	
	boolean b = true;
	
	ItemStack s = new ItemStack(Material.STONE);{
		ItemMeta im = s.getItemMeta();
		im.setDisplayName("STONE");
		s.setItemMeta(im);
	}
	
	Inventory inv = Bukkit.createInventory(null, 9, "FALSE CZY TRUE");{
		inv.setItem(0, s);
	}
		
	
	@Override
	public void onEnable() {
		System.out.println("ON");
	}
		
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(p.hasPermission("test.test")) {
			if(cmd.getName().equalsIgnoreCase("czyfalse")) {
				if(b == true) {
					p.sendMessage("true");
				}else {
					p.sendMessage("false");
					
				}
				
			}
			if(p.hasPermission("test.test")) {
				if(cmd.getName().equalsIgnoreCase("false")) {
					b = false;
				}
				
			}
			if(p.hasPermission("test.test")) {
				if(cmd.getName().equalsIgnoreCase("true")) {
					b = true;
				}
			}
			if(cmd.getName().equalsIgnoreCase("gui")) {
				if(b == true) {
					p.openInventory(inv);
				}else {
					p.sendMessage("TO JEST FALSE I NIE OTWORZY CI SIE GUI");
				}
			}
		}
		return false;
	}
	
}

 

Nie wiem o co ci dokladnie chodzi, ale jezeli po prostu chcesz zablokowac wyciaganie itemow z okreslonego inventory, ktore masz gdzies zapisane to po prostu przy evencie InventoryClickEvent sprawdzasz czy inventory nie jest nullem (bo gracz moze kliknac poza gui), jezeli jest to return, sprawdzasz nazwe tego inventory, jezeli jest rowna inventory ktore masz gdzies zapisane to ustawiasz cancelled na true, czyli Cancellable#setCancelled(true); 

Wspomniales cos o enderchescie, nie wiem o co dokladnie ci chodzi, ale jezeli chcesz zablokowac wyciaganie itemow z enderchesta to po prostu sprawdzasz InventoryType uzywajsz Inventory#getType, jezeli jest 'ENDERCHEST' to znowu tak jak wyzej napisalem, cancelujesz event.

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/Cancellable.html  

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryClickEvent.html

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryType.html

 

Odnośnik do komentarza
https://skript.pl/temat/27554-maly-problem/#findComment-182274
Udostępnij na innych stronach

  • 0
5 minut temu, yooniks napisał:

nic nie bede pisac, po prostu "X  D"

Nie wiem o co ci dokladnie chodzi, ale jezeli po prostu chcesz zablokowac wyciaganie itemow z okreslonego inventory, ktore masz gdzies zapisane to po prostu przy evencie InventoryClickEvent sprawdzasz czy inventory nie jest nullem (bo gracz moze kliknac poza gui), jezeli jest to return, sprawdzasz nazwe tego inventory, jezeli jest rowna inventory ktore masz gdzies zapisane to ustawiasz cancelled na true, czyli Cancellable#setCancelled(true); 

Wspomniales cos o enderchescie, nie wiem o co dokladnie ci chodzi, ale jezeli chcesz zablokowac wyciaganie itemow z enderchesta to po prostu sprawdzasz InventoryType uzywajsz Inventory#getType, jezeli jest 'ENDERCHEST' to znowu tak jak wyzej napisalem, cancelujesz event.

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/Cancellable.html  

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryClickEvent.html

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryType.html

 

Nie no bo widziałem że owy pan nie wiedział nic w skripcie dlatego myślałem że skopiował kod javy ze strony i chciał w skripcie użyć

Odnośnik do komentarza
https://skript.pl/temat/27554-maly-problem/#findComment-182281
Udostępnij na innych stronach

  • 0
12 minut temu, Sh1ft_S napisał:

Nie no bo widziałem że owy pan nie wiedział nic w skripcie dlatego myślałem że skopiował kod javy ze strony i chciał w skripcie użyć

To moze czas na nauke czytania ze zrozumieniem? Piszesz z du*y cos o skripcie, jak jasno napisal ze ma problem z kodem pluginu napisanego w javie (co nawet swiadczy po dziale samego tematu) - bo robisz tylko niepotrzebny spam

 

Co do samego tematu:

if (myBoolean == true) {
}

//to tak samo jak:

if (myBoolean) {
}

// krocej, szybciej, ladniej
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String l, String[] args) {
		Player p = (Player) sender;
		if(p.hasPermission("test.test")) {

A co jezeli CommandSender nie jest graczem, tylko np. mhmmm, herobrinem lub konsolą?

Sam CommandSender ma juz metode 'hasPermission', i przed castowaniem playera do sendera najlepiej mozesz sprawdzac cos w tym stylu:

if (!(sender instanceof Player)) {
	sender.sendMessage("tylko gracz moze wywolac ta komende!");
	return;
}

I zamiast robienia 10 komend mozesz uzyc argumentow, czyli np:

if (cmd.getName().equalsIgnoreCase("mycommand")) { //lub label
	if (args.length > 0) {
		if (args[0].equalsIgnoreCase("test")) {
			sender.sendMessage("test! Wywolales komende: \"mycommand test\"");
		}
		else {
			sender.sendMessage("niepoprawny argument!");
		}
	}
	else {
		sender.sendMessage("zbyt malo argumentow!");
	}
}

do tego: http://www.samouczekprogramisty.pl/modyfikatory-dostepu-w-jezyku-java/

https://pl.wikipedia.org/wiki/Final_(Java)

https://javastart.pl/baza-wiedzy/darmowy-kurs-java/programowanie-obiektowe/argumenty-metod (doczytaj bardziej o metodach zwracajacych COS, a nie void)

Edytowane przez yooniks
Odnośnik do komentarza
https://skript.pl/temat/27554-maly-problem/#findComment-182287
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ę...