- Баллы
- 76
Понадобилось мне сделать кастомный эффект. Столкнулся с проблемами, что массив PotionEffectType[] переполняется при добавлении нового эффекта и еще был "запрет" регистрации новых эффектов. Эти проблемы решил, но при наложении этого эффекта на игрока сервер крашится. Можно ли это как-то решить? Может, кто сталкивался
Класс Effect.java:
Регистрация еффекта:
Краш-репорт:
Класс Effect.java:
Код:
public class Effect extends PotionEffectType {
public static Effect CUSTOM_EFFECT = new Effect(28);
public Effect(int id) {
super(id);
}
@Override
public double getDurationModifier() {
return 1;
}
@Override
public String getName() {
return "custom effect";
}
@Override
public boolean isInstant() {
return false;
}
@Override
public Color getColor() {
return Color.RED;
}
}
Регистрация еффекта:
Код:
private void setFinalStaticValue(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
private void setStaticValue(Field field, Object newValue) throws Exception {
field.setAccessible(true);
field.set(null, newValue);
}
@Override
public void onLoad() {
try {
PotionEffectType[] defPotions = PotionEffectType.values();
PotionEffectType[] potions = new PotionEffectType[29];
System.arraycopy(defPotions, 0, potions, 0, defPotions.length);
setFinalStaticValue(PotionEffectType.class.getDeclaredField("byId"), potions);
setStaticValue(PotionEffectType.class.getDeclaredField("acceptingNew"), true);
} catch (Exception e) {
e.printStackTrace();
}
PotionEffectType.registerPotionEffectType(Effect.CUSTOM_EFFECT);
}
Краш-репорт:
Код:
[18:11:22] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'custompotion' in plugin Dungeons v1.0
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1397) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1232) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_221]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_221]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]
Caused by: java.lang.NullPointerException
at net.minecraft.server.v1_12_R1.EntityLiving.a(EntityLiving.java:740) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityPlayer.a(EntityPlayer.java:1098) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.addEffect(EntityLiving.java:692) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at org.bukkit.craftbukkit.v1_12_R1.entity.CraftLivingEntity.addPotionEffect(CraftLivingEntity.java:263) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at org.bukkit.craftbukkit.v1_12_R1.entity.CraftLivingEntity.addPotionEffect(CraftLivingEntity.java:253) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at io.ilyahaker.CustomPotion.onCommand(CustomPotion.java:16) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
... 15 more
[18:11:22] [Server thread/WARN]: Failed to handle packet for /127.0.0.1:51161
net.minecraft.server.v1_12_R1.ReportedException: Ticking player
at net.minecraft.server.v1_12_R1.EntityPlayer.playerTick(EntityPlayer.java:394) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerConnection.e(PlayerConnection.java:139) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.NetworkManager.a(NetworkManager.java:233) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:140) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:845) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]
Caused by: java.lang.NullPointerException
at net.minecraft.server.v1_12_R1.MobEffect.tick(SourceFile:97) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.tickPotionEffects(EntityLiving.java:556) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.Y(EntityLiving.java:305) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.Entity.B_(Entity.java:320) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.B_(EntityLiving.java:1873) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityHuman.B_(EntityHuman.java:145) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityPlayer.playerTick(EntityPlayer.java:313) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
... 8 more
[18:11:22] [Server thread/INFO]: Top9ine lost connection: Internal server error
[18:11:22] [Server thread/ERROR]: Encountered an unexpected exception
net.minecraft.server.v1_12_R1.ReportedException: Ticking player
at net.minecraft.server.v1_12_R1.EntityPlayer.playerTick(EntityPlayer.java:394) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerList.disconnect(PlayerList.java:408) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1102) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.NetworkManager.handleDisconnection(NetworkManager.java:319) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:174) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:845) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]
Caused by: java.lang.NullPointerException
at net.minecraft.server.v1_12_R1.MobEffect.tick(SourceFile:97) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.tickPotionEffects(EntityLiving.java:556) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.Y(EntityLiving.java:305) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.Entity.B_(Entity.java:320) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.B_(EntityLiving.java:1873) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityHuman.B_(EntityHuman.java:145) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityPlayer.playerTick(EntityPlayer.java:313) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
... 9 more
[18:11:22] [Server thread/ERROR]: Cause of unexpected exception was
java.lang.NullPointerException: null
at net.minecraft.server.v1_12_R1.MobEffect.tick(SourceFile:97) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.tickPotionEffects(EntityLiving.java:556) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.Y(EntityLiving.java:305) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.Entity.B_(Entity.java:320) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityLiving.B_(EntityLiving.java:1873) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityHuman.B_(EntityHuman.java:145) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.EntityPlayer.playerTick(EntityPlayer.java:313) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerList.disconnect(PlayerList.java:408) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1102) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.NetworkManager.handleDisconnection(NetworkManager.java:319) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:174) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:845) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) ~[minecraft.jar:git-Spigot-eb3d921-b9f1615]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [minecraft.jar:git-Spigot-eb3d921-b9f1615]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]