Skip to content

Commit bdb8112

Browse files
committed
Refactor spawn egg provider to separate classes
1 parent f1c5737 commit bdb8112

File tree

10 files changed

+107
-16
lines changed

10 files changed

+107
-16
lines changed

Essentials/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
</dependency>
124124
<dependency>
125125
<groupId>net.ess3</groupId>
126-
<artifactId>1_9_R1SpawnEggProvider</artifactId>
126+
<artifactId>1_9_R1Provider</artifactId>
127127
<version>2.0.1</version>
128128
<scope>compile</scope>
129129
</dependency>

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,14 @@
3434
import net.ess3.api.*;
3535
import net.ess3.api.IEssentials;
3636
import net.ess3.api.ISettings;
37+
import net.ess3.nms.SpawnEggProvider;
3738
import net.ess3.nms.SpawnerProvider;
3839
import net.ess3.nms.blockmeta.BlockMetaSpawnerProvider;
40+
import net.ess3.nms.legacy.LegacySpawnEggProvider;
3941
import net.ess3.nms.legacy.LegacySpawnerProvider;
4042
import net.ess3.nms.v1_8_R1.v1_8_R1SpawnerProvider;
4143
import net.ess3.nms.v1_8_R2.v1_8_R2SpawnerProvider;
44+
import net.ess3.nms.v1_9_R1.v1_9_R1SpawnEggProvider;
4245
import net.ess3.providers.ProviderFactory;
4346
import org.bukkit.Bukkit;
4447
import org.bukkit.ChatColor;
@@ -98,6 +101,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
98101
private final transient List<String> vanishedPlayers = new ArrayList<>();
99102
private transient Method oldGetOnlinePlayers;
100103
private transient SpawnerProvider spawnerProvider;
104+
private transient SpawnEggProvider spawnEggProvider;
101105

