Instrukcja if nie reaguje.

0

Witam. Od paru dni pisze sobie plugin do silnika bukkit w eclipse. Problem jest taki, że w lini 218 znajduje się linijka " if(midsench[2] != "null") { " Polega to na tym, że jak zmienna midsench[2] NIE jest wyrazem "null" to wtedy wykonuje instrucje zawarte w if. Jednak nie działa to tak, jak powinno. Mimo, że zmienna midsench[2] wynosi null ( dodałem Bukkit.broadcastMessage(midsench[2]) i wywala mi na chat wyraz null) Generalnie plugin pobiera dane z konfiguracji, dzieli je i ta zmienna ma zawierać w sobie enchant, który ma zostać nałożony, na dany przedmiot. Jeżeli w configu ktoś w miejsce na enchant wpisze null, to wtedy ma nie nakładać go. Drugi problem jest taki, że w configu ustawia się szanse na wylot skrzynki z gracza. Mimo, że ustawiony jest na 100, to nie zawsze wylatuje. Program i konfiguracja poniżej:

package me.przemovi.pandora;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Monster;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{
	private List<String> pandrop;
	private List<String> pandoraitemlore;
	ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
	ArrayList<ItemStack> pdrops = new ArrayList<ItemStack>();
	ArrayList<String> lores = new ArrayList<String>();
	
	String[] pitemlore;
	String[] pdrop;
	int pitemlorelenght;
	int pdroplenght;
	String idmeta;
	String Samount;
	String RawPItemName;
	String PItemName;
	String idimeta[];
	int id;
	int amount;
	//Short shrt = Short.valueOf(idimeta[1]);
	Short shrt;
	
	@Override
	public void onEnable() {
		getServer().getPluginManager().registerEvents(this, this);
	    reloadConfig();
	    getConfig().options().copyDefaults(true);
	    saveDefaultConfig();
	    
	    getLogger().info("playerdrop " + getDescription().getVersion() + " enabled");
	    pandrop = getConfig().getStringList("pandrop");
	    pandoraitemlore = getConfig().getStringList("pandoraitemlore");
	    
	    pdrop = pandrop.toArray(new String[0]);
	    pdroplenght =  pandrop.size();
	    pitemlore = pandoraitemlore.toArray(new String[0]);
		pitemlorelenght =  pandoraitemlore.size();
		idmeta = getConfig().getString("pandoraitem");
		Samount = getConfig().getString("pandoraitemamount");
		RawPItemName = getConfig().getString("pandoraitemname");
		PItemName = ChatColor.translateAlternateColorCodes('&', RawPItemName.replace("_", " "));
		String idimeta[] = idmeta.split(":");
		id = Integer.parseInt(idimeta[0]);
		amount = Integer.parseInt(Samount);
		//Short shrt = Short.valueOf(idimeta[1]);
		shrt = 0;
		if(indexExists(idimeta, 1)) {
			shrt = Short.valueOf(idimeta[1]);
		}
	}
	@Override
	public void onDisable() {
		getLogger().info("Pandora disabled");
	}
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
	  {
	    if (cmd.getName().equalsIgnoreCase("pandora")) {
	      if (args.length > 0)
	      {
	        if (!sender.hasPermission("pandora.reload"))
	        {
	          sender.sendMessage(ChatColor.RED + "Nie masz uprawnie� do u�ycia tej komendy!");
	          
	          return true;
	        }
	        if (args[0].equalsIgnoreCase("reload"))
	        {
	          if (!sender.hasPermission("pandora.reload"))
	          {
	            sender.sendMessage(ChatColor.RED + "Nie masz uprawnie� do u�ycia tej komendy!");
	            
	            return true;
	          }
	          reloadConfig();
	          sender.sendMessage(ChatColor.GREEN + "Konfiguracja Pandory zosta�a prze�adowana!");
	          
	          return true;
	        }
	      }
	      else
	      {
	        sender.sendMessage("---------- Pandora ----------");
	        sender.sendMessage("/pandora reload");
	        sender.sendMessage("Pandora v1.2 by PrzemoVi");
	        return true;
	      }
	    }
	    return false;
	  }
	@SuppressWarnings("deprecation")
	@EventHandler
	public void onEntityDeath(EntityDeathEvent e) {
		Player killer = e.getEntity().getKiller();
		if(killer != null) {
			/*
			String[] pitem = pandoraitemlore.toArray(new String[0]);
			int pitemlorelenght =  pandoraitemlore.size();
			String idmeta = getConfig().getString("pandoraitem");
			String Samount = getConfig().getString("pandoraitemamount");
			String RawPItemName = getConfig().getString("pandoraitemname");
			String PItemName = ChatColor.translateAlternateColorCodes('&', RawPItemName.replace("_", " "));
			String idimeta[] = idmeta.split(":");
			int id = Integer.parseInt(idimeta[0]);
			int amount = Integer.parseInt(Samount);
			//Short shrt = Short.valueOf(idimeta[1]);
			Short shrt = 0;
			if(indexExists(idimeta, 1)) {
				shrt = Short.valueOf(idimeta[1]);
			}
			*/
			if (e.getEntity() instanceof Monster) {
				Bukkit.broadcastMessage("instanceof Monster");
				Random random = new Random();
				double chance = this.getConfig().getDouble("pandoraMonsterDropChance",50)/100;
				Bukkit.broadcastMessage("zara będzie if (nextduble...)");
				if(random.nextDouble() <= chance){
					Bukkit.broadcastMessage("Jest IF!!!");
					ItemStack is = new ItemStack(id, amount, shrt);
					ItemMeta im = is.getItemMeta();
					im.setDisplayName(PItemName);
					int x = 0;
					lores.clear();
					while(pitemlorelenght != x){
						String Lore = pitemlore[x];
						lores.add(Lore);
						x++;
					}
					im.setLore(lores);
					is.setItemMeta(im);
					drops.add(is);
					if(x == pandoraitemlore.size()){
						e.getDrops().addAll(drops);
						x = 0;
						drops.clear();
					}
				}
			} //danooct1.com
			if (e.getEntity() instanceof Player) {
				Random random = new Random();
				double chance = this.getConfig().getDouble("pandoraPlayerDropChance",50)/100;
				if(random.nextDouble() <= chance){
					ItemStack is = new ItemStack(id, amount, shrt);
					ItemMeta im = is.getItemMeta();
					im.setDisplayName(PItemName);
					int x = 0;
					lores.clear();
					while(pitemlorelenght != x){
						String Lore = pitemlore[x];
						lores.add(Lore);
						x++;
					}
					im.setLore(lores);
					is.setItemMeta(im);
					drops.add(is);
					if(x == pandoraitemlore.size()){
						e.getDrops().addAll(drops);
						x = 0;
						drops.clear();
					}
				}
			}
		}
	}
	@SuppressWarnings("deprecation")
	@EventHandler
    public void onPlayerInteractEvent(PlayerInteractEvent e){
		if(e.getAction() == Action.LEFT_CLICK_AIR 
				|| e.getAction() == Action.RIGHT_CLICK_AIR
				|| e.getAction() == Action.LEFT_CLICK_BLOCK
				|| e.getAction() == Action.RIGHT_CLICK_BLOCK){
			Player player = e.getPlayer();
			Material MAT = Material.getMaterial(id);
			if(player.getItemInHand() != null && player.getItemInHand().getType() == MAT){
				ItemStack iteminhand = player.getItemInHand();
				ItemMeta metainhand = iteminhand.getItemMeta();
				String inhandname = metainhand.getDisplayName();
				if(inhandname == PItemName){
					//tu kod wykonywany po kliknięciu trzymając dany item...
					int i = 0;
					  //int moblistlenght = playeritems.size();
					  while(i < pdroplenght){
								String midsench[] = pdrop[i].split(" ");
								String idsid = midsench[0];
								String idsidpod[] = idsid.split(":");
								int amount = Integer.parseInt(midsench[1]);
								int id = Integer.parseInt(idsidpod[0]);
								Short shrt = 0;
								if(indexExists(idsidpod, 1)) {
									shrt = Short.valueOf(idsidpod[1]); //FUCK IT
								}
								ItemStack is = new ItemStack(id, amount, shrt);
								
								if(indexExists(midsench, 2)) {
									if(midsench[2] == "null") {
										if(midsench[2].indexOf(",") != -1) {
											String LOEchs[] = midsench[2].split(",");
											int k = 0;
											while(indexExists(LOEchs, k)) {
												String Enchant[] = LOEchs[k].split(":");
												int enchantLVL = Integer.parseInt(Enchant[1]);
												Enchantment enchantTYPE = Enchantment.getByName(Enchant[0]);
												is.addUnsafeEnchantment(enchantTYPE, enchantLVL);
												k++;
											}
										} else {
											String Enchant[] = midsench[2].split(":");
											int enchantLVL = Integer.parseInt(Enchant[1]);
											Enchantment enchantTYPE = Enchantment.getByName(Enchant[0]);
											is.addUnsafeEnchantment(enchantTYPE, enchantLVL);
										}
									}
								}
								if(indexExists(midsench, 3)){
									ItemMeta im = is.getItemMeta();
									String DisplayName = ChatColor.translateAlternateColorCodes('&', midsench[3].replace("_", " "));
									im.setDisplayName(DisplayName);
									if(indexExists(midsench, 4)){
										int count = StringUtils.countMatches(midsench[4], ",");
										if(count >= 1){
											lores.clear();
											String PodzieloneLore[] = midsench[4].split(",");
											int licznik = count+1;
											int licznik2 = 0;
											while(licznik !=0){
												String Lore = ChatColor.translateAlternateColorCodes('&', PodzieloneLore[licznik2].replace("_", " "));
												lores.add(Lore);
												licznik = licznik-1;
												licznik2++;
											}
											im.setLore(lores);
										} else {
											lores.clear();
											lores.add(midsench[4]);
											im.setLore(lores);
										}
									}
									is.setItemMeta(im);
								}
								//drops.add(is);
								player.getInventory().addItem(is);
								i++;
					  }
					  if(i == pdroplenght){
						//drops.add(new ItemStack(id, amount, shrt));
						  	//e.getDrops().addAll(drops);
							i = 0;
							//drops.clear();
					  }
				}
			}
		}
	}
	public boolean indexExists(String[] array,int index){
	    if(array!=null && index >= 0 && index < array.length)
	        return true;
	    else 
	       return false;
	}
}

