mirror of
https://github.com/EssentialsX/Essentials.git
synced 2025-02-01 21:11:44 +01:00
Provider Rework (#3407)
Moved providers around, made them make sense, profit
This commit is contained in:
parent
04a1d8197f
commit
4a471f0a93
@ -68,32 +68,26 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>NMSProvider</artifactId>
|
||||
<artifactId>BaseProviders</artifactId>
|
||||
<version>2.17.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>UpdatedMetaProvider</artifactId>
|
||||
<artifactId>NMSReflectionProvider</artifactId>
|
||||
<version>2.17.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>LegacyProvider</artifactId>
|
||||
<version>2.17.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>ReflectionProvider</artifactId>
|
||||
<version>2.17.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>FlattenedProvider</artifactId>
|
||||
<artifactId>PaperProvider</artifactId>
|
||||
<version>2.17.2</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.destroystokyo.paper</groupId>
|
||||
<artifactId>paper-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@ -18,7 +18,6 @@
|
||||
package com.earth2me.essentials;
|
||||
|
||||
import com.earth2me.essentials.commands.*;
|
||||
import com.earth2me.essentials.craftbukkit.ServerState;
|
||||
import com.earth2me.essentials.items.AbstractItemDb;
|
||||
import com.earth2me.essentials.items.CustomItemResolver;
|
||||
import com.earth2me.essentials.items.FlatItemDb;
|
||||
@ -35,20 +34,17 @@ import com.earth2me.essentials.textreader.SimpleTextInput;
|
||||
import com.earth2me.essentials.utils.DateUtil;
|
||||
import com.earth2me.essentials.utils.VersionUtil;
|
||||
import com.google.common.base.Throwables;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import net.ess3.api.IEssentials;
|
||||
import net.ess3.api.ISettings;
|
||||
import net.ess3.api.*;
|
||||
import net.ess3.nms.PotionMetaProvider;
|
||||
import net.ess3.nms.SpawnEggProvider;
|
||||
import net.ess3.nms.SpawnerProvider;
|
||||
import net.ess3.nms.flattened.FlatSpawnEggProvider;
|
||||
import net.ess3.nms.legacy.LegacyPotionMetaProvider;
|
||||
import net.ess3.nms.legacy.LegacySpawnEggProvider;
|
||||
import net.ess3.nms.legacy.LegacySpawnerProvider;
|
||||
import net.ess3.nms.refl.ReflSpawnEggProvider;
|
||||
import net.ess3.nms.updatedmeta.BasePotionDataProvider;
|
||||
import net.ess3.nms.updatedmeta.BlockMetaSpawnerProvider;
|
||||
import net.ess3.providers.ProviderFactory;
|
||||
import net.ess3.nms.refl.providers.ReflServerStateProvider;
|
||||
import net.ess3.nms.refl.providers.ReflSpawnEggProvider;
|
||||
import net.ess3.provider.PotionMetaProvider;
|
||||
import net.ess3.provider.ServerStateProvider;
|
||||
import net.ess3.provider.SpawnEggProvider;
|
||||
import net.ess3.provider.SpawnerProvider;
|
||||
import net.ess3.provider.providers.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.World;
|
||||
@ -111,6 +107,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
|
||||
private transient SpawnerProvider spawnerProvider;
|
||||
private transient SpawnEggProvider spawnEggProvider;
|
||||
private transient PotionMetaProvider potionMetaProvider;
|
||||
private transient ServerStateProvider serverStateProvider;
|
||||
private transient Kits kits;
|
||||
|
||||
public Essentials() {
|
||||
@ -246,22 +243,32 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
|
||||
confList.add(jails);
|
||||
execTimer.mark("Init(Jails)");
|
||||
|
||||
spawnerProvider = new ProviderFactory<>(getLogger(),
|
||||
Arrays.asList(
|
||||
BlockMetaSpawnerProvider.class,
|
||||
LegacySpawnerProvider.class
|
||||
), "mob spawner").getProvider();
|
||||
spawnEggProvider = new ProviderFactory<>(getLogger(),
|
||||
Arrays.asList(
|
||||
FlatSpawnEggProvider.class,
|
||||
ReflSpawnEggProvider.class,
|
||||
LegacySpawnEggProvider.class
|
||||
), "spawn egg").getProvider();
|
||||
potionMetaProvider = new ProviderFactory<>(getLogger(),
|
||||
Arrays.asList(
|
||||
BasePotionDataProvider.class,
|
||||
LegacyPotionMetaProvider.class
|
||||
), "potion meta").getProvider();
|
||||
//Spawner provider only uses one but it's here for legacy...
|
||||
spawnerProvider = new BlockMetaSpawnerProvider();
|
||||
|
||||
//Spawn Egg Providers
|
||||
if (VersionUtil.getServerBukkitVersion().isLowerThanOrEqualTo(VersionUtil.v1_8_8_R01)) {
|
||||
spawnEggProvider = new LegacySpawnEggProvider();
|
||||
} else if (VersionUtil.getServerBukkitVersion().isLowerThanOrEqualTo(VersionUtil.v1_12_2_R01)) {
|
||||
spawnEggProvider = new ReflSpawnEggProvider();
|
||||
} else {
|
||||
spawnEggProvider = new FlatSpawnEggProvider();
|
||||
}
|
||||
|
||||
//Potion Meta Provider
|
||||
if (VersionUtil.getServerBukkitVersion().isLowerThanOrEqualTo(VersionUtil.v1_8_8_R01)) {
|
||||
potionMetaProvider = new LegacyPotionMetaProvider();
|
||||
} else {
|
||||
potionMetaProvider = new BasePotionDataProvider();
|
||||
}
|
||||
|
||||
//Server State Provider
|
||||
if (PaperLib.isPaper() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_15_2_R01)) {
|
||||
serverStateProvider = new PaperServerStateProvider();
|
||||
} else {
|
||||
serverStateProvider = new ReflServerStateProvider(getLogger());
|
||||
}
|
||||
|
||||
execTimer.mark("Init(Providers)");
|
||||
reload();
|
||||
|
||||
@ -360,7 +367,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
boolean stopping = ServerState.isStopping();
|
||||
boolean stopping = getServerStateProvider().isStopping();
|
||||
if (!stopping) {
|
||||
LOGGER.log(Level.SEVERE, tl("serverReloading"));
|
||||
}
|
||||
@ -949,6 +956,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
|
||||
return customItemResolver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServerStateProvider getServerStateProvider() {
|
||||
return serverStateProvider;
|
||||
}
|
||||
|
||||
private static void addDefaultBackPermissionsToWorld(World w) {
|
||||
String permName = "essentials.back.into." + w.getName();
|
||||
|
||||
|
@ -6,7 +6,8 @@ import com.earth2me.essentials.api.IWarps;
|
||||
import com.earth2me.essentials.metrics.Metrics;
|
||||
import com.earth2me.essentials.perm.PermissionsHandler;
|
||||
import com.earth2me.essentials.register.payment.Methods;
|
||||
import net.ess3.nms.SpawnerProvider;
|
||||
import net.ess3.provider.ServerStateProvider;
|
||||
import net.ess3.provider.SpawnerProvider;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -106,4 +107,6 @@ public interface IEssentials extends Plugin {
|
||||
Iterable<User> getOnlineUsers();
|
||||
|
||||
SpawnerProvider getSpawnerProvider();
|
||||
|
||||
ServerStateProvider getServerStateProvider();
|
||||
}
|
||||
|
@ -1,67 +0,0 @@
|
||||
package com.earth2me.essentials.craftbukkit;
|
||||
|
||||
import net.ess3.nms.refl.ReflUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.invoke.MethodType;
|
||||
|
||||
public class ServerState {
|
||||
|
||||
private static final MethodHandle isStopping; //Only in Paper
|
||||
private static final MethodHandle nmsHasStopped;
|
||||
private static final MethodHandle nmsIsRunning;
|
||||
private static final Object nmsServer;
|
||||
|
||||
static {
|
||||
MethodHandle isStoppingHandle = null;
|
||||
MethodHandle nmsHasStoppedHandle = null;
|
||||
MethodHandle nmsIsRunningHandle = null;
|
||||
Object nmsServerObject = null;
|
||||
try {
|
||||
//noinspection JavaLangInvokeHandleSignature - We don't compile against Paper
|
||||
isStoppingHandle = MethodHandles.lookup().findStatic(Bukkit.class, "isStopping", MethodType.methodType(boolean.class));
|
||||
} catch (Throwable e) {
|
||||
try {
|
||||
Class<?> nmsClass = ReflUtil.getNMSClass("MinecraftServer");
|
||||
if (nmsClass != null) {
|
||||
nmsServerObject = nmsClass.getMethod("getServer").invoke(null);
|
||||
nmsIsRunningHandle = MethodHandles.lookup().findVirtual(nmsClass, "isRunning", MethodType.methodType(boolean.class));
|
||||
nmsHasStoppedHandle = MethodHandles.lookup().findVirtual(nmsClass, "hasStopped", MethodType.methodType(boolean.class));
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
isStopping = isStoppingHandle;
|
||||
nmsHasStopped = nmsHasStoppedHandle;
|
||||
nmsIsRunning = nmsIsRunningHandle;
|
||||
nmsServer = nmsServerObject;
|
||||
}
|
||||
|
||||
public static boolean isStopping() {
|
||||
boolean stopping = false;
|
||||
if (isStopping != null) {
|
||||
try {
|
||||
stopping = (boolean) isStopping.invoke();
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
} else if (nmsServer != null) {
|
||||
if (nmsHasStopped != null) {
|
||||
try {
|
||||
stopping = (boolean) nmsHasStopped.invoke(nmsServer);
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
} else if (nmsIsRunning != null) {
|
||||
try {
|
||||
stopping = !(boolean) nmsIsRunning.invoke(nmsServer);
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return stopping;
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package net.ess3.api;
|
||||
|
||||
import com.earth2me.essentials.items.CustomItemResolver;
|
||||
import net.ess3.nms.PotionMetaProvider;
|
||||
import net.ess3.nms.SpawnEggProvider;
|
||||
import net.ess3.provider.PotionMetaProvider;
|
||||
import net.ess3.provider.SpawnEggProvider;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
|
@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>EssentialsXParent</artifactId>
|
||||
<groupId>net.ess3</groupId>
|
||||
<version>2.17.2</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>LegacyProvider</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>NMSProvider</artifactId>
|
||||
<version>2.17.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,24 +0,0 @@
|
||||
package net.ess3.nms.legacy;
|
||||
|
||||
import net.ess3.nms.SpawnerProvider;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class LegacySpawnerProvider extends SpawnerProvider {
|
||||
@Override
|
||||
public ItemStack setEntityType(ItemStack is, EntityType type) {
|
||||
is.getData().setData((byte) type.getTypeId());
|
||||
return setDisplayName(is, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType getEntityType(ItemStack is) {
|
||||
return EntityType.fromId((int) is.getData().getData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "legacy item data provider";
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
package net.ess3.nms;
|
||||
|
||||
import net.ess3.providers.Provider;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public abstract class PotionMetaProvider implements Provider {
|
||||
public abstract ItemStack createPotionItem(Material initial, int effectId);
|
||||
|
||||
@Override
|
||||
public boolean tryProvider() {
|
||||
try {
|
||||
createPotionItem(Material.POTION, 8260); // Poison Level II Extended
|
||||
return true;
|
||||
} catch (Throwable t) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package net.ess3.nms;
|
||||
|
||||
import net.ess3.providers.Provider;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public abstract class SpawnEggProvider implements Provider {
|
||||
public abstract ItemStack createEggItem(EntityType type) throws IllegalArgumentException;
|
||||
|
||||
public abstract EntityType getSpawnedType(ItemStack eggItem) throws IllegalArgumentException;
|
||||
|
||||
@Override
|
||||
public boolean tryProvider() {
|
||||
try {
|
||||
EntityType type = EntityType.CREEPER;
|
||||
ItemStack is = createEggItem(type);
|
||||
EntityType readType = getSpawnedType(is);
|
||||
return type == readType;
|
||||
} catch (Throwable t) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
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>> providers;
|
||||
|
||||
public ProviderFactory(Logger logger, Iterable<Class<? extends T>> providers, String providerType) {
|
||||
this.logger = logger;
|
||||
this.providerType = providerType;
|
||||
this.providers = providers;
|
||||
}
|
||||
|
||||
public T getProvider() {
|
||||
for (Class<? extends T> providerClass : providers) {
|
||||
T provider = loadProvider(providerClass);
|
||||
if (provider != null && provider.tryProvider()) {
|
||||
logger.info("Using " + provider.getDescription() + " as " + providerType + " provider.");
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
logger.severe("The " + providerType + " provider failed to load! Some parts of Essentials may not function correctly.");
|
||||
return null;
|
||||
}
|
||||
|
||||
private T loadProvider(Class<? extends T> providerClass) {
|
||||
try {
|
||||
return providerClass.getConstructor().newInstance();
|
||||
} catch (Throwable ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
package net.ess3.nms.refl;
|
||||
|
||||
import net.ess3.nms.refl.ReflUtil.NMSVersion;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class NMSVersionTest {
|
||||
|
||||
@Test
|
||||
public void testMajor() {
|
||||
NMSVersion v2_9_R1 = NMSVersion.fromString("v2_9_R1");
|
||||
|
||||
Assert.assertEquals(2, v2_9_R1.getMajor());
|
||||
Assert.assertEquals(9, v2_9_R1.getMinor());
|
||||
Assert.assertEquals(1, v2_9_R1.getRelease());
|
||||
|
||||
Assert.assertEquals(v2_9_R1.toString(), "v2_9_R1");
|
||||
|
||||
Assert.assertTrue(v2_9_R1.isHigherThan(NMSVersion.fromString("v1_10_R1")));
|
||||
Assert.assertTrue(v2_9_R1.isHigherThanOrEqualTo(NMSVersion.fromString("v1_9_R1")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinor() {
|
||||
NMSVersion v1_10_R1 = NMSVersion.fromString("v1_10_R1");
|
||||
|
||||
Assert.assertEquals(1, v1_10_R1.getMajor());
|
||||
Assert.assertEquals(10, v1_10_R1.getMinor());
|
||||
Assert.assertEquals(1, v1_10_R1.getRelease());
|
||||
|
||||
Assert.assertEquals(v1_10_R1.toString(), "v1_10_R1");
|
||||
|
||||
Assert.assertTrue(NMSVersion.fromString("v1_9_R1").isLowerThan(v1_10_R1));
|
||||
Assert.assertTrue(NMSVersion.fromString("v1_9_R1").isLowerThanOrEqualTo(v1_10_R1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRelease() {
|
||||
NMSVersion v1_9_R2 = NMSVersion.fromString("v1_9_R2");
|
||||
|
||||
Assert.assertEquals(1, v1_9_R2.getMajor());
|
||||
Assert.assertEquals(9, v1_9_R2.getMinor());
|
||||
Assert.assertEquals(2, v1_9_R2.getRelease());
|
||||
|
||||
Assert.assertEquals(v1_9_R2.toString(), "v1_9_R2");
|
||||
Assert.assertEquals(v1_9_R2, NMSVersion.fromString("v1_9_R2"));
|
||||
|
||||
Assert.assertTrue(v1_9_R2.isHigherThan(NMSVersion.fromString("v1_9_R1")));
|
||||
}
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>EssentialsXParent</artifactId>
|
||||
<groupId>net.ess3</groupId>
|
||||
<version>2.17.2</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>UpdatedMetaProvider</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>NMSProvider</artifactId>
|
||||
<version>2.17.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
8
pom.xml
8
pom.xml
@ -49,11 +49,9 @@
|
||||
<module>EssentialsProtect</module>
|
||||
<module>EssentialsSpawn</module>
|
||||
<module>EssentialsXMPP</module>
|
||||
<module>nms/NMSProvider</module>
|
||||
<module>nms/UpdatedMetaProvider</module>
|
||||
<module>nms/LegacyProvider</module>
|
||||
<module>nms/ReflectionProvider</module>
|
||||
<module>nms/FlattenedProvider</module>
|
||||
<module>providers/BaseProviders</module>
|
||||
<module>providers/NMSReflectionProvider</module>
|
||||
<module>providers/PaperProvider</module>
|
||||
</modules>
|
||||
|
||||
<dependencies>
|
||||
|
@ -10,5 +10,5 @@
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>NMSProvider</artifactId>
|
||||
</project>
|
||||
<artifactId>BaseProviders</artifactId>
|
||||
</project>
|
@ -0,0 +1,8 @@
|
||||
package net.ess3.provider;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public interface PotionMetaProvider extends Provider {
|
||||
ItemStack createPotionItem(Material initial, int effectId);
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
package net.ess3.providers;
|
||||
package net.ess3.provider;
|
||||
|
||||
public interface Provider {
|
||||
boolean tryProvider();
|
||||
|
||||
String getDescription();
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package net.ess3.provider;
|
||||
|
||||
public interface ServerStateProvider extends Provider {
|
||||
boolean isStopping();
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package net.ess3.provider;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public interface SpawnEggProvider extends Provider {
|
||||
ItemStack createEggItem(EntityType type) throws IllegalArgumentException;
|
||||
|
||||
EntityType getSpawnedType(ItemStack eggItem) throws IllegalArgumentException;
|
||||
}
|
@ -1,17 +1,19 @@
|
||||
package net.ess3.nms;
|
||||
package net.ess3.provider;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import net.ess3.providers.Provider;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class SpawnerProvider implements Provider {
|
||||
private Map<EntityType, String> entityToDisplayName = ImmutableMap.<EntityType, String>builder()
|
||||
public interface SpawnerProvider extends Provider {
|
||||
ItemStack setEntityType(ItemStack is, EntityType type) throws IllegalArgumentException;
|
||||
|
||||
EntityType getEntityType(ItemStack is) throws IllegalArgumentException;
|
||||
|
||||
Map<EntityType, String> entityToDisplayName = ImmutableMap.<EntityType, String>builder()
|
||||
.put(EntityType.CAVE_SPIDER, "Cave Spider")
|
||||
.put(EntityType.PIG_ZOMBIE, "Zombie Pigman")
|
||||
.put(EntityType.MAGMA_CUBE, "Magma Cube")
|
||||
@ -24,36 +26,13 @@ public abstract class SpawnerProvider implements Provider {
|
||||
.put(EntityType.HORSE, "Horse")
|
||||
.build();
|
||||
|
||||
public abstract ItemStack setEntityType(ItemStack is, EntityType type) throws IllegalArgumentException;
|
||||
|
||||
public abstract EntityType getEntityType(ItemStack is) throws IllegalArgumentException;
|
||||
|
||||
@Override
|
||||
public boolean tryProvider() {
|
||||
EntityType type = EntityType.CREEPER;
|
||||
Material MOB_SPAWNER;
|
||||
try {
|
||||
MOB_SPAWNER = Material.valueOf("SPAWNER");
|
||||
} catch (Exception e) {
|
||||
MOB_SPAWNER = Material.valueOf("MOB_SPAWNER");
|
||||
}
|
||||
|
||||
try {
|
||||
ItemStack is = setEntityType(new ItemStack(MOB_SPAWNER), type);
|
||||
EntityType readType = getEntityType(is);
|
||||
return type == readType;
|
||||
} catch (Throwable t) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
protected ItemStack setDisplayName(ItemStack is, EntityType type) {
|
||||
default ItemStack setDisplayName(ItemStack is, EntityType type) {
|
||||
ItemMeta meta = is.getItemMeta();
|
||||
String displayName;
|
||||
if (entityToDisplayName.containsKey(type)) {
|
||||
displayName = entityToDisplayName.get(type);
|
||||
} else {
|
||||
//noinspection deprecation
|
||||
displayName = type.getName();
|
||||
}
|
||||
meta.setDisplayName(ChatColor.RESET + displayName + " Spawner");
|
@ -1,7 +1,7 @@
|
||||
package net.ess3.nms.updatedmeta;
|
||||
package net.ess3.provider.providers;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import net.ess3.nms.PotionMetaProvider;
|
||||
import net.ess3.provider.PotionMetaProvider;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
@ -10,8 +10,8 @@ import org.bukkit.potion.PotionType;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class BasePotionDataProvider extends PotionMetaProvider {
|
||||
private static Map<Integer, PotionType> damageValueToType = ImmutableMap.<Integer, PotionType>builder()
|
||||
public class BasePotionDataProvider implements PotionMetaProvider {
|
||||
private static final Map<Integer, PotionType> damageValueToType = ImmutableMap.<Integer, PotionType>builder()
|
||||
.put(1, PotionType.REGEN)
|
||||
.put(2, PotionType.SPEED)
|
||||
.put(3, PotionType.FIRE_RESISTANCE)
|
||||
@ -29,7 +29,7 @@ public class BasePotionDataProvider extends PotionMetaProvider {
|
||||
.build();
|
||||
|
||||
@Override
|
||||
public ItemStack createPotionItem(Material initial, int effectId) throws IllegalArgumentException {
|
||||
public ItemStack createPotionItem(Material initial, int effectId) {
|
||||
ItemStack potion = new ItemStack(initial, 1);
|
||||
|
||||
if (effectId == 0) {
|
||||
@ -46,16 +46,14 @@ public class BasePotionDataProvider extends PotionMetaProvider {
|
||||
throw new IllegalArgumentException("Unable to process potion effect ID " + effectId + " with damage value " + damageValue);
|
||||
}
|
||||
|
||||
boolean extended = getBit(effectId, 6) == 1;
|
||||
boolean upgraded = getBit(effectId, 5) == 1;
|
||||
boolean splash = getBit(effectId, 14) == 1;
|
||||
|
||||
if (splash && initial == Material.POTION) {
|
||||
//getBit is splash here
|
||||
if (getBit(effectId, 14) == 1 && initial == Material.POTION) {
|
||||
potion = new ItemStack(Material.SPLASH_POTION, 1);
|
||||
}
|
||||
|
||||
PotionMeta meta = (PotionMeta) potion.getItemMeta();
|
||||
PotionData data = new PotionData(type, extended, upgraded);
|
||||
//getBit(s) are extended and upgraded respectfully
|
||||
PotionData data = new PotionData(type, getBit(effectId, 6) == 1, getBit(effectId, 5) == 1);
|
||||
meta.setBasePotionData(data); // this method is exclusive to recent 1.9+
|
||||
potion.setItemMeta(meta);
|
||||
|
||||
@ -68,6 +66,6 @@ public class BasePotionDataProvider extends PotionMetaProvider {
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "1.9+ BasePotionData provider";
|
||||
return "1.9+ Potion Meta Provider";
|
||||
}
|
||||
}
|
@ -1,15 +1,15 @@
|
||||
package net.ess3.nms.updatedmeta;
|
||||
package net.ess3.provider.providers;
|
||||
|
||||
import net.ess3.nms.SpawnerProvider;
|
||||
import net.ess3.provider.SpawnerProvider;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
|
||||
public class BlockMetaSpawnerProvider extends SpawnerProvider {
|
||||
public class BlockMetaSpawnerProvider implements SpawnerProvider {
|
||||
@Override
|
||||
public ItemStack setEntityType(ItemStack is, EntityType type) {
|
||||
public ItemStack setEntityType(ItemStack is, EntityType type) throws IllegalArgumentException {
|
||||
BlockStateMeta bsm = (BlockStateMeta) is.getItemMeta();
|
||||
BlockState bs = bsm.getBlockState();
|
||||
((CreatureSpawner) bs).setSpawnedType(type);
|
||||
@ -19,7 +19,7 @@ public class BlockMetaSpawnerProvider extends SpawnerProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType getEntityType(ItemStack is) {
|
||||
public EntityType getEntityType(ItemStack is) throws IllegalArgumentException {
|
||||
BlockStateMeta bsm = (BlockStateMeta) is.getItemMeta();
|
||||
CreatureSpawner bs = (CreatureSpawner) bsm.getBlockState();
|
||||
return bs.getSpawnedType();
|
||||
@ -27,6 +27,6 @@ public class BlockMetaSpawnerProvider extends SpawnerProvider {
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "1.8.3+ BlockStateMeta provider";
|
||||
return "1.8.3+ Spawner Provider";
|
||||
}
|
||||
}
|
@ -1,15 +1,14 @@
|
||||
package net.ess3.nms.flattened;
|
||||
package net.ess3.provider.providers;
|
||||
|
||||
import net.ess3.nms.SpawnEggProvider;
|
||||
import net.ess3.provider.SpawnEggProvider;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class FlatSpawnEggProvider extends SpawnEggProvider {
|
||||
public class FlatSpawnEggProvider implements SpawnEggProvider {
|
||||
@Override
|
||||
public ItemStack createEggItem(EntityType type) throws IllegalArgumentException {
|
||||
String name = type.name() + "_SPAWN_EGG";
|
||||
Material material = Material.valueOf(name);
|
||||
Material material = Material.valueOf(type.name() + "_SPAWN_EGG");
|
||||
return new ItemStack(material);
|
||||
}
|
||||
|
||||
@ -18,13 +17,12 @@ public class FlatSpawnEggProvider extends SpawnEggProvider {
|
||||
String materialName = eggItem.getType().name();
|
||||
if (materialName.contains("_SPAWN_EGG")) {
|
||||
return EntityType.valueOf(materialName.replace("_SPAWN_EGG", ""));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Not a spawn egg");
|
||||
}
|
||||
throw new IllegalArgumentException("Not a spawn egg");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "1.13+ flat spawn egg provider";
|
||||
return "1.13+ Flattening Spawn Egg Provider";
|
||||
}
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
package net.ess3.nms.legacy;
|
||||
package net.ess3.provider.providers;
|
||||
|
||||
import net.ess3.nms.PotionMetaProvider;
|
||||
import net.ess3.provider.PotionMetaProvider;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class LegacyPotionMetaProvider extends PotionMetaProvider {
|
||||
public class LegacyPotionMetaProvider implements PotionMetaProvider {
|
||||
@Override
|
||||
public ItemStack createPotionItem(Material initial, int effectId) {
|
||||
ItemStack potion = new ItemStack(initial, 1);
|
||||
@ -15,6 +15,6 @@ public class LegacyPotionMetaProvider extends PotionMetaProvider {
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "legacy potion meta provider";
|
||||
return "Legacy 1.8 Potion Meta Provider";
|
||||
}
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
package net.ess3.nms.legacy;
|
||||
package net.ess3.provider.providers;
|
||||
|
||||
import net.ess3.nms.SpawnEggProvider;
|
||||
import net.ess3.provider.SpawnEggProvider;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.material.MaterialData;
|
||||
import org.bukkit.material.SpawnEgg;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class LegacySpawnEggProvider extends SpawnEggProvider {
|
||||
public class LegacySpawnEggProvider implements SpawnEggProvider {
|
||||
@Override
|
||||
public ItemStack createEggItem(EntityType type) throws IllegalArgumentException {
|
||||
return new SpawnEgg(type).toItemStack();
|
||||
@ -18,13 +18,12 @@ public class LegacySpawnEggProvider extends SpawnEggProvider {
|
||||
MaterialData data = eggItem.getData();
|
||||
if (data instanceof SpawnEgg) {
|
||||
return ((SpawnEgg) data).getSpawnedType();
|
||||
} else {
|
||||
throw new IllegalArgumentException("Item is missing data");
|
||||
}
|
||||
throw new IllegalArgumentException("Item is missing data");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "legacy item data provider";
|
||||
return "Legacy 1.8 Spawn Egg Provider";
|
||||
}
|
||||
}
|
@ -10,12 +10,12 @@
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ReflectionProvider</artifactId>
|
||||
<artifactId>NMSReflectionProvider</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>NMSProvider</artifactId>
|
||||
<artifactId>BaseProviders</artifactId>
|
||||
<version>2.17.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
@ -17,14 +17,9 @@ import java.util.regex.Pattern;
|
||||
|
||||
public class ReflUtil {
|
||||
public static final NMSVersion V1_8_R1 = NMSVersion.fromString("v1_8_R1");
|
||||
public static final NMSVersion V1_8_R2 = NMSVersion.fromString("v1_8_R2");
|
||||
public static final NMSVersion V1_8_R3 = NMSVersion.fromString("v1_8_R3");
|
||||
public static final NMSVersion V1_9_R1 = NMSVersion.fromString("v1_9_R1");
|
||||
public static final NMSVersion V1_10_R1 = NMSVersion.fromString("v1_10_R1");
|
||||
public static final NMSVersion V1_11_R1 = NMSVersion.fromString("v1_11_R1");
|
||||
public static final NMSVersion V1_12_R1 = NMSVersion.fromString("v1_12_R1");
|
||||
public static final NMSVersion V1_13_R1 = NMSVersion.fromString("v1_13_R1");
|
||||
public static final NMSVersion V1_13_R2 = NMSVersion.fromString("v1_13_R2");
|
||||
private static NMSVersion nmsVersionObject;
|
||||
private static String nmsVersion;
|
||||
|
||||
@ -52,7 +47,7 @@ public class ReflUtil {
|
||||
return getClassCached("org.bukkit.craftbukkit." + getNMSVersion() + "." + className);
|
||||
}
|
||||
|
||||
private static Map<String, Class<?>> classCache = new HashMap<>();
|
||||
private static final Map<String, Class<?>> classCache = new HashMap<>();
|
||||
|
||||
public static Class<?> getClassCached(String className) {
|
||||
if (classCache.containsKey(className)) {
|
||||
@ -67,7 +62,7 @@ public class ReflUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static Table<Class<?>, String, Method> methodCache = HashBasedTable.create();
|
||||
private static final Table<Class<?>, String, Method> methodCache = HashBasedTable.create();
|
||||
|
||||
public static Method getMethodCached(Class<?> clazz, String methodName) {
|
||||
if (methodCache.contains(clazz, methodName)) {
|
||||
@ -83,7 +78,7 @@ public class ReflUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static Table<Class<?>, MethodParams, Method> methodParamCache = HashBasedTable.create();
|
||||
private static final Table<Class<?>, MethodParams, Method> methodParamCache = HashBasedTable.create();
|
||||
|
||||
public static Method getMethodCached(Class<?> clazz, String methodName, Class<?>... params) {
|
||||
MethodParams methodParams = new MethodParams(methodName, params);
|
||||
@ -100,7 +95,7 @@ public class ReflUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static Table<Class<?>, String, Field> fieldCache = HashBasedTable.create();
|
||||
private static final Table<Class<?>, String, Field> fieldCache = HashBasedTable.create();
|
||||
|
||||
public static Field getFieldCached(Class<?> clazz, String fieldName) {
|
||||
if (fieldCache.contains(clazz, fieldName)) {
|
||||
@ -116,7 +111,7 @@ public class ReflUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static Map<Class<?>, Constructor<?>> constructorCache = new HashMap<>();
|
||||
private static final Map<Class<?>, Constructor<?>> constructorCache = new HashMap<>();
|
||||
|
||||
public static Constructor<?> getConstructorCached(Class<?> clazz) {
|
||||
if (constructorCache.containsKey(clazz)) {
|
||||
@ -132,7 +127,7 @@ public class ReflUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static Table<Class<?>, ConstructorParams, Constructor<?>> constructorParamCache = HashBasedTable.create();
|
||||
private static final Table<Class<?>, ConstructorParams, Constructor<?>> constructorParamCache = HashBasedTable.create();
|
||||
|
||||
public static Constructor<?> getConstructorCached(Class<?> clazz, Class<?>... params) {
|
||||
ConstructorParams constructorParams = new ConstructorParams(params);
|
@ -33,7 +33,7 @@ import java.lang.reflect.Method;
|
||||
public class SpawnEggRefl {
|
||||
private EntityType type;
|
||||
|
||||
SpawnEggRefl(EntityType type) {
|
||||
public SpawnEggRefl(EntityType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@ -42,7 +42,7 @@ public class SpawnEggRefl {
|
||||
*
|
||||
* @return The entity type.
|
||||
*/
|
||||
EntityType getSpawnedType() {
|
||||
public EntityType getSpawnedType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@ -67,7 +67,7 @@ public class SpawnEggRefl {
|
||||
*
|
||||
* @return ItemStack
|
||||
*/
|
||||
ItemStack toItemStack() throws Exception {
|
||||
public ItemStack toItemStack() throws Exception {
|
||||
return toItemStack(1);
|
||||
}
|
||||
|
||||
@ -119,7 +119,7 @@ public class SpawnEggRefl {
|
||||
* @param item - ItemStack, quantity is disregarded
|
||||
* @return SpawnEgg
|
||||
*/
|
||||
static SpawnEggRefl fromItemStack(ItemStack item) throws Exception {
|
||||
public static SpawnEggRefl fromItemStack(ItemStack item) throws Exception {
|
||||
if (item == null)
|
||||
throw new IllegalArgumentException("Item cannot be null");
|
||||
if (item.getType() != Material.MONSTER_EGG)
|
@ -0,0 +1,45 @@
|
||||
package net.ess3.nms.refl.providers;
|
||||
|
||||
import net.ess3.nms.refl.ReflUtil;
|
||||
import net.ess3.provider.ServerStateProvider;
|
||||
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.invoke.MethodType;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class ReflServerStateProvider implements ServerStateProvider {
|
||||
private final Object nmsServer;
|
||||
private final MethodHandle nmsIsRunning;
|
||||
|
||||
public ReflServerStateProvider(Logger logger) {
|
||||
Object serverObject = null;
|
||||
MethodHandle isRunning = null;
|
||||
Class<?> nmsClass = ReflUtil.getNMSClass("MinecraftServer");
|
||||
try {
|
||||
serverObject = nmsClass.getMethod("getServer").invoke(null);
|
||||
isRunning = MethodHandles.lookup().findVirtual(nmsClass, "isRunning", MethodType.methodType(boolean.class));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
nmsServer = serverObject;
|
||||
nmsIsRunning = isRunning;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isStopping() {
|
||||
if (nmsServer != null && nmsIsRunning != null) {
|
||||
try {
|
||||
return !(boolean) nmsIsRunning.invoke(nmsServer);
|
||||
} catch (Throwable throwable) {
|
||||
throwable.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "NMS Reflection Server State Provider";
|
||||
}
|
||||
}
|
@ -1,15 +1,14 @@
|
||||
package net.ess3.nms.refl;
|
||||
package net.ess3.nms.refl.providers;
|
||||
|
||||
import net.ess3.nms.SpawnEggProvider;
|
||||
import net.ess3.nms.refl.SpawnEggRefl;
|
||||
import net.ess3.provider.SpawnEggProvider;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ReflSpawnEggProvider extends SpawnEggProvider {
|
||||
public class ReflSpawnEggProvider implements SpawnEggProvider {
|
||||
|
||||
@Override
|
||||
public ItemStack createEggItem(EntityType type) throws IllegalArgumentException {
|
||||
if (ReflUtil.getNMSVersion().startsWith("v1_8_R")) {
|
||||
throw new IllegalArgumentException("1.8 servers should use legacy provider");
|
||||
}
|
||||
try {
|
||||
return new SpawnEggRefl(type).toItemStack();
|
||||
} catch (Exception e) {
|
||||
@ -19,9 +18,6 @@ public class ReflSpawnEggProvider extends SpawnEggProvider {
|
||||
|
||||
@Override
|
||||
public EntityType getSpawnedType(ItemStack eggItem) throws IllegalArgumentException {
|
||||
if (ReflUtil.getNMSVersion().startsWith("v1_8_R")) {
|
||||
throw new IllegalArgumentException("1.8 servers should use legacy provider");
|
||||
}
|
||||
try {
|
||||
return SpawnEggRefl.fromItemStack(eggItem).getSpawnedType();
|
||||
} catch (Exception e) {
|
||||
@ -31,6 +27,6 @@ public class ReflSpawnEggProvider extends SpawnEggProvider {
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Reflection based provider";
|
||||
return "NMS Reflection Provider";
|
||||
}
|
||||
}
|
@ -10,13 +10,25 @@
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>FlattenedProvider</artifactId>
|
||||
<artifactId>PaperProvider</artifactId>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>paper-repo</id>
|
||||
<url>https://papermc.io/repo/repository/maven-public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>NMSProvider</artifactId>
|
||||
<artifactId>BaseProviders</artifactId>
|
||||
<version>2.17.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.destroystokyo.paper</groupId>
|
||||
<artifactId>paper-api</artifactId>
|
||||
<version>1.15.2-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
</project>
|
@ -0,0 +1,16 @@
|
||||
package net.ess3.provider.providers;
|
||||
|
||||
import net.ess3.provider.ServerStateProvider;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class PaperServerStateProvider implements ServerStateProvider {
|
||||
@Override
|
||||
public boolean isStopping() {
|
||||
return Bukkit.isStopping();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Paper Server State Provider";
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user