some of this shit works, does not compile

This commit is contained in:
Josh Roy 2024-04-25 16:01:45 -04:00
parent bd047da3a3
commit ec5c53893d
No known key found for this signature in database
GPG Key ID: 86A69D08540BC29A
13 changed files with 347 additions and 51 deletions

View File

@ -59,6 +59,7 @@ import net.ess3.nms.refl.providers.ReflServerStateProvider;
import net.ess3.nms.refl.providers.ReflSpawnEggProvider;
import net.ess3.nms.refl.providers.ReflSpawnerBlockProvider;
import net.ess3.nms.refl.providers.ReflSyncCommandsProvider;
import net.ess3.provider.BannerDataProvider;
import net.ess3.provider.BiomeKeyProvider;
import net.ess3.provider.ContainerProvider;
import net.ess3.provider.DamageEventProvider;
@ -78,8 +79,10 @@ import net.ess3.provider.SpawnerBlockProvider;
import net.ess3.provider.SpawnerItemProvider;
import net.ess3.provider.SyncCommandsProvider;
import net.ess3.provider.WorldInfoProvider;
import net.ess3.provider.providers.BaseBannerDataProvider;
import net.ess3.provider.providers.BaseLoggerProvider;
import net.ess3.provider.providers.BasePotionDataProvider;
import net.ess3.provider.providers.LegacyBannerDataProvider;
import net.ess3.provider.providers.LegacyPotionMetaProvider;
import net.ess3.provider.providers.BlockMetaSpawnerItemProvider;
import net.ess3.provider.providers.BukkitMaterialTagProvider;
import net.ess3.provider.providers.BukkitSpawnerBlockProvider;
@ -88,7 +91,8 @@ import net.ess3.provider.providers.FlatSpawnEggProvider;
import net.ess3.provider.providers.LegacyDamageEventProvider;
import net.ess3.provider.providers.LegacyItemUnbreakableProvider;
import net.ess3.provider.providers.LegacyPlayerLocaleProvider;
import net.ess3.provider.providers.LegacyPotionMetaProvider;
import net.ess3.provider.providers.ModernPotionMetaProvider;
import net.ess3.provider.providers.PrehistoricPotionMetaProvider;
import net.ess3.provider.providers.LegacySpawnEggProvider;
import net.ess3.provider.providers.ModernDamageEventProvider;
import net.ess3.provider.providers.ModernDataWorldInfoProvider;
@ -184,6 +188,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
private transient SpawnerBlockProvider spawnerBlockProvider;
private transient SpawnEggProvider spawnEggProvider;
private transient PotionMetaProvider potionMetaProvider;
private transient BannerDataProvider bannerDataProvider;
private transient ServerStateProvider serverStateProvider;
private transient ContainerProvider containerProvider;
private transient SerializationProvider serializationProvider;
@ -403,10 +408,19 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
}
//Potion Meta Provider
if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) {
potionMetaProvider = new LegacyPotionMetaProvider();
if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_20_5_R01)) {
potionMetaProvider = new ModernPotionMetaProvider();
} else if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) {
potionMetaProvider = new PrehistoricPotionMetaProvider();
} else {
potionMetaProvider = new BasePotionDataProvider();
potionMetaProvider = new LegacyPotionMetaProvider();
}
//Banner Meta Provider
if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_20_5_R01)) {
bannerDataProvider = new BaseBannerDataProvider();
} else {
bannerDataProvider = new LegacyBannerDataProvider();
}
//Server State Provider
@ -1364,6 +1378,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
return potionMetaProvider;
}
@Override
public BannerDataProvider getBannerDataProvider() {
return bannerDataProvider;
}
@Override
public CustomItemResolver getCustomItemResolver() {
return customItemResolver;

View File

@ -9,6 +9,7 @@ import com.earth2me.essentials.perm.PermissionsHandler;
import com.earth2me.essentials.updatecheck.UpdateChecker;
import com.earth2me.essentials.userstorage.IUserMap;
import net.ess3.nms.refl.providers.ReflOnlineModeProvider;
import net.ess3.provider.BannerDataProvider;
import net.ess3.provider.BiomeKeyProvider;
import net.ess3.provider.ContainerProvider;
import net.ess3.provider.DamageEventProvider;
@ -189,5 +190,7 @@ public interface IEssentials extends Plugin {
BiomeKeyProvider getBiomeKeyProvider();
BannerDataProvider getBannerDataProvider();
PluginCommand getPluginCommand(String cmd);
}

View File

@ -640,7 +640,7 @@ public class MetaItemStack {
final BannerMeta meta = (BannerMeta) stack.getItemMeta();
if (split[0].equalsIgnoreCase("basecolor")) {
final Color color = Color.fromRGB(Integer.parseInt(split[1]));
meta.setBaseColor(DyeColor.getByColor(color));
ess.getBannerDataProvider().setBaseColor(stack, DyeColor.getByColor(color));
} else if (patternType != null) {
final PatternType type = PatternType.getByIdentifier(split[0]);
final DyeColor color = DyeColor.getByColor(Color.fromRGB(Integer.parseInt(split[1])));

View File

@ -27,7 +27,6 @@ import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.plugin.Plugin;
import org.bukkit.potion.Potion;
import org.bukkit.potion.PotionEffect;
import java.util.ArrayList;
@ -288,9 +287,8 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
final boolean splash;
final Collection<PotionEffect> effects;
if (VersionUtil.PRE_FLATTENING) {
final Potion potion = Potion.fromDamage(is.getDurability());
splash = potion.isSplash();
effects = potion.getEffects();
splash = ess.getPotionMetaProvider().isSplash(is);
effects = ess.getPotionMetaProvider().getEffects(is);
} else {
splash = is.getType() == Material.SPLASH_POTION;
effects = ((PotionMeta) is.getItemMeta()).getCustomEffects();
@ -317,6 +315,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
sb.append("basecolor:").append(basecolor).append(" ");
}
for (final org.bukkit.block.banner.Pattern p : shieldBannerMeta.getPatterns()) {
//noinspection removal
final String type = p.getPattern().getIdentifier();
final int color = p.getColor().getColor().asRGB();
sb.append(type).append(",").append(color).append(" ");
@ -324,7 +323,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
} else {
final BannerMeta bannerMeta = (BannerMeta) is.getItemMeta();
if (bannerMeta != null) {
DyeColor baseDyeColor = bannerMeta.getBaseColor();
DyeColor baseDyeColor = ess.getBannerDataProvider().getBaseColor(is);
if (baseDyeColor == null) {
baseDyeColor = MaterialUtil.getColorOf(material);
}
@ -335,6 +334,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
sb.append("basecolor:").append(basecolor).append(" ");
}
for (final org.bukkit.block.banner.Pattern p : bannerMeta.getPatterns()) {
//noinspection removal
final String type = p.getPattern().getIdentifier();
final int color = p.getColor().getColor().asRGB();
sb.append(type).append(",").append(color).append(" ");

View File

@ -3,6 +3,9 @@ plugins {
}
dependencies {
implementation(project(':providers:BaseProviders')) {
exclude group: "org.spigotmc", module: "spigot-api"
}
api project(':providers:NMSReflectionProvider')
}

View File

@ -0,0 +1,26 @@
package net.ess3.provider.providers;
import net.ess3.provider.BannerDataProvider;
import org.bukkit.DyeColor;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BannerMeta;
public class LegacyBannerDataProvider implements BannerDataProvider {
@Override
public DyeColor getBaseColor(ItemStack stack) {
final BannerMeta bannerMeta = (BannerMeta) stack.getItemMeta();
return bannerMeta.getBaseColor();
}
@Override
public void setBaseColor(ItemStack stack, DyeColor color) {
final BannerMeta bannerMeta = (BannerMeta) stack.getItemMeta();
bannerMeta.setBaseColor(color);
stack.setItemMeta(bannerMeta);
}
@Override
public String getDescription() {
return "Legacy Banner Meta Provider";
}
}

View File

@ -5,28 +5,31 @@ import net.ess3.provider.PotionMetaProvider;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.Potion;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionType;
import java.util.Collection;
import java.util.Map;
public class BasePotionDataProvider implements PotionMetaProvider {
public class LegacyPotionMetaProvider 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)
.put(4, PotionType.POISON)
.put(5, PotionType.INSTANT_HEAL)
.put(6, PotionType.NIGHT_VISION)
// Skip 7
.put(8, PotionType.WEAKNESS)
.put(9, PotionType.STRENGTH)
.put(10, PotionType.SLOWNESS)
.put(11, PotionType.JUMP)
.put(12, PotionType.INSTANT_DAMAGE)
.put(13, PotionType.WATER_BREATHING)
.put(14, PotionType.INVISIBILITY)
.build();
.put(1, PotionType.REGEN)
.put(2, PotionType.SPEED)
.put(3, PotionType.FIRE_RESISTANCE)
.put(4, PotionType.POISON)
.put(5, PotionType.INSTANT_HEAL)
.put(6, PotionType.NIGHT_VISION)
// Skip 7
.put(8, PotionType.WEAKNESS)
.put(9, PotionType.STRENGTH)
.put(10, PotionType.SLOWNESS)
.put(11, PotionType.JUMP)
.put(12, PotionType.INSTANT_DAMAGE)
.put(13, PotionType.WATER_BREATHING)
.put(14, PotionType.INVISIBILITY)
.build();
private static int getBit(final int n, final int k) {
return (n >> k) & 1;
@ -41,9 +44,9 @@ public class BasePotionDataProvider implements PotionMetaProvider {
}
final int damageValue = getBit(effectId, 0) +
2 * getBit(effectId, 1) +
4 * getBit(effectId, 2) +
8 * getBit(effectId, 3);
2 * getBit(effectId, 1) +
4 * getBit(effectId, 2) +
8 * getBit(effectId, 3);
final PotionType type = damageValueToType.get(damageValue);
if (type == null) {
@ -64,8 +67,22 @@ public class BasePotionDataProvider implements PotionMetaProvider {
return potion;
}
@Override
public boolean isSplash(ItemStack stack) {
//noinspection deprecation
final Potion potion = Potion.fromDamage(stack.getDurability());
return potion.isSplash();
}
@Override
public Collection<PotionEffect> getEffects(ItemStack stack) {
//noinspection deprecation
final Potion potion = Potion.fromDamage(stack.getDurability());
return potion.getEffects();
}
@Override
public String getDescription() {
return "1.9+ Potion Meta Provider";
return "1.9-1.20.4 Potion Meta Provider";
}
}

View File

@ -0,0 +1,10 @@
package net.ess3.provider;
import org.bukkit.DyeColor;
import org.bukkit.inventory.ItemStack;
public interface BannerDataProvider extends Provider {
DyeColor getBaseColor(ItemStack stack);
void setBaseColor(ItemStack stack, DyeColor color);
}

View File

@ -2,7 +2,20 @@ package net.ess3.provider;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import java.util.Collection;
public interface PotionMetaProvider extends Provider {
ItemStack createPotionItem(Material initial, int effectId);
/**
* Should only be used for pre-flattening
*/
boolean isSplash(ItemStack stack);
/**
* Should only be used for pre-flattening
*/
Collection<PotionEffect> getEffects(ItemStack stack);
}

View File

@ -0,0 +1,161 @@
package net.ess3.provider.providers;
import net.ess3.provider.BannerDataProvider;
import org.bukkit.DyeColor;
import org.bukkit.inventory.ItemStack;
public class BaseBannerDataProvider implements BannerDataProvider {
@Override
public DyeColor getBaseColor(ItemStack stack) {
final DyeColor base;
switch (stack.getType()) {
case WHITE_BANNER: {
base = DyeColor.WHITE;
break;
}
case LIGHT_GRAY_BANNER: {
base = DyeColor.LIGHT_GRAY;
break;
}
case GRAY_BANNER: {
base = DyeColor.GRAY;
break;
}
case BLACK_BANNER: {
base = DyeColor.BLACK;
break;
}
case RED_BANNER: {
base = DyeColor.RED;
break;
}
case ORANGE_BANNER: {
base = DyeColor.ORANGE;
break;
}
case YELLOW_BANNER: {
base = DyeColor.YELLOW;
break;
}
case LIME_BANNER: {
base = DyeColor.LIME;
break;
}
case GREEN_BANNER: {
base = DyeColor.GREEN;
break;
}
case CYAN_BANNER: {
base = DyeColor.CYAN;
break;
}
case LIGHT_BLUE_BANNER: {
base = DyeColor.LIGHT_BLUE;
break;
}
case BLUE_BANNER: {
base = DyeColor.BLUE;
break;
}
case PURPLE_BANNER: {
base = DyeColor.PURPLE;
break;
}
case MAGENTA_BANNER: {
base = DyeColor.MAGENTA;
break;
}
case PINK_BANNER: {
base = DyeColor.PINK;
break;
}
case BROWN_BANNER: {
base = DyeColor.BROWN;
break;
}
default: {
base = null;
break;
}
}
return base;
}
@Override
public void setBaseColor(ItemStack stack, DyeColor color) {
switch (color) {
case WHITE: {
stack.setType(org.bukkit.Material.WHITE_BANNER);
break;
}
case LIGHT_GRAY: {
stack.setType(org.bukkit.Material.LIGHT_GRAY_BANNER);
break;
}
case GRAY: {
stack.setType(org.bukkit.Material.GRAY_BANNER);
break;
}
case BLACK: {
stack.setType(org.bukkit.Material.BLACK_BANNER);
break;
}
case RED: {
stack.setType(org.bukkit.Material.RED_BANNER);
break;
}
case ORANGE: {
stack.setType(org.bukkit.Material.ORANGE_BANNER);
break;
}
case YELLOW: {
stack.setType(org.bukkit.Material.YELLOW_BANNER);
break;
}
case LIME: {
stack.setType(org.bukkit.Material.LIME_BANNER);
break;
}
case GREEN: {
stack.setType(org.bukkit.Material.GREEN_BANNER);
break;
}
case CYAN: {
stack.setType(org.bukkit.Material.CYAN_BANNER);
break;
}
case LIGHT_BLUE: {
stack.setType(org.bukkit.Material.LIGHT_BLUE_BANNER);
break;
}
case BLUE: {
stack.setType(org.bukkit.Material.BLUE_BANNER);
break;
}
case PINK: {
stack.setType(org.bukkit.Material.PINK_BANNER);
break;
}
case BROWN: {
stack.setType(org.bukkit.Material.BROWN_BANNER);
break;
}
case PURPLE: {
stack.setType(org.bukkit.Material.PURPLE_BANNER);
break;
}
case MAGENTA: {
stack.setType(org.bukkit.Material.MAGENTA_BANNER);
break;
}
default: {
break;
}
}
}
@Override
public String getDescription() {
return "1.20.5+ Banner Data Provider.";
}
}

View File

@ -1,20 +0,0 @@
package net.ess3.provider.providers;
import net.ess3.provider.PotionMetaProvider;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@SuppressWarnings("deprecation")
public class LegacyPotionMetaProvider implements PotionMetaProvider {
@Override
public ItemStack createPotionItem(final Material initial, final int effectId) {
final ItemStack potion = new ItemStack(initial, 1);
potion.setDurability((short) effectId);
return potion;
}
@Override
public String getDescription() {
return "Legacy 1.8 Potion Meta Provider";
}
}

View File

@ -0,0 +1,31 @@
package net.ess3.provider.providers;
import net.ess3.provider.PotionMetaProvider;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;
import java.util.Collection;
public class ModernPotionMetaProvider implements PotionMetaProvider {
@Override
public ItemStack createPotionItem(Material initial, int effectId) {
throw new UnsupportedOperationException("This should never happen, if this happens please submit a bug report!");
}
@Override
public boolean isSplash(ItemStack stack) {
return stack.getType() == Material.SPLASH_POTION;
}
@Override
public Collection<PotionEffect> getEffects(ItemStack stack) {
return ((PotionMeta) stack.getItemMeta()).getCustomEffects();
}
@Override
public String getDescription() {
return "1.20.5+ Potion Meta Provider";
}
}

View File

@ -0,0 +1,33 @@
package net.ess3.provider.providers;
import net.ess3.provider.PotionMetaProvider;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import java.util.Collection;
@SuppressWarnings("deprecation")
public class PrehistoricPotionMetaProvider implements PotionMetaProvider {
@Override
public ItemStack createPotionItem(final Material initial, final int effectId) {
final ItemStack potion = new ItemStack(initial, 1);
potion.setDurability((short) effectId);
return potion;
}
@Override
public boolean isSplash(ItemStack stack) {
throw new UnsupportedOperationException("This should never happen, if this happens please submit a bug report!");
}
@Override
public Collection<PotionEffect> getEffects(ItemStack stack) {
throw new UnsupportedOperationException("This should never happen, if this happens please submit a bug report!");
}
@Override
public String getDescription() {
return "Legacy 1.8 Potion Meta Provider";
}
}