diff --git a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java index 53dd15ad9e..0abcfd1496 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java @@ -5,7 +5,9 @@ import net.aufdemrand.denizen.nms.abstracts.ParticleHelper; import net.aufdemrand.denizen.nms.interfaces.Effect; import net.aufdemrand.denizen.nms.interfaces.Particle; +import net.aufdemrand.denizen.objects.dItem; import net.aufdemrand.denizen.objects.dLocation; +import net.aufdemrand.denizen.objects.dMaterial; import net.aufdemrand.denizen.objects.dPlayer; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizencore.exceptions.CommandExecutionException; @@ -17,6 +19,8 @@ import net.aufdemrand.denizencore.scripts.commands.AbstractCommand; import net.aufdemrand.denizencore.utilities.CoreUtilities; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.material.MaterialData; import java.util.ArrayList; import java.util.Arrays; @@ -30,9 +34,9 @@ // All of the effects listed here can be used by <@link command PlayEffect> to display visual effects or play sounds // // Effects: -// - iconcrack_[id],[data] (item break effect - examples: iconcrack_7, iconcrack_17,3) -// - blockcrack_[id] (block break effect) -// - blockdust_[id] (block break effect) +// - iconcrack_[item] (item break effect - examples: iconcrack_stone, iconcrack_grass) +// - blockcrack_[material] (block break effect - examples: blockcrack_stone, blockcrack_grass) +// - blockdust_[material] (block break effect - examples: blockdust_stone, blockdust_grass) // - ANVIL_BREAK, ANVIL_LAND, ANVIL_USE, BARRIER, BAT_TAKEOFF, BLAZE_SHOOT, BOW_FIRE, BREWING_STAND_BREW, // CHORUS_FLOWER_DEATH, CHORUS_FLOWER_GROW, CLICK1, CLICK2, CLOUD, COLOURED_DUST, CRIT, CRIT_MAGIC, DAMAGE_INDICATOR, // DOOR_CLOSE, DOOR_TOGGLE, DRAGON_BREATH, DRIP_LAVA, DRIP_WATER, ENCHANTMENT_TABLE, END_GATEWAY_SPAWN, END_ROD, @@ -90,50 +94,37 @@ else if (arg.matches("random")) { scriptEntry.addObject("effect", visual.get(CoreUtilities.getRandom().nextInt(visual.size()))); } } - // TODO: 1.13 - these systems have changed - // else if (arg.startsWith("iconcrack_")) { - // // Allow iconcrack_[id],[data] for item break effects (ex: iconcrack_1) - // String shrunk = arg.getValue().substring("iconcrack_".length()); - // String[] split = shrunk.split(","); - // Element typeId = new Element(split[0]); - // if (typeId.isInt() && typeId.asInt() > 0 && Material.getMaterial(typeId.asInt()) != null) { - // scriptEntry.addObject("iconcrack", typeId); - // } - // else { - // dB.echoError("Invalid iconcrack_[id]. Must be a valid Material ID, besides 0."); - // } - // Element dataId = new Element(split.length <= 1 ? "0" : split[1]); - // scriptEntry.addObject("iconcrack_data", dataId); - // scriptEntry.addObject("iconcrack_type", new Element("iconcrack")); - // } - // else if (arg.startsWith("blockcrack_")) { - // String shrunk = arg.getValue().substring("blockcrack_".length()); - // String[] split = shrunk.split(","); - // Element typeId = new Element(split[0]); - // if (typeId.isInt() && typeId.asInt() > 0 && Material.getMaterial(typeId.asInt()) != null) { - // scriptEntry.addObject("iconcrack", typeId); - // } - // else { - // dB.echoError("Invalid blockcrack_[id]. Must be a valid Material ID, besides 0."); - // } - // Element dataId = new Element(split.length <= 1 ? "0" : split[1]); - // scriptEntry.addObject("iconcrack_data", dataId); - // scriptEntry.addObject("iconcrack_type", new Element("blockcrack")); - // } - // else if (arg.startsWith("blockdust_")) { - // String shrunk = arg.getValue().substring("blockdust_".length()); - // String[] split = shrunk.split(","); - // Element typeId = new Element(split[0]); - // if (typeId.isInt() && typeId.asInt() > 0 && Material.getMaterial(typeId.asInt()) != null) { - // scriptEntry.addObject("iconcrack", typeId); - // } - // else { - // dB.echoError("Invalid blockdust_[id]. Must be a valid Material ID, besides 0."); - // } - // Element dataId = new Element(split.length <= 1 ? "0" : split[1]); - // scriptEntry.addObject("iconcrack_data", dataId); - // scriptEntry.addObject("iconcrack_type", new Element("blockdust")); - // } + else if (arg.startsWith("iconcrack_")) { + // Allow iconcrack_[item] for item break effects (ex: iconcrack_stone) + String shrunk = arg.getValue().substring("iconcrack_".length()); + dItem item = dItem.valueOf(shrunk); + if (item != null) { + scriptEntry.addObject("iconcrack", item); + } + else { + dB.echoError("Invalid iconcrack_[item]. Must be a valid dItem!"); + } + } + else if (arg.startsWith("blockcrack_")) { + String shrunk = arg.getValue().substring("blockcrack_".length()); + dMaterial material = dMaterial.valueOf(shrunk); + if (material != null) { + scriptEntry.addObject("blockcrack", material); + } + else { + dB.echoError("Invalid blockcrack_[item]. Must be a valid dMaterial!"); + } + } + else if (arg.startsWith("blockdust_")) { + String shrunk = arg.getValue().substring("blockdust_".length()); + dMaterial material = dMaterial.valueOf(shrunk); + if (material != null) { + scriptEntry.addObject("blockdust", material); + } + else { + dB.echoError("Invalid blockdust_[item]. Must be a valid dMaterial!"); + } + } else if (particleHelper.hasEffect(arg.getValue())) { scriptEntry.addObject("effect", particleHelper.getEffect(arg.getValue())); } @@ -193,7 +184,9 @@ else if (!scriptEntry.hasObject("targets") if (!scriptEntry.hasObject("effect") && !scriptEntry.hasObject("particleeffect") && - !scriptEntry.hasObject("iconcrack")) { + !scriptEntry.hasObject("iconcrack") && + !scriptEntry.hasObject("blockcrack") && + !scriptEntry.hasObject("blockdust")) { throw new InvalidArgumentsException("Missing effect argument!"); } @@ -210,9 +203,9 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { List targets = (List) scriptEntry.getObject("targets"); Effect effect = (Effect) scriptEntry.getObject("effect"); Particle particleEffect = (Particle) scriptEntry.getObject("particleeffect"); - Element iconcrack = scriptEntry.getElement("iconcrack"); - Element iconcrack_data = scriptEntry.getElement("iconcrack_data"); - Element iconcrack_type = scriptEntry.getElement("iconcrack_type"); + dItem iconcrack = scriptEntry.getdObject("iconcrack"); + dMaterial blockcrack = scriptEntry.getdObject("blockcrack"); + dMaterial blockdust = scriptEntry.getdObject("blockdust"); Element radius = scriptEntry.getElement("radius"); Element data = scriptEntry.getElement("data"); Element qty = scriptEntry.getElement("qty"); @@ -224,7 +217,9 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { if (scriptEntry.dbCallShouldDebug()) { dB.report(scriptEntry, getName(), (effect != null ? aH.debugObj("effect", effect.getName()) : particleEffect != null ? aH.debugObj("special effect", particleEffect.getName()) : - iconcrack_type.debug() + iconcrack.debug() + (iconcrack_data != null ? iconcrack_data.debug() : "")) + + (iconcrack != null ? iconcrack.debug() + : blockcrack != null ? blockcrack.debug() + : blockdust.debug())) + aH.debugObj("locations", locations.toString()) + (targets != null ? aH.debugObj("targets", targets.toString()) : "") + radius.debug() + @@ -300,29 +295,28 @@ else if (particleEffect != null) { } } } - // TODO: better this all - // TODO: 1.13 - these systems have changed - // if (iconcrack_type.asString().equalsIgnoreCase("iconcrack")) { - // ItemStack itemStack = new ItemStack(iconcrack.asInt(), 1, (short) (iconcrack_data != null ? iconcrack_data.asInt() : 0)); - // Particle particle = NMSHandler.getInstance().getParticleHelper().getParticle("ITEM_CRACK"); - // for (Player player : players) { - // particle.playFor(player, location, qty.asInt(), offset.toVector(), data.asFloat(), itemStack); - // } - // } - // else if (iconcrack_type.asString().equalsIgnoreCase("blockcrack")) { - // MaterialData materialData = new MaterialData(iconcrack.asInt(), (byte) (iconcrack_data != null ? iconcrack_data.asInt() : 0)); - // Particle particle = NMSHandler.getInstance().getParticleHelper().getParticle("BLOCK_CRACK"); - // for (Player player : players) { - // particle.playFor(player, location, qty.asInt(), offset.toVector(), data.asFloat(), materialData); - // } - // } - // else { // blockdust - // MaterialData materialData = new MaterialData(iconcrack.asInt(), (byte) (iconcrack_data != null ? iconcrack_data.asInt() : 0)); - // Particle particle = NMSHandler.getInstance().getParticleHelper().getParticle("BLOCK_DUST"); - // for (Player player : players) { - // particle.playFor(player, location, qty.asInt(), offset.toVector(), data.asFloat(), materialData); - // } - // } + + if (iconcrack != null) { + ItemStack itemStack = iconcrack.getItemStack(); + Particle particle = NMSHandler.getInstance().getParticleHelper().getParticle("ITEM_CRACK"); + for (Player player : players) { + particle.playFor(player, location, qty.asInt(), offset.toVector(), data.asFloat(), itemStack); + } + } + else if (blockcrack != null) { + MaterialData materialData = blockcrack.getMaterialData(); + Particle particle = NMSHandler.getInstance().getParticleHelper().getParticle("BLOCK_CRACK"); + for (Player player : players) { + particle.playFor(player, location, qty.asInt(), offset.toVector(), data.asFloat(), materialData); + } + } + else { // blockdust + MaterialData materialData = blockdust.getMaterialData(); + Particle particle = NMSHandler.getInstance().getParticleHelper().getParticle("BLOCK_DUST"); + for (Player player : players) { + particle.playFor(player, location, qty.asInt(), offset.toVector(), data.asFloat(), materialData); + } + } } } } diff --git a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_13_R2.java b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_13_R2.java index 06a41846e8..215dd57730 100644 --- a/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_13_R2.java +++ b/v1_13_R2/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_13_R2.java @@ -2,7 +2,10 @@ import net.aufdemrand.denizen.nms.interfaces.Particle; import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_13_R2.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v1_13_R2.util.CraftMagicNumbers; import org.bukkit.entity.Player; +import org.bukkit.material.MaterialData; import org.bukkit.util.Vector; public class Particle_v1_13_R2 implements Particle { @@ -20,7 +23,13 @@ public void playFor(Player player, Location location, int count, Vector offset, @Override public void playFor(Player player, Location location, int count, Vector offset, double extra, T data) { - player.spawnParticle(particle, location, count, offset.getX(), offset.getY(), offset.getZ(), extra, data); + if (data instanceof MaterialData) { + player.spawnParticle(particle, location, count, offset.getX(), offset.getY(), offset.getZ(), extra, + CraftBlockData.fromData(CraftMagicNumbers.getBlock((MaterialData) data))); + } + else { + player.spawnParticle(particle, location, count, offset.getX(), offset.getY(), offset.getZ(), extra, data); + } } @Override diff --git a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_8_R3.java b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_8_R3.java index 6a595b6d5e..2aa591191b 100644 --- a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_8_R3.java +++ b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/impl/effects/Particle_v1_8_R3.java @@ -34,9 +34,12 @@ public void playFor(Player player, Location location, int count, Vector offs else if (data instanceof MaterialData) { dataArray = new int[]{((MaterialData) data).getItemTypeId() + (((MaterialData) data).getData() << 12)}; } + else { + dataArray = new int[0]; + } PacketHelper_v1_8_R3.sendPacket(player, new PacketPlayOutWorldParticles(particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), - (float) offset.getX(), (float) offset.getY(), (float) offset.getZ(), (float) extra, count)); + (float) offset.getX(), (float) offset.getY(), (float) offset.getZ(), (float) extra, count, dataArray)); } @Override