Skip to content

Commit

Permalink
Probably fix iconcrack/blockcrack/blockdust in PlayEffect command
Browse files Browse the repository at this point in the history
  • Loading branch information
Morphan1 committed Oct 25, 2018
1 parent 1028341 commit 06ad6ad
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 77 deletions.
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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,
Expand Down Expand Up @@ -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()));
}
Expand Down Expand Up @@ -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!");
}

Expand All @@ -210,9 +203,9 @@ public void execute(ScriptEntry scriptEntry) throws CommandExecutionException {
List<dPlayer> targets = (List<dPlayer>) 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");
Expand All @@ -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() +
Expand Down Expand Up @@ -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);
}
}
}
}
}
Expand Down
Expand Up @@ -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 {
Expand All @@ -20,7 +23,13 @@ public void playFor(Player player, Location location, int count, Vector offset,

@Override
public <T> 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
Expand Down
Expand Up @@ -34,9 +34,12 @@ public <T> 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
Expand Down

0 comments on commit 06ad6ad

Please sign in to comment.