mirror of
https://github.com/EssentialsX/Essentials.git
synced 2025-02-02 05:21:52 +01:00
Refactor providers to a generic implementation in preparation for future spawn egg APIs
This commit is contained in:
parent
873f9404bf
commit
f1c57371a3
@ -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) {
|
||||
|
@ -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<Class<? extends SpawnerProvider>> availableProviders = Arrays.asList(
|
||||
BlockMetaSpawnerProvider.class,
|
||||
v1_8_R1SpawnerProvider.class,
|
||||
v1_8_R2SpawnerProvider.class,
|
||||
LegacySpawnerProvider.class
|
||||
);
|
||||
SpawnerProvider finalProvider = null;
|
||||
for (Class<? extends SpawnerProvider> 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<? extends SpawnerProvider> providerClass) {
|
||||
try {
|
||||
return providerClass.newInstance();
|
||||
} catch (Throwable ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -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<EntityType, String> entityToDisplayName = ImmutableMap.<EntityType, String>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;
|
||||
|
7
nms/NMSProvider/src/net/ess3/providers/Provider.java
Normal file
7
nms/NMSProvider/src/net/ess3/providers/Provider.java
Normal file
@ -0,0 +1,7 @@
|
||||
package net.ess3.providers;
|
||||
|
||||
public interface Provider {
|
||||
boolean tryProvider();
|
||||
|
||||
String getHumanName();
|
||||
}
|
36
nms/NMSProvider/src/net/ess3/providers/ProviderFactory.java
Normal file
36
nms/NMSProvider/src/net/ess3/providers/ProviderFactory.java
Normal file
@ -0,0 +1,36 @@
|
||||
package net.ess3.providers;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class ProviderFactory<T extends Provider> {
|
||||
private Logger logger;
|
||||
private String providerType;
|
||||
private Iterable<Class <? extends T>> availableProviders;
|
||||
|
||||
public ProviderFactory(Logger logger, Iterable<Class <? extends T>> availableProviders, String providerType) {
|
||||
this.logger = logger;
|
||||
this.providerType = providerType;
|
||||
this.availableProviders = availableProviders;
|
||||
}
|
||||
|
||||
public T getProvider() {
|
||||
T finalProvider = null;
|
||||
for (Class<? extends T> 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<? extends T> providerClass) {
|
||||
try {
|
||||
return providerClass.newInstance();
|
||||
} catch (Throwable ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user