=== BEGIN MEGA HORROR FINAL ===

-- build.gradle --
plugins {
    id 'fabric-loom' version '1.4-SNAPSHOT'
    id 'maven-publish'
}

version = '1.0.0'
group = 'com.deepseek.megahorror'
base.archivesName = 'megahorror'

repositories {
    mavenCentral()
}

dependencies {
    minecraft "com.mojang:minecraft:1.20.1"
    mappings "net.fabricmc:yarn:1.20.1+build.10:v2"
    modImplementation "net.fabricmc:fabric-loader:0.14.24"
    modImplementation "net.fabricmc.fabric-api:fabric-api:0.88.1+1.20.1"
}

processResources {
    inputs.property "version", project.version
    filesMatching("fabric.mod.json") {
        expand "version": project.version
    }
}

tasks.withType(JavaCompile).configureEach {
    it.options.release = 17
}

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

jar {
    from("LICENSE") {
        rename { "${it}_${base.archivesName.get()}"}
    }
}

publishing {
    publications {
        create("mavenJava", MavenPublication) {
            from components.java
        }
    }
}

-- gradle.properties --
org.gradle.jvmargs=-Xmx1G
fabric_loader_version=0.14.24
fabric_api_version=0.88.1+1.20.1
minecraft_version=1.20.1
yarn_mappings=1.20.1+build.10

-- settings.gradle --
pluginManagement {
    repositories {
        maven {
            name = 'Fabric'
            url = 'https://maven.fabricmc.net/'
        }
        gradlePluginPortal()
    }
}

-- src/main/resources/fabric.mod.json --
{
  "schemaVersion": 1,
  "id": "megahorror",
  "version": "${version}",
  "name": "Mega Horror Fusion",
  "description": "Flywheel of Terror + Broken Script + Custom Useless/Glare/Sonder + Rusted Cog & Hollow Echo",
  "authors": ["Deepseek-MEGA"],
  "contact": {},
  "license": "All-Rights-Reserved",
  "icon": "assets/megahorror/icon.png",
  "environment": "*",
  "entrypoints": {
    "main": [
      "com.deepseek.megahorror.MegaHorror"
    ],
    "client": [
      "com.deepseek.megahorror.client.MegaHorrorClient"
    ]
  },
  "mixins": [
    "megahorror.mixins.json"
  ],
  "depends": {
    "fabricloader": ">=0.14.24",
    "minecraft": "~1.20.1",
    "java": ">=17",
    "fabric-api": "*"
  }
}

-- src/main/resources/megahorror.mixins.json --
{
  "required": true,
  "minVersion": "0.8",
  "package": "com.deepseek.megahorror.mixin",
  "compatibilityLevel": "JAVA_17",
  "client": [
    "WorldRendererMixin"
  ],
  "injectors": {
    "defaultRequire": 1
  }
}

-- src/main/java/com/deepseek/megahorror/MegaHorror.java --
package com.deepseek.megahorror;

import com.deepseek.megahorror.init.ModEntities;
import com.deepseek.megahorror.init.ModSounds;
import com.deepseek.megahorror.util.SpawnScheduler;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MegaHorror implements ModInitializer {
    public static final String MOD_ID = "megahorror";
    public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

    @Override
    public void onInitialize() {
        LOGGER.info("[MEGA HORROR] Initializing fusion of Flywheel, Broken Script, and custom nightmares.");
        ModSounds.registerSounds();
        ModEntities.registerEntities();
        ServerTickEvents.END_SERVER_TICK.register(server -> SpawnScheduler.tick(server));
    }
}

-- src/main/java/com/deepseek/megahorror/init/ModEntities.java --
package com.deepseek.megahorror.init;

import com.deepseek.megahorror.MegaHorror;
import com.deepseek.megahorror.entity.*;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.entity.EntityDimensions;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;

public class ModEntities {
    // Original custom entities
    public static EntityType<UselessEntity> USELESS;
    public static EntityType<GlareEntity> GLARE;
    public static EntityType<SonderEntity> SONDER;

    // New Flywheel-inspired entities
    public static EntityType<RustedCogEntity> RUSTED_COG;
    public static EntityType<HollowEchoEntity> HOLLOW_ECHO;

