From 4659794d64da9721db6c583e46176f7794ceba94 Mon Sep 17 00:00:00 2001 From: ExpensiveLadder <68307915+ExpensiveLadder@users.noreply.github.com> Date: Thu, 24 Sep 2020 20:11:37 +1200 Subject: [PATCH] add IEntityArrow and IEntityThrowable --- .../java/crafttweaker/api/entity/IEntity.java | 15 ++- .../crafttweaker/api/entity/IEntityArrow.java | 58 +++++++++++ .../api/entity/IEntityThrowable.java | 16 +++ .../crafttweaker/api/entity/IProjectile.java | 12 +++ .../api/event/ProjectileImpactArrowEvent.java | 3 +- .../event/ProjectileImpactThrowableEvent.java | 4 +- .../java/crafttweaker/api/world/IWorld.java | 3 + .../api/minecraft/CraftTweakerMC.java | 9 ++ .../crafttweaker/mc1120/entity/MCEntity.java | 6 ++ .../mc1120/entity/MCEntityArrow.java | 98 +++++++++++++++++++ .../mc1120/entity/MCEntityThrowable.java | 34 +++++++ .../MCProjectileImpactArrowEvent.java | 3 +- .../MCProjectileImpactThrowableEvent.java | 5 +- .../crafttweaker/mc1120/world/MCWorld.java | 7 +- 14 files changed, 258 insertions(+), 15 deletions(-) create mode 100644 CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityArrow.java create mode 100644 CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityThrowable.java create mode 100644 CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IProjectile.java create mode 100644 CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityArrow.java create mode 100644 CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityThrowable.java diff --git a/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntity.java b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntity.java index 775525487..e8bd06809 100644 --- a/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntity.java +++ b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntity.java @@ -504,13 +504,12 @@ default void update(IData data){ CraftTweakerAPI.logError("IEntity#update not overwritten by implementation " + this.getClass() + "!"); } - @ZenMethod - default boolean onGround(){ - return false; - } + @ZenGetter + boolean onGround(); - @ZenMethod - default boolean isLightningbolt(){ - return false; - } + @ZenGetter + boolean isLightningbolt(); + + @ZenGetter + boolean isArmorstand(); } diff --git a/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityArrow.java b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityArrow.java new file mode 100644 index 000000000..ed98d61e6 --- /dev/null +++ b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityArrow.java @@ -0,0 +1,58 @@ +package crafttweaker.api.entity; + +import crafttweaker.annotations.ZenRegister; +import stanhebben.zenscript.annotations.*; + +@ZenClass("crafttweaker.entity.IEntityArrow") +@ZenRegister +public interface IEntityArrow extends IEntity { + + @ZenMethod + @ZenSetter("damage") + IEntityArrow setDamage(double damage); + + @ZenMethod + @ZenGetter("damage") + double getDamage(); + + @ZenMethod + @ZenSetter("critical") + IEntityArrow setIsCritical(boolean critical); + + @ZenMethod + @ZenGetter("critical") + boolean getIsCritical(); + + @ZenMethod + @ZenSetter("knockbackStrength") + IEntityArrow setKnockbackStrength(int knockbackStrength); + + @ZenMethod + @ZenGetter("shake") + int arrowShake(); + + @ZenMethod + @ZenSetter("shooter") + IEntityArrow setShooter(IEntity shooter); + + @ZenMethod + @ZenGetter("shooter") + IEntity getShooter(); + + @ZenMethod + @ZenGetter("pickupStatus") + String getPickupStatus(); + + @ZenMethod + @ZenSetter("pickupStatus") + IEntityArrow setPickupStatus(String pickupStatus); + + @ZenMethod + IEntityArrow setPickupDisallowed(); + + @ZenMethod + IEntityArrow setPickupAllowed(); + + @ZenMethod + IEntityArrow setPickupCreativeOnly(); +} \ No newline at end of file diff --git a/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityThrowable.java b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityThrowable.java new file mode 100644 index 000000000..0067012f5 --- /dev/null +++ b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IEntityThrowable.java @@ -0,0 +1,16 @@ +package crafttweaker.api.entity; + +import crafttweaker.annotations.ZenRegister; +import stanhebben.zenscript.annotations.*; + +@ZenClass("crafttweaker.entity.IEntityThrowable") +@ZenRegister +public interface IEntityThrowable extends IEntity { + + @ZenGetter("thrower") + IEntityLivingBase getThrower(); + + @ZenMethod + @ZenGetter("shake") + int throwableShake(); +} \ No newline at end of file diff --git a/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IProjectile.java b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IProjectile.java new file mode 100644 index 000000000..7e34d2d5f --- /dev/null +++ b/CraftTweaker2-API/src/main/java/crafttweaker/api/entity/IProjectile.java @@ -0,0 +1,12 @@ +package crafttweaker.api.entity; + +import crafttweaker.annotations.ZenRegister; +import stanhebben.zenscript.annotations.*; + +@ZenClass("crafttweaker.entity.IProjectile") +@ZenRegister +public interface IProjectile { + + @ZenMethod + void shoot(double x, double y, double z, float velocity, float inaccuracy); +} \ No newline at end of file diff --git a/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactArrowEvent.java b/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactArrowEvent.java index c06329304..437e3f65c 100644 --- a/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactArrowEvent.java +++ b/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactArrowEvent.java @@ -2,6 +2,7 @@ import crafttweaker.annotations.ZenRegister; import crafttweaker.api.entity.IEntity; +import crafttweaker.api.entity.IEntityArrow; import stanhebben.zenscript.annotations.ZenClass; import stanhebben.zenscript.annotations.ZenGetter; import stanhebben.zenscript.annotations.ZenMethod; @@ -11,7 +12,7 @@ @ZenRegister public interface ProjectileImpactArrowEvent extends IProjectileImpactEvent, IEventCancelable { @ZenGetter("arrow") - IEntity getArrow(); + IEntityArrow getArrow(); @ZenGetter("shooter") IEntity getShooter(); diff --git a/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactThrowableEvent.java b/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactThrowableEvent.java index ff89b92ab..54bcfa738 100644 --- a/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactThrowableEvent.java +++ b/CraftTweaker2-API/src/main/java/crafttweaker/api/event/ProjectileImpactThrowableEvent.java @@ -1,8 +1,8 @@ package crafttweaker.api.event; import crafttweaker.annotations.ZenRegister; -import crafttweaker.api.entity.IEntity; import crafttweaker.api.entity.IEntityLivingBase; +import crafttweaker.api.entity.IEntityThrowable; import stanhebben.zenscript.annotations.ZenClass; import stanhebben.zenscript.annotations.ZenGetter; @@ -10,7 +10,7 @@ @ZenRegister public interface ProjectileImpactThrowableEvent extends IProjectileImpactEvent, IEventCancelable { @ZenGetter("throwable") - IEntity getThrowable(); + IEntityThrowable getThrowable(); @ZenGetter("thrower") IEntityLivingBase getThrower(); diff --git a/CraftTweaker2-API/src/main/java/crafttweaker/api/world/IWorld.java b/CraftTweaker2-API/src/main/java/crafttweaker/api/world/IWorld.java index a8c98d51d..39ec8328b 100644 --- a/CraftTweaker2-API/src/main/java/crafttweaker/api/world/IWorld.java +++ b/CraftTweaker2-API/src/main/java/crafttweaker/api/world/IWorld.java @@ -5,6 +5,9 @@ import crafttweaker.api.block.*; import crafttweaker.api.data.IData; import crafttweaker.api.entity.IEntity; +import crafttweaker.api.entity.IEntityArrow; +import crafttweaker.api.entity.IEntityLivingBase; +import crafttweaker.api.entity.IEntityThrowable; import crafttweaker.api.item.IItemStack; import crafttweaker.api.player.IPlayer; import crafttweaker.api.util.Position3f; diff --git a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/api/minecraft/CraftTweakerMC.java b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/api/minecraft/CraftTweakerMC.java index 441b866c8..c5ad4ce7f 100644 --- a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/api/minecraft/CraftTweakerMC.java +++ b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/api/minecraft/CraftTweakerMC.java @@ -42,7 +42,9 @@ import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.inventory.*; import net.minecraft.item.*; import net.minecraft.item.crafting.Ingredient; @@ -966,4 +968,11 @@ public static IEntityAttributeModifier getIEntityAttributeModifier(AttributeModi return modifier == null ? null : new MCEntityAttributeModifier(modifier); } + public static IEntityArrow getIEntityArrow(EntityArrow entity) { + return entity == null ? null : new MCEntityArrow(entity); + } + + public static IEntityThrowable getIEntityThrowable(EntityThrowable entity) { + return entity == null ? null : new MCEntityThrowable(entity); + } } diff --git a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntity.java b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntity.java index 1efe202d8..2eaee04d7 100644 --- a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntity.java +++ b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntity.java @@ -16,6 +16,7 @@ import crafttweaker.mc1120.util.MCPosition3f; import net.minecraft.entity.Entity; import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.*; @@ -675,4 +676,9 @@ public boolean onGround() { public boolean isLightningbolt() { return entity instanceof EntityLightningBolt; } + + @Override + public boolean isArmorstand() { + return entity instanceof EntityArmorStand; + } } diff --git a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityArrow.java b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityArrow.java new file mode 100644 index 000000000..c4552ad44 --- /dev/null +++ b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityArrow.java @@ -0,0 +1,98 @@ +package crafttweaker.mc1120.entity; + +import javax.annotation.Nullable; + +import crafttweaker.api.entity.IEntity; +import crafttweaker.api.entity.IEntityArrow; +import crafttweaker.api.entity.IProjectile; +import crafttweaker.api.minecraft.CraftTweakerMC; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityArrow.PickupStatus; + +public class MCEntityArrow extends MCEntity implements IEntityArrow, IProjectile { + private final EntityArrow entityArrow; + + public MCEntityArrow(EntityArrow entityArrow) { + super(entityArrow); + this.entityArrow = entityArrow; + } + + @Override + public void shoot(double x, double y, double z, float velocity, float inaccuracy) { + entityArrow.shoot(x, y, z, velocity, inaccuracy); + } + + @Override + public IEntityArrow setDamage(double damage) { + entityArrow.setDamage(damage); + return (IEntityArrow) entityArrow; + } + + @Override + public double getDamage() { + return entityArrow.getDamage(); + } + + @Override + public IEntityArrow setIsCritical(boolean critical) { + entityArrow.setIsCritical(critical); + return (IEntityArrow) entityArrow; + } + + @Override + public boolean getIsCritical() { + return entityArrow.getIsCritical(); + } + + @Override + public IEntityArrow setKnockbackStrength(int knockbackStrength) { + entityArrow.setKnockbackStrength(knockbackStrength); + return (IEntityArrow) entityArrow; + } + + @Override + public int arrowShake() { + return entityArrow.arrowShake; + } + + @Override + @Nullable + public IEntity getShooter() { + return CraftTweakerMC.getIEntity(entityArrow.shootingEntity); + } + + @Override + public IEntityArrow setShooter(IEntity shooter) { + entityArrow.shootingEntity = CraftTweakerMC.getEntity(shooter); + return (IEntityArrow) entityArrow; + } + + @Override + public String getPickupStatus() { + return String.valueOf(entityArrow.pickupStatus); + } + + @Override + public IEntityArrow setPickupStatus(String pickupStatus) { + PickupStatus.valueOf(pickupStatus); + return (IEntityArrow) entityArrow; + } + + @Override + public IEntityArrow setPickupDisallowed() { + entityArrow.pickupStatus = EntityArrow.PickupStatus.DISALLOWED; + return (IEntityArrow) entityArrow; + } + + @Override + public IEntityArrow setPickupAllowed() { + entityArrow.pickupStatus = EntityArrow.PickupStatus.ALLOWED; + return (IEntityArrow) entityArrow; + } + + @Override + public IEntityArrow setPickupCreativeOnly() { + entityArrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY; + return (IEntityArrow) entityArrow; + } +} diff --git a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityThrowable.java b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityThrowable.java new file mode 100644 index 000000000..1ddc57e59 --- /dev/null +++ b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/entity/MCEntityThrowable.java @@ -0,0 +1,34 @@ +package crafttweaker.mc1120.entity; + +import javax.annotation.Nullable; + +import crafttweaker.api.entity.IEntityLivingBase; +import crafttweaker.api.entity.IEntityThrowable; +import crafttweaker.api.entity.IProjectile; +import crafttweaker.api.minecraft.CraftTweakerMC; +import net.minecraft.entity.projectile.EntityThrowable; + +public class MCEntityThrowable extends MCEntity implements IEntityThrowable, IProjectile { + private final EntityThrowable entityThrowable; + + public MCEntityThrowable(EntityThrowable entityThrowable) { + super(entityThrowable); + this.entityThrowable = entityThrowable; + } + + @Override + public void shoot(double x, double y, double z, float velocity, float inaccuracy) { + entityThrowable.shoot(x, y, z, velocity, inaccuracy); + } + + @Override + @Nullable + public IEntityLivingBase getThrower() { + return CraftTweakerMC.getIEntityLivingBase(entityThrowable.getThrower()); + } + + @Override + public int throwableShake() { + return entityThrowable.throwableShake; + } +} diff --git a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactArrowEvent.java b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactArrowEvent.java index c90f54f54..a93a99977 100644 --- a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactArrowEvent.java +++ b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactArrowEvent.java @@ -1,6 +1,7 @@ package crafttweaker.mc1120.events.handling; import crafttweaker.api.entity.IEntity; +import crafttweaker.api.entity.IEntityArrow; import crafttweaker.api.event.ProjectileImpactArrowEvent; import crafttweaker.api.minecraft.CraftTweakerMC; import net.minecraft.entity.projectile.EntityArrow; @@ -17,7 +18,7 @@ public MCProjectileImpactArrowEvent(ProjectileImpactEvent.Arrow event) { } @Override - public IEntity getArrow() { + public IEntityArrow getArrow() { return CraftTweakerMC.getIEntity(arrow); } diff --git a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactThrowableEvent.java b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactThrowableEvent.java index 8364d8c4b..75b656975 100644 --- a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactThrowableEvent.java +++ b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/events/handling/MCProjectileImpactThrowableEvent.java @@ -2,6 +2,7 @@ import crafttweaker.api.entity.IEntity; import crafttweaker.api.entity.IEntityLivingBase; +import crafttweaker.api.entity.IEntityThrowable; import crafttweaker.api.event.ProjectileImpactThrowableEvent; import crafttweaker.api.minecraft.CraftTweakerMC; import net.minecraft.entity.projectile.EntityThrowable; @@ -18,8 +19,8 @@ public MCProjectileImpactThrowableEvent(ProjectileImpactEvent.Throwable event) { } @Override - public IEntity getThrowable() { - return CraftTweakerMC.getIEntity(throwable); + public IEntityThrowable getThrowable() { + return CraftTweakerMC.getIEntityThrowable(throwable); } @Override diff --git a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/world/MCWorld.java b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/world/MCWorld.java index 0a07a9c17..dc28b0285 100644 --- a/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/world/MCWorld.java +++ b/CraftTweaker2-MC1120-Main/src/main/java/crafttweaker/mc1120/world/MCWorld.java @@ -4,6 +4,9 @@ import crafttweaker.api.block.*; import crafttweaker.api.data.IData; import crafttweaker.api.entity.IEntity; +import crafttweaker.api.entity.IEntityArrow; +import crafttweaker.api.entity.IEntityLivingBase; +import crafttweaker.api.entity.IEntityThrowable; import crafttweaker.api.item.IItemStack; import crafttweaker.api.minecraft.CraftTweakerMC; import crafttweaker.api.player.IPlayer; @@ -11,8 +14,10 @@ import crafttweaker.api.world.*; import crafttweaker.mc1120.data.NBTConverter; import crafttweaker.mc1120.entity.MCEntity; +import crafttweaker.mc1120.entity.MCEntityThrowable; import crafttweaker.mc1120.util.MCPosition3f; import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -209,6 +214,6 @@ public IEntity createLightningBolt(double x, double y, double z, boolean effectO @Override public boolean addWeatherEffect(IEntity entity) { - return world.addWeatherEffect(CraftTweakerMC.getEntity(entity)); + return world.addWeatherEffect(CraftTweakerMC.getEntity(entity)) } } \ No newline at end of file