-
Notifications
You must be signed in to change notification settings - Fork 207
Expand file tree
/
Copy pathSeagullAITargetSeeds.java
More file actions
88 lines (72 loc) · 2.82 KB
/
SeagullAITargetSeeds.java
File metadata and controls
88 lines (72 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.github.alexthe666.alexsmobs.entity.ai;
import net.minecraft.world.entity.ai.goal.Goal;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import java.util.EnumSet;
import java.util.List;
import com.github.alexthe666.alexsmobs.entity.EntitySeagull;
public class SeagullAITargetSeeds extends Goal {
private final EntitySeagull seagull;
private ItemEntity targetSeed;
public SeagullAITargetSeeds(EntitySeagull seagull) {
this.seagull = seagull;
this.setFlags(EnumSet.of(Goal.Flag.MOVE));
}
@Override
public boolean canUse() {
List<ItemEntity> items = seagull.level().getEntitiesOfClass(
ItemEntity.class,
seagull.getBoundingBox().inflate(10.0),
item -> item.isAlive() && isSeed(item.getItem())
);
if (!items.isEmpty()) {
targetSeed = items.get(0);
return true;
}
return false;
}
@Override
public void start() {
if (targetSeed != null) {
seagull.getNavigation().moveTo(targetSeed, 1.0);
}
}
@Override
public boolean canContinueToUse() {
return targetSeed != null && targetSeed.isAlive();
}
@Override
public void tick() {
if (targetSeed != null) {
seagull.getNavigation().moveTo(targetSeed, 1.0);
if (seagull.distanceToSqr(targetSeed) < 0.5) {
if (targetSeed.isAlive()) {
System.out.println("[DEBUG] Seagull " + seagull.getId() + " ate a seed at " + targetSeed.blockPosition());
targetSeed.discard();
seagull.hasEatenSeed = true;
// Spawn heart particles for all players (server-side)
if (seagull.level() instanceof net.minecraft.server.level.ServerLevel serverLevel) {
serverLevel.sendParticles(
net.minecraft.core.particles.ParticleTypes.HEART,
seagull.getX(),
seagull.getY() + seagull.getBbHeight(),
seagull.getZ(),
12, // count
0.3, 0.3, 0.3, // spread X, Y, Z
0.0 // speed
);
}
seagull.playSound(net.minecraft.sounds.SoundEvents.PLAYER_LEVELUP, 1.0F, 1.2F);
}
targetSeed = null;
}
}
}
private boolean isSeed(ItemStack stack) {
Item item = stack.getItem();
return item == Items.WHEAT_SEEDS || item == Items.MELON_SEEDS ||
item == Items.PUMPKIN_SEEDS || item == Items.BEETROOT_SEEDS;
}
}