    public static void registerEntities() {
        USELESS = Registry.register(
            Registries.ENTITY_TYPE,
            new Identifier(MegaHorror.MOD_ID, "useless"),
            FabricEntityTypeBuilder.create(SpawnGroup.MONSTER, UselessEntity::new)
                .dimensions(EntityDimensions.fixed(0.8f, 1.8f))
                .trackRangeBlocks(64)
                .build()
        );

        GLARE = Registry.register(
            Registries.ENTITY_TYPE,
            new Identifier(MegaHorror.MOD_ID, "glare"),
            FabricEntityTypeBuilder.create(SpawnGroup.MONSTER, GlareEntity::new)
                .dimensions(EntityDimensions.fixed(0.6f, 1.0f))
                .trackRangeBlocks(80)
                .build()
        );

        SONDER = Registry.register(
            Registries.ENTITY_TYPE,
            new Identifier(MegaHorror.MOD_ID, "sonder"),
            FabricEntityTypeBuilder.create(SpawnGroup.AMBIENT, SonderEntity::new)
                .dimensions(EntityDimensions.fixed(0.8f, 0.8f))
                .trackRangeBlocks(60)
                .build()
        );

        RUSTED_COG = Registry.register(
            Registries.ENTITY_TYPE,
            new Identifier(MegaHorror.MOD_ID, "rusted_cog"),
            FabricEntityTypeBuilder.create(SpawnGroup.MONSTER, RustedCogEntity::new)
                .dimensions(EntityDimensions.fixed(1.0f, 2.0f))
                .trackRangeBlocks(64)
                .build()
        );

        HOLLOW_ECHO = Registry.register(
            Registries.ENTITY_TYPE,
            new Identifier(MegaHorror.MOD_ID, "hollow_echo"),
            FabricEntityTypeBuilder.create(SpawnGroup.MONSTER, HollowEchoEntity::new)
                .dimensions(EntityDimensions.fixed(0.8f, 2.2f))
                .trackRangeBlocks(80)
                .build()
        );
    }
}

-- src/main/java/com/deepseek/megahorror/init/ModSounds.java --
package com.deepseek.megahorror.init;

import com.deepseek.megahorror.MegaHorror;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.sound.SoundEvent;
import net.minecraft.util.Identifier;

public class ModSounds {
    public static SoundEvent USELESS_SCREAM;
    public static SoundEvent GLITCH_AMBIENT;
    public static SoundEvent SONDER_WHISPER;

    public static void registerSounds() {
        USELESS_SCREAM = Registry.register(
            Registries.SOUND_EVENT,
            new Identifier(MegaHorror.MOD_ID, "useless_scream"),
            SoundEvent.of(new Identifier(MegaHorror.MOD_ID, "useless_scream"))
        );
        GLITCH_AMBIENT = Registry.register(
            Registries.SOUND_EVENT,
            new Identifier(MegaHorror.MOD_ID, "glitch_ambient"),
            SoundEvent.of(new Identifier(MegaHorror.MOD_ID, "glitch_ambient"))
        );
        SONDER_WHISPER = Registry.register(
            Registries.SOUND_EVENT,
            new Identifier(MegaHorror.MOD_ID, "sonder_whisper"),
            SoundEvent.of(new Identifier(MegaHorror.MOD_ID, "sonder_whisper"))
        );
    }
}

-- src/main/java/com/deepseek/megahorror/entity/UselessEntity.java --
package com.deepseek.megahorror.entity;

import com.deepseek.megahorror.init.ModSounds;
import com.deepseek.megahorror.client.effect.ScreenShakeHandler;
import com.deepseek.megahorror.client.effect.FOVManipulator;
import com.deepseek.megahorror.client.effect.RenderDistanceReducer;
import com.deepseek.megahorror.client.effect.ColorInverter;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.ai.goal.*;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.mob.HostileEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;

public class UselessEntity extends HostileEntity {
    private boolean isAttacking = false;

    public UselessEntity(EntityType<? extends HostileEntity> type, World world) {
        super(type, world);
        this.experiencePoints = 0;
    }

    public static DefaultAttributeContainer.Builder createAttributes() {
        return HostileEntity.createMobAttributes()
            .add(EntityAttributes.GENERIC_MAX_HEALTH, 40.0)
            .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.18)
            .add(EntityAttributes.GENERIC_ATTACK_DAMAGE, 0.0)
            .add(EntityAttributes.GENERIC_FOLLOW_RANGE, 48.0);
    }

    @Override
    protected void initGoals() {
        this.goalSelector.add(1, new SwimGoal(this));
        this.goalSelector.add(2, new UselessStalkGoal(this));
        this.goalSelector.add(3, new UselessAttackGoal(this));
        this.goalSelector.add(4, new WanderAroundGoal(this, 0.3));
        this.goalSelector.add(5, new LookAtEntityGoal(this, PlayerEntity.class, 30.0f));
        this.targetSelector.add(1, new ActiveTargetGoal<>(this, PlayerEntity.class, true, true));
    }

    @Override
    public void tick() {
        super.tick();
        if (!this.getWorld().isClient) {
            // server-side nothing extra
        } else {
            if (this.age % 20 == 0 && this.distanceTo(this.getWorld().getClosestPlayer(this, 60.0)) > 20) {
                this.getWorld().addParticle(ParticleTypes.PORTAL, 
                    this.getX() + (this.random.nextDouble() - 0.5)*2,
                    this.getY() + 1.0,
                    this.getZ() + (this.random.nextDouble() - 0.5)*2,
                    0, 0.1, 0);
            }
        }
    }

    public void performUltimateAttack(PlayerEntity target) {
        if (this.getWorld().isClient) return;
        this.getWorld().playSound(null, this.getBlockPos(), ModSounds.USELESS_SCREAM, SoundCategory.HOSTILE, 2.0f, 1.0f);
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.BLINDNESS, 200, 2));
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.NAUSEA, 300, 1));
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.MINING_FATIGUE, 400, 4));
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.WITHER, 100, 2));
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.SLOWNESS, 200, 3));
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.WEAKNESS, 200, 2));
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.HUNGER, 200, 5));
        target.addStatusEffect(new net.minecraft.entity.effect.StatusEffectInstance(net.minecraft.entity.effect.StatusEffects.DARKNESS, 300, 1));

        ScreenShakeHandler.shake(target, 20, 0.8f);
        FOVManipulator.setFOV(target, 1.8f);
        RenderDistanceReducer.setRenderDistance(target, 4);
        ColorInverter.setInverted(target, true);

        target.kill();
        this.discard();
    }

    @Override
    public boolean damage(DamageSource source, float amount) {
        if (source.isOutOfWorld()) return super.damage(source, amount);
        return false;
    }

    class UselessStalkGoal extends Goal {
        private final UselessEntity entity;
        private PlayerEntity target;
        private int waitTicks = 0;

        public UselessStalkGoal(UselessEntity entity) { this.entity = entity; }

        @Override
        public boolean canStart() {
            this.target = this.entity.getWorld().getClosestPlayer(entity, 48.0);
            if (this.target == null) return false;
            long time = this.entity.getWorld().getTimeOfDay() % 24000;
            return (time >= 12000 && time <= 14000) && entity.distanceTo(target) > 20 && entity.distanceTo(target) < 50;
        }

        @Override
        public void start() {
            this.waitTicks = 60;
        }

        @Override
        public void tick() {
            if (this.target == null) return;
            double dist = entity.distanceTo(target);
            if (dist > 30 && dist < 40) {
                entity.getNavigation().stop();
            } else if (dist > 40) {
                entity.getNavigation().startMovingTo(target, 0.2);
            } else if (dist < 30) {
                Vec3d back = entity.getPos().subtract(target.getPos()).normalize().multiply(2);
                entity.getNavigation().startMovingTo(entity.getX() + back.x, entity.getY(), entity.getZ() + back.z, 0.3);
            }
            if (entity.age % 10 == 0) {
                entity.getWorld().addParticle(ParticleTypes.REVERSE_PORTAL, 
                    target.getX() + (entity.random.nextDouble()-0.5)*10,
                    target.getY() + 1.0 + entity.random.nextDouble()*3,
                    target.getZ() + (entity.random.nextDouble()-0.5)*10,
                    0, 0.1, 0);
            }
        }

        @Override
        public boolean shouldContinue() {
            return this.target != null && !entity.isAttacking && entity.distanceTo(target) < 50;
        }
    }

    class UselessAttackGoal extends Goal {
        private final UselessEntity entity;
        private PlayerEntity target;
        private int cooldown = 0;

        public UselessAttackGoal(UselessEntity entity) { this.entity = entity; }

        @Override
        public boolean canStart() {
            this.target = entity.getWorld().getClosestPlayer(entity, 20.0);
            if (this.target == null) return false;
            long time = entity.getWorld().getTimeOfDay() % 24000;
            return (time >= 12000 && time <= 14000) && entity.distanceTo(target) < 20 && !entity.isAttacking;
        }

        @Override
        public void start() {
            entity.isAttacking = true;
            entity.getNavigation().startMovingTo(target, 0.25);
        }

        @Override
        public void tick() {
            if (this.target == null) return;
            double dist = entity.distanceTo(target);
            if (dist < 2.0) {
                entity.performUltimateAttack(target);
            } else {
                entity.getNavigation().startMovingTo(target, 0.25);
            }
            entity.getWorld().addParticle(ParticleTypes.SCRAPE, 
                target.getX() + (entity.random.nextDouble()-0.5)*1.5,
                target.getY() + 0.5,
                target.getZ() + (entity.random.nextDouble()-0.5)*1.5,
                0, 0.2, 0);
        }

        @Override
        public boolean shouldContinue() {
            return this.target != null && !entity.isRemoved() && entity.distanceTo(target) < 20;
        }

        @Override
        public void stop() {
            entity.isAttacking = false;
        }
    }
}

-- src/main/java/com/deepseek/megahorror/entity/GlareEntity.java --
package com.deepseek.megahorror.entity;

import net.minecraft.entity.EntityType;
import net.minecraft.entity.ai.goal.ActiveTargetGoal;
import net.minecraft.entity.ai.goal.LookAtEntityGoal;
import net.minecraft.entity.mob.HostileEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.Box;
import net.minecraft.world.World;

import java.util.List;

public class GlareEntity extends HostileEntity {
    public GlareEntity(EntityType<? extends HostileEntity> type, World world) {
        super(type, world);
        this.experiencePoints = 0;
        this.setInvisible(true);
    }

    @Override
    protected void initGoals() {
        this.targetSelector.add(1, new ActiveTargetGoal<>(this, PlayerEntity.class, true, false));
        this.goalSelector.add(1, new LookAtEntityGoal(this, PlayerEntity.class, 60.0f));
    }

    @Override
    public void tick() {
        super.tick();
        if (this.getWorld().isClient) return;
        Box box = this.getBoundingBox().expand(40);
        List<PlayerEntity> players = this.getWorld().getEntitiesByClass(PlayerEntity.class, box, p -> true);
        for (PlayerEntity player : players) {
            if (player.canSee(this)) {
                this.discard();
                return;
            }
        }
        if (this.age % 120 == 0) {
            PlayerEntity nearest = this.getWorld().getClosestPlayer(this, 50);
            if (nearest != null) {
                double angle = this.random.nextDouble() * 2 * Math.PI;
                double dist = 20 + this.random.nextDouble() * 30;
                double x = nearest.getX() + Math.cos(angle) * dist;
                double z = nearest.getZ() + Math.sin(angle) * dist;
                double y = nearest.getY() + 10 + this.random.nextDouble() * 20;
                this.setPos(x, y, z);
            }
        }
    }

    @Override
    public boolean isInvisible() { return true; }
}

-- src/main/java/com/deepseek/megahorror/entity/SonderEntity.java --
package com.deepseek.megahorror.entity;

import com.deepseek.megahorror.init.ModSounds;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.ai.goal.FleeEntityGoal;
import net.minecraft.entity.ai.goal.LookAroundGoal;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;

public class SonderEntity extends MobEntity {
    private int whisperCooldown = 0;

    public SonderEntity(EntityType<? extends MobEntity> type, World world) {
        super(type, world);
        this.experiencePoints = 0;
        this.setNoGravity(true);
    }

    @Override
    protected void initGoals() {
        this.goalSelector.add(1, new FleeEntityGoal<>(this, PlayerEntity.class, 30.0f, 0.4, 0.6));
        this.goalSelector.add(2, new LookAroundGoal(this));
    }

    @Override
    public void tick() {
        super.tick();
        if (this.getWorld().isClient) return;
        if (whisperCooldown > 0) whisperCooldown--;
        PlayerEntity nearest = this.getWorld().getClosestPlayer(this, 20);
        if (nearest != null && whisperCooldown == 0) {
            this.getWorld().playSound(null, this.getBlockPos(), ModSounds.SONDER_WHISPER, SoundCategory.AMBIENT, 0.5f, 0.8f + this.random.nextFloat()*0.4f);
            whisperCooldown = 160;
        }
        if (this.random.nextFloat() < 0.02f) {
            Vec3d vel = new Vec3d(
                (this.random.nextDouble() - 0.5) * 0.1,
                (this.random.nextDouble() - 0.5) * 0.1,
                (this.random.nextDouble() - 0.5) * 0.1
            );
            this.setVelocity(vel);
        }
    }

    @Override
    public boolean isInvulnerable() { return true; }
}

-- src/main/java/com/deepseek/megahorror/entity/RustedCogEntity.java --
package com.deepseek.megahorror.entity;

import net.minecraft.entity.EntityType;
import net.minecraft.entity.ai.goal.*;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.mob.HostileEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.particle.DustParticleEffect;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import org.joml.Vector3f;

import java.util.List;

public class RustedCogEntity extends HostileEntity {
    private boolean rageMode = false;

    public RustedCogEntity(EntityType<? extends HostileEntity> type, World world) {
        super(type, world);
        this.experiencePoints = 15;
    }

    public static DefaultAttributeContainer.Builder createAttributes() {
        return HostileEntity.createMobAttributes()
            .add(EntityAttributes.GENERIC_MAX_HEALTH, 60.0)
            .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.25)
            .add(EntityAttributes.GENERIC_ATTACK_DAMAGE, 8.0)
            .add(EntityAttributes.GENERIC_ATTACK_KNOCKBACK, 2.0)
            .add(EntityAttributes.GENERIC_FOLLOW_RANGE, 32.0);
    }

    @Override
    protected void initGoals() {
        this.goalSelector.add(0, new SwimGoal(this));
        this.goalSelector.add(1, new MeleeAttackGoal(this, 1.0, false));
        this.goalSelector.add(2, new WanderAroundFarGoal(this, 0.8));
        this.goalSelector.add(3, new LookAtEntityGoal(this, PlayerEntity.class, 20.0f));
        this.targetSelector.add(1, new ActiveTargetGoal<>(this, PlayerEntity.class, true, true));
        this.targetSelector.add(2, new RevengeGoal(this));
    }

    @Override
    public void tick() {
        super.tick();

        // RAGE MODE: speed doubles when health < 50%
        float healthPercent = this.getHealth() / this.getMaxHealth();
        if (healthPercent < 0.5f && !rageMode) {
            rageMode = true;
            this.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED).setBaseValue(0.45);
            this.getWorld().playSound(null, this.getBlockPos(), SoundEvents.ENTITY_IRON_GOLEM_REPAIR, this.getSoundCategory(), 1.0f, 0.5f);
        } else if (healthPercent >= 0.5f && rageMode) {
            rageMode = false;
            this.getAttributeInstance(EntityAttributes.GENERIC_MOVEMENT_SPEED).setBaseValue(0.25);
        }

        // Redstone trail – damages players stepping on it (hazard)
        if (!this.getWorld().isClient && this.age % 10 == 0) {
            List<PlayerEntity> players = this.getWorld().getEntitiesByClass(PlayerEntity.class, this.getBoundingBox().expand(2), p -> true);
            for (PlayerEntity p : players) {
                p.damage(this.getDamageSources().magic(), 2.0f);
                p.addVelocity(0, 0.1, 0);
            }
        }

        // Spawn redstone particles (client-side trail)
        if (this.getWorld().isClient) {
            if (this.age % 4 == 0) {
                Vec3d pos = this.getPos().add(0, 0.1, 0);
                this.getWorld().addParticle(new DustParticleEffect(new Vector3f(1.0f, 0.2f, 0.1f), 1.0f),
                    pos.x + (this.random.nextDouble() - 0.5) * 0.8,
                    pos.y,
                    pos.z + (this.random.nextDouble() - 0.5) * 0.8,
                    0, -0.1, 0);
            }
        }
    }

    @Override
    public boolean damage(DamageSource source, float amount) {
        if (this.getWorld().isClient) {
            for (int i = 0; i < 10; i++) {
                this.getWorld().addParticle(ParticleTypes.FLAME,
                    this.getX() + (this.random.nextDouble() - 0.5) * 0.8,
                    this.getY() + 0.5,
                    this.getZ() + (this.random.nextDouble() - 0.5) * 0.8,
                    (this.random.nextDouble() - 0.5) * 0.2,
                    0.1,
                    (this.random.nextDouble() - 0.5) * 0.2);
            }
        }
        return super.damage(source, amount);
    }
}

