Skip to content

Commit

Permalink
Update ItemPotion property for 1.13
Browse files Browse the repository at this point in the history
  • Loading branch information
Morphan1 committed Oct 26, 2018
1 parent b35f443 commit c233d55
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 11 deletions.
Expand Up @@ -5,8 +5,11 @@
import net.aufdemrand.denizen.nms.util.PlayerProfile;
import net.aufdemrand.denizen.nms.util.jnbt.CompoundTag;
import net.aufdemrand.denizen.nms.util.jnbt.Tag;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.List;
import java.util.Map;
Expand All @@ -32,4 +35,6 @@ public interface ItemHelper {
Map<EntityAttribute, List<EntityAttributeModifier>> getAttributeModifiers(ItemStack itemStack);

ItemStack setAttributeModifiers(ItemStack itemStack, Map<EntityAttribute, List<EntityAttributeModifier>> modifiers);

PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon);
}
Expand Up @@ -2,16 +2,25 @@

import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.NMSVersion;
import net.aufdemrand.denizen.nms.interfaces.ItemHelper;
import net.aufdemrand.denizen.objects.dColor;
import net.aufdemrand.denizen.objects.dItem;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizencore.objects.*;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.objects.Mechanism;
import net.aufdemrand.denizencore.objects.dList;
import net.aufdemrand.denizencore.objects.dObject;
import net.aufdemrand.denizencore.objects.properties.Property;
import net.aufdemrand.denizencore.tags.Attribute;
import net.aufdemrand.denizencore.utilities.CoreUtilities;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.*;
import org.bukkit.potion.Potion;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.potion.PotionType;

public class ItemPotion implements Property {

Expand Down Expand Up @@ -99,7 +108,7 @@ public String getAttribute(Attribute attribute) {
PotionMeta meta = ((PotionMeta) item.getItemStack().getItemMeta());
return new Element(meta.getBasePotionData().getType().name() + "," + (meta.getBasePotionData().isUpgraded() ? 2 : 1)
+ "," + meta.getBasePotionData().isExtended() + "," + (item.getItemStack().getType() == Material.SPLASH_POTION)
+ (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_12_R1) && meta.hasColor() ? "," + new dColor(meta.getColor()).identify() : "")
+ (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_11_R1) && meta.hasColor() ? "," + new dColor(meta.getColor()).identify() : "")
).getAttribute(attribute.fulfill(1));
}

Expand Down Expand Up @@ -186,12 +195,33 @@ public String getAttribute(Attribute attribute) {
// @group properties
// @description
// Returns the potion effect's color.
// NOTE: Not supported as of Minecraft version 1.13.
// -->
if (attribute.startsWith("color")) {
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) {
dB.echoError("Custom effects with the color option are not supported as of Minecraft version 1.13.");
return null;
}
else if (!NMSHandler.getVersion().isAtLeast(NMSVersion.v1_9_R2)) {
dB.echoError("Custom effects with the color option are not supported before Minecraft version 1.9.");
return null;
}
return new dColor(meta.getCustomEffects().get(potN).getColor())
.getAttribute(attribute.fulfill(1));
}

// <--[tag]
// @attribute <i@item.potion_effect[<#>].icon>
// @returns Element(Boolean)
// @mechanism dItem.potion_effects
// @group properties
// @description
// Returns the potion effect shows an icon.
// -->
if (attribute.startsWith("icon") && NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) {
return new Element(meta.getCustomEffects().get(potN).hasIcon()).getAttribute(attribute.fulfill(1));
}

// <--[tag]
// @attribute <i@item.potion_effect[<#>].has_particles>
// @returns Element(Boolean)
Expand Down Expand Up @@ -277,8 +307,9 @@ public void adjust(Mechanism mechanism) {
// @input dList
// @description
// Sets the potion's potion effect(s).
// Input is a formed like: Effect,Upgraded,Extended(,Color)|Type,Amplifier,Duration,Ambient,Particles(,Color)|...
// For example: SPEED,true,false|SPEED,2,200,false,true,red
// Input is a formed like: Effect,Upgraded,Extended(,Color)|Type,Amplifier,Duration,Ambient,Particles(,Icon)|...
// For example: SPEED,true,false|SPEED,2,200,false,true,true
// NOTE: In pre-1.13 Minecraft versions, you could set a color in the custom effects list instead of "icon".
// @tags
// <i@item.potion_effect[<#>]>
// <i@item.potion_effect[<#>].type>
Expand All @@ -287,6 +318,7 @@ public void adjust(Mechanism mechanism) {
// <i@item.potion_effect[<#>].is_ambient>
// <i@item.potion_effect[<#>].has_particles>
// <i@item.potion_effect[<#>].color>
// <i@item.potion_effect[<#>].icon>
// -->
if (mechanism.matches("potion_effects")) {
dList data = mechanism.getValue().asType(dList.class);
Expand All @@ -296,16 +328,46 @@ public void adjust(Mechanism mechanism) {
CoreUtilities.toLowerCase(d1[2]).equals("true"),
CoreUtilities.toLowerCase(d1[1]).equals("true")));
if (d1.length > 3) {
meta.setColor(dColor.valueOf(d1[3]).getColor());
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_11_R1)) {
meta.setColor(dColor.valueOf(d1[3]).getColor());
}
else {
dB.echoError("Potion effect color is not supported before Minecraft version 1.11.");
}
}
meta.clearCustomEffects();
ItemHelper itemHelper = NMSHandler.getInstance().getItemHelper();
for (int i = 1; i < data.size(); i++) {
String[] d2 = data.get(i).split(",");
meta.addCustomEffect(new PotionEffect(PotionEffectType.getByName(d2[0].toUpperCase()),
new Element(d2[2]).asInt(), new Element(d2[1]).asInt(), new Element(d2[3]).asBoolean(),
new Element(d2[4]).asBoolean(), //d2.length > 5 ? dColor.valueOf(d2[5].replace("&comma", ",")).getColor() : null),
false), false);
// TODO: 1.13.1 - color has been removed from PotionEffect, icon has been added. this needs an NMS-specific method
PotionEffectType type = PotionEffectType.getByName(d2[0].toUpperCase());
// NOTE: amplifier and duration are swapped around in the input format
// as compared to the PotionEffect constructor!
int duration = new Element(d2[2]).asInt();
int amplifier = new Element(d2[1]).asInt();
boolean ambient = new Element(d2[3]).asBoolean();
boolean particles = new Element(d2[4]).asBoolean();
Color color = null;
boolean icon = false;
if (d2.length > 5) {
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_9_R2)) {
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_13_R2)) {
Element check = new Element(d2[5]);
if (check.isBoolean()) {
icon = check.asBoolean();
}
else {
dB.echoError("Custom effects with the color option are not supported as of Minecraft version 1.13.");
}
}
else {
String check = d2[5].replace("&comma", ",");
if (dColor.matches(check)) {
color = dColor.valueOf(check).getColor();
}
}
}
}
meta.addCustomEffect(itemHelper.getPotionEffect(type, duration, amplifier, ambient, particles, color, icon), false);
}
item.getItemStack().setItemMeta(meta);
}
Expand Down
Expand Up @@ -12,9 +12,12 @@
import net.minecraft.server.v1_10_R1.GameProfileSerializer;
import net.minecraft.server.v1_10_R1.NBTTagCompound;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -149,4 +152,9 @@ public ItemStack setAttributeModifiers(ItemStack itemStack, Map<EntityAttribute,
}
return addNbtData(itemStack, "AttributeModifiers", new ListTag(CompoundTag.class, modifierList));
}

@Override
public PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon) {
return new PotionEffect(type, duration, amplifier, ambient, particles, color);
}
}
Expand Up @@ -12,9 +12,12 @@
import net.minecraft.server.v1_11_R1.GameProfileSerializer;
import net.minecraft.server.v1_11_R1.NBTTagCompound;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -149,4 +152,9 @@ public ItemStack setAttributeModifiers(ItemStack itemStack, Map<EntityAttribute,
}
return addNbtData(itemStack, "AttributeModifiers", new ListTag(CompoundTag.class, modifierList));
}

@Override
public PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon) {
return new PotionEffect(type, duration, amplifier, ambient, particles, color);
}
}
Expand Up @@ -12,9 +12,12 @@
import net.minecraft.server.v1_12_R1.GameProfileSerializer;
import net.minecraft.server.v1_12_R1.NBTTagCompound;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -149,4 +152,9 @@ public ItemStack setAttributeModifiers(ItemStack itemStack, Map<EntityAttribute,
}
return addNbtData(itemStack, "AttributeModifiers", new ListTag(CompoundTag.class, modifierList));
}

@Override
public PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon) {
return new PotionEffect(type, duration, amplifier, ambient, particles, color);
}
}
Expand Up @@ -12,9 +12,12 @@
import net.aufdemrand.denizencore.utilities.CoreUtilities;
import net.minecraft.server.v1_13_R2.GameProfileSerializer;
import net.minecraft.server.v1_13_R2.NBTTagCompound;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -150,4 +153,9 @@ public ItemStack setAttributeModifiers(ItemStack itemStack, Map<EntityAttribute,
}
return addNbtData(itemStack, "AttributeModifiers", new ListTag(CompoundTag.class, modifierList));
}

@Override
public PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon) {
return new PotionEffect(type, duration, amplifier, ambient, particles, icon);
}
}
Expand Up @@ -12,9 +12,12 @@
import net.minecraft.server.v1_8_R3.GameProfileSerializer;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -149,4 +152,9 @@ public ItemStack setAttributeModifiers(ItemStack itemStack, Map<EntityAttribute,
}
return addNbtData(itemStack, "AttributeModifiers", new ListTag(CompoundTag.class, modifierList));
}

@Override
public PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon) {
return new PotionEffect(type, duration, amplifier, ambient, particles);
}
}
Expand Up @@ -12,9 +12,12 @@
import net.minecraft.server.v1_9_R2.GameProfileSerializer;
import net.minecraft.server.v1_9_R2.NBTTagCompound;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -149,4 +152,9 @@ public ItemStack setAttributeModifiers(ItemStack itemStack, Map<EntityAttribute,
}
return addNbtData(itemStack, "AttributeModifiers", new ListTag(CompoundTag.class, modifierList));
}

@Override
public PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon) {
return new PotionEffect(type, duration, amplifier, ambient, particles, color);
}
}

0 comments on commit c233d55

Please sign in to comment.