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.KeywordReplacer;
|
||||||
import com.earth2me.essentials.textreader.SimpleTextInput;
|
import com.earth2me.essentials.textreader.SimpleTextInput;
|
||||||
import com.earth2me.essentials.utils.DateUtil;
|
import com.earth2me.essentials.utils.DateUtil;
|
||||||
import com.earth2me.essentials.utils.SpawnerProviderFactory;
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
@ -36,6 +35,11 @@ import net.ess3.api.*;
|
|||||||
import net.ess3.api.IEssentials;
|
import net.ess3.api.IEssentials;
|
||||||
import net.ess3.api.ISettings;
|
import net.ess3.api.ISettings;
|
||||||
import net.ess3.nms.SpawnerProvider;
|
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.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Server;
|
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 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 static final Logger LOGGER = Logger.getLogger("Essentials");
|
||||||
private transient ISettings settings;
|
private transient ISettings settings;
|
||||||
private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this);
|
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)");
|
execTimer.mark("Init(Worth/ItemDB)");
|
||||||
jails = new Jails(this);
|
jails = new Jails(this);
|
||||||
confList.add(jails);
|
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();
|
reload();
|
||||||
} catch (YAMLException exception) {
|
} catch (YAMLException exception) {
|
||||||
if (pm.getPlugin("EssentialsUpdate") != null) {
|
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;
|
package net.ess3.nms;
|
||||||
|
|
||||||
|
import net.ess3.providers.Provider;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -9,7 +10,7 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public abstract class SpawnerProvider {
|
public abstract class SpawnerProvider implements Provider {
|
||||||
protected Map<EntityType, String> entityToDisplayName = ImmutableMap.<EntityType, String>builder()
|
protected Map<EntityType, String> entityToDisplayName = ImmutableMap.<EntityType, String>builder()
|
||||||
.put(EntityType.CAVE_SPIDER, "Cave Spider")
|
.put(EntityType.CAVE_SPIDER, "Cave Spider")
|
||||||
.put(EntityType.PIG_ZOMBIE, "Zombie Pigman")
|
.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 ItemStack setEntityType(ItemStack is, EntityType type) throws IllegalArgumentException;
|
||||||
public abstract EntityType getEntityType(ItemStack is) throws IllegalArgumentException;
|
public abstract EntityType getEntityType(ItemStack is) throws IllegalArgumentException;
|
||||||
public abstract String getHumanName();
|
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean tryProvider() {
|
public boolean tryProvider() {
|
||||||
try {
|
try {
|
||||||
EntityType type = EntityType.CREEPER;
|
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