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'