aboutsummaryrefslogtreecommitdiff
path: root/featureClass
diff options
context:
space:
mode:
authorSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2022-05-29 12:04:52 +0800
committerSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2022-05-29 12:04:52 +0800
commita6593709b0e1e99e241b6c163fe66623685b6efc (patch)
tree9714e82716caf9edd6be05a1822fa492eb6756ed /featureClass
parenta7dcf231cc43c9ef73d6a969203c2dafd2ce8caf (diff)
downloadSoopyV2-a6593709b0e1e99e241b6c163fe66623685b6efc.tar.gz
SoopyV2-a6593709b0e1e99e241b6c163fe66623685b6efc.tar.bz2
SoopyV2-a6593709b0e1e99e241b6c163fe66623685b6efc.zip
first part of supporting java side rendering
Diffstat (limited to 'featureClass')
-rw-r--r--featureClass/class.js11
-rw-r--r--featureClass/featureManager.js4
-rw-r--r--featureClass/forgeEvents.js24
3 files changed, 22 insertions, 17 deletions
diff --git a/featureClass/class.js b/featureClass/class.js
index d595e4b..b8a17d9 100644
--- a/featureClass/class.js
+++ b/featureClass/class.js
@@ -79,17 +79,16 @@ class Feature {
delete this.soopyEvents[event.id]
}
- registerForge(event, func, messageIfError) {
+ registerForge(event, func, priority) {
let theEvent
try {
- theEvent = this.FeatureManager.registerForge(event, func, this)
- } catch (e) { //TODO: option to disable this chat message + fallback register for some that support (eg fallback of RenderWorldLastEvent to ct 'renderWorld')
- if (!messageIfError) messageIfError = "An error occured while registering the event " + event.class.toString().split(".").pop() + ", this may cause " + this.constructor.name + " to not work properly."
- ChatLib.chat(this.FeatureManager.messagePrefix + messageIfError)
+ theEvent = this.FeatureManager.registerForge(event, func, priority, this)
+ } catch (e) {
+ ChatLib.chat(this.FeatureManager.messagePrefix + "An error occured while registering the event " + event.class.toString().split(".").pop() + ", this may cause " + this.constructor.name + " to not work properly.")
}
if (theEvent) this.forgeEvents[theEvent.id] = theEvent
- return new ForgeEvent(theEvent, theEvent.trigger, [event, func, messageIfError], this)
+ return new ForgeEvent(theEvent, theEvent.trigger, [event, func, priority], this)
}
unregisterForge(event) {
diff --git a/featureClass/featureManager.js b/featureClass/featureManager.js
index e27208f..991f549 100644
--- a/featureClass/featureManager.js
+++ b/featureClass/featureManager.js
@@ -439,13 +439,13 @@ class FeatureManager {
return this.customEvents[id]
}
- registerForge(event, func, context) {
+ registerForge(event, func, priority, context) {
let id = this.lastForgeEventId++
this.forgeEvents[id] = {
func: func,
context: context,
- trigger: registerForgeBase(event, (...args) => {
+ trigger: registerForgeBase(event, priority, (...args) => {
try {
if (context.enabled) {
if (this.recordingPerformanceUsage) this.startRecordingPerformance(context.constructor.name, event.class.name)
diff --git a/featureClass/forgeEvents.js b/featureClass/forgeEvents.js
index e852c49..fb723b1 100644
--- a/featureClass/forgeEvents.js
+++ b/featureClass/forgeEvents.js
@@ -4,15 +4,20 @@ importPackage(org.objectweb.asm)
importClass(java.lang.ClassLoader)
importClass(org.apache.commons.lang3.RandomStringUtils)
importClass(java.util.function.Consumer)
+importClass(net.minecraftforge.fml.common.eventhandler.EventPriority)
const L = s => `L${s};`
-
const LoadedInsts = []
-function defineClassBytes(name, bytes) {
+function defineClassBytes(name, bytes) {//should support multymc? ty dawjaw https://canary.discord.com/channels/119493402902528000/688773480954855537/979959207124168744
const classLoader = Packages.com.chattriggers.ctjs.CTJS.class.getClassLoader()
- const defClass = ClassLoader.class.getDeclaredMethods()[23] // defineClass()
+ let defClass;
+ ClassLoader.class.getDeclaredMethods().forEach(m => {
+ if (m.toString() === "protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int) throws java.lang.ClassFormatError") {
+ defClass = m;
+ }
+ })
defClass.setAccessible(true)
@@ -22,7 +27,7 @@ function defineClassBytes(name, bytes) {
return defClass.invoke(classLoader, n, bytes, o, s)
}
-const registerForge = (e, cb) => {
+const registerForge = (e, priority = EventPriority.NORMAL, cb) => {
const cw = new ClassWriter(0)
const event = Type.getType(e.class).internalName
@@ -35,7 +40,7 @@ const registerForge = (e, cb) => {
const obj = Type.getType(java.lang.Object.class).internalName
cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, name, null, obj, null)
- // cw.visitInnerClass("net/minecraftforge/event/entity/player/PlayerEvent$BreakSpeed", "net/minecraftforge/event/entity/player/PlayerEvent", "BreakSpeed", ACC_PUBLIC + ACC_STATIC);
+ //cw.visitInnerClass("net/minecraftforge/event/entity/player/PlayerEvent$BreakSpeed","net/minecraftforge/event/entity/player/PlayerEvent","BreakSpeed",ACC_PUBLIC+ACC_STATIC);
{
cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "callback", L(consumer), L(consumer + "<" + L(event) + ">"), null).visitEnd()
}
@@ -44,7 +49,7 @@ const registerForge = (e, cb) => {
con.visitCode()
con.visitVarInsn(Opcodes.ALOAD, 0)
con.visitMethodInsn(Opcodes.INVOKESPECIAL, obj, "<init>", "()V", false)
-
+
con.visitVarInsn(Opcodes.ALOAD, 0)
con.visitVarInsn(Opcodes.ALOAD, 1)
con.visitFieldInsn(Opcodes.PUTFIELD, name, "callback", L(consumer))
@@ -59,6 +64,7 @@ const registerForge = (e, cb) => {
const mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "on", "(" + L(event) + ")V", null, null)
{
const av = mv.visitAnnotation(L(subscribeEvent), true)
+ av.visitEnum("priority", "Lnet/minecraftforge/fml/common/eventhandler/EventPriority;", priority.name());
av.visitEnd()
}
mv.visitCode()
@@ -75,7 +81,7 @@ const registerForge = (e, cb) => {
const inst = defineClassBytes(name, cw.toByteArray())
.getDeclaredConstructor(Consumer.class)
.newInstance(new java.util.function.Consumer({
- accept: function (t) { cb(t) }
+ accept: function (t) { cb(t) }
}))
LoadedInsts.push(inst)
return inst;
@@ -86,8 +92,8 @@ const unregisterForge = inst => {
}
register("gameUnload", () => {
- LoadedInsts.forEach(unregisterForge)
+ LoadedInsts.forEach(unregisterForge)
LoadedInsts.length = 0
})
-export { registerForge, unregisterForge }
+export { registerForge, unregisterForge } \ No newline at end of file