2.9.7 release
07/02/2015 - Added ajustable font size. 07/05/2015 - Started working on the new Boot Screen. 07/06/2015 - Moved the font size to be under the view menu. 07/06/2015 - Fixed a bug with plugins not being able to grab the currently viewed class. 07/07/2015 - Started adding enjarify as an optional APK converter instead of Dex2Jar. 07/07/2015 - Finished the new Boot Screen 07/09/2015 - Fixed a process leak with krakatau decompiler. 07/09/2015 - Finished adding enjarify. 07/09/2015 - Supressed syntax exceptions due to JD-GUI. 07/09/2015 - Fixed refresh on non-refreshable resources. 07/09/2015 - Fixed opening a class and the name is so big, you cannot close because the [X] does not appear. 07/09/2015 - Added support for smaller screens for the boot screen. 07/16/2015 - Removed the FileFilter classes. 07/16/2015 - Updated the decompiler class to make more sense. 07/16/2015 - Started working on BCV CLI. 07/16/2015 - Finished BCV CLI.
This commit is contained in:
parent
fecc98f2f9
commit
3784629fbf
17 changed files with 72 additions and 61 deletions
Binary file not shown.
Binary file not shown.
19
README.txt
19
README.txt
|
@ -361,7 +361,7 @@ Changelog:
|
||||||
04/21/2015 - Changed 'View Panes' to simply 'View'.
|
04/21/2015 - Changed 'View Panes' to simply 'View'.
|
||||||
--- 2.9.5 ---:
|
--- 2.9.5 ---:
|
||||||
05/01/2015 - Added 'pingback' for statistics (to track how many people globally use BCV)
|
05/01/2015 - Added 'pingback' for statistics (to track how many people globally use BCV)
|
||||||
-----2.9.6-----:
|
--- 2.9.6 ---:
|
||||||
05/05/2015 - Fixed a typo in the about window
|
05/05/2015 - Fixed a typo in the about window
|
||||||
05/28/2015 - Started importing JD-GUI Decompiler.
|
05/28/2015 - Started importing JD-GUI Decompiler.
|
||||||
05/28/2015 - Compile on refresh and compile on save are now enabled by default.
|
05/28/2015 - Compile on refresh and compile on save are now enabled by default.
|
||||||
|
@ -369,3 +369,20 @@ Changelog:
|
||||||
06/24/2015 - Fixed a logic error with the Field & Method searchers.
|
06/24/2015 - Fixed a logic error with the Field & Method searchers.
|
||||||
06/26/2015 - Updated Procyon & CFR to their latest versions.
|
06/26/2015 - Updated Procyon & CFR to their latest versions.
|
||||||
07/02/2015 - Added JD-GUI Decompiler. - Huge thanks to the guys behind JD-GUI! <3 (FIVE DECOMPILERS NOW LOL)
|
07/02/2015 - Added JD-GUI Decompiler. - Huge thanks to the guys behind JD-GUI! <3 (FIVE DECOMPILERS NOW LOL)
|
||||||
|
--- 2.9.7 ---:
|
||||||
|
07/02/2015 - Added ajustable font size.
|
||||||
|
07/05/2015 - Started working on the new Boot Screen.
|
||||||
|
07/06/2015 - Moved the font size to be under the view menu.
|
||||||
|
07/06/2015 - Fixed a bug with plugins not being able to grab the currently viewed class.
|
||||||
|
07/07/2015 - Started adding enjarify as an optional APK converter instead of Dex2Jar.
|
||||||
|
07/07/2015 - Finished the new Boot Screen
|
||||||
|
07/09/2015 - Fixed a process leak with krakatau decompiler.
|
||||||
|
07/09/2015 - Finished adding enjarify.
|
||||||
|
07/09/2015 - Supressed syntax exceptions due to JD-GUI.
|
||||||
|
07/09/2015 - Fixed refresh on non-refreshable resources.
|
||||||
|
07/09/2015 - Fixed opening a class and the name is so big, you cannot close because the [X] does not appear.
|
||||||
|
07/09/2015 - Added support for smaller screens for the boot screen.
|
||||||
|
07/16/2015 - Removed the FileFilter classes.
|
||||||
|
07/16/2015 - Updated the decompiler class to make more sense.
|
||||||
|
07/16/2015 - Started working on BCV CLI.
|
||||||
|
07/16/2015 - Finished BCV CLI.
|
Binary file not shown.
BIN
libs/apktool_2.0.1_obf.jar
Normal file
BIN
libs/apktool_2.0.1_obf.jar
Normal file
Binary file not shown.
BIN
libs/fernflower2015-1.jar
Normal file
BIN
libs/fernflower2015-1.jar
Normal file
Binary file not shown.
Binary file not shown.
|
@ -86,9 +86,10 @@ import the.bytecode.club.bytecodeviewer.plugin.PluginManager;
|
||||||
* add stackmapframes to bytecode decompiler
|
* add stackmapframes to bytecode decompiler
|
||||||
* add stackmapframes remover?
|
* add stackmapframes remover?
|
||||||
* make ez-injection plugin console show all sys.out calls
|
* make ez-injection plugin console show all sys.out calls
|
||||||
* Command line parameter to save source
|
|
||||||
* add JEB decompiler optionally, requires them to add jeb library jar externally and disable update check
|
* add JEB decompiler optionally, requires them to add jeb library jar externally and disable update check
|
||||||
* add decompile as zip for krakatau-bytecode and smali for CLI
|
* add decompile as zip for krakatau-bytecode, jd-gui and smali for CLI
|
||||||
|
* fix hook inject for EZ-Injection
|
||||||
|
* fix classfile searcher
|
||||||
*
|
*
|
||||||
* -----2.9.7-----:
|
* -----2.9.7-----:
|
||||||
* 07/02/2015 - Added ajustable font size.
|
* 07/02/2015 - Added ajustable font size.
|
||||||
|
@ -116,7 +117,7 @@ public class BytecodeViewer {
|
||||||
|
|
||||||
/*per version*/
|
/*per version*/
|
||||||
public static String version = "2.9.7";
|
public static String version = "2.9.7";
|
||||||
public static boolean previewCopy = true;
|
public static boolean previewCopy = false;
|
||||||
/*the rest*/
|
/*the rest*/
|
||||||
public static MainViewerGUI viewer = null;
|
public static MainViewerGUI viewer = null;
|
||||||
public static ClassNodeLoader loader = new ClassNodeLoader(); //might be insecure due to assholes targeting BCV, however that's highly unlikely.
|
public static ClassNodeLoader loader = new ClassNodeLoader(); //might be insecure due to assholes targeting BCV, however that's highly unlikely.
|
||||||
|
@ -145,8 +146,7 @@ public class BytecodeViewer {
|
||||||
public static boolean runningObfuscation = false;
|
public static boolean runningObfuscation = false;
|
||||||
private static long start = System.currentTimeMillis();
|
private static long start = System.currentTimeMillis();
|
||||||
public static String lastDirectory = "";
|
public static String lastDirectory = "";
|
||||||
public static ArrayList<Process> krakatau = new ArrayList<Process>();
|
public static ArrayList<Process> createdProcesses = new ArrayList<Process>();
|
||||||
public static ArrayList<Process> enjarify = new ArrayList<Process>();
|
|
||||||
public static Refactorer refactorer = new Refactorer();
|
public static Refactorer refactorer = new Refactorer();
|
||||||
public static boolean pingback = false;
|
public static boolean pingback = false;
|
||||||
public static boolean deleteForiegnLibraries = true;
|
public static boolean deleteForiegnLibraries = true;
|
||||||
|
@ -396,10 +396,8 @@ public class BytecodeViewer {
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
for(Process krakatau : krakatau)
|
for(Process proc : createdProcesses)
|
||||||
krakatau.destroy();
|
proc.destroy();
|
||||||
for(Process enjarify : enjarify)
|
|
||||||
enjarify.destroy();
|
|
||||||
Settings.saveGUI();
|
Settings.saveGUI();
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,7 @@ public class CommandLineInput {
|
||||||
"-decompiler <decompiler> Selects the decompiler, procyon by default",
|
"-decompiler <decompiler> Selects the decompiler, procyon by default",
|
||||||
"-i <input file> Selects the input file",
|
"-i <input file> Selects the input file",
|
||||||
"-o <output file> Selects the output file",
|
"-o <output file> Selects the output file",
|
||||||
|
"-t <target classname> Must either be the fully qualified classname or \"all\" to decompile all as zip",
|
||||||
"-nowait Doesn't wait for the user to read the CLI messages"
|
"-nowait Doesn't wait for the user to read the CLI messages"
|
||||||
})
|
})
|
||||||
System.out.println(s);
|
System.out.println(s);
|
||||||
|
@ -302,7 +303,8 @@ public class CommandLineInput {
|
||||||
Thread.sleep(5 * 1000);
|
Thread.sleep(5 * 1000);
|
||||||
|
|
||||||
if(target.equalsIgnoreCase("all")) {
|
if(target.equalsIgnoreCase("all")) {
|
||||||
Decompiler.jdgui.decompileToZip(output.getAbsolutePath());
|
System.out.println("Coming soon.");
|
||||||
|
//Decompiler.jdgui.decompileToZip(output.getAbsolutePath());
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
ClassNode cn = BytecodeViewer.getClassNode(target);
|
ClassNode cn = BytecodeViewer.getClassNode(target);
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class Enjarify {
|
||||||
pb.directory(new File(BytecodeViewer.enjarifyWorkingDirectory));
|
pb.directory(new File(BytecodeViewer.enjarifyWorkingDirectory));
|
||||||
|
|
||||||
Process process = pb.start();
|
Process process = pb.start();
|
||||||
BytecodeViewer.enjarify.add(process);
|
BytecodeViewer.createdProcesses.add(process);
|
||||||
|
|
||||||
//Read out dir output
|
//Read out dir output
|
||||||
InputStream is = process.getInputStream();
|
InputStream is = process.getInputStream();
|
||||||
|
@ -96,7 +96,7 @@ public class Enjarify {
|
||||||
|
|
||||||
|
|
||||||
Process process = pb.start();
|
Process process = pb.start();
|
||||||
BytecodeViewer.enjarify.add(process);
|
BytecodeViewer.createdProcesses.add(process);
|
||||||
|
|
||||||
//Read out dir output
|
//Read out dir output
|
||||||
InputStream is = process.getInputStream();
|
InputStream is = process.getInputStream();
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class KrakatauAssembler extends Compiler {
|
||||||
);
|
);
|
||||||
|
|
||||||
Process process = pb.start();
|
Process process = pb.start();
|
||||||
BytecodeViewer.krakatau.add(process);
|
BytecodeViewer.createdProcesses.add(process);
|
||||||
|
|
||||||
//Read out dir output
|
//Read out dir output
|
||||||
InputStream is = process.getInputStream();
|
InputStream is = process.getInputStream();
|
||||||
|
|
|
@ -65,7 +65,7 @@ public class KrakatauDecompiler extends Decompiler {
|
||||||
);
|
);
|
||||||
|
|
||||||
Process process = pb.start();
|
Process process = pb.start();
|
||||||
BytecodeViewer.krakatau.add(process);
|
BytecodeViewer.createdProcesses.add(process);
|
||||||
|
|
||||||
//Read out dir output
|
//Read out dir output
|
||||||
InputStream is = process.getInputStream();
|
InputStream is = process.getInputStream();
|
||||||
|
@ -138,7 +138,7 @@ public class KrakatauDecompiler extends Decompiler {
|
||||||
);
|
);
|
||||||
|
|
||||||
Process process = pb.start();
|
Process process = pb.start();
|
||||||
BytecodeViewer.krakatau.add(process);
|
BytecodeViewer.createdProcesses.add(process);
|
||||||
|
|
||||||
//Read out dir output
|
//Read out dir output
|
||||||
InputStream is = process.getInputStream();
|
InputStream is = process.getInputStream();
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class KrakatauDisassembler extends Decompiler {
|
||||||
);
|
);
|
||||||
|
|
||||||
Process process = pb.start();
|
Process process = pb.start();
|
||||||
BytecodeViewer.krakatau.add(process);
|
BytecodeViewer.createdProcesses.add(process);
|
||||||
|
|
||||||
//Read out dir output
|
//Read out dir output
|
||||||
InputStream is = process.getInputStream();
|
InputStream is = process.getInputStream();
|
||||||
|
@ -119,7 +119,7 @@ public class KrakatauDisassembler extends Decompiler {
|
||||||
);
|
);
|
||||||
|
|
||||||
Process process = pb.start();
|
Process process = pb.start();
|
||||||
BytecodeViewer.krakatau.add(process);
|
BytecodeViewer.createdProcesses.add(process);
|
||||||
|
|
||||||
//Read out dir output
|
//Read out dir output
|
||||||
InputStream is = process.getInputStream();
|
InputStream is = process.getInputStream();
|
||||||
|
|
|
@ -12,6 +12,7 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
import the.bytecode.club.bytecodeviewer.Resources;
|
import the.bytecode.club.bytecodeviewer.Resources;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The about frame.
|
* The about frame.
|
||||||
|
@ -21,17 +22,19 @@ import java.awt.Color;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class AboutWindow extends JFrame {
|
public class AboutWindow extends JFrame {
|
||||||
JTextArea txtrBytecodeViewerIs = new JTextArea();
|
JTextArea textArea = new JTextArea();
|
||||||
public AboutWindow() {
|
public AboutWindow() {
|
||||||
this.setIconImages(Resources.iconList);
|
this.setIconImages(Resources.iconList);
|
||||||
setSize(Toolkit.getDefaultToolkit().getScreenSize());
|
setSize(Toolkit.getDefaultToolkit().getScreenSize());
|
||||||
setType(Type.UTILITY);
|
setType(Type.UTILITY);
|
||||||
setTitle("Bytecode Viewer - About - https://bytecodeviewer.com | https://the.bytecode.club");
|
setTitle("Bytecode Viewer - About - https://bytecodeviewer.com | https://the.bytecode.club");
|
||||||
getContentPane().setLayout(new CardLayout(0, 0));
|
getContentPane().setLayout(new CardLayout(0, 0));
|
||||||
|
JScrollPane scrollPane = new JScrollPane();
|
||||||
txtrBytecodeViewerIs.setDisabledTextColor(Color.BLACK);
|
getContentPane().add(scrollPane, "name_322439757638784");
|
||||||
txtrBytecodeViewerIs.setWrapStyleWord(true);
|
textArea.setWrapStyleWord(true);
|
||||||
getContentPane().add(txtrBytecodeViewerIs, "name_140466526081695");txtrBytecodeViewerIs.setEnabled(false);
|
textArea.setEnabled(false);
|
||||||
|
textArea.setDisabledTextColor(Color.BLACK);
|
||||||
|
scrollPane.setViewportView(textArea);
|
||||||
this.setResizable(false);
|
this.setResizable(false);
|
||||||
this.setLocationRelativeTo(null);
|
this.setLocationRelativeTo(null);
|
||||||
}
|
}
|
||||||
|
@ -39,28 +42,35 @@ public class AboutWindow extends JFrame {
|
||||||
@Override
|
@Override
|
||||||
public void setVisible(boolean b) {
|
public void setVisible(boolean b) {
|
||||||
super.setVisible(b);
|
super.setVisible(b);
|
||||||
txtrBytecodeViewerIs.setFont(new Font(Font.MONOSPACED, Font.PLAIN, (int)BytecodeViewer.viewer.fontSpinner.getValue()));
|
textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, (int)BytecodeViewer.viewer.fontSpinner.getValue()));
|
||||||
txtrBytecodeViewerIs
|
textArea.setText("Bytecode Viewer "+BytecodeViewer.version+" is an open source program developed and maintained by Konloch (konloch@gmail.com)\r\n"+
|
||||||
.setText("Bytecode Viewer "+BytecodeViewer.version+" is an open source program developed and maintained by Konloch (konloch@gmail.com)\r\n"+
|
|
||||||
"100% free and open sourced licensed under GPL v3 CopyLeft\r\n\r\n"+
|
"100% free and open sourced licensed under GPL v3 CopyLeft\r\n\r\n"+
|
||||||
"Settings:"+BytecodeViewer.nl+
|
"Settings:"+BytecodeViewer.nl+
|
||||||
"BCV Dir: " + BytecodeViewer.getBCVDirectory()+BytecodeViewer.nl+
|
" BCV Dir: " + BytecodeViewer.getBCVDirectory()+BytecodeViewer.nl+
|
||||||
"Python 2.7 (or PyPy): " + BytecodeViewer.python+BytecodeViewer.nl+
|
" Python 2.7 (or PyPy): " + BytecodeViewer.python+BytecodeViewer.nl+
|
||||||
"Python 3.0 (or PyPy): " + BytecodeViewer.python3+BytecodeViewer.nl+
|
" Python 3.X (or PyPy): " + BytecodeViewer.python3+BytecodeViewer.nl+
|
||||||
"RT.jar:" + BytecodeViewer.rt+BytecodeViewer.nl+
|
" RT.jar:" + BytecodeViewer.rt+BytecodeViewer.nl+
|
||||||
"Optional Lib: " + BytecodeViewer.library+BytecodeViewer.nl+
|
" Optional Lib: " + BytecodeViewer.library+BytecodeViewer.nl+
|
||||||
"BCV Krakatau: v" + BytecodeViewer.krakatauVersion+BytecodeViewer.nl+
|
" BCV Krakatau: v" + BytecodeViewer.krakatauVersion+BytecodeViewer.nl+
|
||||||
"Krakatau Dir: " + BytecodeViewer.krakatauWorkingDirectory+BytecodeViewer.nl+
|
" Krakatau Dir: " + BytecodeViewer.krakatauWorkingDirectory+BytecodeViewer.nl+
|
||||||
"BCV Enjarify: v" + BytecodeViewer.enjarifyVersion+BytecodeViewer.nl+
|
" BCV Enjarify: v" + BytecodeViewer.enjarifyVersion+BytecodeViewer.nl+
|
||||||
"Enjarify Dir: " + BytecodeViewer.enjarifyWorkingDirectory+BytecodeViewer.nl+BytecodeViewer.nl+
|
" Enjarify Dir: " + BytecodeViewer.enjarifyWorkingDirectory+BytecodeViewer.nl+BytecodeViewer.nl+
|
||||||
|
"Command Line Input:"+BytecodeViewer.nl+
|
||||||
|
" -help Displays the help menu"+BytecodeViewer.nl+
|
||||||
|
" -list Displays the available decompilers"+BytecodeViewer.nl+
|
||||||
|
" -decompiler <decompiler> Selects the decompiler, procyon by default"+BytecodeViewer.nl+
|
||||||
|
" -i <input file> Selects the input file (Jar, Class, APK, ZIP, DEX all work automatically)"+BytecodeViewer.nl+
|
||||||
|
" -o <output file> Selects the output file (Java or Java-Bytecode)"+BytecodeViewer.nl+
|
||||||
|
" -t <target classname> Must either be the fully qualified classname or \"all\" to decompile all as zip"+BytecodeViewer.nl+
|
||||||
|
" -nowait Doesn't wait for the user to read the CLI messages"+BytecodeViewer.nl+BytecodeViewer.nl+
|
||||||
"Keybinds:"+BytecodeViewer.nl+
|
"Keybinds:"+BytecodeViewer.nl+
|
||||||
"CTRL + O: Open/add new jar/class/apk"+BytecodeViewer.nl+
|
" CTRL + O: Open/add new jar/class/apk"+BytecodeViewer.nl+
|
||||||
"CTLR + N: Reset the workspace"+BytecodeViewer.nl+
|
" CTLR + N: Reset the workspace"+BytecodeViewer.nl+
|
||||||
"CTRL + W: Closes the currently opened tab"+BytecodeViewer.nl+
|
" CTRL + W: Closes the currently opened tab"+BytecodeViewer.nl+
|
||||||
"CTRL + T: Compile"+BytecodeViewer.nl+
|
" CTRL + T: Compile"+BytecodeViewer.nl+
|
||||||
"CTRL + S: Save classes as zip"+BytecodeViewer.nl+
|
" CTRL + S: Save classes as zip"+BytecodeViewer.nl+
|
||||||
"CTRL + R: Run (EZ-Inject) - dynamically load the classes and invoke a main class"+
|
" CTRL + R: Run (EZ-Inject) - dynamically load the classes and invoke a main class"+
|
||||||
"\r\n\r\nCode from various projects has been used, including but not limited to:\r\n J-RET by WaterWolf\r\n JHexPane by Sam Koivu\r\n RSynaxPane by Robert Futrell\r\n Commons IO by Apache\r\n ASM by OW2\r\n FernFlower by Stiver\r\n Procyon by Mstrobel\r\n CFR by Lee Benfield\r\n CFIDE by Bibl\r\n Smali by JesusFreke\r\n Dex2Jar by pxb1..?\r\n Krakatau by Storyyeller\r\n JD-GUI + JD-Core by The Java-Decompiler Team\r\n Enjarify by Storyyeller\r\n\r\nIf you're interested in Java Reverse Engineering, join The Bytecode Club\r\nhttps://the.bytecode.club");
|
"\r\n\r\nCode from various projects has been used, including but not limited to:\r\n J-RET by WaterWolf\r\n JHexPane by Sam Koivu\r\n RSynaxPane by Robert Futrell\r\n Commons IO by Apache\r\n ASM by OW2\r\n FernFlower by Stiver\r\n Procyon by Mstrobel\r\n CFR by Lee Benfield\r\n CFIDE by Bibl\r\n Smali by JesusFreke\r\n Dex2Jar by pxb1..?\r\n Krakatau by Storyyeller\r\n JD-GUI + JD-Core by The Java-Decompiler Team\r\n Enjarify by Storyyeller\r\n\r\nIf you're interested in Java Reverse Engineering, join The Bytecode Club\r\nhttps://the.bytecode.club");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -398,7 +398,7 @@ public class FileNavigationPane extends VisibleComponent implements
|
||||||
g.setColor(new Color(0, 0, 0, 100));
|
g.setColor(new Color(0, 0, 0, 100));
|
||||||
g.fillRect(0, 0, getWidth(), getHeight());
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||||||
g.setColor(Color.white);
|
g.setColor(Color.white);
|
||||||
String s = "Drag class/jar here";
|
String s = "Drag class/jar/zip/APK/DEX here";
|
||||||
g.drawString(s,
|
g.drawString(s,
|
||||||
((int) ((getWidth() / 2) - (m.getWidth(s) / 2))),
|
((int) ((getWidth() / 2) - (m.getWidth(s) / 2))),
|
||||||
getHeight() / 2);
|
getHeight() / 2);
|
||||||
|
|
|
@ -80,22 +80,6 @@ public final class PluginManager {
|
||||||
if(p != null) {
|
if(p != null) {
|
||||||
runPlugin(p);
|
runPlugin(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (f.getName().endsWith(".java")) {
|
|
||||||
p = loadJavaScript(f);
|
|
||||||
}
|
|
||||||
if (f.getName().endsWith(".gy") || f.getName().endsWith(".groovy")) {
|
|
||||||
p = loadGroovyScript(f);
|
|
||||||
}
|
|
||||||
if (f.getName().endsWith(".py") || f.getName().endsWith(".python")) {
|
|
||||||
p = loadPythonScript(f);
|
|
||||||
}
|
|
||||||
if (f.getName().endsWith(".rb") || f.getName().endsWith(".ruby")) {
|
|
||||||
p = loadRubyScript(f);
|
|
||||||
}
|
|
||||||
if (p != null) {
|
|
||||||
runPlugin(p);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register(String name, PluginLaunchStrategy strat) {
|
public static void register(String name, PluginLaunchStrategy strat) {
|
||||||
|
@ -122,7 +106,7 @@ public final class PluginManager {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return "Plugins";
|
return "BCV Plugins";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue