Hi, I've had problem the ExperienceTracker not getting the combat xp fastly enough, so I've decided to implement my own combat xp tracker which tracks the experience via using the widgets,  
	INSTRUCTIONS:
 
	In order to use the Xp drop tracker  change the xp drop settings to following:
 
	1. change the xp text to pink 2. don't use combined xp drop
 
package State;
import org.osbot.rs07.api.filter.Filter;
import org.osbot.rs07.api.ui.RS2Widget;
import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.api.util.ExperienceTracker;
import org.osbot.rs07.script.MethodProvider;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class XpDropWidgetStateManager {
    MethodProvider mp;
    int latest_xp_drop = 0;
    ExperienceTracker range_xp_tracker;
    int gained_xp = 0;
    public ArrayList<Integer> values_widget = new ArrayList<>();
    public ArrayList<Integer> values_skilltracker = new ArrayList<>();
    int num_drops_to_save = 500;
    public XpDropWidgetStateManager(MethodProvider mp) {
        this.mp = mp;
    }
    public void initializeXPTracker() {
        this.range_xp_tracker = mp.getExperienceTracker();
        this.range_xp_tracker.start(Skill.RANGED);
        this.gained_xp = this.range_xp_tracker.getGainedXP(Skill.RANGED);
        latest_xp_drop = 0;
    }
    private int RS2WidgetHeightComparator(RS2Widget lhs, RS2Widget rhs) {
        int lhs_height = lhs.getPosition().y;
        int rhs_height = rhs.getPosition().y;
        return Integer.compare(rhs_height, lhs_height);
    }
    private double getYDistance(RS2Widget src, RS2Widget target) {
        return Math.abs(src.getPosition().getY() - target.getPosition().getY());
    }
    private RS2Widget getMyWidget() {
        List<RS2Widget> combat_icon_widgets = mp.getWidgets().filter(new Filter<RS2Widget>() {
            @Override
            public boolean match(RS2Widget rw) {
                return rw.getRootId() == 122 && rw.isVisible() && rw.getSpriteIndex1() != 203
                        && rw.getSpriteIndex1() != -1;
            }
        });
        combat_icon_widgets.sort(this::RS2WidgetHeightComparator);
        if (combat_icon_widgets.size() > 0) {
            RS2Widget lowest_combat_icon_widget = combat_icon_widgets.get(0);
            List<RS2Widget> xp_drop_widgets = mp.getWidgets().filter(rw -> rw.getRootId() == 122
                    && rw.isVisible() && rw.getTextColor() == 16763080).stream().filter(o ->
                            getYDistance(o, lowest_combat_icon_widget) < 1.0)
                    .collect(Collectors.toList());
//            mp.log(String.format("Size of xp widgets: %d", xp_drop_widgets.size()));
            if (xp_drop_widgets.size() == 1) {
                return xp_drop_widgets.get(0);
            }
        }
        return null;
    }
    public void print_array(ArrayList<Integer> array, String prefix) {
        mp.log("--------");
        mp.log(prefix);
        String string = "";
        for (int elem : array) {
            string += String.valueOf(elem) + ", ";
        }
        mp.log(string);
    }
    private boolean isMyWidgetWorking(RS2Widget widget) {
        return widget != null && widget.isVisible();
    }
    public void saveToFile(String fileName, ArrayList<Integer> list) throws FileNotFoundException {
        PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
        for (int club : list)
            pw.println(club);
        pw.close();
    }
    public /*JSONObject*/ int getXPDropInfo() {
        int dmg = 0;
        RS2Widget widget = getMyWidget();
        if (isMyWidgetWorking(widget)) {
            String message = widget.getMessage();
            dmg = Integer.parseInt(message) / 4;
//            mp.log(dmg);
            int curr_xp_drop = dmg * 4;
            if (latest_xp_drop != curr_xp_drop) {
                this.values_widget.add(curr_xp_drop);
                latest_xp_drop = curr_xp_drop;
            }
            int xp_gained_2 = this.range_xp_tracker.getGainedXP(Skill.RANGED);
            if (this.gained_xp != xp_gained_2) {
                num_drops_to_save += 1;
                int xp_change = xp_gained_2 - this.gained_xp;
                this.gained_xp = xp_gained_2;
                this.values_skilltracker.add(xp_change);
            }
            if (num_drops_to_save % 5 == 0) {
                this.print_array(this.values_widget, "Widget values");
                this.print_array(this.values_skilltracker, "SkillTracker values");
            }
        }
        return dmg;
    }
}
	 
 
	This code is using ExperienceTracker for debug purposes, so feel free to delete it/refractor the code to your needs