- Баллы
- 66
- Имя в Minecraft
- dnebik
Есть непонятное явление в виде ошибки:
Есть код:
Предпологаю что ошибка вот тут и связана с "droploc"
пыхчу с этим дропом давно и уже совершенно не понимаю что не так, вроде уже сделал что все работает, но ошибка вылазиет каждый раз
Код:
[07:34:54 ERROR]: Could not pass event ItemSpawnEvent to MMOBlocks v0.1
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callItemSpawnEvent(CraftEventFactory.java:311) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.World.addEntity(World.java:1042) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.WorldServer.addEntity(WorldServer.java:1064) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.World.addEntity(World.java:1011) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.Block.a(Block.java:372) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.Block.dropNaturally(Block.java:355) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.Block.b(Block.java:342) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.Block.a(Block.java:464) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.PlayerInteractManager.breakBlock(PlayerInteractManager.java:369) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.PlayerInteractManager.a(PlayerInteractManager.java:216) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:882) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:40) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:10) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source) ~[?:1.8.0_131]
at java.util.ArrayList$Itr.next(Unknown Source) ~[?:1.8.0_131]
at me.dneb.MMOBlocks.BreakBlock.onDrop(BreakBlock.java:105) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.jar:git-Spigot-ede465d-bb4ae3b]
... 25 more
Есть код:
JavaScript:
public class BreakBlock implements Listener{
private MMOBlocks plugin;
private FileConfiguration file = null;
private Configs onBreak = null;
ArrayList<Location> droploc = null;
BreakBlock(MMOBlocks plugin){
this.plugin = plugin;
plugin.getServer().getPluginManager().registerEvents(this, plugin);
droploc = new ArrayList<Location>();
file = new YamlConfiguration();
onBreak = new Configs(plugin, "onBreak.yml", "", "me/dneb/MMOBlocks/Files/onBreak.yml");
}
@EventHandler
public void onBlockBreak(BlockBreakEvent e){
Player p = e.getPlayer();
Block b = e.getBlock();
for (String Block : onBreak.getConfigurationSection("Blocks").getKeys(false)){
if (b.getType().toString().equals(Block))
{
//СЛОМАН НУЖНЫМ ПРЕДМЕТОМ
if (onBreak.contains("Blocks." + Block + ".with"))
if (!BreackWith(p.getInventory().getItemInMainHand(), onBreak.getStringList("Blocks." + Block + ".with"))) continue;
//УДАЛИТЬ ДРОП
if (onBreak.contains("Blocks." + Block + ".cleardrop"))
if (StringToBoolean(onBreak.getString("Blocks." + Block + ".cleardrop")))
droploc.add(b.getLocation());
//ВОСТАНОВИТЬ БЛОК ЧЕРЕЗ
if (onBreak.contains("Blocks." + Block + ".delay"))
{
int delay = StringToInteger(onBreak.getString("Blocks." + Block + ".delay"));
Material mat = b.getType();
byte data = b.getData();
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
b.setType(mat);
b.setData(data);
}
}, delay);
}
//ДОБАВИТЬ ДРОП
if (onBreak.contains("Blocks." + Block + ".drop"))
{
List<ItemStack> drop = dropList(onBreak.getStringList("Blocks." + Block + ".drop"));
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
spawnDrop(b.getLocation(), drop);
}
}, 1);
}
//ЗАМЕНИТЬ НА ДРУГОЙ БЛОК
if (onBreak.contains("Blocks." + Block + ".replace"))
{
Material mat = StringToMaterial(onBreak.getString("Blocks." + Block + ".replace"));
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
b.setType(mat);
}
}, 1);
}
return;
}
}
e.setCancelled(true);
}
@EventHandler
public void onItemSpawn(ItemSpawnEvent e)
{
Location spawnloc = e.getLocation();
if (!droploc.isEmpty())
for (Location loc : droploc)
{
if (loc.getBlockX() == spawnloc.getBlockX())
if (loc.getBlockY() == spawnloc.getBlockY())
if (loc.getBlockZ() == spawnloc.getBlockZ())
{
e.setCancelled(true);
droploc.remove(loc);
}
}
}
//спавним предметы в loc
public void spawnDrop(Location loc, List<ItemStack> items)
{
for (ItemStack item : items)
{
Bukkit.broadcastMessage("droping: " + item);
loc.getWorld().dropItemNaturally(loc, item);
}
}
//сравнение предмета в руке и возможных предметов
public boolean BreackWith(ItemStack iteminhend, List<String> items)
{
if (iteminhend.getType() == Material.AIR || iteminhend == null) {return false;}
for (String item : items)
if (iteminhend.getType().toString().equalsIgnoreCase(item)) {return true;}
return false;
}
//перевод String в boolean
public boolean StringToBoolean(String string)
{
try{
return Boolean.valueOf(string);
}catch(Exception exc){return false;}
}
//создание List<ItemStack> из String
public List<ItemStack> dropList(List<String> strings)
{
if (strings != null && strings.size() >= 1)
{
List<ItemStack> list = new ArrayList<ItemStack>();
for (String item : strings)
{
ItemStack newitem = null;
String[] split = item.split(",");
int chans = 100;
Material mat = StringToMaterial(split[0]);
if (mat == null) continue;
if (split.length == 4 || split.length == 5)
{
try{
int max = Integer.valueOf(split[split.length - 2]);
int min = Integer.valueOf(split[split.length - 3]);
Random rand = new Random();
int amount = min;
if (min != max)
amount = rand.nextInt(max - min) + min;
short data = 0;
if (split.length == 5) Short.valueOf(split[1]);
chans = Integer.valueOf(split[split.length - 1]);
newitem = new ItemStack(mat, amount, data);
}catch(Exception exc){continue;}
Random rand = new Random();
int some = rand.nextInt(100);
if (some <= chans)
list.add(newitem);
}else continue;
}
return list;
}else return null;
}
//перевод String в Material
public Material StringToMaterial(String string)
{
try{
return Material.valueOf(string);
}catch(Exception exc){return null;}
}
//перевод String в Integer
public Integer StringToInteger(String string)
{
try{
return Integer.valueOf(string);
}catch(NumberFormatException exc){return 0;}
}
}
Предпологаю что ошибка вот тут и связана с "droploc"
JavaScript:
@EventHandler
public void onItemSpawn(ItemSpawnEvent e)
{
Location spawnloc = e.getLocation();
if (!droploc.isEmpty())
for (Location loc : droploc)
{
if (loc.getBlockX() == spawnloc.getBlockX())
if (loc.getBlockY() == spawnloc.getBlockY())
if (loc.getBlockZ() == spawnloc.getBlockZ())
{
e.setCancelled(true);
droploc.remove(loc);
}
}
}
пыхчу с этим дропом давно и уже совершенно не понимаю что не так, вроде уже сделал что все работает, но ошибка вылазиет каждый раз