aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcitrons <citrons@mondecitronne.com>2023-11-06 13:21:38 -0600
committercitrons <citrons@mondecitronne.com>2023-11-06 13:21:38 -0600
commit26cdb5e8c1d58d46f3819ce44fb1fc17826296e2 (patch)
treebd0e927346d73dbe449fa50cdd0848cb9cdd1eeb
parente74d8fc0aa5c2881af287b06d4a00ae9e9b7ce54 (diff)
add AI behaviors
-rw-r--r--src/main/java/com/mondecitronne/homunculus/EntityAIPanicFire.java15
-rw-r--r--src/main/java/com/mondecitronne/homunculus/EntityAIWatchLeashHolder.java33
-rw-r--r--src/main/java/com/mondecitronne/homunculus/EntityHomunculus.java8
3 files changed, 56 insertions, 0 deletions
diff --git a/src/main/java/com/mondecitronne/homunculus/EntityAIPanicFire.java b/src/main/java/com/mondecitronne/homunculus/EntityAIPanicFire.java
new file mode 100644
index 0000000..8ed366b
--- /dev/null
+++ b/src/main/java/com/mondecitronne/homunculus/EntityAIPanicFire.java
@@ -0,0 +1,15 @@
+package com.mondecitronne.homunculus;
+
+import net.minecraft.entity.EntityCreature;
+import net.minecraft.entity.ai.EntityAIPanic;
+
+public class EntityAIPanicFire extends EntityAIPanic {
+ public EntityAIPanicFire(EntityCreature creature, double speedIn) {
+ super(creature, speedIn);
+ }
+
+ @Override
+ public boolean shouldExecute() {
+ return super.shouldExecute() && creature.isBurning();
+ }
+}
diff --git a/src/main/java/com/mondecitronne/homunculus/EntityAIWatchLeashHolder.java b/src/main/java/com/mondecitronne/homunculus/EntityAIWatchLeashHolder.java
new file mode 100644
index 0000000..89885e8
--- /dev/null
+++ b/src/main/java/com/mondecitronne/homunculus/EntityAIWatchLeashHolder.java
@@ -0,0 +1,33 @@
+package com.mondecitronne.homunculus;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityCreature;
+import net.minecraft.entity.ai.EntityAIBase;
+
+public class EntityAIWatchLeashHolder extends EntityAIBase {
+ protected EntityCreature entity;
+
+ public EntityAIWatchLeashHolder(EntityCreature entityIn) {
+ entity = entityIn;
+ }
+
+ @Override
+ public boolean shouldExecute() {
+ return entity.getLeashed();
+ }
+
+ @Override
+ public boolean shouldContinueExecuting() {
+ return shouldExecute();
+ }
+
+ @Override
+ public void updateTask() {
+ Entity holder = this.entity.getLeashHolder();
+ if (holder == null) {
+ return;
+ }
+ entity.getLookHelper().setLookPosition(holder.posX, holder.posY + (double) holder.getEyeHeight(), holder.posZ,
+ (float) entity.getHorizontalFaceSpeed(), (float) entity.getVerticalFaceSpeed());
+ }
+}
diff --git a/src/main/java/com/mondecitronne/homunculus/EntityHomunculus.java b/src/main/java/com/mondecitronne/homunculus/EntityHomunculus.java
index bf2332b..9c60a75 100644
--- a/src/main/java/com/mondecitronne/homunculus/EntityHomunculus.java
+++ b/src/main/java/com/mondecitronne/homunculus/EntityHomunculus.java
@@ -8,6 +8,7 @@ import com.mondecitronne.homunculus.skin.PlayerSkin;
import com.mondecitronne.homunculus.skin.Skin;
import io.netty.util.internal.StringUtil;
import net.minecraft.entity.EntityCreature;
+import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.network.datasync.DataParameter;
@@ -34,6 +35,13 @@ public class EntityHomunculus extends EntityCreature {
super.entityInit();
}
+ @Override
+ protected void initEntityAI() {
+ tasks.addTask(0, new EntityAIPanicFire(this, 0.7));
+ tasks.addTask(1, new EntityAISwimming(this));
+ tasks.addTask(2, new EntityAIWatchLeashHolder(this));
+ }
+
private boolean isPlayerProfileUpdated(GameProfile a, GameProfile b) {
if (b == null || b.getName() == null) {
return a != null;