mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-27 15:17:59 +01:00
Butterflies will now follow the player if they're holding a flower
This commit is contained in:
parent
aa00b1a9b0
commit
e21cffcf7d
1 changed files with 31 additions and 11 deletions
|
@ -34,6 +34,8 @@ import net.minecraft.nbt.NbtCompound;
|
||||||
import net.minecraft.predicate.entity.EntityPredicates;
|
import net.minecraft.predicate.entity.EntityPredicates;
|
||||||
import net.minecraft.sound.SoundEvent;
|
import net.minecraft.sound.SoundEvent;
|
||||||
import net.minecraft.registry.tag.BlockTags;
|
import net.minecraft.registry.tag.BlockTags;
|
||||||
|
import net.minecraft.registry.tag.ItemTags;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
@ -151,6 +153,11 @@ public class ButterflyEntity extends AmbientEntity {
|
||||||
if (e instanceof PlayerEntity) {
|
if (e instanceof PlayerEntity) {
|
||||||
PlayerEntity player = (PlayerEntity)e;
|
PlayerEntity player = (PlayerEntity)e;
|
||||||
|
|
||||||
|
if (player.getStackInHand(Hand.MAIN_HAND).isIn(ItemTags.FLOWERS)) {
|
||||||
|
setTarget(player);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (player.isCreative() || player.isSpectator()) {
|
if (player.isCreative() || player.isSpectator()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -181,6 +188,7 @@ public class ButterflyEntity extends AmbientEntity {
|
||||||
if (!flowerPosition.isPresent()) {
|
if (!flowerPosition.isPresent()) {
|
||||||
setResting(false);
|
setResting(false);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getWorld().getBlockState(below).isAir()
|
if (getWorld().getBlockState(below).isAir()
|
||||||
|
@ -200,20 +208,32 @@ public class ButterflyEntity extends AmbientEntity {
|
||||||
} else {
|
} else {
|
||||||
ticksResting = 0;
|
ticksResting = 0;
|
||||||
|
|
||||||
updateFlowerPosition().map(flower -> {
|
if (getTarget() instanceof PlayerEntity player) {
|
||||||
if (flower.isWithinDistance(getPos(), 1)) {
|
if (player.isRemoved() || !player.getStackInHand(Hand.MAIN_HAND).isIn(ItemTags.FLOWERS)) {
|
||||||
setResting(true);
|
setTarget(null);
|
||||||
visited.put(flower, (long)age);
|
|
||||||
if (breedingCooldown <= 0) {
|
|
||||||
breedingCooldown = MAX_BREEDING_COOLDOWN / 10;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (distanceTo(player) > 3) {
|
||||||
|
moveTowards(player.getBlockPos());
|
||||||
|
} else {
|
||||||
|
this.addVelocity(random.nextFloat() * 0.1 - 0.05F, random.nextFloat() * 0.1, random.nextFloat() * 0.1 - 0.05F);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
return flower;
|
updateFlowerPosition().map(flower -> {
|
||||||
}).or(this::findNextHoverPosition).ifPresent(this::moveTowards);
|
if (flower.isWithinDistance(getPos(), 1)) {
|
||||||
|
setResting(true);
|
||||||
|
visited.put(flower, (long)age);
|
||||||
|
if (breedingCooldown <= 0) {
|
||||||
|
breedingCooldown = MAX_BREEDING_COOLDOWN / 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (random.nextInt(100) == 0 && getWorld().getBlockState(below).isOpaque()) {
|
return flower;
|
||||||
setResting(true);
|
}).or(this::findNextHoverPosition).ifPresent(this::moveTowards);
|
||||||
|
|
||||||
|
if (random.nextInt(100) == 0 && getWorld().getBlockState(below).isOpaque()) {
|
||||||
|
setResting(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue