diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index d9e8f0717..7f12ebcda 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -28,7 +28,6 @@ import com.earth2me.essentials.textreader.IText; import com.earth2me.essentials.textreader.KeywordReplacer; import com.earth2me.essentials.textreader.SimpleTextInput; import com.earth2me.essentials.utils.DateUtil; -import com.earth2me.essentials.utils.SpawnerProviderFactory; import com.google.common.base.Function; import com.google.common.base.Throwables; import com.google.common.collect.Iterables; @@ -36,6 +35,11 @@ import net.ess3.api.*; import net.ess3.api.IEssentials; import net.ess3.api.ISettings; import net.ess3.nms.SpawnerProvider; +import net.ess3.nms.blockmeta.BlockMetaSpawnerProvider; +import net.ess3.nms.legacy.LegacySpawnerProvider; +import net.ess3.nms.v1_8_R1.v1_8_R1SpawnerProvider; +import net.ess3.nms.v1_8_R2.v1_8_R2SpawnerProvider; +import net.ess3.providers.ProviderFactory; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Server; @@ -74,7 +78,6 @@ import static com.earth2me.essentials.I18n.tl; public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { - public static final int BUKKIT_VERSION = 3050; private static final Logger LOGGER = Logger.getLogger("Essentials"); private transient ISettings settings; private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this); @@ -194,7 +197,13 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { execTimer.mark("Init(Worth/ItemDB)"); jails = new Jails(this); confList.add(jails); - spawnerProvider = new SpawnerProviderFactory(this).getProvider(); + spawnerProvider = new ProviderFactory<>(getLogger(), + Arrays.asList( + BlockMetaSpawnerProvider.class, + v1_8_R2SpawnerProvider.class, + v1_8_R1SpawnerProvider.class, + LegacySpawnerProvider.class + ), "mob spawner").getProvider(); reload(); } catch (YAMLException exception) { if (pm.getPlugin("EssentialsUpdate") != null) { diff --git a/Essentials/src/com/earth2me/essentials/utils/SpawnerProviderFactory.java b/Essentials/src/com/earth2me/essentials/utils/SpawnerProviderFactory.java deleted file mode 100644 index 0f1292250..000000000 --- a/Essentials/src/com/earth2me/essentials/utils/SpawnerProviderFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.earth2me.essentials.utils; - -import com.earth2me.essentials.IEssentials; -import net.ess3.nms.SpawnerProvider; -import net.ess3.nms.blockmeta.BlockMetaSpawnerProvider; -import net.ess3.nms.legacy.LegacySpawnerProvider; -import net.ess3.nms.v1_8_R1.v1_8_R1SpawnerProvider; -import net.ess3.nms.v1_8_R2.v1_8_R2SpawnerProvider; - -import java.util.Arrays; -import java.util.List; - -public class SpawnerProviderFactory { - private IEssentials ess; - - public SpawnerProviderFactory(IEssentials ess) { - this.ess = ess; - } - - public SpawnerProvider getProvider() { - List> availableProviders = Arrays.asList( - BlockMetaSpawnerProvider.class, - v1_8_R1SpawnerProvider.class, - v1_8_R2SpawnerProvider.class, - LegacySpawnerProvider.class - ); - SpawnerProvider finalProvider = null; - for (Class providerClass : availableProviders) { - finalProvider = loadProvider(providerClass); - if (finalProvider != null && finalProvider.tryProvider()) { - break; - } - } - assert finalProvider != null; - ess.getLogger().info("Using " + finalProvider.getHumanName() + " as spawner provider."); - return finalProvider; - } - - private SpawnerProvider loadProvider(Class providerClass) { - try { - return providerClass.newInstance(); - } catch (Throwable ignored) { - return null; - } - } -} diff --git a/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java b/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java index c934b103f..9f74d9f4f 100644 --- a/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java +++ b/nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java @@ -1,5 +1,6 @@ package net.ess3.nms; +import net.ess3.providers.Provider; import com.google.common.collect.ImmutableMap; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -9,7 +10,7 @@ import org.bukkit.inventory.meta.ItemMeta; import java.util.Map; -public abstract class SpawnerProvider { +public abstract class SpawnerProvider implements Provider { protected Map entityToDisplayName = ImmutableMap.builder() .put(EntityType.CAVE_SPIDER, "Cave Spider") .put(EntityType.PIG_ZOMBIE, "Zombie Pigman") @@ -25,8 +26,8 @@ public abstract class SpawnerProvider { public abstract ItemStack setEntityType(ItemStack is, EntityType type) throws IllegalArgumentException; public abstract EntityType getEntityType(ItemStack is) throws IllegalArgumentException; - public abstract String getHumanName(); + @Override public boolean tryProvider() { try { EntityType type = EntityType.CREEPER; diff --git a/nms/NMSProvider/src/net/ess3/providers/Provider.java b/nms/NMSProvider/src/net/ess3/providers/Provider.java new file mode 100644 index 000000000..2e7b96a56 --- /dev/null +++ b/nms/NMSProvider/src/net/ess3/providers/Provider.java @@ -0,0 +1,7 @@ +package net.ess3.providers; + +public interface Provider { + boolean tryProvider(); + + String getHumanName(); +} diff --git a/nms/NMSProvider/src/net/ess3/providers/ProviderFactory.java b/nms/NMSProvider/src/net/ess3/providers/ProviderFactory.java new file mode 100644 index 000000000..458f2dea7 --- /dev/null +++ b/nms/NMSProvider/src/net/ess3/providers/ProviderFactory.java @@ -0,0 +1,36 @@ +package net.ess3.providers; + +import java.util.logging.Logger; + +public class ProviderFactory { + private Logger logger; + private String providerType; + private Iterable> availableProviders; + + public ProviderFactory(Logger logger, Iterable> availableProviders, String providerType) { + this.logger = logger; + this.providerType = providerType; + this.availableProviders = availableProviders; + } + + public T getProvider() { + T finalProvider = null; + for (Class providerClass : availableProviders) { + finalProvider = loadProvider(providerClass); + if (finalProvider != null && finalProvider.tryProvider()) { + break; + } + } + assert finalProvider != null; + logger.info("Using " + finalProvider.getHumanName() + " as " + providerType + " provider."); + return finalProvider; + } + + private T loadProvider(Class providerClass) { + try { + return providerClass.newInstance(); + } catch (Throwable ignored) { + return null; + } + } +}