mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 08:57:44 +01:00
Iron golem calm anger options
This commit is contained in:
committed by
granny
parent
b40d56f9be
commit
68b70c0446
@@ -1434,6 +1434,8 @@ public class PurpurWorldConfig {
|
||||
public double ironGolemMaxHealth = 100.0D;
|
||||
public double ironGolemScale = 1.0D;
|
||||
public boolean ironGolemTakeDamageFromWater = false;
|
||||
public boolean ironGolemPoppyCalm = false;
|
||||
public boolean ironGolemHealCalm = false;
|
||||
private void ironGolemSettings() {
|
||||
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
|
||||
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
|
||||
@@ -1447,6 +1449,8 @@ public class PurpurWorldConfig {
|
||||
ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth);
|
||||
ironGolemScale = Mth.clamp(getDouble("mobs.iron_golem.attributes.scale", ironGolemScale), 0.0625D, 16.0D);
|
||||
ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater);
|
||||
ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm);
|
||||
ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm);
|
||||
}
|
||||
|
||||
public boolean llamaRidable = false;
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
package org.purpurmc.purpur.entity.ai;
|
||||
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.ai.goal.Goal;
|
||||
import net.minecraft.world.entity.animal.IronGolem;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.UUID;
|
||||
|
||||
public class ReceiveFlower extends Goal {
|
||||
private final IronGolem irongolem;
|
||||
private ServerPlayer target;
|
||||
private int cooldown;
|
||||
|
||||
public ReceiveFlower(IronGolem entity) {
|
||||
this.irongolem = entity;
|
||||
setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUse() {
|
||||
if (this.irongolem.getOfferFlowerTick() > 0) {
|
||||
return false;
|
||||
}
|
||||
if (!this.irongolem.isAngry()) {
|
||||
return false;
|
||||
}
|
||||
UUID uuid = this.irongolem.getPersistentAngerTarget();
|
||||
if (uuid == null) {
|
||||
return false;
|
||||
}
|
||||
Entity target = ((ServerLevel) this.irongolem.level()).getEntity(uuid);
|
||||
if (!(target instanceof ServerPlayer player)) {
|
||||
return false;
|
||||
}
|
||||
InteractionHand hand = getPoppyHand(player);
|
||||
if (hand == null) {
|
||||
return false;
|
||||
}
|
||||
removeFlower(player, hand);
|
||||
this.target = player;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canContinueToUse() {
|
||||
return this.cooldown > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
this.cooldown = 100;
|
||||
this.irongolem.stopBeingAngry();
|
||||
this.irongolem.offerFlower(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
this.irongolem.offerFlower(false);
|
||||
this.target = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
this.irongolem.getLookControl().setLookAt(this.target, 30.0F, 30.0F);
|
||||
--this.cooldown;
|
||||
}
|
||||
|
||||
private InteractionHand getPoppyHand(ServerPlayer player) {
|
||||
if (isPoppy(player.getMainHandItem())) {
|
||||
return InteractionHand.MAIN_HAND;
|
||||
}
|
||||
if (isPoppy(player.getOffhandItem())) {
|
||||
return InteractionHand.OFF_HAND;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void removeFlower(ServerPlayer player, InteractionHand hand) {
|
||||
player.setItemInHand(hand, ItemStack.EMPTY);
|
||||
}
|
||||
|
||||
private boolean isPoppy(ItemStack item) {
|
||||
return item.getItem() == Blocks.POPPY.asItem();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user