public void loadImage(final String fileName, final ImageLoadCallback callback) { BufferedImage[] images = imageCache.get(fileName); if (images != null) { callback.loaded(images); return; } owningPlugin.getServer().getScheduler().runTaskAsynchronously(owningPlugin, new ImageLoadTask(this, fileName, new ImageLoadCallback() { @Override public void loaded(final BufferedImage[] images) { owningPlugin.getServer().getScheduler().runTask(owningPlugin, new Runnable() { @Override public void run() { imageCache.put(fileName, images); callback.loaded(images); } }); } })); }