Вызов методов плагина из мода

  • Автор темы Автор темы Sirse
  • Дата начала Дата начала

Sirse

Старожил
Пользователь
Баллы
173
Имя в Minecraft
Sirse
Добрый день.
Упарываюсь и пытаюсь использовать GriefPrevention API (которого по идее нет) для проверки на наличие привата в моде BuildCraft. (Нет, BlockBreakEvent не православен в этом плане).
Набросал примерно это говняцо

public static boolean BlockBreakCheck(World world, int x, int y, int z,String username) {
Player player = CraftFakePlayer.getPossiblyRealPlayerBukkitEntity(world, username, false);
Block block = world.getWorld().getBlockAt(x, y, z);
BlockBreakEvent event = new BlockBreakEvent(block, player);
Plugin griefPrevention = world.getServer().getPluginManager().getPlugin("GriefPrevention");
if((griefPrevention != null) && griefPrevention.isEnabled()) {
WorldConfig wc = GriefPrevention.instance.getWorldCfg(block.getWorld());
if (!wc.Enabled()) {
return true;
} else if (wc.getBreakBlockRules().Allowed(block.getLocation(), player).Denied()) {
return false;
} else {
//ЛОГИ, БОЛЬШЕ ЛОГОВ СЮДА!
return true;
}
} else { //Тут ещё будет поддержка WG.
return false;
}
}


Как я и ожидал, получил ошибку об отсутствии класса GriefPrevention. В общем, кто сталкивался, как использовать код из плагина в моде, не получив по голове? Чувствую, что я что-то делаю не так, но сказывается 3тий час ночи и отсутствие нужных знаний по яве.
 
world.getServer()
Я предполагаю что где-то в этом вызове ошибка. Скорее всего getServer() возвращает не тот сервер.
Попропуй Bukkit.

И да, лог приложи, а то отсутствие класса странно в этом случае.
 
@Shevchik, сама ошибка -

java.lang.NoClassDefFoundError: me/ryanhamshire/GriefPrevention/GriefPrevention
at buildcraft.core.utils.BukkitUtils.BlockBreakEvent(BukkitUtils.java:23)
at buildcraft.factory.TileMiningWell.doWork(TileMiningWell.java:81)
at buildcraft.api.power.PowerProvider.update(PowerProvider.java:94)
at buildcraft.core.TileBuildCraft.func_70316_g(TileBuildCraft.java:62)
at net.minecraft.world.World.func_72939_s(World.java:2362)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:806)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:832)
at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:728)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:612)
at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
Caused by: java.lang.ClassNotFoundException: me.ryanhamshire.GriefPrevention.GriefPrevention
at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:174)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 11 more

Весь метод -
public static boolean BlockBreakEvent(World world, int x, int y, int z,String username) {
Player player = CraftFakePlayer.getPossiblyRealPlayerBukkitEntity(world, username, false);
Block block = world.getWorld().getBlockAt(x, y, z);
BlockBreakEvent event = new BlockBreakEvent(block, player);
Plugin griefPrevention = Bukkit.getPluginManager().getPlugin("GriefPrevention");
if((griefPrevention != null) && griefPrevention.isEnabled()) {
WorldConfig wc = GriefPrevention.instance.getWorldCfg(block.getWorld());
if (!wc.Enabled()) {
return true;
} else if (wc.getBreakBlockRules().Allowed(block.getLocation(), player).Denied()) {
return false;
} else {
return true;
}
} else {
return false;
}
}

На MCPC 1.4.7 аналогичный код работал.
 
Видимо поменяли класслоадер, и теперь плагины в отдельном класслоадере так что я хз что делать.
Попробуй Бросать кастомный эвент и плагином его обрабатывать.
 
Видимо поменяли класслоадер, и теперь плагины в отдельном класслоадере так что я хз что делать.
Попробуй Бросать кастомный эвент и плагином его обрабатывать.

Эх... Опять огород городить...
 
Сделай потом проверку на наличие класса на всякий случай. И если есть, рефлексией меняй код.
 
Сделай потом проверку на наличие класса на всякий случай. И если есть, рефлексией меняй код.

Пойду попробую. Идея с кастомным ивентом прокатила, но мля, плагин ради мода...
 
  • Нравится
Реакции: Aeou
Назад
Верх