Konfiguracja:

pandoraPlayerDropChance: '100' #szansa na wylot skrzynki pandory z gracza
pandoraMonsterDropChance: '100' #szansa na wylot skrzynki pandory z potwora
pandoraitem: '122:0' #item skrzynki pandory (122 - smocze jajo)
pandoraitemamount: '1' #ile przy "trafieniu" wylatuje skrzynek
pandoraitemname: '&2Skrzynka Pandory' #nazwa skrzynki (itemu)
pandoraitemlore: #Opis skrzynki (itemu)
  - 'HUJWE' #linia 1
  - 'HUJWE 2' #linia 2
  - 'WŁAŚNIE TA!' #linia 3 (możesz dodać lub usunąć dodatkowe linie.)
pandrop:
  - '1 10 null &4&lDirt_Bogów!!! &2&lGdy_trzymasz_go_w_ręce...,&3&lJesteś_Bogiem!!!'
  - '267 1'
  - '268 1 null NAZWA_ITEMU 1_LINIA_OPISU,2_LINIA_OPISU'
  - '276 1 KNOCKBACK:2 NAZWA_ITEMU 1_LINIA_OPISU,2_LINIA_OPISU'
  - '276 1 KNOCKBACK:2,DAMAGE_ALL:2 NAZWA_ITEMU 1_LINIA_OPISU,2_LINIA_OPISU'
  - '272 1 KNOCKBACK:1'
  - '276 1 KNOCKBACK:2,DAMAGE_ALL:2'
