Unfuck the potion code
This commit is contained in:
parent
7795c7a00e
commit
d4a46c6548
|
@ -250,7 +250,7 @@ public class MetaItemStack {
|
|||
meta.setTitle(title);
|
||||
stack.setItemMeta(meta);
|
||||
} else if (split.length > 1 && split[0].startsWith("page") && split[0].length() > 4 && MaterialUtil.isEditableBook(stack.getType()) && hasMetaPermission(sender, "page", false, true, ess)) {
|
||||
final int page = NumberUtil.isInt(split[0].substring(4)) ? (Integer.parseInt(split[0].substring(4)) - 1) : 0;
|
||||
final int page = NumberUtil.isInt(split[0].substring(4)) ? Integer.parseInt(split[0].substring(4)) - 1 : 0;
|
||||
final BookMeta meta = (BookMeta) stack.getItemMeta();
|
||||
final List<String> pages = meta.hasPages() ? new ArrayList<>(meta.getPages()) : new ArrayList<>();
|
||||
final List<String> lines = new ArrayList<>();
|
||||
|
@ -353,7 +353,7 @@ public class MetaItemStack {
|
|||
return;
|
||||
}
|
||||
|
||||
if (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour") || (allowShortName && split[0].equalsIgnoreCase("c"))) {
|
||||
if (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour") || allowShortName && split[0].equalsIgnoreCase("c")) {
|
||||
final List<Color> primaryColors = new ArrayList<>();
|
||||
final String[] colors = split[1].split(",");
|
||||
for (final String color : colors) {
|
||||
|
@ -368,7 +368,7 @@ public class MetaItemStack {
|
|||
}
|
||||
}
|
||||
builder.withColor(primaryColors);
|
||||
} else if (split[0].equalsIgnoreCase("shape") || split[0].equalsIgnoreCase("type") || (allowShortName && (split[0].equalsIgnoreCase("s") || split[0].equalsIgnoreCase("t")))) {
|
||||
} else if (split[0].equalsIgnoreCase("shape") || split[0].equalsIgnoreCase("type") || allowShortName && (split[0].equalsIgnoreCase("s") || split[0].equalsIgnoreCase("t"))) {
|
||||
FireworkEffect.Type finalEffect = null;
|
||||
split[1] = split[1].equalsIgnoreCase("large") ? "BALL_LARGE" : split[1];
|
||||
if (fireworkShape.containsKey(split[1].toUpperCase())) {
|
||||
|
@ -379,7 +379,7 @@ public class MetaItemStack {
|
|||
if (finalEffect != null) {
|
||||
builder.with(finalEffect);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("fade") || (allowShortName && split[0].equalsIgnoreCase("f"))) {
|
||||
} else if (split[0].equalsIgnoreCase("fade") || allowShortName && split[0].equalsIgnoreCase("f")) {
|
||||
final List<Color> fadeColors = new ArrayList<>();
|
||||
final String[] colors = split[1].split(",");
|
||||
for (final String color : colors) {
|
||||
|
@ -394,7 +394,7 @@ public class MetaItemStack {
|
|||
if (!fadeColors.isEmpty()) {
|
||||
builder.withFade(fadeColors);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("effect") || (allowShortName && split[0].equalsIgnoreCase("e"))) {
|
||||
} else if (split[0].equalsIgnoreCase("effect") || allowShortName && split[0].equalsIgnoreCase("e")) {
|
||||
final String[] effects = split[1].split(",");
|
||||
for (final String effect : effects) {
|
||||
if (effect.equalsIgnoreCase("twinkle")) {
|
||||
|
@ -415,7 +415,7 @@ public class MetaItemStack {
|
|||
return;
|
||||
}
|
||||
|
||||
if (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour") || (allowShortName && split[0].equalsIgnoreCase("c"))) {
|
||||
if (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour") || allowShortName && split[0].equalsIgnoreCase("c")) {
|
||||
if (validFirework) {
|
||||
if (!hasMetaPermission(sender, "firework", true, true, ess)) {
|
||||
throw new TranslatableException("noMetaFirework");
|
||||
|
@ -444,7 +444,7 @@ public class MetaItemStack {
|
|||
}
|
||||
}
|
||||
builder.withColor(primaryColors);
|
||||
} else if (split[0].equalsIgnoreCase("shape") || split[0].equalsIgnoreCase("type") || (allowShortName && (split[0].equalsIgnoreCase("s") || split[0].equalsIgnoreCase("t")))) {
|
||||
} else if (split[0].equalsIgnoreCase("shape") || split[0].equalsIgnoreCase("type") || allowShortName && (split[0].equalsIgnoreCase("s") || split[0].equalsIgnoreCase("t"))) {
|
||||
FireworkEffect.Type finalEffect = null;
|
||||
split[1] = split[1].equalsIgnoreCase("large") ? "BALL_LARGE" : split[1];
|
||||
if (fireworkShape.containsKey(split[1].toUpperCase())) {
|
||||
|
@ -455,7 +455,7 @@ public class MetaItemStack {
|
|||
if (finalEffect != null) {
|
||||
builder.with(finalEffect);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("fade") || (allowShortName && split[0].equalsIgnoreCase("f"))) {
|
||||
} else if (split[0].equalsIgnoreCase("fade") || allowShortName && split[0].equalsIgnoreCase("f")) {
|
||||
final List<Color> fadeColors = new ArrayList<>();
|
||||
final String[] colors = split[1].split(",");
|
||||
for (final String color : colors) {
|
||||
|
@ -470,7 +470,7 @@ public class MetaItemStack {
|
|||
if (!fadeColors.isEmpty()) {
|
||||
builder.withFade(fadeColors);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("effect") || (allowShortName && split[0].equalsIgnoreCase("e"))) {
|
||||
} else if (split[0].equalsIgnoreCase("effect") || allowShortName && split[0].equalsIgnoreCase("e")) {
|
||||
final String[] effects = split[1].split(",");
|
||||
for (final String effect : effects) {
|
||||
if (effect.equalsIgnoreCase("twinkle")) {
|
||||
|
@ -493,7 +493,7 @@ public class MetaItemStack {
|
|||
return;
|
||||
}
|
||||
|
||||
if (split[0].equalsIgnoreCase("effect") || (allowShortName && split[0].equalsIgnoreCase("e"))) {
|
||||
if (split[0].equalsIgnoreCase("effect") || allowShortName && split[0].equalsIgnoreCase("e")) {
|
||||
pEffectType = Potions.getByName(split[1]);
|
||||
if (pEffectType != null && pEffectType.getName() != null) {
|
||||
if (hasMetaPermission(sender, "potions." + pEffectType.getName().toLowerCase(Locale.ENGLISH), true, false, ess)) {
|
||||
|
@ -504,7 +504,7 @@ public class MetaItemStack {
|
|||
} else {
|
||||
throw new TranslatableException("invalidPotionMeta", split[1]);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("power") || (allowShortName && split[0].equalsIgnoreCase("p"))) {
|
||||
} else if (split[0].equalsIgnoreCase("power") || allowShortName && split[0].equalsIgnoreCase("p")) {
|
||||
if (NumberUtil.isInt(split[1])) {
|
||||
validPotionPower = true;
|
||||
power = Integer.parseInt(split[1]);
|
||||
|
@ -514,21 +514,21 @@ public class MetaItemStack {
|
|||
} else {
|
||||
throw new TranslatableException("invalidPotionMeta", split[1]);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("amplifier") || (allowShortName && split[0].equalsIgnoreCase("a"))) {
|
||||
} else if (split[0].equalsIgnoreCase("amplifier") || allowShortName && split[0].equalsIgnoreCase("a")) {
|
||||
if (NumberUtil.isInt(split[1])) {
|
||||
validPotionPower = true;
|
||||
power = Integer.parseInt(split[1]);
|
||||
} else {
|
||||
throw new TranslatableException("invalidPotionMeta", split[1]);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("duration") || (allowShortName && split[0].equalsIgnoreCase("d"))) {
|
||||
} else if (split[0].equalsIgnoreCase("duration") || allowShortName && split[0].equalsIgnoreCase("d")) {
|
||||
if (NumberUtil.isInt(split[1])) {
|
||||
validPotionDuration = true;
|
||||
duration = Integer.parseInt(split[1]) * 20; //Duration is in ticks by default, converted to seconds
|
||||
} else {
|
||||
throw new TranslatableException("invalidPotionMeta", split[1]);
|
||||
}
|
||||
} else if (split[0].equalsIgnoreCase("splash") || (allowShortName && split[0].equalsIgnoreCase("s"))) {
|
||||
} else if (split[0].equalsIgnoreCase("splash") || allowShortName && split[0].equalsIgnoreCase("s")) {
|
||||
isSplashPotion = Boolean.parseBoolean(split[1]);
|
||||
}
|
||||
|
||||
|
@ -540,19 +540,7 @@ public class MetaItemStack {
|
|||
}
|
||||
pmeta.addCustomEffect(pEffect, true);
|
||||
stack.setItemMeta(pmeta);
|
||||
if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_9_R01)) {
|
||||
if (isSplashPotion && stack.getType() == Material.POTION) {
|
||||
stack.setType(Material.SPLASH_POTION);
|
||||
} else if (!isSplashPotion && stack.getType() == Material.SPLASH_POTION) {
|
||||
stack.setType(Material.POTION);
|
||||
}
|
||||
} else {
|
||||
/* todo figure out how to unfuck this code
|
||||
final Potion potion = Potion.fromDamage(stack.getDurability());
|
||||
potion.setSplash(isSplashPotion);
|
||||
potion.apply(stack);
|
||||
*/
|
||||
}
|
||||
ess.getPotionMetaProvider().setSplashPotion(stack, isSplashPotion);
|
||||
resetPotionMeta();
|
||||
}
|
||||
}
|
||||
|
@ -573,7 +561,7 @@ public class MetaItemStack {
|
|||
}
|
||||
}
|
||||
|
||||
if (level < 0 || (!allowUnsafe && level > enchantment.getMaxLevel())) {
|
||||
if (level < 0 || !allowUnsafe && level > enchantment.getMaxLevel()) {
|
||||
level = enchantment.getMaxLevel();
|
||||
}
|
||||
addEnchantment(sender, allowUnsafe, enchantment, level);
|
||||
|
@ -634,6 +622,7 @@ public class MetaItemStack {
|
|||
|
||||
PatternType patternType = null;
|
||||
try {
|
||||
//noinspection removal
|
||||
patternType = PatternType.getByIdentifier(split[0]);
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
|
@ -643,6 +632,7 @@ public class MetaItemStack {
|
|||
final Color color = Color.fromRGB(Integer.parseInt(split[1]));
|
||||
ess.getBannerDataProvider().setBaseColor(stack, DyeColor.getByColor(color));
|
||||
} else if (patternType != null) {
|
||||
//noinspection removal
|
||||
final PatternType type = PatternType.getByIdentifier(split[0]);
|
||||
final DyeColor color = DyeColor.getByColor(Color.fromRGB(Integer.parseInt(split[1])));
|
||||
final org.bukkit.block.banner.Pattern pattern = new org.bukkit.block.banner.Pattern(color, type);
|
||||
|
@ -659,6 +649,7 @@ public class MetaItemStack {
|
|||
|
||||
PatternType patternType = null;
|
||||
try {
|
||||
//noinspection removal
|
||||
patternType = PatternType.getByIdentifier(split[0]);
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ import com.earth2me.essentials.utils.MaterialUtil;
|
|||
import com.earth2me.essentials.utils.VersionUtil;
|
||||
import net.ess3.api.IEssentials;
|
||||
import net.ess3.api.PluginKey;
|
||||
import net.ess3.provider.PotionMetaProvider;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.FireworkEffect;
|
||||
|
@ -25,7 +24,6 @@ import org.bukkit.inventory.meta.FireworkEffectMeta;
|
|||
import org.bukkit.inventory.meta.FireworkMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
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.PotionEffect;
|
||||
|
@ -285,17 +283,8 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb {
|
|||
serializeEffectMeta(sb, fireworkEffectMeta.getEffect());
|
||||
}
|
||||
} else if (MaterialUtil.isPotion(material)) {
|
||||
final boolean splash;
|
||||
final Collection<PotionEffect> effects;
|
||||
if (VersionUtil.PRE_FLATTENING) {
|
||||
final PotionMetaProvider.AbstractPotionData potionData = ess.getPotionMetaProvider().getPotionData(is);
|
||||
|
||||
splash = potionData.isSplash();
|
||||
effects = potionData.getEffects();
|
||||
} else {
|
||||
splash = is.getType() == Material.SPLASH_POTION;
|
||||
effects = ((PotionMeta) is.getItemMeta()).getCustomEffects();
|
||||
}
|
||||
final boolean splash = ess.getPotionMetaProvider().isSplashPotion(is);
|
||||
final Collection<PotionEffect> effects = ess.getPotionMetaProvider().getCustomEffects(is);
|
||||
|
||||
for (final PotionEffect e : effects) {
|
||||
// long but needs to be effect:speed power:2 duration:120 in that order.
|
||||
|
|
|
@ -20,7 +20,6 @@ import org.bukkit.potion.PotionType;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
@ -131,14 +130,13 @@ public class FlatItemDb extends AbstractItemDb {
|
|||
stack.setAmount(material.getMaxStackSize());
|
||||
|
||||
final ItemData.EssentialPotionData potionData = data.getPotionData();
|
||||
final ItemMeta meta = stack.getItemMeta();
|
||||
|
||||
if (potionData != null && meta instanceof PotionMeta) {
|
||||
final PotionMeta potionMeta = (PotionMeta) meta;
|
||||
potionMeta.setBasePotionType(potionData.getType());
|
||||
//todo figure out what to do here potionMeta.setBasePotionType(potionData);
|
||||
if (potionData != null && stack.getItemMeta() instanceof PotionMeta) {
|
||||
ess.getPotionMetaProvider().setBasePotionType(stack, potionData.getType(), potionData.isExtended(), potionData.isUpgraded());
|
||||
}
|
||||
|
||||
final ItemMeta meta = stack.getItemMeta();
|
||||
|
||||
// For some reason, Damageable doesn't extend ItemMeta but CB implements them in the same
|
||||
// class. As to why, your guess is as good as mine.
|
||||
if (split.length > 1 && meta instanceof Damageable) {
|
||||
|
@ -204,14 +202,14 @@ public class FlatItemDb extends AbstractItemDb {
|
|||
throw new UnsupportedOperationException("Legacy IDs aren't supported on this version.");
|
||||
}
|
||||
|
||||
private ItemData lookup(final ItemStack item) {
|
||||
final Material type = item.getType();
|
||||
private ItemData lookup(final ItemStack is) {
|
||||
final Material type = is.getType();
|
||||
|
||||
if (MaterialUtil.isPotion(type) && item.getItemMeta() instanceof PotionMeta) {
|
||||
final PotionMetaProvider.AbstractPotionData potion = ess.getPotionMetaProvider().getPotionData(item);
|
||||
return new ItemData(type, new ItemData.EssentialPotionData(potion.getType(), potion.isUpgraded(), potion.isExtended();
|
||||
if (MaterialUtil.isPotion(type) && is.getItemMeta() instanceof PotionMeta) {
|
||||
final PotionMetaProvider provider = ess.getPotionMetaProvider();
|
||||
return new ItemData(type, new ItemData.EssentialPotionData(provider.getBasePotionType(is), provider.isUpgraded(is), provider.isExtended(is)));
|
||||
} else if (type.toString().contains("SPAWNER")) {
|
||||
final EntityType entity = ess.getSpawnerItemProvider().getEntityType(item);
|
||||
final EntityType entity = ess.getSpawnerItemProvider().getEntityType(is);
|
||||
return new ItemData(type, entity);
|
||||
} else {
|
||||
return new ItemData(type);
|
||||
|
|
|
@ -5,7 +5,6 @@ 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;
|
||||
|
@ -68,43 +67,64 @@ public class LegacyPotionMetaProvider implements PotionMetaProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
public AbstractPotionData getPotionData(ItemStack stack) {
|
||||
return new AbstractPotionData() {
|
||||
final Potion potion = Potion.fromDamage(stack.getDurability());
|
||||
public void setSplashPotion(final ItemStack stack, final boolean isSplash) {
|
||||
if (stack == null) {
|
||||
throw new IllegalArgumentException("ItemStack cannot be null");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSplash() {
|
||||
return potion.isSplash();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<PotionEffect> getEffects() {
|
||||
return potion.getEffects();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PotionType getType() {
|
||||
return ((PotionMeta) stack.getItemMeta()).getBasePotionData().getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setType(PotionType type) {
|
||||
final PotionMeta itemMeta = (PotionMeta) stack.getItemMeta();
|
||||
final PotionData data = itemMeta.getBasePotionData();
|
||||
itemMeta.setBasePotionData(new PotionData(type, data.isExtended(), data.isUpgraded()));
|
||||
stack.setItemMeta(itemMeta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (31 * stack.getType().hashCode()) ^ ((PotionMeta) stack.getItemMeta()).getBasePotionData().hashCode();
|
||||
}
|
||||
};
|
||||
if (isSplash && stack.getType() == Material.POTION) {
|
||||
stack.setType(Material.SPLASH_POTION);
|
||||
} else if (!isSplash && stack.getType() == Material.SPLASH_POTION) {
|
||||
stack.setType(Material.POTION);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePotionStack(ItemStack stack, AbstractPotionData data) {
|
||||
//todo
|
||||
public boolean isSplashPotion(final ItemStack stack) {
|
||||
return stack != null && stack.getType() == Material.SPLASH_POTION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<PotionEffect> getCustomEffects(final ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
return meta.getCustomEffects();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExtended(final ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
final PotionData data = meta.getBasePotionData();
|
||||
return data.isExtended();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUpgraded(final ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
final PotionData data = meta.getBasePotionData();
|
||||
return data.isUpgraded();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PotionType getBasePotionType(final ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
final PotionData data = meta.getBasePotionData();
|
||||
return data.getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBasePotionType(final ItemStack stack, final PotionType type, final boolean extended, final boolean upgraded) {
|
||||
if (stack == null) {
|
||||
throw new IllegalArgumentException("ItemStack cannot be null");
|
||||
}
|
||||
|
||||
if (extended && upgraded) {
|
||||
throw new IllegalArgumentException("Potion cannot be both extended and upgraded");
|
||||
}
|
||||
|
||||
final PotionData data = new PotionData(type, extended, upgraded);
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
meta.setBasePotionData(data);
|
||||
stack.setItemMeta(meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
package net.ess3.provider.providers;
|
||||
|
||||
import net.ess3.provider.PotionMetaProvider;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.Potion;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
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 void setSplashPotion(final ItemStack stack, final boolean isSplash) {
|
||||
if (stack == null) {
|
||||
throw new IllegalArgumentException("ItemStack cannot be null");
|
||||
}
|
||||
|
||||
final Potion potion = Potion.fromItemStack(stack);
|
||||
potion.setSplash(isSplash);
|
||||
potion.apply(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSplashPotion(ItemStack stack) {
|
||||
return Potion.fromItemStack(stack).isSplash();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<PotionEffect> getCustomEffects(ItemStack stack) {
|
||||
return Potion.fromItemStack(stack).getEffects();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExtended(final ItemStack stack) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUpgraded(final ItemStack stack) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PotionType getBasePotionType(final ItemStack stack) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBasePotionType(final ItemStack stack, final PotionType type, final boolean extended, final boolean upgraded) {
|
||||
if (stack == null) {
|
||||
throw new IllegalArgumentException("ItemStack cannot be null");
|
||||
}
|
||||
|
||||
if (extended && upgraded) {
|
||||
throw new IllegalArgumentException("Potion cannot be both extended and upgraded");
|
||||
}
|
||||
|
||||
final Potion potion = Potion.fromItemStack(stack);
|
||||
|
||||
if (extended && !potion.getType().isInstant()) {
|
||||
potion.setHasExtendedDuration(true);
|
||||
potion.setLevel(Math.min(potion.getLevel(), 1));
|
||||
}
|
||||
|
||||
if (upgraded && type.getMaxLevel() == 2) {
|
||||
potion.setLevel(2);
|
||||
potion.setHasExtendedDuration(false);
|
||||
}
|
||||
|
||||
potion.apply(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Legacy 1.8 Potion Meta Provider";
|
||||
}
|
||||
}
|
|
@ -2,9 +2,25 @@ package net.ess3.provider;
|
|||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface PotionMetaProvider extends Provider {
|
||||
ItemStack createPotionItem(Material initial, int effectId);
|
||||
|
||||
ItemStack setBasePotionData(ItemStack stack, PotionData data);
|
||||
void setSplashPotion(ItemStack stack, boolean isSplash);
|
||||
|
||||
boolean isSplashPotion(ItemStack stack);
|
||||
|
||||
Collection<PotionEffect> getCustomEffects(ItemStack stack);
|
||||
|
||||
boolean isExtended(ItemStack stack);
|
||||
|
||||
boolean isUpgraded(ItemStack stack);
|
||||
|
||||
PotionType getBasePotionType(ItemStack stack);
|
||||
|
||||
void setBasePotionType(ItemStack stack, PotionType type, boolean extended, boolean upgraded);
|
||||
}
|
||||
|
|
|
@ -16,48 +16,79 @@ public class ModernPotionMetaProvider implements PotionMetaProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
public AbstractPotionData getPotionData(ItemStack stack) {
|
||||
return new AbstractPotionData() {
|
||||
@Override
|
||||
public boolean isSplash() {
|
||||
return stack.getType() == Material.SPLASH_POTION;
|
||||
}
|
||||
public void setBasePotionType(final ItemStack stack, PotionType type, final boolean extended, final boolean upgraded) {
|
||||
if (stack == null) {
|
||||
throw new IllegalArgumentException("ItemStack cannot be null");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<PotionEffect> getEffects() {
|
||||
return ((PotionMeta) stack.getItemMeta()).getCustomEffects();
|
||||
}
|
||||
if (extended && upgraded) {
|
||||
throw new IllegalArgumentException("Potion cannot be both extended and upgraded");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PotionType getType() {
|
||||
return ((PotionMeta) stack.getItemMeta()).getBasePotionType();
|
||||
}
|
||||
final String name = type.name();
|
||||
if (name.startsWith("LONG_")) {
|
||||
type = PotionType.valueOf(name.substring(5));
|
||||
} else if (name.startsWith("STRONG_")) {
|
||||
type = PotionType.valueOf(name.substring(7));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setType(final PotionType type) {
|
||||
((PotionMeta) stack.getItemMeta()).setBasePotionType(type);
|
||||
}
|
||||
if (extended && type.isExtendable()) {
|
||||
type = PotionType.valueOf("LONG_" + type.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return stack.getItemMeta().hashCode();
|
||||
}
|
||||
};
|
||||
if (upgraded && type.isUpgradeable()) {
|
||||
type = PotionType.valueOf("STRONG_" + type.name());
|
||||
}
|
||||
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
//noinspection DataFlowIssue
|
||||
meta.setBasePotionType(type);
|
||||
stack.setItemMeta(meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePotionStack(ItemStack stack, AbstractPotionData data) {
|
||||
public Collection<PotionEffect> getCustomEffects(ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
meta.setBasePotionType(data.getType());
|
||||
meta.clearCustomEffects();
|
||||
for (PotionEffect effect : data.getEffects()) {
|
||||
meta.addCustomEffect(effect, true);
|
||||
}
|
||||
stack.setItemMeta(meta);
|
||||
//noinspection DataFlowIssue
|
||||
return meta.getCustomEffects();
|
||||
}
|
||||
|
||||
final AbstractPotionData existing = getPotionData(stack);
|
||||
if (existing.isSplash() != data.isSplash()) {
|
||||
stack.setType(data.isSplash() ? Material.SPLASH_POTION : Material.POTION);
|
||||
@Override
|
||||
public boolean isSplashPotion(ItemStack stack) {
|
||||
return stack != null && stack.getType() == Material.SPLASH_POTION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExtended(ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
//noinspection DataFlowIssue
|
||||
return meta.getBasePotionType().name().startsWith("LONG_");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUpgraded(ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
//noinspection DataFlowIssue
|
||||
return meta.getBasePotionType().name().startsWith("STRONG_");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PotionType getBasePotionType(ItemStack stack) {
|
||||
final PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
//noinspection DataFlowIssue
|
||||
return meta.getBasePotionType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSplashPotion(ItemStack stack, boolean isSplash) {
|
||||
if (stack == null) {
|
||||
throw new IllegalArgumentException("ItemStack cannot be null");
|
||||
}
|
||||
|
||||
if (isSplash && stack.getType() == Material.POTION) {
|
||||
stack.setType(Material.SPLASH_POTION);
|
||||
} else if (!isSplash && stack.getType() == Material.SPLASH_POTION) {
|
||||
stack.setType(Material.POTION);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
package net.ess3.provider.providers;
|
||||
|
||||
import net.ess3.provider.PotionMetaProvider;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class PrehistoricPotionMetaProvider implements PotionMetaProvider {
|
||||
@Override
|
||||
public ItemStack createPotionItem(final Material initial, final int effectId) {
|
||||
final ItemStack potion = new ItemStack(initial, 1);
|
||||
//noinspection deprecation
|
||||
potion.setDurability((short) effectId);
|
||||
return potion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePotionStack(ItemStack stack, AbstractPotionData data) {
|
||||
throw new UnsupportedOperationException("This should never happen, if this happens please submit a bug report!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractPotionData getPotionData(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";
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue