|
| 1 | +package com.steve.ai.event; |
| 2 | + |
| 3 | +import com.steve.ai.SteveMod; |
| 4 | +import com.steve.ai.entity.SteveEntity; |
| 5 | +import com.steve.ai.entity.SteveManager; |
| 6 | +import com.steve.ai.memory.StructureRegistry; |
| 7 | +import net.minecraft.server.level.ServerLevel; |
| 8 | +import net.minecraft.server.level.ServerPlayer; |
| 9 | +import net.minecraft.world.phys.Vec3; |
| 10 | +import net.minecraftforge.event.entity.player.PlayerEvent; |
| 11 | +import net.minecraftforge.eventbus.api.SubscribeEvent; |
| 12 | +import net.minecraftforge.fml.common.Mod; |
| 13 | + |
| 14 | +@Mod.EventBusSubscriber(modid = SteveMod.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) |
| 15 | +public class ServerEventHandler { |
| 16 | + private static boolean stevesSpawned = false; |
| 17 | + |
| 18 | + @SubscribeEvent |
| 19 | + public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { |
| 20 | + if (event.getEntity() instanceof ServerPlayer player) { |
| 21 | + ServerLevel level = (ServerLevel) player.level(); |
| 22 | + SteveManager manager = SteveMod.getSteveManager(); |
| 23 | + if (!stevesSpawned) { manager.clearAllSteves(); |
| 24 | + |
| 25 | + // Clear structure registry for fresh spatial awareness |
| 26 | + StructureRegistry.clear(); |
| 27 | + |
| 28 | + // Then, remove ALL SteveEntity instances from the world (including ones loaded from NBT) |
| 29 | + int removedCount = 0; |
| 30 | + for (var entity : level.getAllEntities()) { |
| 31 | + if (entity instanceof SteveEntity) { |
| 32 | + entity.discard(); |
| 33 | + removedCount++; |
| 34 | + } |
| 35 | + } Vec3 playerPos = player.position(); |
| 36 | + Vec3 lookVec = player.getLookAngle(); |
| 37 | + |
| 38 | + String[] names = {"Steve", "Alex", "Bob", "Charlie"}; |
| 39 | + |
| 40 | + for (int i = 0; i < 4; i++) { |
| 41 | + double offsetX = lookVec.x * 5 + (lookVec.z * (i - 1.5) * 2); |
| 42 | + double offsetZ = lookVec.z * 5 + (-lookVec.x * (i - 1.5) * 2); |
| 43 | + |
| 44 | + Vec3 spawnPos = new Vec3( |
| 45 | + playerPos.x + offsetX, |
| 46 | + playerPos.y, |
| 47 | + playerPos.z + offsetZ |
| 48 | + ); |
| 49 | + |
| 50 | + SteveEntity steve = manager.spawnSteve(level, spawnPos, names[i]); |
| 51 | + if (steve != null) { } |
| 52 | + } |
| 53 | + |
| 54 | + stevesSpawned = true; } |
| 55 | + } |
| 56 | + } |
| 57 | + |
| 58 | + @SubscribeEvent |
| 59 | + public static void onPlayerLoggedOut(PlayerEvent.PlayerLoggedOutEvent event) { |
| 60 | + stevesSpawned = false; |
| 61 | + } |
| 62 | +} |
| 63 | + |
0 commit comments