Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

LiquidBounce Forum

  1. Home
  2. ScriptAPI
  3. [CORE] Subscribing to Forge events.

[CORE] Subscribing to Forge events.

Scheduled Pinned Locked Moved ScriptAPI
5 Posts 2 Posters 306 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    idk my name
    wrote on last edited by
    #1
    function register(eventClass, listener) {
        adaptedBus = new Reflector(MinecraftForge.EVENT_BUS);
        activeModContainer = Loader.instance().activeModContainer();
        !activeModContainer && (activeModContainer = Loader.instance().getMinecraftModContainer());
        adaptedBus.listenerOwners.put(listener, activeModContainer);
        ctr = eventClass.getConstructor();
        ctr.setAccessible(true);
        EVENT = ctr.newInstance();
        asm = new ASMEventHandler(listener, getMethod(listener, "invoke"), activeModContainer, IGenericEvent.class.isAssignableFrom(eventClass));
        ieventlistener = asm;
        if (IContextSetter.class.isAssignableFrom(eventClass)) {
            ieventlistener = new (Java.extend(IEventListener, {
                invoke: function(e) {
                    old = Loader.instance().activeModContainer();
                    Loader.instance().setActiveModContainer(owner);
                    Java.to(e, IContextSetter).setModContainer(owner);
                    asm.invoke(e);
                    Loader.instance().setActiveModContainer(old);
                }
            }));
        }
        EVENT.getListenerList().register(adaptedBus.busID, EventPriority.NORMAL, listener);
        //useless broken shit
        //others = adaptedBus.listeners.computeIfAbsent(listener, function(k) new ArrayList())
        //others.add(ieventlistener)
    }
    
    RenderGameOverlayEvent = Java.type('net.minecraftforge.client.event.RenderGameOverlayEvent'),
    MinecraftForge = Java.type('net.minecraftforge.common.MinecraftForge'),
    SubscribeEvent = Java.type('net.minecraftforge.fml.common.eventhandler.SubscribeEvent'),
    Event = Java.type('net.minecraftforge.fml.common.eventhandler.Event'),
    IGenericEvent = Java.type('net.minecraftforge.fml.common.eventhandler.IGenericEvent'),
    ModContainer = Java.type('net.minecraftforge.fml.common.ModContainer'),
    IEventListener = Java.type('net.minecraftforge.fml.common.eventhandler.IEventListener'),
    ASMEventHandler = Java.type('net.minecraftforge.fml.common.eventhandler.ASMEventHandler'),
    EventPriority = Java.type('net.minecraftforge.fml.common.eventhandler.EventPriority'),
    IContextSetter = Java.type('net.minecraftforge.fml.common.eventhandler.IContextSetter')
    
    onEnable: function() {
        register(RenderGameOverlayEvent.Text.class, forgeListener)
    }
    
    forgeListener = new (Java.extend(IEventListener, java.util.function.Consumer, {
        invoke: function(event) {
            mc.fontRenderer.drawString("test", 0, 0, -16746560)
            //debug T_T
            this.accept(event)
        },
        accept: function(event) {
            //print(event.class.name)
        }
    }));
    
    CzechHekC 1 Reply Last reply
    3
    • I idk my name has marked this topic as solved on
    • I idk my name marked this topic as a regular topic on
    • I idk my name
      function register(eventClass, listener) {
          adaptedBus = new Reflector(MinecraftForge.EVENT_BUS);
          activeModContainer = Loader.instance().activeModContainer();
          !activeModContainer && (activeModContainer = Loader.instance().getMinecraftModContainer());
          adaptedBus.listenerOwners.put(listener, activeModContainer);
          ctr = eventClass.getConstructor();
          ctr.setAccessible(true);
          EVENT = ctr.newInstance();
          asm = new ASMEventHandler(listener, getMethod(listener, "invoke"), activeModContainer, IGenericEvent.class.isAssignableFrom(eventClass));
          ieventlistener = asm;
          if (IContextSetter.class.isAssignableFrom(eventClass)) {
              ieventlistener = new (Java.extend(IEventListener, {
                  invoke: function(e) {
                      old = Loader.instance().activeModContainer();
                      Loader.instance().setActiveModContainer(owner);
                      Java.to(e, IContextSetter).setModContainer(owner);
                      asm.invoke(e);
                      Loader.instance().setActiveModContainer(old);
                  }
              }));
          }
          EVENT.getListenerList().register(adaptedBus.busID, EventPriority.NORMAL, listener);
          //useless broken shit
          //others = adaptedBus.listeners.computeIfAbsent(listener, function(k) new ArrayList())
          //others.add(ieventlistener)
      }
      
      RenderGameOverlayEvent = Java.type('net.minecraftforge.client.event.RenderGameOverlayEvent'),
      MinecraftForge = Java.type('net.minecraftforge.common.MinecraftForge'),
      SubscribeEvent = Java.type('net.minecraftforge.fml.common.eventhandler.SubscribeEvent'),
      Event = Java.type('net.minecraftforge.fml.common.eventhandler.Event'),
      IGenericEvent = Java.type('net.minecraftforge.fml.common.eventhandler.IGenericEvent'),
      ModContainer = Java.type('net.minecraftforge.fml.common.ModContainer'),
      IEventListener = Java.type('net.minecraftforge.fml.common.eventhandler.IEventListener'),
      ASMEventHandler = Java.type('net.minecraftforge.fml.common.eventhandler.ASMEventHandler'),
      EventPriority = Java.type('net.minecraftforge.fml.common.eventhandler.EventPriority'),
      IContextSetter = Java.type('net.minecraftforge.fml.common.eventhandler.IContextSetter')
      
      onEnable: function() {
          register(RenderGameOverlayEvent.Text.class, forgeListener)
      }
      
      forgeListener = new (Java.extend(IEventListener, java.util.function.Consumer, {
          invoke: function(event) {
              mc.fontRenderer.drawString("test", 0, 0, -16746560)
              //debug T_T
              this.accept(event)
          },
          accept: function(event) {
              //print(event.class.name)
          }
      }));
      
      CzechHekC Offline
      CzechHekC Offline
      CzechHek
      wrote on last edited by CzechHek
      #2

      @idk-my-name Time to make a complete client in a client I guess undefined

      However, is this for 1.12 forge since IGenericEvent isn't in forge 1.8.9 classloader? I don't know anything about forge modding.

      I 2 Replies Last reply
      0
      • CzechHekC CzechHek

        @idk-my-name Time to make a complete client in a client I guess undefined

        However, is this for 1.12 forge since IGenericEvent isn't in forge 1.8.9 classloader? I don't know anything about forge modding.

        I Offline
        I Offline
        idk my name
        wrote on last edited by
        #3

        @czechhek I've been using 1.12 Forge API, but I don't think that it would be that hard to remake register function from 1.8.9 forge (btw i'll do this in 15 min, wait)

        1 Reply Last reply
        0
        • CzechHekC CzechHek

          @idk-my-name Time to make a complete client in a client I guess undefined

          However, is this for 1.12 forge since IGenericEvent isn't in forge 1.8.9 classloader? I don't know anything about forge modding.

          I Offline
          I Offline
          idk my name
          wrote on last edited by
          #4

          @czechhek 1.8.9 Forge's EventBus is more simple, take a look: https://github.com/MinecraftForge/MinecraftForge/blob/d06e0ad71b8471923cc809dde58251de8299a143/src/main/java/net/minecraftforge/fml/common/eventhandler/EventBus.java#L97

          1 Reply Last reply
          0
          • I Offline
            I Offline
            idk my name
            wrote on last edited by
            #5

            1.8.9 version (?):

            
            function register(eventClass, listener) {
                //we are making reflected event bus to access private fields & methods
                adaptedBus = new Reflector(MinecraftForge.EVENT_BUS);
            
                //getting an actual mod container (it seems that activeModContainer() returns null in LiquidBounce so we are checking for null & redefining to minecraft mod container)
                activeModContainer = Loader.instance().activeModContainer();
                !activeModContainer && (activeModContainer = Loader.instance().getMinecraftModContainer());
            
                //https://github.com/MinecraftForge/MinecraftForge/blob/d06e0ad71b8471923cc809dde58251de8299a143/src/main/java/net/minecraftforge/fml/common/eventhandler/EventBus.java#L58
                adaptedBus.listenerOwners.put(listener, activeModContainer);
            
                ctr = eventClass.getConstructor();
                ctr.setAccessible(true);
            
                EVENT = ctr.newInstance();
            
                //don't remove this line because event won't call without it
                asm = new ASMEventHandler(listener, getMethod(listener, "invoke"), activeModContainer);
            
                //registering a new listener
                EVENT.getListenerList().register(adaptedBus.busID, EventPriority.NORMAL, listener);
            
                others = adaptedBus.listeners.get(listener);
                if (!others) {
                    others = new ArrayList();
                    adaptedBus.listeners.put(listener, others);
                }
                others.add(asm)
            }
            
            1 Reply Last reply
            1
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            About
            • Terms of Service
            • Privacy Policy
            • Status
            • Contact Us
            Downloads
            • Releases
            • Source code
            • License
            Docs
            • Tutorials
            • CustomHUD
            • AutoSettings
            • ScriptAPI
            Community
            • Forum
            • Guilded
            • YouTube
            • Twitter
            • D.Tube
            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups