Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

Sign up now!

Experience Listener

Joined
Nov 6, 2013
Messages
16
Useful for scripts like slayer and such

Code:
package com.scrubscripting.listeners;

import java.util.ArrayList;
import java.util.EventListener;
import java.util.HashMap;
import java.util.List;

import com.runemate.game.api.hybrid.local.Skill;

public class EventDispatcher {
    private final List<EventListener> listeners = new ArrayList<EventListener>();
    private HashMap<Skill, Integer> cacheMap = new HashMap<Skill, Integer>();
    private boolean set = false;
    private boolean running = false;
    private Object lock = new Object();

    public EventDispatcher() {
        running = true;
        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                while (running) {
                    updateSkills();

                }
            }
        });
        t.setName("Scrub's Event Dispatcher");
        t.start();
    }

    public void stop() {
        running = false;
    }

    private void init() {
        set = true;
        for (Skill skill : Skill.values()) {
            cacheMap.put(skill, skill.getExperience());
        }

    }

    public void addListener(final EventListener event) {
        synchronized (lock) {
            listeners.add(event);
        }
    }

    public void removeListener(final EventListener event) {
        synchronized (lock) {
            listeners.remove(event);
        }
    }

    public void clear() {
        synchronized (lock) {
            listeners.clear();
        }
    }

    public void fireEvent(ExperienceEvent event) {
        if (event != null) {
            synchronized (lock) {
                for (int i = 0; i < listeners.size(); i++) {
                    EventListener el = listeners.get(i);
                    if (el instanceof ExperienceListener)
                        ((ExperienceListener) el).onExperienceGain(event);
                }
            }
        }
    }

    public void updateSkills() {

        if (!set) {
            init();
        } else {
            for (Skill skill : Skill.values())
                if (skill.getExperience() > cacheMap.get(skill)) {
                    fireEvent(new ExperienceEvent(skill, cacheMap.get(skill), skill.getExperience()));
                    cacheMap.remove(skill);
                    cacheMap.put(skill, skill.getExperience());
                }
        }

        try {
            Thread.sleep(444);
        } catch (InterruptedException e) {

            e.printStackTrace();
        }

    }
}

Code:
package com.scrubscripting.listeners;

import java.util.EventListener;
import java.util.EventObject;

import com.runemate.game.api.hybrid.local.Skill;

public class ExperienceEvent extends EventObject {

   private static final long serialVersionUID = -2302038860845746230L;
   private final int oldExperience;
   private final int newExperience;
   private final Skill skill;
   private static final Object source = new Object();

   public ExperienceEvent(Skill skill, int oldExperience, int newExperience) {
     super(source);
     this.skill = skill;
     this.oldExperience = oldExperience;
     this.newExperience = newExperience;

   }

   public int getOld() {
     return oldExperience;
   }

   public int getNew() {
     return newExperience;
   }

   public int getChange() {
     return newExperience - oldExperience;
   }

   public Skill getSkill() {
     return skill;
   }

   public void fireEvent(EventListener el) {
     ((ExperienceListener) el).onExperienceGain(this);
   }

   @Override
   public String toString() {
     return "ExperienceEvent [OldExperience=" + oldExperience + ", NewExperience=" + newExperience + ", Skill=" + skill + ", Change=" + getChange() + "]";
   }

}

Code:
package com.scrubscripting.listeners;

import java.util.EventListener;

public interface ExperienceListener extends EventListener {
   public abstract void onExperienceGain(ExperienceEvent ev);

}

Example usage

Code:
// implement the interface
public class Core extends LoopingScript implements PaintListener ,ExperienceListener
    EventDispatcher eventDispatcher;
   // on start set the listener
    eventDispatcher = new EventDispatcher();
     eventDispatcher.addListener(this);


// on exit 
eventDispatcher .stop();
 
Engineer
Joined
Jul 28, 2013
Messages
2,776
This feature has been implemented in the latest release within the SkillListener.
 
Top