Skip to content

Commit

Permalink
Add EnderDragon phase to entity_spec()
Browse files Browse the repository at this point in the history
  • Loading branch information
PseudoKnight committed Nov 25, 2016
1 parent 81aad94 commit d3e225d
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 11 deletions.
Expand Up @@ -2,17 +2,18 @@

import com.laytonsmith.abstraction.AbstractionObject;
import com.laytonsmith.abstraction.entities.MCEnderDragon;
import com.laytonsmith.abstraction.enums.MCEnderDragonPhase;
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCEnderDragonPhase;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.Entity;

/**
*
* @author Hekta
*/
public class BukkitMCEnderDragon extends BukkitMCComplexLivingEntity implements MCEnderDragon {

public BukkitMCEnderDragon(Entity dragon) {
super(dragon);
EnderDragon ed;

public BukkitMCEnderDragon(Entity ent) {
super(ent);
ed = (EnderDragon) ent;
}

public BukkitMCEnderDragon(AbstractionObject ao) {
Expand All @@ -21,6 +22,20 @@ public BukkitMCEnderDragon(AbstractionObject ao) {

@Override
public EnderDragon getHandle() {
return (EnderDragon)super.getHandle();
return ed;
}

@Override
public MCEnderDragonPhase getPhase() {
return BukkitMCEnderDragonPhase.getConvertor().getAbstractedEnum(ed.getPhase());
}

@Override
public void setPhase(MCEnderDragonPhase phase) {
try {
ed.setPhase(BukkitMCEnderDragonPhase.getConvertor().getConcreteEnum(phase));
} catch(NoSuchMethodError ex) {
// probably prior to 1.9.2
}
}
}
@@ -1,9 +1,10 @@
package com.laytonsmith.abstraction.entities;

/**
*
* @author Hekta
*/
import com.laytonsmith.abstraction.enums.MCEnderDragonPhase;

public interface MCEnderDragon extends MCComplexLivingEntity {

MCEnderDragonPhase getPhase();
void setPhase(MCEnderDragonPhase phase);

}
@@ -0,0 +1,17 @@
package com.laytonsmith.abstraction.enums;

public enum MCEnderDragonPhase {

BREATH_ATTACK,
CHARGE_PLAYER,
CIRCLING,
DYING,
FLY_TO_PORTAL,
HOVER,
LAND_ON_PORTAL,
LEAVE_PORTAL,
ROAR_BEFORE_ATTACK,
SEARCH_FOR_BREATH_ATTACK_TARGET,
STRAFING

}
@@ -0,0 +1,35 @@

package com.laytonsmith.abstraction.enums.bukkit;

import com.laytonsmith.abstraction.Implementation;
import com.laytonsmith.abstraction.enums.EnumConvertor;
import com.laytonsmith.abstraction.enums.MCEnderDragonPhase;
import com.laytonsmith.abstraction.enums.MCVersion;
import com.laytonsmith.annotations.abstractionenum;
import com.laytonsmith.core.Static;
import org.bukkit.entity.EnderDragon;

@abstractionenum(
implementation=Implementation.Type.BUKKIT,
forAbstractEnum=MCEnderDragonPhase.class,
forConcreteEnum=EnderDragon.Phase.class
)
public class BukkitMCEnderDragonPhase extends EnumConvertor<MCEnderDragonPhase, EnderDragon.Phase> {

private static BukkitMCEnderDragonPhase instance;

public static BukkitMCEnderDragonPhase getConvertor() {
if (instance == null) {
instance = new BukkitMCEnderDragonPhase();
}
return instance;
}

@Override
protected EnderDragon.Phase getConcreteEnumCustom(MCEnderDragonPhase abstracted) {
if(Static.getServer().getMinecraftVersion().lt(MCVersion.MC1_9_X)) {
return null;
}
return super.getConcreteEnumCustom(abstracted);
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/laytonsmith/core/functions/EntityManagement.java
Expand Up @@ -39,6 +39,7 @@
import com.laytonsmith.abstraction.enums.MCArt;
import com.laytonsmith.abstraction.enums.MCBodyPart;
import com.laytonsmith.abstraction.enums.MCDyeColor;
import com.laytonsmith.abstraction.enums.MCEnderDragonPhase;
import com.laytonsmith.abstraction.enums.MCEntityEffect;
import com.laytonsmith.abstraction.enums.MCEntityType;
import com.laytonsmith.abstraction.enums.MCEquipmentSlot;
Expand Down Expand Up @@ -2555,6 +2556,7 @@ public String docs() {
docs = docs.replace("%PROFESSION%", StringUtils.Join(MCProfession.values(), ", ", ", or ", " or "));
docs = docs.replace("%RABBIT_TYPE%", StringUtils.Join(MCRabbitType.values(), ", ", ", or ", " or "));
docs = docs.replace("%PARTICLE%", StringUtils.Join(MCParticle.values(), ", ", ", or ", " or "));
docs = docs.replace("%ENDERDRAGON_PHASE%", StringUtils.Join(MCEnderDragonPhase.values(), ", ", ", or ", " or "));
for (Field field : entity_spec.class.getDeclaredFields()) {
try {
String name = field.getName();
Expand Down Expand Up @@ -2656,6 +2658,12 @@ public Construct exec(Target t, Environment environment, Construct... args) thro
}
}
break;
case ENDER_DRAGON:
MCEnderDragon enderdragon = (MCEnderDragon) entity;
if(Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_9_X)){
specArray.set(entity_spec.KEY_ENDERDRAGON_PHASE, new CString(enderdragon.getPhase().name(), t), t);
}
break;
case ENDERMAN:
MCEnderman enderman = (MCEnderman) entity;
MCMaterialData carried = enderman.getCarriedMaterial();
Expand Down Expand Up @@ -2877,6 +2885,7 @@ public CHVersion since() {
private static final String KEY_DROPPED_ITEM_PICKUPDELAY = "pickupdelay";
private static final String KEY_ENDERCRYSTAL_BASE = "base";
private static final String KEY_ENDERCRYSTAL_BEAMTARGET = "beamtarget";
private static final String KEY_ENDERDRAGON_PHASE = "phase";
private static final String KEY_ENDERMAN_CARRIED = "carried";
private static final String KEY_EXPERIENCE_ORB_AMOUNT = "amount";
private static final String KEY_FALLING_BLOCK_BLOCK = "block";
Expand Down Expand Up @@ -3196,6 +3205,18 @@ public Construct exec(Target t, Environment environment, Construct... args) thro
}
}
break;
case ENDER_DRAGON:
MCEnderDragon enderdragon = (MCEnderDragon) entity;
for (String index : specArray.stringKeySet()) {
switch (index.toLowerCase()) {
case entity_spec.KEY_ENDERDRAGON_PHASE:
enderdragon.setPhase(MCEnderDragonPhase.valueOf(specArray.get(index, t).val().toUpperCase()));
break;
default:
throwException(index, t);
}
}
break;
case ENDERMAN:
MCEnderman enderman = (MCEnderman) entity;
for (String index : specArray.stringKeySet()) {
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/functionDocs/entity_spec
Expand Up @@ -60,6 +60,10 @@ without knowing the rotations on the other axis or of other body parts beforehan
* %KEY_ENDERCRYSTAL_BASE%: If the EnderCrystal base is showing or not.
* %KEY_ENDERCRYSTAL_BEAMTARGET%: The location the EnderCrystal beam is targeting, or null if there's no target.
|-
| ENDER_DRAGON
|
* %KEY_ENDERDRAGON_PHASE%: What AI phase the EnderDragon is in. (can be %ENDERDRAGON_PHASE%)
|-
| ENDERMAN
|
* %KEY_ENDERMAN_CARRIED%: The block that the Enderman is carring.
Expand Down

0 comments on commit d3e225d

Please sign in to comment.