Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • 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 1.5k 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

            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

            With your input, this post could be even better 💗

            Register Login
            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