Skip to content

Commit

Permalink
Add dEntity.inventory_contents property, for #1005
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Apr 5, 2015
1 parent db641a3 commit a6654d5
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 15 deletions.
1 change: 1 addition & 0 deletions src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -643,6 +643,7 @@ public void onEnable() {
propertyParser.registerProperty(EntityFirework.class, dEntity.class);
propertyParser.registerProperty(EntityFramed.class, dEntity.class);
propertyParser.registerProperty(EntityInfected.class, dEntity.class);
propertyParser.registerProperty(EntityInventory.class, dEntity.class);
propertyParser.registerProperty(EntityItem.class, dEntity.class);
propertyParser.registerProperty(EntityJumpStrength.class, dEntity.class);
propertyParser.registerProperty(EntityKnockback.class, dEntity.class);
Expand Down
15 changes: 0 additions & 15 deletions src/main/java/net/aufdemrand/denizen/objects/dEntity.java
Expand Up @@ -1477,21 +1477,6 @@ else if (attribute.startsWith("equipment")) {
return new dItem(getLivingEntity().getEquipment().getItemInHand())
.getAttribute(attribute.fulfill(1));

// <--[tag]
// @attribute <e@entity.inventory>
// @returns dInventory
// @group inventory
// @description
// Returns the entity's inventory, if it has one.
// -->
if (attribute.startsWith("inventory")) {
dInventory inventory = getInventory();
if (inventory != null)
return inventory.getAttribute(attribute.fulfill(1));
else
return null;
}


/////////////////////
// LOCATION ATTRIBUTES
Expand Down
@@ -0,0 +1,105 @@
package net.aufdemrand.denizen.objects.properties.entity;

import net.aufdemrand.denizen.objects.dEntity;
import net.aufdemrand.denizen.objects.dInventory;
import net.aufdemrand.denizen.objects.dItem;
import net.aufdemrand.denizen.objects.properties.inventory.InventoryContents;
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 org.bukkit.inventory.InventoryHolder;

public class EntityInventory implements Property {

public static boolean describes(dObject entity) {
return entity instanceof dEntity
&& ((dEntity) entity).getBukkitEntity() instanceof InventoryHolder;
}

public static EntityInventory getFrom(dObject entity) {
if (!describes(entity)) return null;

else return new EntityInventory((dEntity) entity);
}


///////////////////
// Instance Fields and Methods
/////////////

private EntityInventory(dEntity ent) {
entity = ent;
}

dEntity entity;

/////////
// Property Methods
///////

@Override
public String getPropertyString() {
return new InventoryContents(entity.getInventory()).getContents(0).identify();
}

@Override
public String getPropertyId() {
return "inventory_contents";
}


///////////
// dObject Attributes
////////

@Override
public String getAttribute(Attribute attribute) {

if (attribute == null) return "null";

// <--[tag]
// @attribute <e@entity.inventory>
// @returns dInventory
// @group inventory
// @description
// Returns the entity's inventory, if it has one.
// -->
if (attribute.startsWith("inventory")) {
dInventory inventory = entity.getInventory();
if (inventory != null)
return inventory.getAttribute(attribute.fulfill(1));
else
return null;
}


return null;
}

@Override
public void adjust(Mechanism mechanism) {

// <--[mechanism]
// @object dEntity
// @name inventory_contents
// @input dList(dItem)
// @description
// Clears the entity's inventory and sets it's item list to match the input.
// @tags
// <e@entity.inventory>
// <in@inventory.list_contents>
// -->
if (mechanism.matches("inventory_contents")) {
dList list = dList.valueOf(mechanism.getValue().asString());
dInventory inv = entity.getInventory();
inv.clear();
int i = 0;
for (String str: list) {
inv.setSlots(i, dItem.valueOf(str).getItemStack());
i++;
}
}
}
}

0 comments on commit a6654d5

Please sign in to comment.