Skip to content

Commit

Permalink
entity item_in_hand properties
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Apr 25, 2021
1 parent 9e160f7 commit f485009
Show file tree
Hide file tree
Showing 5 changed files with 212 additions and 54 deletions.
Expand Up @@ -363,7 +363,7 @@ else if (javaVersion.startsWith("9") || javaVersion.startsWith("1.9") || javaVer
}
try {
// Initialize all properties
PropertyRegistry.registermainProperties();
PropertyRegistry.registerMainProperties();
}
catch (Exception e) {
Debug.echoError(e);
Expand Down
Expand Up @@ -1306,30 +1306,6 @@ else if (object.getBukkitEntityType() == EntityType.PIG) {
return null;
});

// <--[tag]
// @attribute <EntityTag.item_in_hand>
// @returns ItemTag
// @mechanism EntityTag.item_in_hand
// @group inventory
// @description
// Returns the item the entity is holding, or air if none.
// -->
registerSpawnedOnlyTag("item_in_hand", (attribute, object) -> {
return new ItemTag(object.getLivingEntity().getEquipment().getItemInMainHand());
}, "iteminhand");

// <--[tag]
// @attribute <EntityTag.item_in_offhand>
// @returns ItemTag
// @mechanism EntityTag.item_in_offhand
// @group inventory
// @description
// Returns the item the entity is holding in their off hand, or air if none.
// -->
registerSpawnedOnlyTag("item_in_offhand", (attribute, object) -> {
return new ItemTag(object.getLivingEntity().getEquipment().getItemInOffHand());
}, "iteminoffhand");

// <--[tag]
// @attribute <EntityTag.is_trading>
// @returns ElementTag(Boolean)
Expand Down Expand Up @@ -2626,34 +2602,6 @@ public void adjust(Mechanism mechanism) {
return;
}

// <--[mechanism]
// @object EntityTag
// @name item_in_hand
// @input ItemTag
// @description
// Sets the item in the entity's hand.
// The entity must be living.
// @tags
// <EntityTag.item_in_hand>
// -->
if (mechanism.matches("item_in_hand")) {
getLivingEntity().getEquipment().setItemInMainHand(mechanism.valueAsType(ItemTag.class).getItemStack());
}

// <--[mechanism]
// @object EntityTag
// @name item_in_offhand
// @input ItemTag
// @description
// Sets the item in the entity's offhand.
// The entity must be living.
// @tags
// <EntityTag.item_in_offhand>
// -->
if (mechanism.matches("item_in_offhand")) {
getLivingEntity().getEquipment().setItemInOffHand(mechanism.valueAsType(ItemTag.class).getItemStack());
}

