Add methods for Armadillo (#12031)

This commit is contained in:
Pedro 2025-04-29 09:44:37 -04:00 committed by GitHub
parent fc0c371761
commit a7a76c8fc7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 72 additions and 0 deletions

View File

@ -1,8 +1,38 @@
package org.bukkit.entity;
import org.jspecify.annotations.NullMarked;
/**
* Represents an Armadillo.
*/
@NullMarked
public interface Armadillo extends Animals {
/**
* Get the current state of the armadillo.
*
* @return the state of the armadillo
*/
State getState();
/**
* Attempt to roll up if the armadillo is {@link State#IDLE}
*/
void rollUp();
/**
* Attempt to roll out if the armadillo is not {@link State#IDLE}
*/
void rollOut();
/**
* Represents the current state of the armadillo.
*/
enum State {
IDLE,
ROLLING,
SCARED,
UNROLLING;
}
}

View File

@ -1,5 +1,7 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
import net.minecraft.world.entity.animal.armadillo.Armadillo.ArmadilloState;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Armadillo;
@ -14,8 +16,48 @@ public class CraftArmadillo extends CraftAnimals implements Armadillo {
return (net.minecraft.world.entity.animal.armadillo.Armadillo) super.getHandle();
}
@Override
public State getState() {
return CraftArmadillo.stateToBukkit(this.getHandle().getState());
}
@Override
public void rollUp() {
this.getHandle().getBrain().setMemoryWithExpiry(MemoryModuleType.DANGER_DETECTED_RECENTLY, true, net.minecraft.world.entity.animal.armadillo.Armadillo.SCARE_CHECK_INTERVAL);
this.getHandle().rollUp();
}
@Override
public void rollOut() {
if (this.getHandle().getBrain().getTimeUntilExpiry(MemoryModuleType.DANGER_DETECTED_RECENTLY) <= ArmadilloState.UNROLLING.animationDuration()) {
// already unrolling or unrolled
return;
}
this.getHandle().lastHurtByMob = null; // Clear this memory to not have the sensor trigger rollUp instantly for damaged armadillo
this.getHandle().getBrain().setMemoryWithExpiry(MemoryModuleType.DANGER_DETECTED_RECENTLY, true, ArmadilloState.UNROLLING.animationDuration());
}
@Override
public String toString() {
return "CraftArmadillo";
}
public static State stateToBukkit(ArmadilloState state) {
return switch (state) {
case IDLE -> State.IDLE;
case ROLLING -> State.ROLLING;
case SCARED -> State.SCARED;
case UNROLLING -> State.UNROLLING;
};
}
public static ArmadilloState stateToNMS(State state) {
return switch (state) {
case State.IDLE -> ArmadilloState.IDLE;
case State.ROLLING -> ArmadilloState.ROLLING;
case State.SCARED -> ArmadilloState.SCARED;
case State.UNROLLING -> ArmadilloState.UNROLLING;
};
}
}