- Joined
- Nov 6, 2013
- Messages
- 16
- Thread Author
- #1
Useful for scripts like slayer and such
Example usage
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();