Skip to content

Commit

Permalink
add entity shulker_peek property
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Dec 23, 2020
1 parent 9e968d4 commit 01f71dc
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 0 deletions.
Expand Up @@ -466,4 +466,12 @@ public List<Player> getPlayersThatSee(Entity entity) {
public void setTicksLived(Entity entity, int ticks) {
entity.setTicksLived(ticks);
}

public int getShulkerPeek(Entity entity) {
throw new UnsupportedOperationException();
}

public void setShulkerPeek(Entity entity, int peek) {
throw new UnsupportedOperationException();
}
}
Expand Up @@ -83,6 +83,9 @@ public static void registermainProperties() {
PropertyParser.registerProperty(EntityRotation.class, EntityTag.class);
PropertyParser.registerProperty(EntityScoreboardTags.class, EntityTag.class);
PropertyParser.registerProperty(EntitySmall.class, EntityTag.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_16)) {
PropertyParser.registerProperty(EntityShulkerPeek.class, EntityTag.class);
}
PropertyParser.registerProperty(EntitySilent.class, EntityTag.class);
PropertyParser.registerProperty(EntitySitting.class, EntityTag.class);
PropertyParser.registerProperty(EntitySize.class, EntityTag.class);
Expand Down
@@ -0,0 +1,92 @@
package com.denizenscript.denizen.objects.properties.entity;

import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.tags.Attribute;
import org.bukkit.entity.Shulker;

public class EntityShulkerPeek implements Property {

public static boolean describes(ObjectTag entity) {
return entity instanceof EntityTag &&
((EntityTag) entity).getBukkitEntity() instanceof Shulker;
}

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

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

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

private EntityShulkerPeek(EntityTag ent) {
entity = ent;
}

EntityTag entity;

@Override
public String getPropertyString() {
return String.valueOf(NMSHandler.getEntityHelper().getShulkerPeek(entity.getBukkitEntity()));
}

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

@Override
public ObjectTag getObjectAttribute(Attribute attribute) {

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

// <--[tag]
// @attribute <EntityTag.shulker_peek>
// @returns ElementTag(Number)
// @mechanism EntityTag.shulker_peek
// @group properties
// @description
// Returns the peek value of a shulker box (where 0 is fully closed, 100 is fully open).
// -->
if (attribute.startsWith("shulker_peek")) {
return new ElementTag(NMSHandler.getEntityHelper().getShulkerPeek(entity.getBukkitEntity()))
.getObjectAttribute(attribute.fulfill(1));
}

return null;
}

@Override
public void adjust(Mechanism mechanism) {

// <--[mechanism]
// @object EntityTag
// @name shulker_peek
// @input ElementTag(Number)
// @description
// Sets the peek value of a shulker box (where 0 is fully closed, 100 is fully open).
// @tags
// <EntityTag.shulker_peek>
// -->
if (mechanism.matches("shulker_peek") && mechanism.requireInteger()) {
NMSHandler.getEntityHelper().setShulkerPeek(entity.getBukkitEntity(), mechanism.getValue().asInt());
}
}
}

Expand Up @@ -620,4 +620,14 @@ public void setTicksLived(Entity entity, int ticks) {
((CraftFallingBlock) entity).getHandle().ticksLived = ticks;
}
}

@Override
public int getShulkerPeek(Entity entity) {
return ((CraftShulker) entity).getHandle().eN();
}

@Override
public void setShulkerPeek(Entity entity, int peek) {
((CraftShulker) entity).getHandle().a(peek);
}
}

0 comments on commit 01f71dc

Please sign in to comment.