-- src/main/java/com/deepseek/megahorror/entity/HollowEchoEntity.java --
package com.deepseek.megahorror.entity;

import net.minecraft.entity.EntityType;
import net.minecraft.entity.ai.goal.ActiveTargetGoal;
import net.minecraft.entity.ai.goal.LookAtEntityGoal;
import net.minecraft.entity.ai.goal.RevengeGoal;
import net.minecraft.entity.ai.goal.WanderAroundFarGoal;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.entity.mob.HostileEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;

public class HollowEchoEntity extends HostileEntity {
    private int teleportCooldown = 0;
    private int paranoiaTimer = 0;

    public HollowEchoEntity(EntityType<? extends HostileEntity> type, World world) {
        super(type, world);
        this.experiencePoints = 20;
        this.setNoGravity(false);
    }

    public static DefaultAttributeContainer.Builder createAttributes() {
        return HostileEntity.createMobAttributes()
            .add(EntityAttributes.GENERIC_MAX_HEALTH, 40.0)
            .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.3)
            .add(EntityAttributes.GENERIC_ATTACK_DAMAGE, 0.0)
            .add(EntityAttributes.GENERIC_FOLLOW_RANGE, 64.0);
    }

    @Override
    protected void initGoals() {
        this.goalSelector.add(1, new WanderAroundFarGoal(this, 0.5));
        this.goalSelector.add(2, new LookAtEntityGoal(this, PlayerEntity.class, 30.0f));
        this.targetSelector.add(1, new ActiveTargetGoal<>(this, PlayerEntity.class, true, false));
        this.targetSelector.add(2, new RevengeGoal(this));
    }

    @Override
    public void tick() {
        super.tick();

        if (!this.getWorld().isClient) {
            if (teleportCooldown > 0) teleportCooldown--;
            if (paranoiaTimer > 0) paranoiaTimer--;

            PlayerEntity target = this.getWorld().getClosestPlayer(this, 40.0);
            if (target != null) {
                Vec3d toEntity = target.getPos().subtract(this.getPos()).normalize();
                Vec3d lookVec = target.getRotationVector();
                double dot = lookVec.dotProduct(toEntity);
                boolean isLookingAt = dot > 0.5;

                if (!isLookingAt && teleportCooldown == 0 && this.distanceTo(target) > 8) {
                    teleportBehind(target);
                    teleportCooldown = 160;
                }

                if (this.distanceTo(target) < 6 && isLookingAt && paranoiaTimer == 0) {
                    target.addStatusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, 100, 1));
                    target.addStatusEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 120, 0));
                    target.addStatusEffect(new StatusEffectInstance(StatusEffects.DARKNESS, 80, 0));
                    this.getWorld().playSound(null, this.getBlockPos(), SoundEvents.ENTITY_WARDEN_SONIC_CHARGE, this.getSoundCategory(), 1.0f, 0.3f);
                    paranoiaTimer = 200;
                }
            }

            if (this.age % 10 == 0) {
                this.getWorld().addParticle(ParticleTypes.SCULK_SOUL,
                    this.getX() + (this.random.nextDouble() - 0.5) * 1.5,
                    this.getY() + 0.5,
                    this.getZ() + (this.random.nextDouble() - 0.5) * 1.5,
                    0, 0.05, 0);
            }
        }
    }

    private void teleportBehind(PlayerEntity player) {
        double angle = player.getYaw() * Math.PI / 180.0;
        double dist = 6.0 + this.random.nextDouble() * 4.0;
        double x = player.getX() - Math.sin(angle) * dist;
        double z = player.getZ() + Math.cos(angle) * dist;
        double y = player.getY();
        y = this.getWorld().getTopYInclusive();
        if (y < player.getY() - 5) y = player.getY();

        this.teleport(x, y, z);
        this.getWorld().playSound(null, this.getBlockPos(), SoundEvents.ENTITY_ENDERMAN_TELEPORT, this.getSoundCategory(), 0.6f, 0.8f);
        for (int i = 0; i < 20; i++) {
            this.getWorld().addParticle(ParticleTypes.PORTAL,
                x + (this.random.nextDouble() - 0.5) * 1.5,
                y + 0.5 + (this.random.nextDouble() - 0.5) * 1.5,
                z + (this.random.nextDouble() - 0.5) * 1.5,
                (this.random.nextDouble() - 0.5) * 0.3,
                0.1,
                (this.random.nextDouble() - 0.5) * 0.3);
        }
    }

    @Override
    public boolean isInvulnerable() { return false; }
}

-- src/main/java/com/deepseek/megahorror/client/MegaHorrorClient.java --
package com.deepseek.megahorror.client;

import com.deepseek.megahorror.MegaHorror;
import com.deepseek.megahorror.client.renderer.*;
import com.deepseek.megahorror.init.ModEntities;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;

public class MegaHorrorClient implements ClientModInitializer {
    @Override
    public void onInitializeClient() {
        MegaHorror.LOGGER.info("MEGA HORROR: Registering client renderers.");
        EntityRendererRegistry.register(ModEntities.USELESS, UselessRenderer::new);
        EntityRendererRegistry.register(ModEntities.GLARE, GlareRenderer::new);
        EntityRendererRegistry.register(ModEntities.SONDER, SonderRenderer::new);
        EntityRendererRegistry.register(ModEntities.RUSTED_COG, RustedCogRenderer::new);
        EntityRendererRegistry.register(ModEntities.HOLLOW_ECHO, HollowEchoRenderer::new);
    }
}

-- src/main/java/com/deepseek/megahorror/client/renderer/UselessRenderer.java --
package com.deepseek.megahorror.client.renderer;

import com.deepseek.megahorror.entity.UselessEntity;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.util.Identifier;

public class UselessRenderer extends MobEntityRenderer<UselessEntity, PlayerEntityModel<UselessEntity>> {
    private static final Identifier TEXTURE = new Identifier("megahorror", "textures/entity/useless.png");

    public UselessRenderer(EntityRendererFactory.Context context) {
        super(context, new PlayerEntityModel<>(context.getPart(PlayerEntityModel.LAYER_LOCATION), false), 0.5f);
    }

    @Override
    public Identifier getTexture(UselessEntity entity) {
        return TEXTURE;
    }
}

-- src/main/java/com/deepseek/megahorror/client/renderer/GlareRenderer.java --
package com.deepseek.megahorror.client.renderer;

import com.deepseek.megahorror.entity.GlareEntity;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.util.Identifier;

public class GlareRenderer extends MobEntityRenderer<GlareEntity, PlayerEntityModel<GlareEntity>> {
    private static final Identifier TEXTURE = new Identifier("megahorror", "textures/entity/glare.png");

    public GlareRenderer(EntityRendererFactory.Context context) {
        super(context, new PlayerEntityModel<>(context.getPart(PlayerEntityModel.LAYER_LOCATION), false), 0.5f);
    }

    @Override
    public Identifier getTexture(GlareEntity entity) {
        return TEXTURE;
    }
}

-- src/main/java/com/deepseek/megahorror/client/renderer/SonderRenderer.java --
package com.deepseek.megahorror.client.renderer;

import com.deepseek.megahorror.entity.SonderEntity;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.util.Identifier;

public class SonderRenderer extends MobEntityRenderer<SonderEntity, PlayerEntityModel<SonderEntity>> {
    private static final Identifier TEXTURE = new Identifier("megahorror", "textures/entity/sonder.png");

    public SonderRenderer(EntityRendererFactory.Context context) {
        super(context, new PlayerEntityModel<>(context.getPart(PlayerEntityModel.LAYER_LOCATION), false), 0.5f);
    }

    @Override
    public Identifier getTexture(SonderEntity entity) {
        return TEXTURE;
    }
}

-- src/main/java/com/deepseek/megahorror/client/renderer/RustedCogRenderer.java --
package com.deepseek.megahorror.client.renderer;

import com.deepseek.megahorror.entity.RustedCogEntity;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.util.Identifier;

public class RustedCogRenderer extends MobEntityRenderer<RustedCogEntity, PlayerEntityModel<RustedCogEntity>> {
    // Use Flywheel's texture if you've extracted it, otherwise fallback.
    private static final Identifier TEXTURE = new Identifier("flywheel", "textures/entity/mechanical_monster.png");
    // If you copied it to your own assets, use:
    // private static final Identifier TEXTURE = new Identifier("megahorror", "textures/entity/mechanical_monster.png");

    public RustedCogRenderer(EntityRendererFactory.Context context) {
        super(context, new PlayerEntityModel<>(context.getPart(PlayerEntityModel.LAYER_LOCATION), false), 0.8f);
    }

    @Override
    public Identifier getTexture(RustedCogEntity entity) {
        return TEXTURE;
    }
}

-- src/main/java/com/deepseek/megahorror/client/renderer/HollowEchoRenderer.java --
package com.deepseek.megahorror.client.renderer;

import com.deepseek.megahorror.entity.HollowEchoEntity;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.util.Identifier;

public class HollowEchoRenderer extends MobEntityRenderer<HollowEchoEntity, PlayerEntityModel<HollowEchoEntity>> {
    private static final Identifier TEXTURE = new Identifier("flywheel", "textures/entity/rake.png");

    public HollowEchoRenderer(EntityRendererFactory.Context context) {
        super(context, new PlayerEntityModel<>(context.getPart(PlayerEntityModel.LAYER_LOCATION), false), 0.6f);
    }

    @Override
    public Identifier getTexture(HollowEchoEntity entity) {
        return TEXTURE;
    }
}

-- src/main/java/com/deepseek/megahorror/client/effect/ScreenShakeHandler.java --
package com.deepseek.megahorror.client.effect;

import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;

public class ScreenShakeHandler {
    private static int shakeTicks = 0;
    private static float intensity = 0;

    public static void shake(PlayerEntity player, int ticks, float strength) {
        if (player == MinecraftClient.getInstance().player) {
            shakeTicks = ticks;
            intensity = strength;
        }
    }

    public static void clientTick() {
        if (shakeTicks > 0) {
            // Apply shake via mixin – placeholder
            shakeTicks--;
        }
    }

    public static int getShakeTicks() { return shakeTicks; }
    public static float getIntensity() { return intensity; }
}

-- src/main/java/com/deepseek/megahorror/client/effect/FOVManipulator.java --
package com.deepseek.megahorror.client.effect;

import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.client.MinecraftClient;

public class FOVManipulator {
    private static float fovMultiplier = 1.0f;

    public static void setFOV(PlayerEntity player, float multiplier) {
        if (player == MinecraftClient.getInstance().player) {
            fovMultiplier = multiplier;
        }
    }

    public static float getFOVMultiplier() { return fovMultiplier; }
    public static void resetFOV() { fovMultiplier = 1.0f; }
}

-- src/main/java/com/deepseek/megahorror/client/effect/RenderDistanceReducer.java --
package com.deepseek.megahorror.client.effect;

import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;

public class RenderDistanceReducer {
    private static int targetRenderDistance = -1;

    public static void setRenderDistance(PlayerEntity player, int chunks) {
        if (player == MinecraftClient.getInstance().player) {
            targetRenderDistance = chunks;
        }
    }

    public static int getRenderDistance() { return targetRenderDistance; }
}

-- src/main/java/com/deepseek/megahorror/client/effect/ColorInverter.java --
package com.deepseek.megahorror.client.effect;

import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.client.MinecraftClient;

public class ColorInverter {
    private static boolean inverted = false;

    public static void setInverted(PlayerEntity player, boolean inv) {
        if (player == MinecraftClient.getInstance().player) {
            inverted = inv;
        }
    }

    public static boolean isInverted() { return inverted; }
}

-- src/main/java/com/deepseek/megahorror/mixin/WorldRendererMixin.java --
package com.deepseek.megahorror.mixin;

import com.deepseek.megahorror.client.effect.ColorInverter;
import net.minecraft.client.render.WorldRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(WorldRenderer.class)
public class WorldRendererMixin {
    @Inject(method = "render", at = @At("HEAD"))
    private void onRender(CallbackInfo ci) {
        if (ColorInverter.isInverted()) {
            // Placeholder – requires shader injection for full effect
        }
    }
}

-- src/main/java/com/deepseek/megahorror/util/SpawnScheduler.java --
package com.deepseek.megahorror.util;

import com.deepseek.megahorror.init.ModEntities;
import com.deepseek.megahorror.entity.*;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.entity.player.PlayerEntity;

import java.util.Random;

public class SpawnScheduler {
    private static int tickCounter = 0;
    private static int dayCounter = 0;
    private static int lastDayChecked = -1;
    private static Random rand = new Random();

    public static void tick(MinecraftServer server) {
        tickCounter++;
        if (tickCounter >= 600) {
            tickCounter = 0;
            for (ServerWorld world : server.getWorlds()) {
                long dayTime = world.getTimeOfDay() / 24000L;
                if (dayTime != lastDayChecked) {
                    dayCounter++;
                    lastDayChecked = (int)dayTime;
                }
                // Useless: every 3 days, 15% chance
                if (dayCounter % 3 == 0 && rand.nextInt(100) < 15) {
                    spawnUseless(world);
                }
                // Glare: 50% chance each night
                if (world.getTimeOfDay() % 24000 > 13000 && world.getTimeOfDay() % 24000 < 23000) {
                    if (rand.nextInt(100) < 50) {
                        spawnGlare(world);
                    }
                }
                // Sonder: ambient, rare
                if (rand.nextInt(1000) < 5) {
                    spawnSonder(world);
                }
                // Rusted Cog: 10% chance every 2 minutes (1200 ticks) below Y=40
                if (world.getTimeOfDay() % 1200 == 0 && rand.nextInt(100) < 10) {
                    spawnRustedCog(world);
                }
                // Hollow Echo: 8% chance per minute during night in open areas
                if (world.getTimeOfDay() % 2400 == 0 && world.getTimeOfDay() % 24000 > 13000 && rand.nextInt(100) < 8) {
                    spawnHollowEcho(world);
                }
            }
        }
    }

    private static void spawnUseless(ServerWorld world) {
        PlayerEntity player = world.getClosestPlayer(BlockPos.ORIGIN, 100, false);
        if (player == null) return;
        double angle = rand.nextDouble() * 2 * Math.PI;
        double dist = 30 + rand.nextDouble() * 10;
        BlockPos pos = player.getBlockPos().add(
            (int)(Math.cos(angle) * dist),
            0,
            (int)(Math.sin(angle) * dist)
        );
        UselessEntity entity = new UselessEntity(ModEntities.USELESS, world);
        entity.refreshPositionAndAngles(pos, 0, 0);
        world.spawnEntity(entity);
    }

    private static void spawnGlare(ServerWorld world) {
        PlayerEntity player = world.getClosestPlayer(BlockPos.ORIGIN, 80, false);
        if (player == null) return;
        double angle = rand.nextDouble() * 2 * Math.PI;
        double dist = 30 + rand.nextDouble() * 30;
        BlockPos pos = player.getBlockPos().add(
            (int)(Math.cos(angle) * dist),
            10 + rand.nextInt(20),
            (int)(Math.sin(angle) * dist)
        );
        GlareEntity entity = new GlareEntity(ModEntities.GLARE, world);
        entity.refreshPositionAndAngles(pos, 0, 0);
        world.spawnEntity(entity);
    }

    private static void spawnSonder(ServerWorld world) {
        PlayerEntity player = world.getClosestPlayer(BlockPos.ORIGIN, 60, false);
        if (player == null) return;
        double angle = rand.nextDouble() * 2 * Math.PI;
        double dist = 10 + rand.nextDouble() * 20;
        BlockPos pos = player.getBlockPos().add(
            (int)(Math.cos(angle) * dist),
            5 + rand.nextInt(10),
            (int)(Math.sin(angle) * dist)
        );
        SonderEntity entity = new SonderEntity(ModEntities.SONDER, world);
        entity.refreshPositionAndAngles(pos, 0, 0);
        world.spawnEntity(entity);
    }

    private static void spawnRustedCog(ServerWorld world) {
        PlayerEntity player = world.getClosestPlayer(BlockPos.ORIGIN, 60, false);
        if (player == null) return;
        BlockPos pos = player.getBlockPos().add(rand.nextInt(30) - 15, -rand.nextInt(30), rand.nextInt(30) - 15);
        if (world.getBlockState(pos).isAir() && world.getBlockState(pos.down()).isOpaque()) {
            RustedCogEntity entity = new RustedCogEntity(ModEntities.RUSTED_COG, world);
            entity.refreshPositionAndAngles(pos, 0, 0);
            world.spawnEntity(entity);
        }
    }

    private static void spawnHollowEcho(ServerWorld world) {
        PlayerEntity player = world.getClosestPlayer(BlockPos.ORIGIN, 80, false);
        if (player == null) return;
        BlockPos pos = player.getBlockPos().add(rand.nextInt(40) - 20, 0, rand.nextInt(40) - 20);
        if (world.getBlockState(pos).isAir() && world.getBlockState(pos.down()).isOpaque()) {
            HollowEchoEntity entity = new HollowEchoEntity(ModEntities.HOLLOW_ECHO, world);
            entity.refreshPositionAndAngles(pos, 0, 0);
            world.spawnEntity(entity);
        }
    }
}

-- src/main/resources/assets/megahorror/sounds.json --
{
  "useless_scream": {
    "sounds": [
      {
        "name": "megahorror:useless_scream",
        "stream": true
      }
    ]
  },
  "glitch_ambient": {
    "sounds": [
      {
        "name": "megahorror:glitch_ambient",
        "stream": false
      }
    ]
  },
  "sonder_whisper": {
    "sounds": [
      {
        "name": "megahorror:sonder_whisper",
        "stream": false
      }
    ]
  }
}

-- src/main/resources/assets/megahorror/lang/en_us.json --
{
  "entity.megahorror.useless": "Useless",
  "entity.megahorror.glare": "Glare",
  "entity.megahorror.sonder": "Sonder",
  "entity.megahorror.rusted_cog": "Rusted Cog",
  "entity.megahorror.hollow_echo": "Hollow Echo"
}

-- src/main/resources/assets/megahorror/textures/entity/useless.png (base64) --
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

-- src/main/resources/assets/megahorror/textures/entity/glare.png (base64) --
(Use a semi-transparent gray silhouette – I provide a minimal placeholder)
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

-- src/main/resources/assets/megahorror/textures/entity/sonder.png (base64) --
(Use a blue-ish mist – placeholder)
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

-- (Audio files) --
Place these .ogg files in src/main/resources/assets/megahorror/sounds/
- useless_scream.ogg (download from your YouTube link)
- glitch_ambient.ogg (your own sound)
- sonder_whisper.ogg (your own sound)

=== END MEGA HORROR FINAL ===