if (mechanism.matches("attach_to")) {
Deprecations.attachToMech.warn(mechanism.context);
if (mechanism.hasValue()) {
Expand Down
Expand Up @@ -20,7 +20,7 @@

public class PropertyRegistry {

public static void registermainProperties() {
public static void registerMainProperties() {
// register properties that add Bukkit code to core objects
PropertyParser.registerProperty(BukkitScriptProperties.class, ScriptTag.class);
PropertyParser.registerProperty(BukkitQueueProperties.class, QueueTag.class);
Expand Down Expand Up @@ -83,6 +83,8 @@ public static void registermainProperties() {
PropertyParser.registerProperty(EntityInventory.class, EntityTag.class);
PropertyParser.registerProperty(EntityIsShowingBottom.class, EntityTag.class);
PropertyParser.registerProperty(EntityItem.class, EntityTag.class);
PropertyParser.registerProperty(EntityItemInHand.class, EntityTag.class);
PropertyParser.registerProperty(EntityItemInOffHand.class, EntityTag.class);
PropertyParser.registerProperty(EntityJumpStrength.class, EntityTag.class);
PropertyParser.registerProperty(EntityKnockback.class, EntityTag.class);
PropertyParser.registerProperty(EntityMarker.class, EntityTag.class);
Expand Down
@@ -0,0 +1,104 @@
package com.denizenscript.denizen.objects.properties.entity;

import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.tags.Attribute;
import org.bukkit.Material;

public class EntityItemInHand implements Property {

public static boolean describes(ObjectTag entity) {
if (!(entity instanceof EntityTag)) {
return false;
}
if (!((EntityTag) entity).isLivingEntity()) {
return false;
}
return true;
}

public static EntityItemInHand getFrom(ObjectTag entity) {
if (!describes(entity)) {
return null;
}
else {
return new EntityItemInHand((EntityTag) entity);
}
}

public static final String[] handledTags = new String[] {
"item_in_hand"
};

public static final String[] handledMechs = new String[] {
"item_in_hand"
};

private EntityItemInHand(EntityTag entity) {
this.entity = entity;
}

EntityTag entity;

@Override
public String getPropertyString() {
ItemTag item = new ItemTag(entity.getLivingEntity().getEquipment().getItemInMainHand());
if (item.getBukkitMaterial() != Material.AIR) {
return item.identify();
}
else {
return null;
}
}

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

@Override
public ObjectTag getObjectAttribute(Attribute attribute) {

if (attribute == null) {
return null;
}

// <--[tag]
// @attribute <EntityTag.item_in_hand>
// @returns ItemTag
// @mechanism EntityTag.item_in_hand
// @group inventory
// @description
// Returns the item the entity is holding, or air if none.
// -->
if (attribute.startsWith("item_in_hand")) {
if (!entity.isSpawnedOrValidForTag()) {
return null;
}
return new ItemTag(entity.getLivingEntity().getEquipment().getItemInMainHand()).getObjectAttribute(attribute.fulfill(1));
}

return null;
}

@Override
public void adjust(Mechanism mechanism) {

// <--[mechanism]
// @object EntityTag
// @name item_in_hand
// @input ItemTag
// @description
// Sets the item in the entity's hand.
// The entity must be living.
// @tags
// <EntityTag.item_in_hand>
// -->
if (mechanism.matches("item_in_hand")) {
entity.getLivingEntity().getEquipment().setItemInMainHand(mechanism.valueAsType(ItemTag.class).getItemStack());
}
}
}
@@ -0,0 +1,104 @@
package com.denizenscript.denizen.objects.properties.entity;

import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.tags.Attribute;
import org.bukkit.Material;

public class EntityItemInOffHand implements Property {

public static boolean describes(ObjectTag entity) {
if (!(entity instanceof EntityTag)) {
return false;
}
if (!((EntityTag) entity).isLivingEntity()) {
return false;
}
return true;
}

public static EntityItemInOffHand getFrom(ObjectTag entity) {
if (!describes(entity)) {
return null;
}
else {
return new EntityItemInOffHand((EntityTag) entity);
}
}

public static final String[] handledTags = new String[] {
"item_in_offhand"
};

public static final String[] handledMechs = new String[] {
"item_in_offhand"
};

private EntityItemInOffHand(EntityTag entity) {
this.entity = entity;
}

EntityTag entity;

@Override
public String getPropertyString() {
ItemTag item = new ItemTag(entity.getLivingEntity().getEquipment().getItemInOffHand());
if (item.getBukkitMaterial() != Material.AIR) {
return item.identify();
}
else {
return null;
}
}

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

@Override
public ObjectTag getObjectAttribute(Attribute attribute) {

if (attribute == null) {
return null;
}

// <--[tag]
// @attribute <EntityTag.item_in_offhand>
// @returns ItemTag
// @mechanism EntityTag.item_in_offhand
// @group inventory
// @description
// Returns the item the entity is holding in their off hand, or air if none.
// -->
if (attribute.startsWith("item_in_offhand")) {
if (!entity.isSpawnedOrValidForTag()) {
return null;
}
return new ItemTag(entity.getLivingEntity().getEquipment().getItemInOffHand()).getObjectAttribute(attribute.fulfill(1));
}

return null;
}

@Override
public void adjust(Mechanism mechanism) {

// <--[mechanism]
// @object EntityTag
// @name item_in_offhand
// @input ItemTag
// @description
// Sets the item in the entity's offhand.
// The entity must be living.
// @tags
// <EntityTag.item_in_offhand>
// -->
if (mechanism.matches("item_in_offhand")) {
entity.getLivingEntity().getEquipment().setItemInOffHand(mechanism.valueAsType(ItemTag.class).getItemStack());
}
}
}

0 comments on commit f485009

Please sign in to comment.