CrystalInfection/

├── src/main/java/com/example/crystalinfection/

│   ├── CrystalInfection.java

│   │

│   ├── registry/

│   │   ├── ModBlocks.java

│   │   ├── ModItems.java

│   │   ├── ModEntities.java

│   │   ├── ModEffects.java

│   │   └── ModCreativeTab.java

│   │

│   ├── entity/

│   │   ├── CrystalBruteEntity.java

│   │   ├── CrystalGuardianEntity.java

│   │   ├── CrystalBossEntity.java

│   │   ├── CrystalZombieEntity.java

│   │   ├── CrystalSkeletonEntity.java

│   │   ├── CrystalSpiderEntity.java

│   │   ├── CrystalCreeperEntity.java

│   │   └── CrystalEndermanEntity.java

│   │

│   ├── player/

│   │   ├── CrystalPlayerData.java

│   │   ├── CrystalTransformation.java

│   │   └── CrystalAbilities.java

│   │

│   ├── infection/

│   │   ├── InfectionManager.java

│   │   ├── MeteorManager.java

│   │   └── CrystalSpread.java

│   │

│   ├── world/

│   │   ├── CrystalMeteorEntity.java

│   │   └── CrystalWorldEvents.java

│   │

│   └── client/

│       ├── renderer/

│       └── model/

│

└── src/main/resources/

    └── assets/crystalinfection/

        ├── textures/

        ├── models/

        ├── sounds/

        └── lang/

ModBlocks.java

CRYSTAL_GRASS

CRYSTAL_DIRT

CRYSTAL_STONE

CRYSTAL_DEEPSLATE

CRYSTAL_SAND

CRYSTAL_GRAVEL

CRYSTAL_ICE

CRYSTAL_LOG

CRYSTAL_LEAVES

CRYSTAL_PLANKS

CRYSTAL_HEART

CRYSTAL_SPIKES

CRYSTAL_LANTERN

CRYSTAL_PORTAL_FRAME

CRYSTAL_FIRE

ANIMATED_CRYSTAL_ORE

ANIMATED_CRYSTAL_HEART

ModItems.java

CRYSTAL_SHARD

REFINED_CRYSTAL

CRYSTAL_CORE

CRYSTAL_SWORD

CRYSTAL_PICKAXE

CRYSTAL_AXE

CRYSTAL_SHOVEL

CRYSTAL_HOE

CRYSTAL_HELMET

CRYSTAL_CHESTPLATE

CRYSTAL_LEGGINGS

CRYSTAL_BOOTS

public enum CrystalStage {

    HUMAN,

    BRUTE,

    GUARDIAN,

    BOSS

}

if(infectedBlocks >= 500){

    stage = CrystalStage.BRUTE;

}

if(infectedBlocks >= 2500){

    stage = CrystalStage.GUARDIAN;

}

if(infectedBlocks >= 10000){

    stage = CrystalStage.BOSS;

}

public enum BossPhase {

    CORRUPTION,

    GUARDIAN_SUMMON,

    APOCALYPSE,

    FINAL_EVOLUTION

}

public class CrystalMeteorEvent {

    public static int MAX_METEORS =

            5 + new Random().nextInt(6);

    public static void spawnMeteor(ServerLevel level){

        if(MeteorManager.count >= MAX_METEORS)

            return;

        CrystalMeteorEntity meteor =

                new CrystalMeteorEntity(

                ModEntities.CRYSTAL_METEOR.get(),

                level);

        meteor.setPos(

                level.random.nextInt(5000)-2500,

                250,

                level.random.nextInt(5000)-2500);

        level.addFreshEntity(meteor);

        MeteorManager.count++;

    }

}

public class CrystalSpread {

public static void infectBlock(

ServerLevel level,

BlockPos pos){

    if(level.getBlockState(pos)

       .is(Blocks.GRASS_BLOCK)){

        level.setBlock(

        pos,

        ModBlocks.CRYSTAL_GRASS

        .get()

        .defaultBlockState(),

        3);

    }

}

}

public class CrystalAbilities {

public static void crystalBarrier(Player player){

player.addEffect(

new MobEffectInstance(

MobEffects.DAMAGE_RESISTANCE,

200,

2));

}

public static void crystalDash(Player player){

player.setDeltaMovement(

player.getLookAngle()

.scale(2));

}

public static void spreadCrystal(Player player){

BlockPos pos =

player.blockPosition();

player.level()

.setBlock(

pos,

ModBlocks.CRYSTAL_STONE

.get()

.defaultBlockState(),

3);

}

}

assets/crystalinfection/textures/entity/

crystal_human.png

crystal_brute.png

crystal_guardian.png

crystal_boss.png

crystal_zombie.png

crystal_skeleton.png

crystal_spider.png

crystal_creeper.png

crystal_enderman.png

32x32 player skins

64x64 mobs

No transparency

Solid teal crystal

Cyan glowing cracks

Vanilla pixel style