0

"null".equals(blabal[2]) ?

0

Tzn, gdzie mam to wstawić?

0

A... w ifa... sprawdze i odpowiem, czy działa

0

Możesz to złapać try catch, że jeżeli dany obiekt jest nullem to zrób coś.

0

Ok, zajebiście działa :D dzięki za pomoc :D

0

Nie ma problemu. Pamiętaj, że jeśli robisz porównanie "jakisString" == "null" to porównujesz referencje (2 różnych) obiektów, a nie ich zawartość. equals porównuje zawartość. A to że zawartość drugiego to akurat wyraz null nic nie zmienia:P powodzenia

0

Hmm... Nie zrozumiałem. jaka jest różnica między referencjami a zawartością? (W javie jestem nowy, w C to działało)

0

Bo np. w lini: if(i == pdroplenght){ użyłem ==, a działa

0

Dzieję się tak ponieważ porównywałeś typy prymitywne, a nie obiekty. Typy prymitywne to po prostu wartość, tak jak w pdroplenght - to np. wartość całkowita równa 3. String "null" to już obiekt, z którym możesz wykonywać różne rzeczy, a nie tylko działać na wartości np wywołać metodę equals, która zwróci wynik (typ prymitywny również), który będzie oznaczał czy twój obiekt jest równy obiektowi porównywanemu

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
https://docs.oracle.com/javase/tutorial/java/javaOO/

1 użytkowników online, w tym zalogowanych: 0, gości: 1