From 7f7aa279e46939fc7937d3b6ef8631443f733840 Mon Sep 17 00:00:00 2001 From: radmanplays <95340057+radmanplays@users.noreply.github.com> Date: Sun, 11 Feb 2024 13:13:45 +0330 Subject: [PATCH] . --- .../net/minecraft/client/Minecraft.edit.java | 15 +- .../client/gui/GuiMainMenu.edit.java | 17 +- .../net/minecraft/entity/Entity.edit.java | 4 +- .../entity/EntityLivingBase.edit.java | 5 +- .../entity/player/EntityPlayer.edit.java | 5 +- .../assets/minecraft/lang/en_US.edit.lang | 4 +- .../main/java/net/eaglerforge/GuiMods.java | 48 +++ .../java/net/eaglerforge/api/BaseData.java | 362 ++++++++++++++++++ .../net/eaglerforge/api/GlobalsListener.java | 28 ++ .../main/java/net/eaglerforge/api/ModAPI.java | 191 ++++++++- .../java/net/eaglerforge/api/ModData.java | 4 + .../eaglercraft/v1_8/log4j/Logger.java | 3 +- sources/setup/workspace_template/build.gradle | 7 +- 13 files changed, 674 insertions(+), 19 deletions(-) create mode 100644 sources/main/java/net/eaglerforge/GuiMods.java create mode 100644 sources/main/java/net/eaglerforge/api/BaseData.java create mode 100644 sources/main/java/net/eaglerforge/api/GlobalsListener.java create mode 100644 sources/main/java/net/eaglerforge/api/ModData.java diff --git a/patches/minecraft/net/minecraft/client/Minecraft.edit.java b/patches/minecraft/net/minecraft/client/Minecraft.edit.java index b7b73ff..8705969 100644 --- a/patches/minecraft/net/minecraft/client/Minecraft.edit.java +++ b/patches/minecraft/net/minecraft/client/Minecraft.edit.java @@ -20,11 +20,12 @@ > DELETE 1 @ 1 : 4 -> CHANGE 1 : 53 @ 1 : 4 +> CHANGE 1 : 54 @ 1 : 4 ~ ~ import net.eaglerforge.EaglerForge; ~ import net.eaglerforge.api.ModAPI; +~ import net.eaglerforge.api.ModData; ~ import net.lax1dude.eaglercraft.v1_8.internal.PlatformInput; ~ ~ import org.apache.commons.lang3.Validate; @@ -129,7 +130,7 @@ > CHANGE 1 : 2 @ 1 : 2 -~ public class Minecraft implements IThreadListener { +~ public class Minecraft extends ModData implements IThreadListener { > CHANGE 2 : 3 @ 2 : 9 @@ -519,7 +520,15 @@ > DELETE 110 @ 110 : 114 -> CHANGE 108 : 109 @ 108 : 148 +> CHANGE 24 : 25 @ 24 : 25 + +~ public void clickMouse() { + +> CHANGE 30 : 31 @ 30 : 31 + +~ public void rightClickMouse() { + +> CHANGE 52 : 53 @ 52 : 92 ~ Display.toggleFullscreen(); diff --git a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java index 0b5c78b..1b90374 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java @@ -13,9 +13,10 @@ + import java.util.Arrays; -> CHANGE 2 : 29 @ 2 : 4 +> CHANGE 2 : 30 @ 2 : 4 ~ +~ import net.eaglerforge.GuiMods; ~ import net.lax1dude.eaglercraft.v1_8.EagRuntime; ~ import net.lax1dude.eaglercraft.v1_8.EaglerInputStream; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; @@ -176,11 +177,13 @@ ~ this.field_92019_w = this.field_92021_u + (line2 ? 24 : 11); -> CHANGE 10 : 23 @ 10 : 12 +> CHANGE 10 : 25 @ 10 : 12 +~ this.buttonList.add(new GuiButton(69420, this.width / 2 - 100, parInt1 + parInt2 * 2, +~ I18n.format("eaglerforge.menu.mods"))); ~ if (EaglercraftVersion.mainMenuEnableGithubButton) { ~ this.buttonList.add( -~ new GuiButton(14, this.width / 2 - 100, parInt1 + parInt2 * 2, I18n.format("menu.forkOnGitlab"))); +~ new GuiButton(14, this.width / 2 - 100, parInt1 + parInt2 * 3, I18n.format("menu.forkOnGitlab"))); ~ } else { ~ if (EagRuntime.getConfiguration().isEnableDownloadOfflineButton() ~ && (EagRuntime.getConfiguration().getDownloadOfflineButtonLink() != null @@ -209,7 +212,13 @@ ~ if (parGuiButton.id == 4) { ~ this.mc.displayGuiScreen(new GuiScreenEditProfile(this)); -> CHANGE 2 : 4 @ 2 : 4 +> INSERT 1 : 4 @ 1 + ++ if (parGuiButton.id == 69420) { ++ this.mc.displayGuiScreen(new GuiMods(this)); ++ } + +> CHANGE 1 : 3 @ 1 : 3 ~ if (parGuiButton.id == 14) { ~ EagRuntime.openLink(EaglercraftVersion.projectForkURL); diff --git a/patches/minecraft/net/minecraft/entity/Entity.edit.java b/patches/minecraft/net/minecraft/entity/Entity.edit.java index 198db8d..bf149dc 100644 --- a/patches/minecraft/net/minecraft/entity/Entity.edit.java +++ b/patches/minecraft/net/minecraft/entity/Entity.edit.java @@ -5,8 +5,10 @@ # Version: 1.0 # Author: lax1dude -> CHANGE 3 : 8 @ 3 : 5 +> CHANGE 3 : 10 @ 3 : 5 +~ +~ import net.eaglerforge.api.BaseData; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; ~ import net.lax1dude.eaglercraft.v1_8.HString; diff --git a/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java b/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java index f7674d2..312208e 100644 --- a/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java +++ b/patches/minecraft/net/minecraft/entity/EntityLivingBase.edit.java @@ -7,8 +7,11 @@ > DELETE 2 @ 2 : 5 -> CHANGE 4 : 11 @ 4 : 6 +> CHANGE 4 : 14 @ 4 : 6 +~ +~ import net.eaglerforge.api.BaseData; +~ import net.eaglerforge.api.ModData; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; ~ diff --git a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.edit.java b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.edit.java index 09cfcba..be74a88 100644 --- a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.edit.java +++ b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.edit.java @@ -7,8 +7,11 @@ > DELETE 2 @ 2 : 5 -> CHANGE 2 : 8 @ 2 : 3 +> CHANGE 2 : 11 @ 2 : 3 +~ +~ import net.eaglerforge.api.BaseData; +~ import net.eaglerforge.api.ModData; ~ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; ~ ~ import com.google.common.base.Charsets; diff --git a/patches/resources/assets/minecraft/lang/en_US.edit.lang b/patches/resources/assets/minecraft/lang/en_US.edit.lang index 550d880..0a5ea4c 100644 --- a/patches/resources/assets/minecraft/lang/en_US.edit.lang +++ b/patches/resources/assets/minecraft/lang/en_US.edit.lang @@ -12,7 +12,7 @@ ~ eaglercraft.recording.start=Record Screen... ~ eaglercraft.soundCategory.voice=Voice -> INSERT 1 : 195 @ 1 +> INSERT 1 : 197 @ 1 + eaglercraft.resourcePack.prompt.title=What do you want to do with '%s'? + eaglercraft.resourcePack.prompt.text=Tip: Hold Shift to skip this screen when selecting a resource pack! @@ -208,6 +208,8 @@ + + eaglercraft.command.clientStub=This command is client side! + ++ eaglerforge.menu.mods=Mods ++ > INSERT 163 : 350 @ 163 diff --git a/sources/main/java/net/eaglerforge/GuiMods.java b/sources/main/java/net/eaglerforge/GuiMods.java new file mode 100644 index 0000000..2fca663 --- /dev/null +++ b/sources/main/java/net/eaglerforge/GuiMods.java @@ -0,0 +1,48 @@ +package net.eaglerforge; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.IChatComponent; + +import java.util.List; + +public class GuiMods extends GuiScreen { + private final GuiScreen parentScreen; + private IChatComponent message; + private List multilineMessage; + private int field_175353_i; + + public GuiMods(GuiScreen parentScreen) { + this.parentScreen = parentScreen; + } + public void initGui() { + this.buttonList.clear(); + this.multilineMessage = this.fontRendererObj.listFormattedStringToWidth(this.message.getFormattedText(), + this.width - 50); + this.field_175353_i = this.multilineMessage.size() * this.fontRendererObj.FONT_HEIGHT; + this.buttonList.add(new GuiButton(69, this.width / 2 - 100, + this.height / 2 + this.field_175353_i / 2 + this.fontRendererObj.FONT_HEIGHT, + I18n.format("gui.toMenu", new Object[0]))); + } + protected void actionPerformed(GuiButton parGuiButton) { + if (parGuiButton.id == 0) { + this.mc.displayGuiScreen(this.parentScreen); + } + + } + public void drawScreen(int i, int j, float f) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRendererObj, "testing", this.width / 2, + this.height / 2 - this.field_175353_i / 2 - this.fontRendererObj.FONT_HEIGHT * 2, 11184810); + int k = this.height / 2 - this.field_175353_i / 2; + if (this.multilineMessage != null) { + for (String s : this.multilineMessage) { + this.drawCenteredString(this.fontRendererObj, s, this.width / 2, k, 16777215); + k += this.fontRendererObj.FONT_HEIGHT; + } + } + + super.drawScreen(i, j, f); + } +} diff --git a/sources/main/java/net/eaglerforge/api/BaseData.java b/sources/main/java/net/eaglerforge/api/BaseData.java new file mode 100644 index 0000000..fec89db --- /dev/null +++ b/sources/main/java/net/eaglerforge/api/BaseData.java @@ -0,0 +1,362 @@ +package net.eaglerforge.api; + +import java.util.Map; + +import org.teavm.jso.JSBody; +import org.teavm.jso.JSObject; +import org.teavm.jso.JSFunctor; + +public abstract class BaseData implements JSObject { + @JSFunctor + public interface VoidCallback extends JSObject { + void onCallback(); + } + + @JSFunctor + public interface BooleanCallback extends JSObject { + boolean onCallback(); + } + + @JSFunctor + public interface ObjectCallback extends JSObject { + JSObject onCallback(); + } + + @JSFunctor + public interface FloatCallback extends JSObject { + float onCallback(); + } + + @JSFunctor + public interface DoubleCallback extends JSObject { + double onCallback(); + } + + @JSFunctor + public interface StringCallback extends JSObject { + String onCallback(); + } + + @JSFunctor + public interface IntCallback extends JSObject { + int onCallback(); + } + + @JSFunctor + public interface BooleanCallbackArr extends JSObject { + boolean[] onCallback(); + } + + @JSFunctor + public interface ObjectCallbackArr extends JSObject { + JSObject[] onCallback(); + } + + @JSFunctor + public interface FloatCallbackArr extends JSObject { + float[] onCallback(); + } + + @JSFunctor + public interface DoubleCallbackArr extends JSObject { + double[] onCallback(); + } + + @JSFunctor + public interface StringCallbackArr extends JSObject { + String[] onCallback(); + } + + @JSFunctor + public interface IntCallbackArr extends JSObject { + int[] onCallback(); + } + + @JSFunctor + public interface DataVoidCallback extends JSObject { + void onCallback(BaseData data); + } + + @JSFunctor + public interface DataBooleanCallback extends JSObject { + boolean onCallback(BaseData data); + } + + @JSFunctor + public interface DataObjectCallback extends JSObject { + JSObject onCallback(BaseData data); + } + + @JSFunctor + public interface DataFloatCallback extends JSObject { + float onCallback(BaseData data); + } + + @JSFunctor + public interface DataDoubleCallback extends JSObject { + double onCallback(BaseData data); + } + + @JSFunctor + public interface DataStringCallback extends JSObject { + String onCallback(BaseData data); + } + + @JSFunctor + public interface DataIntCallback extends JSObject { + int onCallback(BaseData data); + } + + @JSFunctor + public interface DataBooleanCallbackArr extends JSObject { + boolean[] onCallback(BaseData data); + } + + @JSFunctor + public interface DataObjectCallbackArr extends JSObject { + JSObject[] onCallback(BaseData data); + } + + @JSFunctor + public interface DataFloatCallbackArr extends JSObject { + float[] onCallback(BaseData data); + } + + @JSFunctor + public interface DataDoubleCallbackArr extends JSObject { + double[] onCallback(BaseData data); + } + + @JSFunctor + public interface DataStringCallbackArr extends JSObject { + String[] onCallback(BaseData data); + } + + @JSFunctor + public interface DataIntCallbackArr extends JSObject { + int[] onCallback(BaseData data); + } + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, String value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, int value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, boolean value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, float value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, byte value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, char value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, double value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, JSObject value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, BaseData value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, String[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, int[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, boolean[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, float[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, byte[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, char[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, double[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, JSObject[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, BaseData[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, short[] value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void set(String key, short value); + + @JSBody(params = { "key" }, script = "this[key]=null;") + public native void setNull(String key); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackVoid(String key, VoidCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackBoolean(String key, BooleanCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackInt(String key, IntCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackString(String key, StringCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackDouble(String key, DoubleCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackFloat(String key, FloatCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackObject(String key, ObjectCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackBooleanWithDataArg(String key, DataBooleanCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackDoubleWithDataArg(String key, DataDoubleCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackFloatWithDataArg(String key, DataFloatCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackIntWithDataArg(String key, DataIntCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackStringWithDataArg(String key, DataStringCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackObjectWithDataArg(String key, DataObjectCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackVoidWithDataArg(String key, DataVoidCallback value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackBooleanArrWithDataArg(String key, DataBooleanCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackDoubleArrWithDataArg(String key, DataDoubleCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackFloatArrWithDataArg(String key, DataFloatCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackIntArrWithDataArg(String key, DataIntCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackStringArrWithDataArg(String key, DataStringCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackObjectArrWithDataArg(String key, DataObjectCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackBooleanArr(String key, BooleanCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackIntArr(String key, IntCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackStringArr(String key, StringCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackDoubleArr(String key, DoubleCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackFloatArr(String key, FloatCallbackArr value); + + @JSBody(params = { "key", "value" }, script = "this[key]=value;") + public native void setCallbackObjectArr(String key, ObjectCallbackArr value); + + @JSBody(params = { "key" }, script = "return this[key];") + public native String getString(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native int getInt(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native boolean getBoolean(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native float getFloat(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native byte getByte(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native char getChar(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native double getDouble(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native JSObject getObject(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native BaseData getBaseData(String key); + + + @JSBody(params = { "key" }, script = "return this[key];") + public native String[] getStringArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native int[] getIntArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native short getShort(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native short[] getShortArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native boolean[] getBooleanArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native float[] getFloatArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native byte[] getByteArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native char[] getCharArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native double[] getDoubleArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native JSObject[] getObjectArr(String key); + + @JSBody(params = { "key" }, script = "return this[key];") + public native BaseData[] getBaseDataArr(String key); + + @JSBody(params = { "key" }, script = "return key in this;") + public native boolean has(String key); + + @JSBody(params = { "key" }, script = "return typeof this[key];") + public native String getType(String key); + + @JSBody(params = { "key" }, script = "return this[key]();") + public native JSObject execFuncObject(String key); + + @JSBody(params = { "key" }, script = "return this[key]();") + public native BaseData execFuncBaseData(String key); + + @JSBody(params = { "key" }, script = "return this[key]();") + public native String execFuncString(String key); + + @JSBody(params = { "key" }, script = "if(this[key] && this[key].getRef){ return this[key].getRef(); } else { return null; }") + public native BaseData getRef(String key); + + @JSBody(params = { }, script = "if(this.getRef){ return this.getRef(); } else { return null; }") + public native BaseData getRef(); +} \ No newline at end of file diff --git a/sources/main/java/net/eaglerforge/api/GlobalsListener.java b/sources/main/java/net/eaglerforge/api/GlobalsListener.java new file mode 100644 index 0000000..6b9e42a --- /dev/null +++ b/sources/main/java/net/eaglerforge/api/GlobalsListener.java @@ -0,0 +1,28 @@ +package net.eaglerforge.api; + +import java.util.Map; + +import org.teavm.jso.JSBody; +import org.teavm.jso.JSObject; +import org.teavm.jso.JSFunctor; + +class GlobalsListener { + @JSFunctor + public interface GlobalsHandler extends JSObject { + void onGlobalsUpdate(String global); + } + + @JSFunctor + public interface UpdateHandler extends JSObject { + void onUpdate(); + } + + @JSBody(params = { "handler" }, script = "window.PluginAPI.globals.onGlobalsUpdate = handler;") + static native void provideCallback(GlobalsHandler handler); + + @JSBody(params = { "handler" }, script = "window.PluginAPI.globals.onRequire = handler;") + static native void provideRequireCallback(GlobalsHandler handler); + + @JSBody(params = { "handler" }, script = "window.PluginAPI.update = handler;") + static native void provideUpdateCallback(UpdateHandler handler); +} \ No newline at end of file diff --git a/sources/main/java/net/eaglerforge/api/ModAPI.java b/sources/main/java/net/eaglerforge/api/ModAPI.java index 13be505..dca568e 100644 --- a/sources/main/java/net/eaglerforge/api/ModAPI.java +++ b/sources/main/java/net/eaglerforge/api/ModAPI.java @@ -2,24 +2,205 @@ package net.eaglerforge.api; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.minecraft.client.ClientBrandRetriever; import net.minecraft.client.Minecraft; +import net.minecraft.util.ChatComponentText; import org.teavm.jso.JSBody; import org.teavm.jso.JSObject; +import java.util.ArrayList; + import static net.lax1dude.eaglercraft.v1_8.EaglercraftVersion.projectForkVersion; public class ModAPI { private static Minecraft mc; + public ArrayList requiredList; public static final Logger log = LogManager.getLogger(); public static String version = projectForkVersion; - @JSBody(params = { "version" }, script ="var ModAPI = {};\r\n" + // - "ModAPI.version = version;\r\n" + // - "ModAPI.log = log;\r\n" + // - "ModAPI.mcinstance = mc;\r\n" + // - "window.ModAPI = ModAPI;") + public static boolean clientPacketSendEventsEnabled = true; + @JSBody(params = { "version" }, script = "var ModAPI = {};\r\n" + // + "ModAPI.events = {};\r\n" + // + "ModAPI.events.types = [\"event\"];\r\n" + // + "ModAPI.events.listeners = {\"event\": []};\r\n" + // + "ModAPI.globals = {};\r\n" + // + "ModAPI.version = version;\r\n" + // + "ModAPI.addEventListener = function newEventListener(name, callback) {\r\n" + // + " if (!callback) {\r\n" + // + " throw new Error(\"Invalid callback!\");\r\n" + // + " }\r\n" + // + " if (ModAPI.events.types.includes(name)) {\r\n" + // + " if (!Array.isArray(ModAPI.events.listeners[name])) {\r\n" + // + " ModAPI.events.listeners[name] = [];\r\n" + // + " }\r\n" + // + " ModAPI.events.listeners[name].push(callback);\r\n" + // + " console.log(\"Added new event listener.\");\r\n" + // + " } else {\r\n" + // + " throw new Error(\"This event does not exist!\");\r\n" + // + " }\r\n" + // + "};\r\n" + // + "ModAPI.removeEventListener = function removeEventListener(name, func, slow) {\r\n" + // + " if (!func) {\r\n" + // + " throw new Error(\"Invalid callback!\");\r\n" + // + " }\r\n" + // + " if (!Array.isArray(ModAPI.events.listeners[name])) {\r\n" + // + " ModAPI.events.listeners[name] = [];\r\n" + // + " }\r\n" + // + " var targetArr = ModAPI.events.listeners[name];\r\n" + // + " if (!slow) {\r\n" + // + " if (targetArr.indexOf(func) !== -1) {\r\n" + // + " targetArr.splice(targetArr.indexOf(func), 1);\r\n" + // + " console.log(\"Removed event listener.\");\r\n" + // + " }\r\n" + // + " } else {\r\n" + // + " var functionString = func.toString();\r\n" + // + " targetArr.forEach((f, i) => {\r\n" + // + " if (f.toString() === functionString) {\r\n" + // + " targetArr.splice(i, 1);\r\n" + // + " console.log(\"Removed event listener.\");\r\n" + // + " }\r\n" + // + " });\r\n" + // + " }\r\n" + // + "};\r\n" + // + "ModAPI.events.newEvent = function newEvent(name) {\r\n" + // + " ModAPI.events.types.push(name);\r\n" + // + "};\r\n" + // + "ModAPI.events.callEvent = function callEvent(name, data) {\r\n" + // + " if (\r\n" + // + " !ModAPI.events.types.includes(name) ||\r\n" + // + " !Array.isArray(ModAPI.events.listeners[name])\r\n" + // + " ) {\r\n" + // + " if (!Array.isArray(ModAPI.events.listeners[name])) {\r\n" + // + " if (ModAPI.events.types.includes(name)) {\r\n" + // + " ModAPI.events.listeners.event.forEach((func) => {\r\n" + // + " func({event: name, data: data});\r\n" + // + " });\r\n" + // + " return;\r\n" + // + " }\r\n" + // + " return;\r\n" + // + " }\r\n" + // + " console.error(\"The ModAPI has been called with an invalid event name: \"+name);\r\n" + // + " console.error(\"Please report this bug to the repo.\");\r\n" + // + " return;\r\n" + // + " }\r\n" + // + " ModAPI.events.listeners[name].forEach((func) => {\r\n" + // + " func(data);\r\n" + // + " });\r\n" + // + " ModAPI.events.listeners.event.forEach((func) => {\r\n" + // + " func({event: name, data: data});\r\n" + // + " });\r\n" + // + "\r\n" + // + " ModAPI.globals._initUpdate();\r\n" + // + "};\r\n" + // + "ModAPI.updateComponent = function updateComponent(component) {\r\n" + // + " if (\r\n" + // + " typeof component !== \"string\" ||\r\n" + // + " ModAPI[component] === null ||\r\n" + // + " ModAPI[component] === undefined\r\n" + // + " ) {\r\n" + // + " return;\r\n" + // + " }\r\n" + // + " if (!ModAPI.globals || !ModAPI.globals.onGlobalsUpdate) {\r\n" + // + " return;\r\n" + // + " }\r\n" + // + " if (!ModAPI.globals.toUpdate) {\r\n" + // + " ModAPI.globals.toUpdate = [];\r\n" + // + " }\r\n" + // + " if (ModAPI.globals.toUpdate.indexOf(component) === -1) {\r\n" + // + " ModAPI.globals.toUpdate.push(component);\r\n" + // + " }\r\n" + // + "};\r\n" + // + "ModAPI.require = function require(component) {\r\n" + // + " if (typeof component !== \"string\") {\r\n" + // + " return;\r\n" + // + " }\r\n" + // + " if (!ModAPI.globals || !ModAPI.globals.onRequire) {\r\n" + // + " return;\r\n" + // + " }\r\n" + // + " ModAPI.globals.onRequire(component);\r\n" + // + "};\r\n" + // + "ModAPI.globals._initUpdate = function _initUpdate() {\r\n" + // + " if (!ModAPI.globals.toUpdate) {\r\n" + // + " ModAPI.globals.toUpdate = [];\r\n" + // + " }\r\n" + // + " ModAPI.globals.toUpdate.forEach((id) => {\r\n" + // + " ModAPI.globals.onGlobalsUpdate(id);\r\n" + // + " });\r\n" + // + " ModAPI.globals.toUpdate = [];\r\n" + // + "};\r\n" + // + "window.ModAPI = ModAPI;\r\n" + // + "") public static native void initAPI(String version); + @JSBody(params = { "name" }, script = "ModAPI.events.newEvent(name);") + private static native void newEvent(String name); + + @JSBody(params = { "name", "data" }, script = "ModAPI.events.callEvent(name, data); return data;") + public static native BaseData callEvent(String name, BaseData data); + + @JSBody(params = { "name", "data" }, script = "ModAPI[name]=data;") + public static native void setGlobal(String name, BaseData data); + + @JSBody(params = { "name" }, script = "return ModAPI[name] || {};") + public static native BaseData getGlobal(String name); + + @JSBody(params = {}, script = "return ModAPI;") + public static native BaseData getModAPI(); + + @JSBody(params = { "data" }, script = "console.log(data);") + public static native void logJSObj(JSObject data); + + public void onGlobalUpdated(String global) { + // logger.info("Global update request: "+global); + BaseData data = getGlobal(global); + // logJSObj(data); + if (data == null) { + return; + } + } + + public void onRequire(String global) { + if (!requiredList.contains(global)) { + log.info("Required global: " + global); + requiredList.add(global); + } + } + public ModAPI(Minecraft mcIn) { this.mc = mcIn; + requiredList = new ArrayList(); initAPI(version); + getModAPI().setCallbackVoidWithDataArg("displayToChat", (BaseData params) -> { + mc.ingameGUI.getChatGUI().printChatMessage(new ChatComponentText(params.getString("msg"))); + }); + getModAPI().setCallbackVoid("clickMouse", () -> { + mc.clickMouse(); + }); + getModAPI().setCallbackVoid("rightClickMouse", () -> { + mc.rightClickMouse(); + }); + getModAPI().set("clientBrand", ClientBrandRetriever.getClientModName()); + + setGlobal("mcinstance", mc); + setGlobal("mcinstance", log); + } + static void globalsFunctor(ModAPI modAPI) { + GlobalsListener.provideCallback((String name) -> { + modAPI.onGlobalUpdated(name); + }); + } + + static void globalsRequireFunctor(ModAPI modAPI) { + GlobalsListener.provideRequireCallback((String name) -> { + modAPI.onRequire(name); + }); + } + + static void globalsUpdateFunctor(ModAPI modAPI) { + GlobalsListener.provideUpdateCallback(() -> { + modAPI.onUpdate(); + }); + } + + public void onUpdate() { + ModAPI.callEvent("update", new ModData()); } } diff --git a/sources/main/java/net/eaglerforge/api/ModData.java b/sources/main/java/net/eaglerforge/api/ModData.java new file mode 100644 index 0000000..fc7ea07 --- /dev/null +++ b/sources/main/java/net/eaglerforge/api/ModData.java @@ -0,0 +1,4 @@ +package net.eaglerforge.api; + +public class ModData extends BaseData{ +} diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java index 137ac39..4e535be 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/Logger.java @@ -3,6 +3,7 @@ package net.lax1dude.eaglercraft.v1_8.log4j; import java.text.SimpleDateFormat; import java.util.Date; +import net.eaglerforge.api.ModData; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; @@ -21,7 +22,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime; * POSSIBILITY OF SUCH DAMAGE. * */ -public class Logger { +public class Logger extends ModData { public final String loggerName; diff --git a/sources/setup/workspace_template/build.gradle b/sources/setup/workspace_template/build.gradle index c4f1a7c..1600fac 100644 --- a/sources/setup/workspace_template/build.gradle +++ b/sources/setup/workspace_template/build.gradle @@ -21,12 +21,15 @@ dependencies { teavm(teavm.libs.jso) teavm(teavm.libs.jsoApis) } +dependencies { + implementation teavm.libs.jsoApis +} teavm.js { - obfuscated = true + obfuscated = false; sourceMap = true targetFileName = "../classes.js" - // optimization = OptimizationLevel.ADVANCED + optimization = org.teavm.gradle.api.OptimizationLevel.AGGRESSIVE; outOfProcess = false fastGlobalAnalysis = false processMemory = 512