Fix AI and sleep positioning: stuck detection, cooldown, movement tracking, bed break handling, double rotation, sleep restore on load

This commit is contained in:
2026-06-14 01:23:20 +03:00
parent 15a31b1aec
commit dcd402eebf
13 changed files with 613 additions and 39 deletions
@@ -1,6 +1,7 @@
package me.sashegdev.fabled_hearts;
import com.mojang.logging.LogUtils;
import me.sashegdev.fabled_hearts.client.DebugClientHandler;
import me.sashegdev.fabled_hearts.dialog.DialogLoader;
import me.sashegdev.fabled_hearts.dialog.DialogManager;
import me.sashegdev.fabled_hearts.entity.ellie.EllieEntity;
@@ -10,6 +11,7 @@ import me.sashegdev.fabled_hearts.registry.ModEntities;
import me.sashegdev.fabled_hearts.registry.ModItems;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.AddReloadListenerEvent;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
@@ -17,6 +19,7 @@ import net.minecraftforge.event.level.BlockEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.slf4j.Logger;
@@ -62,6 +65,16 @@ public class Main {
public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerEntityRenderer(ModEntities.ELLIE.get(), EllieRenderer::new);
}
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
DebugClientHandler.init();
}
@SubscribeEvent
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
DebugClientHandler.registerKeyMapping(event);
}
}
public static class ForgeHandler {
@@ -76,10 +89,10 @@ public class Main {
var pos = event.getPos();
event.getLevel().getEntitiesOfClass(
EllieEntity.class,
new net.minecraft.world.phys.AABB(pos).inflate(2),
e -> e.isSleeping() && pos.equals(e.getBedPos())
new net.minecraft.world.phys.AABB(pos).inflate(3),
e -> e.isBedAtOrAdjacent(pos) || (e.getBedPos() != null && e.getBedPos().equals(pos))
).forEach(e -> {
e.wakeUp();
if (e.isSleeping()) e.wakeUp();
e.forgetBed();
});
}