Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 65 additions & 1 deletion src/main/java/org/rev317/min/Loader.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package org.rev317.min;

import java.awt.event.*;
import org.parabot.core.Context;
import org.parabot.core.Core;
import org.parabot.core.Directories;
import org.parabot.core.asm.ASMClassLoader;
import org.parabot.core.asm.adapters.AddInterfaceAdapter;
import org.parabot.core.asm.hooks.HookFile;
import org.parabot.core.desc.ServerProviderInfo;
import org.parabot.core.reflect.RefClass;
import org.parabot.core.reflect.RefField;
import org.parabot.core.reflect.RefMethod;
import org.parabot.core.ui.components.GamePanel;
import org.parabot.core.ui.components.VerboseLoader;
import org.parabot.environment.api.utils.WebUtil;
import org.parabot.environment.scripts.Script;
Expand All @@ -19,7 +24,10 @@

import javax.swing.*;
import java.applet.Applet;
import java.awt.*;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.net.URL;

/**
Expand All @@ -39,7 +47,25 @@ public Applet fetchApplet() {
final Context context = Context.getInstance();
final ASMClassLoader classLoader = context.getASMClassLoader();
final Class<?> clientClass = classLoader.loadClass(Context.getInstance().getServerProviderInfo().getClientClass());
Object instance = clientClass.newInstance();

Object instance = clientClass.newInstance();

Field field = instance.getClass().getSuperclass().getDeclaredField("Y");
field.setAccessible(true);

Class<?> frameClass = classLoader.loadClass("com.b.a.E");
Constructor<?> s = frameClass.getConstructors()[0];
s.setAccessible(true);
Frame frameInstance = (Frame) s.newInstance(instance, 765, 503, false, false);

Field field2 = instance.getClass().getSuperclass().getDeclaredField("ai");

RefField x = new RefField(field2, instance);
x.setBoolean(true);

System.out.println(instance.getClass().getSuperclass().getDeclaredField("ai").get(instance));

field.set(instance, frameInstance);

return (Applet) instance;
} catch (Exception e) {
Expand Down Expand Up @@ -102,4 +128,42 @@ public void unloadScript(Script script) {
@Override
public void init() {
}

@Override
public void preAppletInit() {

}

@Override
public void postAppletStart() {

GamePanel panel = GamePanel.getInstance();
Applet applet = (Applet) Context.getInstance().getClient();
try {
RefClass appletClass = new RefClass(Context.getInstance().getASMClassLoader().loadClass("com.b.a.B"), applet);
final RefField frameField = appletClass.getField("Y"); // frame
RefField graphicsField = appletClass.getField("X");
RefField useApplet = appletClass.getField("ai");
useApplet.setBoolean(true);
// System.out.println("check: "+useApplet.asBoolean());
Frame frame = (Frame) frameField.asObject();
frame.dispose();
frameField.set(null);
RefMethod componentMethod = appletClass.getMethod("o");
Component component = (Component) componentMethod.invoke();
//System.out.println("component: "+component);
panel.add(component);
applet.repaint();
applet.paintAll(applet.getGraphics());
graphicsField.set(applet.getGraphics());
component.addMouseListener((MouseListener)applet);
component.addMouseMotionListener((MouseMotionListener)applet);
component.addKeyListener((KeyListener)applet);
component.addFocusListener((FocusListener)applet);
component.addMouseWheelListener((MouseWheelListener)applet);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
panel.validate();
}
}