102106
public Essentials() {
103107
}
@@ -204,6 +208,11 @@ public void onEnable() {
204208
v1_8_R1SpawnerProvider.class,
205209
LegacySpawnerProvider.class
206210
), "mob spawner").getProvider();
211+
spawnEggProvider = new ProviderFactory<>(getLogger(),
212+
Arrays.asList(
213+
v1_9_R1SpawnEggProvider.class,
214+
LegacySpawnEggProvider.class
215+
), "spawn egg").getProvider();
207216
reload();
208217
} catch (YAMLException exception) {
209218
if (pm.getPlugin("EssentialsUpdate") != null) {
@@ -776,6 +785,11 @@ public SpawnerProvider getSpawnerProvider() {
776785
return spawnerProvider;
777786
}
778787

788+
@Override
789+
public SpawnEggProvider getSpawnEggProvider() {
790+
return spawnEggProvider;
791+
}
792+
779793
private static class EssentialsWorldListener implements Listener, Runnable {
780794
private transient final IEssentials ess;
781795

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.earth2me.essentials.utils.NumberUtil;
44
import com.earth2me.essentials.utils.StringUtil;
55
import net.ess3.api.IEssentials;
6-
import net.ess3.nms.v1_9_R1.SpawnEgg1_9;
76
import org.bukkit.Bukkit;
87
import org.bukkit.Color;
98
import org.bukkit.FireworkEffect;
@@ -12,7 +11,6 @@
1211
import org.bukkit.entity.EntityType;
1312
import org.bukkit.inventory.ItemStack;
1413
import org.bukkit.inventory.meta.*;
15-
import org.bukkit.material.SpawnEgg;
1614
import org.bukkit.potion.Potion;
1715
import org.bukkit.potion.PotionEffect;
1816

@@ -152,11 +150,7 @@ public ItemStack get(final String id) throws Exception {
152150
} catch (IllegalArgumentException e) {
153151
throw new Exception("Can't spawn entity ID " + metaData + " from spawn eggs.");
154152
}
155-
try {
156-
retval = new SpawnEgg1_9(type).toItemStack();
157-
} catch (Throwable t) {
158-
retval = new SpawnEgg(type).toItemStack();
159-
}
153+
retval = ess.getSpawnEggProvider().createEggItem(type);
160154
} else {
161155
retval.setDurability(metaData);
162156
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package net.ess3.api;
22

3+
import net.ess3.nms.SpawnEggProvider;
4+
35
public interface IEssentials extends com.earth2me.essentials.IEssentials {
46

7+
SpawnEggProvider getSpawnEggProvider();
58
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>
1212

13-
<artifactId>1_9_R1SpawnEggProvider</artifactId>
13+
<artifactId>1_9_R1Provider</artifactId>
1414

1515
<repositories>
1616
<repository>
@@ -26,5 +26,10 @@
2626
<version>1.9-R0.1-SNAPSHOT</version>
2727
<scope>provided</scope>
2828
</dependency>
29+
<dependency>
30+
<groupId>net.ess3</groupId>
31+
<artifactId>NMSProvider</artifactId>
32+
<version>2.0.1</version>
33+
</dependency>
2934
</dependencies>
3035
</project>

nms/1_9_R1SpawnEggProvider/src/net/ess3/nms/v1_9_R1/SpawnEgg1_9.java renamed to nms/1_9_R1Provider/src/net/ess3/nms/v1_9_R1/nms/SpawnEgg1_9.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* You should have received a copy of the GNU General Public License
1515
* along with ASkyBlock. If not, see <http://www.gnu.org/licenses/>.
1616
*******************************************************************************/
17-
package net.ess3.nms.v1_9_R1;
17+
package net.ess3.nms.v1_9_R1.nms;
1818

1919
import net.minecraft.server.v1_9_R1.NBTTagCompound;
2020
import org.bukkit.Material;
@@ -92,11 +92,11 @@ public ItemStack toItemStack(int amount) {
9292
* @param item - ItemStack, quantity is disregarded
9393
* @return SpawnEgg 1.9
9494
*/
95-
public static SpawnEgg1_9 fromItemStack(ItemStack item) {
95+
public static SpawnEgg1_9 fromItemStack(ItemStack item) throws IllegalArgumentException {
9696
if (item == null)
97-
throw new IllegalArgumentException("item cannot be null");
97+
throw new IllegalArgumentException("Item cannot be null");
9898
if (item.getType() != Material.MONSTER_EGG)
99-
throw new IllegalArgumentException("item is not a monster egg");
99+
throw new IllegalArgumentException("Item is not a monster egg");
100100
net.minecraft.server.v1_9_R1.ItemStack stack = CraftItemStack.asNMSCopy(item);
101101
NBTTagCompound tagCompound = stack.getTag();
102102
if (tagCompound != null) {
@@ -105,10 +105,10 @@ public static SpawnEgg1_9 fromItemStack(ItemStack item) {
105105
if (type != null) {
106106
return new SpawnEgg1_9(type);
107107
} else {
108-
return null;
108+
throw new IllegalArgumentException("Unable to parse type from item");
109109
}
110110
} else {
111-
return null;
111+
throw new IllegalArgumentException("Item is lacking tag compound");
112112
}
113113
}
114114
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package net.ess3.nms.v1_9_R1;
2+
3+
import net.ess3.nms.SpawnEggProvider;
4+
import net.ess3.nms.v1_9_R1.nms.SpawnEgg1_9;
5+
import org.bukkit.entity.EntityType;
6+
import org.bukkit.inventory.ItemStack;
7+
8+
public class v1_9_R1SpawnEggProvider extends SpawnEggProvider {
9+
@Override
10+
public ItemStack createEggItem(EntityType type) throws IllegalArgumentException {
11+
return new SpawnEgg1_9(type).toItemStack();
12+
}
13+
14+
@Override
15+
public EntityType getSpawnedType(ItemStack eggItem) throws IllegalArgumentException {
16+
return SpawnEgg1_9.fromItemStack(eggItem).getSpawnedType();
17+
}
18+
19+
@Override
20+
public String getHumanName() {
21+
return "CraftBukkit 1.9 NMS-based provider";
22+
}
23+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package net.ess3.nms.legacy;
2+
3+
import net.ess3.nms.SpawnEggProvider;
4+
import org.bukkit.entity.EntityType;
5+
import org.bukkit.inventory.ItemStack;
6+
import org.bukkit.material.MaterialData;
7+
import org.bukkit.material.SpawnEgg;
8+
9+
public class LegacySpawnEggProvider extends SpawnEggProvider {
10+
@Override
11+
public ItemStack createEggItem(EntityType type) throws IllegalArgumentException {
12+
return new SpawnEgg(type).toItemStack();
13+
}
14+
15+
@Override
16+
@SuppressWarnings("deprecation")
17+
public EntityType getSpawnedType(ItemStack eggItem) throws IllegalArgumentException {
18+
MaterialData data = eggItem.getData();
19+
if (data instanceof SpawnEgg) {
20+
return ((SpawnEgg) data).getSpawnedType();
21+
} else {
22+
throw new IllegalArgumentException("Item is missing data");
23+
}
24+
}
25+
26+
@Override
27+
public String getHumanName() {
28+
return "legacy item data provider";
29+
}
30+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package net.ess3.nms;
2+
3+
import net.ess3.providers.Provider;
4+
import org.bukkit.entity.EntityType;
5+
import org.bukkit.inventory.ItemStack;
6+
7+
public abstract class SpawnEggProvider implements Provider {
8+
public abstract ItemStack createEggItem(EntityType type) throws IllegalArgumentException;
9+
public abstract EntityType getSpawnedType(ItemStack eggItem) throws IllegalArgumentException;
10+
11+
@Override
12+
public boolean tryProvider() {
13+
try {
14+
EntityType type = EntityType.CREEPER;
15+
ItemStack is = createEggItem(type);
16+
EntityType readType = getSpawnedType(is);
17+
return type == readType;
18+
} catch (Throwable t) {
19+
return false;
20+
}
21+
}
22+
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<module>nms/1_8_R1Provider</module>
4848
<module>nms/1_8_R2Provider</module>
4949
<module>nms/LegacyProvider</module>
50-
<module>nms/1_9_R1SpawnEggProvider</module>
50+
<module>nms/1_9_R1Provider</module>
5151
</modules>
5252

5353
<dependencies>

0 commit comments

Comments
 (0)