Skip to content

Commit f1c5737

Browse files
committed
Refactor providers to a generic implementation in preparation for future spawn egg APIs
1 parent 873f940 commit f1c5737

File tree

5 files changed

+58
-51
lines changed

5 files changed

+58
-51
lines changed

Essentials/src/com/earth2me/essentials/Essentials.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,18 @@
2828
import com.earth2me.essentials.textreader.KeywordReplacer;
2929
import com.earth2me.essentials.textreader.SimpleTextInput;
3030
import com.earth2me.essentials.utils.DateUtil;
31-
import com.earth2me.essentials.utils.SpawnerProviderFactory;
3231
import com.google.common.base.Function;
3332
import com.google.common.base.Throwables;
3433
import com.google.common.collect.Iterables;
3534
import net.ess3.api.*;
3635
import net.ess3.api.IEssentials;
3736
import net.ess3.api.ISettings;
3837
import net.ess3.nms.SpawnerProvider;
38+
import net.ess3.nms.blockmeta.BlockMetaSpawnerProvider;
39+
import net.ess3.nms.legacy.LegacySpawnerProvider;
40+
import net.ess3.nms.v1_8_R1.v1_8_R1SpawnerProvider;
41+
import net.ess3.nms.v1_8_R2.v1_8_R2SpawnerProvider;
42+
import net.ess3.providers.ProviderFactory;
3943
import org.bukkit.Bukkit;
4044
import org.bukkit.ChatColor;
4145
import org.bukkit.Server;
@@ -74,7 +78,6 @@
7478

7579

7680
public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
77-
public static final int BUKKIT_VERSION = 3050;
7881
private static final Logger LOGGER = Logger.getLogger("Essentials");
7982
private transient ISettings settings;
8083
private final transient TNTExplodeListener tntListener = new TNTExplodeListener(this);
@@ -194,7 +197,13 @@ public void onEnable() {
194197
execTimer.mark("Init(Worth/ItemDB)");
195198
jails = new Jails(this);
196199
confList.add(jails);
197-
spawnerProvider = new SpawnerProviderFactory(this).getProvider();
200+
spawnerProvider = new ProviderFactory<>(getLogger(),
201+
Arrays.asList(
202+
BlockMetaSpawnerProvider.class,
203+
v1_8_R2SpawnerProvider.class,
204+
v1_8_R1SpawnerProvider.class,
205+
LegacySpawnerProvider.class
206+
), "mob spawner").getProvider();
198207
reload();
199208
} catch (YAMLException exception) {
200209
if (pm.getPlugin("EssentialsUpdate") != null) {

Essentials/src/com/earth2me/essentials/utils/SpawnerProviderFactory.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

nms/NMSProvider/src/net/ess3/nms/SpawnerProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.ess3.nms;
22

3+
import net.ess3.providers.Provider;
34
import com.google.common.collect.ImmutableMap;
45
import org.bukkit.ChatColor;
56
import org.bukkit.Material;
@@ -9,7 +10,7 @@
910

1011
import java.util.Map;
1112

12-
public abstract class SpawnerProvider {
13+
public abstract class SpawnerProvider implements Provider {
1314
protected Map<EntityType, String> entityToDisplayName = ImmutableMap.<EntityType, String>builder()
1415
.put(EntityType.CAVE_SPIDER, "Cave Spider")
1516
.put(EntityType.PIG_ZOMBIE, "Zombie Pigman")
@@ -25,8 +26,8 @@ public abstract class SpawnerProvider {
2526

2627
public abstract ItemStack setEntityType(ItemStack is, EntityType type) throws IllegalArgumentException;
2728
public abstract EntityType getEntityType(ItemStack is) throws IllegalArgumentException;
28-
public abstract String getHumanName();
2929

30+
@Override
3031
public boolean tryProvider() {
3132
try {
3233
EntityType type = EntityType.CREEPER;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package net.ess3.providers;
2+
3+
public interface Provider {
4+
boolean tryProvider();
5+
6+
String getHumanName();
7+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.ess3.providers;
2+
3+
import java.util.logging.Logger;
4+
5+
public class ProviderFactory<T extends Provider> {
6+
private Logger logger;
7+
private String providerType;
8+
private Iterable<Class <? extends T>> availableProviders;
9+
10+
public ProviderFactory(Logger logger, Iterable<Class <? extends T>> availableProviders, String providerType) {
11+
this.logger = logger;
12+
this.providerType = providerType;
13+
this.availableProviders = availableProviders;
14+
}
15+
16+
public T getProvider() {
17+
T finalProvider = null;
18+
for (Class<? extends T> providerClass : availableProviders) {
19+
finalProvider = loadProvider(providerClass);
20+
if (finalProvider != null && finalProvider.tryProvider()) {
21+
break;
22+
}
23+
}
24+
assert finalProvider != null;
25+
logger.info("Using " + finalProvider.getHumanName() + " as " + providerType + " provider.");
26+
return finalProvider;
27+
}
28+
29+
private T loadProvider(Class<? extends T> providerClass) {
30+
try {
31+
return providerClass.newInstance();
32+
} catch (Throwable ignored) {
33+
return null;
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)