From e77cdcad00f2cec9dd7740fff153dd52b288386b Mon Sep 17 00:00:00 2001 From: Morphan1 Date: Tue, 23 Jun 2015 23:52:48 -0400 Subject: [PATCH] Parse item mech for dropped_item and item_projectile entities early --- .../denizen/utilities/Conversion.java | 2 +- .../utilities/entity/CraftItemProjectile.java | 12 ++++++++++- .../utilities/entity/DenizenEntityType.java | 21 ++++++++++++++----- .../entity/EntityItemProjectile.java | 7 +++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/utilities/Conversion.java b/src/main/java/net/aufdemrand/denizen/utilities/Conversion.java index 0ebf4e8c63..41ddaa13f8 100644 --- a/src/main/java/net/aufdemrand/denizen/utilities/Conversion.java +++ b/src/main/java/net/aufdemrand/denizen/utilities/Conversion.java @@ -81,7 +81,7 @@ public static dInventory getInventory(Argument arg, ScriptEntry scriptEntry) { if (dInventory.matches(string)) { BukkitScriptEntryData data = (BukkitScriptEntryData) scriptEntry.getData(); if (data != null) - return dInventory.valueOf(string, ((BukkitScriptEntryData) scriptEntry.getData()).getTagContext()); + return dInventory.valueOf(string, data.getTagContext()); else return dInventory.valueOf(string); } diff --git a/src/main/java/net/aufdemrand/denizen/utilities/entity/CraftItemProjectile.java b/src/main/java/net/aufdemrand/denizen/utilities/entity/CraftItemProjectile.java index c53ed623a4..42b1b6f98a 100644 --- a/src/main/java/net/aufdemrand/denizen/utilities/entity/CraftItemProjectile.java +++ b/src/main/java/net/aufdemrand/denizen/utilities/entity/CraftItemProjectile.java @@ -1,13 +1,16 @@ package net.aufdemrand.denizen.utilities.entity; +import net.aufdemrand.denizen.objects.dItem; import net.aufdemrand.denizencore.objects.Mechanism; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.craftbukkit.v1_8_R3.CraftServer; import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftItem; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftLivingEntity; import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.ItemStack; import org.bukkit.projectiles.ProjectileSource; import java.util.ArrayList; @@ -23,7 +26,14 @@ public CraftItemProjectile(CraftServer server, EntityItemProjectile entity) { @CreateEntity public static ItemProjectile createItemProjectile(Location location, ArrayList mechanisms) { CraftWorld world = (CraftWorld) location.getWorld(); - EntityItemProjectile entity = new EntityItemProjectile(world, location); + ItemStack itemStack = new ItemStack(Material.STONE); + for (Mechanism mechanism : mechanisms) { + if (mechanism.matches("item") && mechanism.requireObject(dItem.class)) { + itemStack = mechanism.getValue().asType(dItem.class).getItemStack(); + break; + } + } + EntityItemProjectile entity = new EntityItemProjectile(world, location, itemStack); return (ItemProjectile) entity.getBukkitEntity(); } diff --git a/src/main/java/net/aufdemrand/denizen/utilities/entity/DenizenEntityType.java b/src/main/java/net/aufdemrand/denizen/utilities/entity/DenizenEntityType.java index d8422d272c..847ad177c8 100644 --- a/src/main/java/net/aufdemrand/denizen/utilities/entity/DenizenEntityType.java +++ b/src/main/java/net/aufdemrand/denizen/utilities/entity/DenizenEntityType.java @@ -1,5 +1,6 @@ package net.aufdemrand.denizen.utilities.entity; +import net.aufdemrand.denizen.objects.dItem; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizencore.objects.Mechanism; import org.bukkit.Location; @@ -36,7 +37,7 @@ private DenizenEntityType(EntityType entityType) { this.createMethod = null; } - private DenizenEntityType(String name, Class entityType) { + private DenizenEntityType(String name, Class entityType) { this(name, entityType, 0.115); } @@ -69,12 +70,22 @@ private DenizenEntityType(String name, Class enti public Entity spawnNewEntity(Location location, ArrayList mechanisms) { try { - if (name.equals("DROPPED_ITEM")) - return location.getWorld().dropItem(location, new ItemStack(Material.STONE)); - else if (!isCustom()) + if (name.equals("DROPPED_ITEM")) { + ItemStack itemStack = new ItemStack(Material.STONE); + for (Mechanism mechanism : mechanisms) { + if (mechanism.matches("item") && mechanism.requireObject(dItem.class)) { + itemStack = mechanism.getValue().asType(dItem.class).getItemStack(); + break; + } + } + return location.getWorld().dropItem(location, itemStack); + } + else if (!isCustom()) { return location.getWorld().spawnEntity(location, bukkitEntityType); - else + } + else { return (Entity) createMethod.invoke(null, location, mechanisms); + } } catch (Exception e) { dB.echoError(e); } diff --git a/src/main/java/net/aufdemrand/denizen/utilities/entity/EntityItemProjectile.java b/src/main/java/net/aufdemrand/denizen/utilities/entity/EntityItemProjectile.java index e97fef5a35..5f6efc387f 100644 --- a/src/main/java/net/aufdemrand/denizen/utilities/entity/EntityItemProjectile.java +++ b/src/main/java/net/aufdemrand/denizen/utilities/entity/EntityItemProjectile.java @@ -6,6 +6,8 @@ import org.bukkit.craftbukkit.v1_8_R3.CraftServer; import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; +import org.bukkit.inventory.*; import java.util.List; @@ -15,11 +17,12 @@ public class EntityItemProjectile extends EntityItem implements IProjectile { public String shooterName; private int age; - public EntityItemProjectile(CraftWorld craftWorld, Location location) { + public EntityItemProjectile(CraftWorld craftWorld, Location location, org.bukkit.inventory.ItemStack itemStack) { super(craftWorld.getHandle()); this.pickupDelay = Integer.MAX_VALUE; setPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); - //this.a(0.25F, 0.25F); // TODO: 1.8.3 update + this.setSize(0.25F, 0.25F); + this.setItemStack(CraftItemStack.asNMSCopy(itemStack)); world.addEntity(this); bukkitEntity = new CraftItemProjectile((CraftServer) Bukkit.getServer(), this); }