Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Можно ли перезаписать плагин?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Grazy, 29 сен 2016.

  1. Автор темы
    Grazy

    Grazy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Можно ли как-то перезаписать плагин, если нет сарцов?
    Я использовал Jd-gui Developer, скопировал исходный код(скрипт) и добавил его в свой проект, сделал все точно как в плагине.
    [​IMG]
    В результате выдает ошибки синтаксиса, при запуске краш в косле
    [18:21:57] [Server thread/INFO]: [JediCraft] Enabling JediCraft v1.0
    [18:21:57] [Server thread/ERROR]: Error occurred while enabling JediCraft v1.0 (Is it up to date?)
    java.lang.Error: Unresolved compilation problem:
    Syntax error on token ":", Expression expected after this token

    at me.kargond.prison.Main.scoreboardUpdater(Main.java:110) ~[?:?]
    at me.kargond.prison.Main.onEnable(Main.java:72) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:335) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at org.bukkit.craftbukkit.v1_8_R1.CraftServer.loadPlugin(CraftServer.java:356) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at org.bukkit.craftbukkit.v1_8_R1.CraftServer.enablePlugins(CraftServer.java:316) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.MinecraftServer.q(MinecraftServer.java:402) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.MinecraftServer.k(MinecraftServer.java:370) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.MinecraftServer.a(MinecraftServer.java:325) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.DedicatedServer.init(DedicatedServer.java:211) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:505) [craftbukkit.jar:git-Spigot-c3c767f-33d5de3]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_102]
    В плагине нашел файл, с него я понял что собрали этот плагин в eclips/
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
    <classpathentry kind="lib" path="E:/MineCraft/Сервер/Сборки серверов/Mini-Games/Мини-Игры/JediCraft/jedicraft/spigot.jar"/>
    <classpathentry kind="lib" path="E:/MineCraft/Сервер/Сборки серверов/Mini-Games/Мини-Игры/JediCraft/jedicraft/plugins/Vault.jar"/>
    <classpathentry kind="lib" path="E:/MineCraft/Сервер/Ядро/craftbukkit.jar"/>
    <classpathentry kind="output" path="bin"/>
    </classpath>
    Я так понял что это библиотеки, добавил их, но ничего не получилось ошибки остались.
    При этом до того как я его пытался переписать он нормально запускался(.
    Кто сможет показать, сказать, ткнуть пальцем мне как его переписать?
     
    Последнее редактирование: 30 сен 2016
  2. Хостинг MineCraft
    <
  3. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Как-то окно не очень похоже на jd-gui, может сильно старая версия?
    Ошибки нужно исправлять вручную, например оно почему-то декомпильнуло переменную итератора как ???, что явно не айс (это один намёк на старую версию).
    Я не сильно про в использовании декомпиляторов, но попробуй взять его отсюда.
     
  4. Автор темы
    Grazy

    Grazy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Нет, скрин это Eclips.
    Блин, я думал в исходном коде не будет ошибок( Иногда даже импорт не работает, хотя файлы в библиотеке есть( Может ли это платформа слишком новая :D, у меня jre1.8.0_102, jdk в Eclips выбрать не могу(.
    Красным, подчеркивает ошибку.
    package me.kargond.prison;

    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map.Entry;
    import java.util.logging.Logger;
    import net.milkbowl.vault.economy.Economy;
    import org.bukkit.Bukkit;
    import org.bukkit.Server;
    import org.bukkit.World;
    import org.bukkit.command.PluginCommand;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.FileConfigurationOptions;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.LivingEntity;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.RegisteredServiceProvider;
    import org.bukkit.plugin.ServicesManager;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scheduler.BukkitScheduler;

    public class Main
    extends JavaPlugin
    {
    public static Economy econ = null;
    File levels = new File(getDataFolder() + "/levels.yml");
    FileConfiguration levelsConfig = YamlConfiguration.loadConfiguration(this.levels);
    public static Main instance;
    static int ScoreboardUpdater;
    private boolean setupEconomy()
    {
    if (getServer().getPluginManager().getPlugin("Vault") == null) {
    return false;
    }
    RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
    if (rsp == null) {
    return false;
    }
    econ = (Economy)rsp.getProvider();
    return econ != null;
    }
    public void saveCustomYml(FileConfiguration ymlConfig, File ymlFile)
    {
    try
    {
    ymlConfig.save(ymlFile);
    }
    catch (IOException e)
    {
    e.printStackTrace();
    }
    }
    public void onEnable()
    {
    instance = this;
    if (!setupEconomy())
    {
    Bukkit.getLogger().severe(String.format("[%s] - Disabled due to no Vault dependency found!", new Object[] { getDescription().getName() }));
    getServer().getPluginManager().disablePlugin(this);
    return;
    }
    getConfig().options().copyDefaults(true);
    saveConfig();
    scoreboardUpdater();
    Bukkit.getPluginManager().registerEvents(new Factions(), this);
    Bukkit.getPluginManager().registerEvents(new JediScoreBoard(), this);
    Bukkit.getPluginManager().registerEvents(new Levels(), this);
    Bukkit.getPluginManager().registerEvents(new Staff(), this);
    getCommand("level").setExecutor(new Levels());
    getCommand("planets").setExecutor(new Planets());
    getCommand("base").setExecutor(new Factions());
    getCommand("jedicraft").setExecutor(new Factions());
    getCommand("sc").setExecutor(new Staff());
    }
    public void onDisable()
    {
    for (Map.Entry<String, Integer> entry : Levels.levels.entrySet()) {
    this.levelsConfig.set((String)entry.getKey() + ".level", entry.getValue());
    }
    for (Map.Entry<String, String> entry : Levels.faction.entrySet()) {
    this.levelsConfig.set((String)entry.getKey() + ".faction", entry.getValue());
    }
    saveCustomYml(this.levelsConfig, this.levels);
    Iterator localIterator2;
    for (??? = Bukkit.getWorlds().iterator(); ???.hasNext(); localIterator2.hasNext())
    {
    World w = (World)???.next();
    localIterator2 = w.getLivingEntities().iterator(); continue;LivingEntity e = (LivingEntity)localIterator2.next();
    if ((!(e instanceof Player)) && (e.getCustomName() != "")) {
    e.remove();
    }
    }
    }
    public void scoreboardUpdater()
    {
    Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
    {
    public void run()
    {
    for (Player p ; ) {
    JediScoreBoard.updateScoreboard(p);
    }
    }
    }, 0L, 200L);
    }
    }
     
    Последнее редактирование: 29 сен 2016
  5. TheZefirrkka

    TheZefirrkka Активный участник Пользователь

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    Если ты хочешь, что бы не было ошибок, ищи исходники, могу продать мой переписанный плагин)[DOUBLEPOST=1475270958,1475270874][/DOUBLEPOST]for (Player p : Bukkit.getOnlinePlayers) ЭТО ТАК СЛОЖНО, ПРАВДА??!!?!?
     
  6. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    fernflower, d4j by secureteam.
     
  7. Автор темы
    Grazy

    Grazy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Спасибо, каждый декомпилятор оказывается декомпилиркет по своему(.
    Нет не сложно, программировать на java я начал не давно (вчера утром), а про декомпиляторы узнал на форуме). Я думал что декомпиляторы не отличаются друг от друга, но я ошибался. Помучившись полдня я получил наконец свои заветные исходники плагина). Не знаю к чему я это все написал(, наверн прост что бы ты знал).
     
    Последнее редактирование: 1 окт 2016
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    В байткоде классы сильно отличаются, по этому и восстановление везде разное. От сюда и вытикающие ошибки декомпиляции. fernflower отлично справляется с java 6, ибо был заброшен очень давно, как в прочем и большинство декомпиляторов. Есть те, которые еще развиваются, такие как прокион. Так же классы можно запутать так называемой флов обфускацией, тогда логика декомпиляторов не понимает, как нужно восстановить такой класс. Но для мастеров байткода это не проблема, когда можно дизасемблировать(привести в читаемый вид его истркукции) класс, изменить и пересобрать.
     
    Последнее редактирование: 10 окт 2016
  9. Автор темы
    Grazy

    Grazy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Можно более подробней об этом.
     
  10. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Тема в разделе "Разработка плагинов для новичков", создана пользователем Grazy, 29 сен 2016.
    За это время можно было с десяток таких плагинов написать. Теряешь свое время.
     
  11. Автор темы
    Grazy

    Grazy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Знаю, я забросил на некоторое время плагинами заниматься(учеба).
    У меня есть прога BytecodeViewer, но как именно реализовать то что вы сказали постом выше.
     
  12. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Есть некий метод который расшифровывает строки aes, в качестве ключа он юзает имя класса имя метода от куда был вызов константпул-сизе того класса, в новых версиях еще джарник проверяется на целостность. Вот тебе надо напатчивать метод декрипта валидным ключем для расшифровки строк. Потом возвращать уже валидные строки патчем, заменять вызов метода декрипт на простой java.lang.String. Для этого юзается либо javassist либо asm.
     
  13. Автор темы
    Grazy

    Grazy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Сейчас пробою юзать dirtyJOE, но я еще не разобрался какие строки отвечают за шифровку. Попробую еще и этими прогами.
    Вот класс который я хочу раз шифровать:
    https://github.com/SpiceMeme/Vlad/blob/master/.gitignore // декомпилированный.
    Классы ниже мне вообще кажется не должно быть тк как у меня есть чистый исходник класса вот тема: http://rubukkit.org/threads/kak-dos...ayerjoinevent-scoreboard.134979/#post-1446923
    В этом зашифрованном классе лежит решение моей проблемы в той теме.
     

Поделиться этой страницей