我一直在研究插件,并获得了一些非常有趣的数据,我试图添加一个自定义图,并成功地使该图以我在MCStats上的代码中设置的名称显示。
我的插件是here,并重新创建了Dense Ores Mod。
我想每小时发送一次区块挖掘数据。到目前为止,这是我的onEnable
中的内容:
try {
Metrics metrics = new Metrics(this);
Graph blocksMinedGraph = metrics.createGraph("Extra items from blocks");
blocksMinedGraph.addPlotter(new Metrics.Plotter("Coal Ore") {
@Override
public int getValue() {
return coalMined;
}
});
blocksMinedGraph.addPlotter(new Metrics.Plotter("Iron Ore") {
@Override
public int getValue() {
return ironMined;
}
});
metrics.start();
} catch (IOException e) {
getLogger().info(ANSI_RED + "Metrics have been unable to load for: DenseOres" + ANSI_RESET);
}
尽管到目前为止我还无法填充它,但是这已经在我的MCStats页面上成功创建了一个名为“块中的其他项目”的新图形。我已经尝试过,但是无法解决如何发送数据的问题。
与此问题相关联,在发送数据时,我是否必须在文件中的某个位置保留值的计数,以便它们在重新加载和服务器重新启动之间持续存在?
最佳答案
我似乎已通过将blocksMinedGraph.addPlotter(...)
部分放置在异步重复任务中解决了该问题。
这是执行重复任务的代码,尽管MCStats上的图形需要永久更新。
try {
Metrics metrics = new Metrics(this);
if (!metrics.isOptOut()) {
final Graph blocksMinedGraph = metrics.createGraph("Extra items from blocks (Since v2.3)");
Bukkit.getScheduler().runTaskTimerAsynchronously(this, new Runnable() {
public void run() {
getLogger().info("Graph data sent");
blocksMinedGraph.addPlotter(new Metrics.Plotter("Coal Ore") {
@Override
public int getValue() {
return coalMined;
}
});
blocksMinedGraph.addPlotter(new Metrics.Plotter("Iron Ore") {
@Override
public int getValue() {
return ironMined;
}
});
}
}, DELAY, INCREMENT);
getLogger().info("Metrics started");
metrics.start();
}
} catch (IOException e) {
getLogger().info(ANSI_RED + "Metrics have been unable to load for: DenseOres" + ANSI_RESET);
}