package com.intellectualcrafters.plot.util.block; public abstract class QueueProvider { public abstract LocalBlockQueue getNewQueue(String world); public static QueueProvider of(final Class<? extends LocalBlockQueue> primary, final Class<? extends LocalBlockQueue> fallback) { return new QueueProvider() { private boolean failed = false; @Override public LocalBlockQueue getNewQueue(String world) { if (!failed) { try { return (LocalBlockQueue) primary.getConstructors()[0].newInstance(world); } catch (Throwable e) { e.printStackTrace(); failed = true; } } try { return (LocalBlockQueue) fallback.getConstructors()[0].newInstance(world); } catch (Throwable e) { e.printStackTrace(); } return null; } }; } }