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

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

Grazy

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Prost
Можно ли как-то перезаписать плагин, если нет сарцов?
Я использовал Jd-gui Developer, скопировал исходный код(скрипт) и добавил его в свой проект, сделал все точно как в плагине.
Arf7GCK.png

В результате выдает ошибки синтаксиса, при запуске краш в косле
[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>
Я так понял что это библиотеки, добавил их, но ничего не получилось ошибки остались.
При этом до того как я его пытался переписать он нормально запускался(.
Кто сможет показать, сказать, ткнуть пальцем мне как его переписать?
 
Последнее редактирование:
Как-то окно не очень похоже на jd-gui, может сильно старая версия?
Ошибки нужно исправлять вручную, например оно почему-то декомпильнуло переменную итератора как ???, что явно не айс (это один намёк на старую версию).
Я не сильно про в использовании декомпиляторов, но попробуй взять его отсюда.
 
Как-то окно не очень похоже на jd-gui, может сильно старая версия?
Нет, скрин это 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);
}
}
 
Последнее редактирование:
Если ты хочешь, что бы не было ошибок, ищи исходники, могу продать мой переписанный плагин)
for (Player p : Bukkit.getOnlinePlayers) ЭТО ТАК СЛОЖНО, ПРАВДА??!!?!?
 
fernflower, d4j by secureteam.
 
fernflower, d4j by secureteam.
Спасибо, каждый декомпилятор оказывается декомпилиркет по своему(.
Если ты хочешь, что бы не было ошибок, ищи исходники, могу продать мой переписанный плагин)
for (Player p : Bukkit.getOnlinePlayers) ЭТО ТАК СЛОЖНО, ПРАВДА??!!?!?
Нет не сложно, программировать на java я начал не давно (вчера утром), а про декомпиляторы узнал на форуме). Я думал что декомпиляторы не отличаются друг от друга, но я ошибался. Помучившись полдня я получил наконец свои заветные исходники плагина). Не знаю к чему я это все написал(, наверн прост что бы ты знал).
 
Последнее редактирование:
В байткоде классы сильно отличаются, по этому и восстановление везде разное. От сюда и вытикающие ошибки декомпиляции. fernflower отлично справляется с java 6, ибо был заброшен очень давно, как в прочем и большинство декомпиляторов. Есть те, которые еще развиваются, такие как прокион. Так же классы можно запутать так называемой флов обфускацией, тогда логика декомпиляторов не понимает, как нужно восстановить такой класс. Но для мастеров байткода это не проблема, когда можно дизасемблировать(привести в читаемый вид его истркукции) класс, изменить и пересобрать.
 
Последнее редактирование:
Но для мастеров байткода это не проблема, когда можно дизасемблировать(привести в читаемый вид его истркукции) класс, изменить и пересобрать.
Можно более подробней об этом.
 
Знаю, я забросил на некоторое время плагинами заниматься(учеба).
У меня есть прога BytecodeViewer, но как именно реализовать то что вы сказали постом выше.
 
Знаю, я забросил на некоторое время плагинами заниматься(учеба).
У меня есть прога BytecodeViewer, но как именно реализовать то что вы сказали постом выше.
Есть некий метод который расшифровывает строки aes, в качестве ключа он юзает имя класса имя метода от куда был вызов константпул-сизе того класса, в новых версиях еще джарник проверяется на целостность. Вот тебе надо напатчивать метод декрипта валидным ключем для расшифровки строк. Потом возвращать уже валидные строки патчем, заменять вызов метода декрипт на простой java.lang.String. Для этого юзается либо javassist либо asm.
 
Сейчас пробою юзать dirtyJOE, но я еще не разобрался какие строки отвечают за шифровку. Попробую еще и этими прогами.
Вот класс который я хочу раз шифровать:
https://github.com/SpiceMeme/Vlad/blob/master/.gitignore // декомпилированный.
Классы ниже мне вообще кажется не должно быть тк как у меня есть чистый исходник класса вот тема: http://rubukkit.org/threads/kak-dos...ayerjoinevent-scoreboard.134979/#post-1446923
В этом зашифрованном классе лежит решение моей проблемы в той теме.
 
Назад
Верх