diff --git a/src/main/java/com/jenny/compressedtnt/Compressedtnt.java b/src/main/java/com/jenny/compressedtnt/Compressedtnt.java
index 2ae7aae..9ecc41f 100644
--- a/src/main/java/com/jenny/compressedtnt/Compressedtnt.java
+++ b/src/main/java/com/jenny/compressedtnt/Compressedtnt.java
@@ -1,13 +1,10 @@
 package com.jenny.compressedtnt;
 
 import com.jenny.compressedtnt.blocks.blocks;
-import com.jenny.compressedtnt.entities.client.BaseTNTRenderer;
 import com.jenny.compressedtnt.entities.entities;
 import com.mojang.logging.LogUtils;
-import net.minecraft.client.renderer.entity.EntityRenderers;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.event.BuildCreativeModeTabContentsEvent;
 import net.minecraftforge.event.server.ServerStartingEvent;
 import net.minecraftforge.eventbus.api.IEventBus;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
@@ -37,20 +34,12 @@ public class Compressedtnt {
 
         // Register ourselves for server and other game events we are interested in
         MinecraftForge.EVENT_BUS.register(this);
-
-        // Register the item to a creative tab
-        modEventBus.addListener(this::addCreative);
     }
 
     private void commonSetup(final FMLCommonSetupEvent event) {
 
     }
 
-    // Add the example block item to the building blocks tab
-    private void addCreative(BuildCreativeModeTabContentsEvent event) {
-
-    }
-
     // You can use SubscribeEvent and let the Event Bus discover methods to call
     @SubscribeEvent
     public void onServerStarting(ServerStartingEvent event) {
@@ -63,7 +52,7 @@ public class Compressedtnt {
 
         @SubscribeEvent
         public static void onClientSetup(FMLClientSetupEvent event) {
-            EntityRenderers.register(entities.TNT_HOMING.get(), pContext -> new BaseTNTRenderer(pContext, blocks.TNT_HOMING.get()));
+            entities.registerRenderers();
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/java/com/jenny/compressedtnt/blocks/ClusterTNTBlock.java b/src/main/java/com/jenny/compressedtnt/blocks/ClusterTNTBlock.java
index eeec61a..2ef8705 100644
--- a/src/main/java/com/jenny/compressedtnt/blocks/ClusterTNTBlock.java
+++ b/src/main/java/com/jenny/compressedtnt/blocks/ClusterTNTBlock.java
@@ -8,6 +8,7 @@ import net.minecraft.sounds.SoundSource;
 import net.minecraft.util.RandomSource;
 import net.minecraft.world.entity.LivingEntity;
 import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.level.Explosion;
 import net.minecraft.world.level.Level;
 import net.minecraft.world.level.block.TntBlock;
 import net.minecraft.world.level.block.state.BlockBehaviour;
@@ -32,7 +33,7 @@ public class ClusterTNTBlock extends TntBlock {
         this.childRange = childRange;
     }
 
-
+    @Override
     public void onCaughtFire(@NotNull BlockState state, @NotNull Level world, @NotNull BlockPos pos, @Nullable Direction face, @Nullable LivingEntity igniter) {
         explode(world, pos, igniter, this.pRadius, this.fuseTime, this.childCount, this.childRange);
     }
@@ -42,20 +43,33 @@ public class ClusterTNTBlock extends TntBlock {
         explode(p_57434_, p_57435_, (LivingEntity)null, pRadius, fuseTime, childCount, childRange);
     }
 
+    public static Vec3 getMove(Level level, int childRange) {
+        RandomSource rng = level.getRandom();
+        float offsetX = (float) rng.nextInt(- childRange, childRange + 1) / 15;
+        float offsetZ = (float) rng.nextInt(- childRange, childRange + 1) / 15;
+        return new Vec3(offsetX, 0,  offsetZ);
+    }
+
     @Deprecated
     private static void explode(Level level, BlockPos blockPos, @Nullable LivingEntity entity, float pRadius, int fuseTime, int childCount, int childRange) {
-        RandomSource rng = level.getRandom();
-        float offsetX, offsetZ;
         if (!level.isClientSide) {
             for (int i = 0; i < childCount; i++) {
-                offsetX = (float) rng.nextInt(- childRange, childRange + 1) / 15;
-                offsetZ = (float) rng.nextInt(- childRange, childRange + 1) / 15;
-                Vec3 move = new Vec3(offsetX, 0,  offsetZ);
-                ClusterPrimedTNT primedtnt = new ClusterPrimedTNT(level, (double) blockPos.getX() + (double) 0.5F, (double) blockPos.getY(), (double) blockPos.getZ() + (double) 0.5F, entity, pRadius, fuseTime, move);
+                ClusterPrimedTNT primedtnt = new ClusterPrimedTNT(level, (double) blockPos.getX() + (double) 0.5F, (double) blockPos.getY(), (double) blockPos.getZ() + (double) 0.5F, entity, pRadius, fuseTime, getMove(level, childRange));
                 level.addFreshEntity(primedtnt);
                 level.gameEvent(entity, GameEvent.PRIME_FUSE, blockPos);
             }
             level.playSound((Player) null, blockPos.getX(), blockPos.getY(), blockPos.getZ(), SoundEvents.TNT_PRIMED, SoundSource.BLOCKS, 1.0F, 1.0F);
         }
     }
+
+    @Override
+    public void wasExploded(Level level, BlockPos blockPos, Explosion pExplosion) {
+        if (!level.isClientSide) {
+            for (int i = 0; i < childCount; i++) {
+                int ft = (short) (level.random.nextInt(fuseTime / 4) + fuseTime / 8);
+                ClusterPrimedTNT primedtnt = new ClusterPrimedTNT(level, (double) blockPos.getX() + (double) 0.5F, (double) blockPos.getY(), (double) blockPos.getZ() + (double) 0.5F, pExplosion.getIndirectSourceEntity(), pRadius, ft, getMove(level, childRange));
+                level.addFreshEntity(primedtnt);
+            }
+        }
+    }
 }
diff --git a/src/main/java/com/jenny/compressedtnt/blocks/homingTNTBlock.java b/src/main/java/com/jenny/compressedtnt/blocks/homingTNTBlock.java
index f098a5b..dba1d8c 100644
--- a/src/main/java/com/jenny/compressedtnt/blocks/homingTNTBlock.java
+++ b/src/main/java/com/jenny/compressedtnt/blocks/homingTNTBlock.java
@@ -7,6 +7,7 @@ import net.minecraft.sounds.SoundEvents;
 import net.minecraft.sounds.SoundSource;
 import net.minecraft.world.entity.LivingEntity;
 import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.level.Explosion;
 import net.minecraft.world.level.Level;
 import net.minecraft.world.level.block.TntBlock;
 import net.minecraft.world.level.block.state.BlockBehaviour;
@@ -27,7 +28,7 @@ public class homingTNTBlock extends TntBlock {
         this.speed = speed;
     }
 
-
+    @Override
     public void onCaughtFire(@NotNull BlockState state, @NotNull Level world, @NotNull BlockPos pos, @Nullable Direction face, @Nullable LivingEntity igniter) {
         explode(world, pos, igniter, this.pRadius, this.fuseTime, this.speed);
     }
@@ -46,4 +47,14 @@ public class homingTNTBlock extends TntBlock {
             level.gameEvent(entity, GameEvent.PRIME_FUSE, blockPos);
         }
     }
+
+    @Override
+    public void wasExploded(Level level, BlockPos blockPos, Explosion pExplosion) {
+        if (!level.isClientSide) {
+            homingPrimedTNT primedtnt = new homingPrimedTNT(level, (double) blockPos.getX() + (double) 0.5F, (double) blockPos.getY(), (double) blockPos.getZ() + (double) 0.5F, pExplosion.getIndirectSourceEntity(), pRadius, fuseTime, speed);
+            int i = primedtnt.getFuse();
+            primedtnt.setFuse((short) (level.random.nextInt(i / 4) + i / 8));
+            level.addFreshEntity(primedtnt);
+        }
+    }
 }
diff --git a/src/main/java/com/jenny/compressedtnt/blocks/strongerTNTBlock.java b/src/main/java/com/jenny/compressedtnt/blocks/strongerTNTBlock.java
index 7709e65..6fa515e 100644
--- a/src/main/java/com/jenny/compressedtnt/blocks/strongerTNTBlock.java
+++ b/src/main/java/com/jenny/compressedtnt/blocks/strongerTNTBlock.java
@@ -7,6 +7,7 @@ import net.minecraft.sounds.SoundEvents;
 import net.minecraft.sounds.SoundSource;
 import net.minecraft.world.entity.LivingEntity;
 import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.level.Explosion;
 import net.minecraft.world.level.Level;
 import net.minecraft.world.level.block.TntBlock;
 import net.minecraft.world.level.block.state.BlockBehaviour;
@@ -25,7 +26,7 @@ public class strongerTNTBlock extends TntBlock {
         this.fuseTime = fuseTime;
     }
 
-
+    @Override
     public void onCaughtFire(BlockState state, Level world, BlockPos pos, @Nullable Direction face, @Nullable LivingEntity igniter) {
         explode(world, pos, igniter, this.pRadius, this.fuseTime);
     }
@@ -45,4 +46,15 @@ public class strongerTNTBlock extends TntBlock {
         }
 
     }
+
+    @Override
+    public void wasExploded(Level level, BlockPos blockPos, Explosion pExplosion) {
+        if (!level.isClientSide) {
+            int ft = (short) (level.random.nextInt(fuseTime / 4) + fuseTime / 8);
+            StrongerPrimedTNT primedtnt = new StrongerPrimedTNT(level, (double) blockPos.getX() + (double) 0.5F, (double) blockPos.getY(), (double) blockPos.getZ() + (double) 0.5F, pExplosion.getIndirectSourceEntity(), pRadius, ft);
+            int i = primedtnt.getFuse();
+            primedtnt.setFuse((short) (level.random.nextInt(i / 4) + i / 8));
+            level.addFreshEntity(primedtnt);
+        }
+    }
 }
diff --git a/src/main/java/com/jenny/compressedtnt/entities/ClusterPrimedTNT.java b/src/main/java/com/jenny/compressedtnt/entities/ClusterPrimedTNT.java
index c82cebc..5e88ebc 100644
--- a/src/main/java/com/jenny/compressedtnt/entities/ClusterPrimedTNT.java
+++ b/src/main/java/com/jenny/compressedtnt/entities/ClusterPrimedTNT.java
@@ -1,25 +1,23 @@
 package com.jenny.compressedtnt.entities;
 
+import net.minecraft.world.entity.EntityType;
 import net.minecraft.world.entity.LivingEntity;
-import net.minecraft.world.entity.item.PrimedTnt;
 import net.minecraft.world.level.Level;
 import net.minecraft.world.phys.Vec3;
 
 import javax.annotation.Nullable;
 
-public class ClusterPrimedTNT extends PrimedTnt {
-    final float pRadius;
+public class ClusterPrimedTNT extends basePrimedTNT {
 
-    public ClusterPrimedTNT (Level pLevel, double pX, double pY, double pZ, @Nullable LivingEntity pOwner, float pRadius, int fuseTime, Vec3 move) {
-        super(pLevel, pX, pY, pZ, pOwner);
-        this.pRadius = pRadius;
-        this.setFuse(fuseTime);
+    public ClusterPrimedTNT (Level pLevel, double pX, double pY, double pZ, @Nullable LivingEntity pOwner, float power, int fuse, Vec3 move) {
+        super(entities.TNT_CLUSTER.get(), pLevel, pOwner);
+        this.setPos(pX, pY, pZ);
+        this.setFuse(fuse);
+        this.setPower(power);
         this.addDeltaMovement(move);
     }
 
-    @Override
-    protected void explode() {
-        float $$0 = pRadius;
-        this.level().explode(this, this.getX(), this.getY((double)0.0625F), this.getZ(), pRadius, Level.ExplosionInteraction.TNT);
+    public ClusterPrimedTNT(EntityType<ClusterPrimedTNT> entityType, Level level) {
+        super(entityType, level, null);
     }
 }
diff --git a/src/main/java/com/jenny/compressedtnt/entities/StrongerPrimedTNT.java b/src/main/java/com/jenny/compressedtnt/entities/StrongerPrimedTNT.java
index 37cd7ec..3e2f997 100644
--- a/src/main/java/com/jenny/compressedtnt/entities/StrongerPrimedTNT.java
+++ b/src/main/java/com/jenny/compressedtnt/entities/StrongerPrimedTNT.java
@@ -1,23 +1,20 @@
 package com.jenny.compressedtnt.entities;
 
+import net.minecraft.world.entity.EntityType;
 import net.minecraft.world.entity.LivingEntity;
-import net.minecraft.world.entity.item.PrimedTnt;
 import net.minecraft.world.level.Level;
 
 import javax.annotation.Nullable;
 
-public class StrongerPrimedTNT extends PrimedTnt {
-    final float pRadius;
-
-    public StrongerPrimedTNT (Level pLevel, double pX, double pY, double pZ, @Nullable LivingEntity pOwner, float pRadius, int fuseTime) {
-        super(pLevel, pX, pY, pZ, pOwner);
-        this.pRadius = pRadius;
-        this.setFuse(fuseTime);
+public class StrongerPrimedTNT extends basePrimedTNT {
+    public StrongerPrimedTNT (Level pLevel, double pX, double pY, double pZ, @Nullable LivingEntity pOwner, float power, int fuse) {
+        super(entities.TNT_STRONGER.get(), pLevel, pOwner);
+        this.setPos(pX, pY, pZ);
+        this.setFuse(fuse);
+        this.setPower(power);
     }
 
-    @Override
-    protected void explode() {
-        float $$0 = pRadius;
-        this.level().explode(this, this.getX(), this.getY((double)0.0625F), this.getZ(), pRadius, Level.ExplosionInteraction.TNT);
+    public StrongerPrimedTNT(EntityType<StrongerPrimedTNT> entityType, Level level) {
+        super(entityType, level, null);
     }
 }
diff --git a/src/main/java/com/jenny/compressedtnt/entities/BasePrimedTNT.java b/src/main/java/com/jenny/compressedtnt/entities/basePrimedTNT.java
similarity index 82%
rename from src/main/java/com/jenny/compressedtnt/entities/BasePrimedTNT.java
rename to src/main/java/com/jenny/compressedtnt/entities/basePrimedTNT.java
index 4503b26..876a040 100644
--- a/src/main/java/com/jenny/compressedtnt/entities/BasePrimedTNT.java
+++ b/src/main/java/com/jenny/compressedtnt/entities/basePrimedTNT.java
@@ -5,21 +5,24 @@ import net.minecraft.nbt.CompoundTag;
 import net.minecraft.network.syncher.EntityDataAccessor;
 import net.minecraft.network.syncher.EntityDataSerializers;
 import net.minecraft.network.syncher.SynchedEntityData;
-import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.EntityType;
-import net.minecraft.world.entity.MoverType;
-import net.minecraft.world.entity.TraceableEntity;
+import net.minecraft.world.entity.*;
 import net.minecraft.world.level.Level;
 
-public abstract class BasePrimedTNT extends Entity implements TraceableEntity {
-    private static final EntityDataAccessor<Integer> DATA_FUSE_ID = SynchedEntityData.defineId(BasePrimedTNT.class, EntityDataSerializers.INT);
-    private static final EntityDataAccessor<Float> DATA_POWER_ID = SynchedEntityData.defineId(BasePrimedTNT.class, EntityDataSerializers.FLOAT);
+import javax.annotation.Nullable;
 
-    public BasePrimedTNT(EntityType<? extends BasePrimedTNT> pEntityType, Level pLevel) {
+public abstract class basePrimedTNT extends Entity implements TraceableEntity {
+    private static final EntityDataAccessor<Integer> DATA_FUSE_ID = SynchedEntityData.defineId(basePrimedTNT.class, EntityDataSerializers.INT);
+    private static final EntityDataAccessor<Float> DATA_POWER_ID = SynchedEntityData.defineId(basePrimedTNT.class, EntityDataSerializers.FLOAT);
+
+    @Nullable
+    private LivingEntity owner;
+
+    public basePrimedTNT(EntityType<? extends basePrimedTNT> pEntityType, Level pLevel, @Nullable LivingEntity owner) {
         super(pEntityType, pLevel);
         double d0 = pLevel.random.nextDouble() * (double)((float)Math.PI * 2F);
         this.setDeltaMovement(-Math.sin(d0) * 0.02D, (double)0.2F, -Math.cos(d0) * 0.02D);
         this.blocksBuilding = true;
+        this.owner = owner;
     }
 
     protected void explode() {
@@ -91,4 +94,13 @@ public abstract class BasePrimedTNT extends Entity implements TraceableEntity {
         this.setFuse(pCompound.getShort("Fuse"));
         this.setPower(pCompound.getFloat("Power"));
     }
+
+    @Nullable
+    public LivingEntity getOwner() {
+        return this.owner;
+    }
+
+    public void setOwner(LivingEntity owner) {
+        this.owner = owner;
+    }
 }
diff --git a/src/main/java/com/jenny/compressedtnt/entities/client/BaseTNTRenderer.java b/src/main/java/com/jenny/compressedtnt/entities/client/BaseTNTRenderer.java
index d58051b..65b2656 100644
--- a/src/main/java/com/jenny/compressedtnt/entities/client/BaseTNTRenderer.java
+++ b/src/main/java/com/jenny/compressedtnt/entities/client/BaseTNTRenderer.java
@@ -1,7 +1,6 @@
 package com.jenny.compressedtnt.entities.client;
 
-import com.jenny.compressedtnt.blocks.blocks;
-import com.jenny.compressedtnt.entities.BasePrimedTNT;
+import com.jenny.compressedtnt.entities.basePrimedTNT;
 import com.mojang.blaze3d.vertex.PoseStack;
 import com.mojang.math.Axis;
 import net.minecraft.client.renderer.MultiBufferSource;
@@ -14,16 +13,18 @@ import net.minecraft.resources.ResourceLocation;
 import net.minecraft.util.Mth;
 import net.minecraft.world.level.block.Block;
 
-public class BaseTNTRenderer extends EntityRenderer<BasePrimedTNT> {
-    private final BlockRenderDispatcher blockRenderer;
+public class BaseTNTRenderer extends EntityRenderer<basePrimedTNT> {
+    private BlockRenderDispatcher blockRenderer;
+    private final Block block;
 
     public BaseTNTRenderer(EntityRendererProvider.Context pContext, Block block) {
         super(pContext);
         this.shadowRadius = 0.5F;
         this.blockRenderer = pContext.getBlockRenderDispatcher();
+        this.block = block;
     }
 
-    public void render(BasePrimedTNT pEntity, float pEntityYaw, float pPartialTicks, PoseStack pPoseStack, MultiBufferSource pBuffer, int pPackedLight) {
+    public void render(basePrimedTNT pEntity, float pEntityYaw, float pPartialTicks, PoseStack pPoseStack, MultiBufferSource pBuffer, int pPackedLight) {
         pPoseStack.pushPose();
         pPoseStack.translate(0.0F, 0.5F, 0.0F);
         int i = pEntity.getFuse();
@@ -39,15 +40,12 @@ public class BaseTNTRenderer extends EntityRenderer<BasePrimedTNT> {
         pPoseStack.mulPose(Axis.YP.rotationDegrees(-90.0F));
         pPoseStack.translate(-0.5F, -0.5F, 0.5F);
         pPoseStack.mulPose(Axis.YP.rotationDegrees(90.0F));
-        TntMinecartRenderer.renderWhiteSolidBlock(this.blockRenderer, blocks.TNT_HOMING.get().defaultBlockState(), pPoseStack, pBuffer, pPackedLight, i / 5 % 2 == 0);
+        TntMinecartRenderer.renderWhiteSolidBlock(this.blockRenderer, block.defaultBlockState(), pPoseStack, pBuffer, pPackedLight, i / 5 % 2 == 0);
         pPoseStack.popPose();
         super.render(pEntity, pEntityYaw, pPartialTicks, pPoseStack, pBuffer, pPackedLight);
     }
 
-    /**
-     * Returns the location of an entity's texture.
-     */
-    public ResourceLocation getTextureLocation(BasePrimedTNT pEntity) {
+    public ResourceLocation getTextureLocation(basePrimedTNT pEntity) {
         return TextureAtlas.LOCATION_BLOCKS;
     }
 }
diff --git a/src/main/java/com/jenny/compressedtnt/entities/client/clusterTNTRenderer.java b/src/main/java/com/jenny/compressedtnt/entities/client/clusterTNTRenderer.java
new file mode 100644
index 0000000..4eee825
--- /dev/null
+++ b/src/main/java/com/jenny/compressedtnt/entities/client/clusterTNTRenderer.java
@@ -0,0 +1,53 @@
+package com.jenny.compressedtnt.entities.client;
+
+import com.jenny.compressedtnt.blocks.blocks;
+import com.jenny.compressedtnt.entities.ClusterPrimedTNT;
+import com.mojang.blaze3d.vertex.PoseStack;
+import com.mojang.math.Axis;
+import net.minecraft.client.renderer.MultiBufferSource;
+import net.minecraft.client.renderer.block.BlockRenderDispatcher;
+import net.minecraft.client.renderer.entity.EntityRenderer;
+import net.minecraft.client.renderer.entity.EntityRendererProvider;
+import net.minecraft.client.renderer.entity.TntMinecartRenderer;
+import net.minecraft.client.renderer.texture.TextureAtlas;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.util.Mth;
+import org.jetbrains.annotations.NotNull;
+
+public class clusterTNTRenderer extends EntityRenderer<ClusterPrimedTNT> {
+    private final BlockRenderDispatcher blockRenderer;
+
+    public clusterTNTRenderer(EntityRendererProvider.Context pContext) {
+        super(pContext);
+        this.shadowRadius = 0.5F;
+        this.blockRenderer = pContext.getBlockRenderDispatcher();
+    }
+
+    public void render(ClusterPrimedTNT pEntity, float pEntityYaw, float pPartialTicks, PoseStack pPoseStack, @NotNull MultiBufferSource pBuffer, int pPackedLight) {
+        pPoseStack.pushPose();
+        pPoseStack.translate(0.0F, 0.5F, 0.0F);
+        int i = pEntity.getFuse();
+        if ((float)i - pPartialTicks + 1.0F < 10.0F) {
+            float f = 1.0F - ((float)i - pPartialTicks + 1.0F) / 10.0F;
+            f = Mth.clamp(f, 0.0F, 1.0F);
+            f *= f;
+            f *= f;
+            float f1 = 0.5f + f * 0.3F;
+            pPoseStack.scale(f1, f1, f1);
+        }
+        else {
+            pPoseStack.scale(0.5f, 0.5f, 0.5f);
+        }
+
+        pPoseStack.mulPose(Axis.YP.rotationDegrees(-90.0F));
+        pPoseStack.translate(-0.5F, -0.5F, 0.5F);
+        pPoseStack.mulPose(Axis.YP.rotationDegrees(90.0F));
+        TntMinecartRenderer.renderWhiteSolidBlock(this.blockRenderer, blocks.TNT_CLUSTER_2.get().defaultBlockState(), pPoseStack, pBuffer, pPackedLight, i / 5 % 2 == 0);
+        pPoseStack.popPose();
+        super.render(pEntity, pEntityYaw, pPartialTicks, pPoseStack, pBuffer, pPackedLight);
+    }
+
+    public @NotNull ResourceLocation getTextureLocation(@NotNull ClusterPrimedTNT pEntity) {
+        return TextureAtlas.LOCATION_BLOCKS;
+    }
+}
diff --git a/src/main/java/com/jenny/compressedtnt/entities/client/strongerTNTRenderer.java b/src/main/java/com/jenny/compressedtnt/entities/client/strongerTNTRenderer.java
new file mode 100644
index 0000000..9dc8fe4
--- /dev/null
+++ b/src/main/java/com/jenny/compressedtnt/entities/client/strongerTNTRenderer.java
@@ -0,0 +1,59 @@
+package com.jenny.compressedtnt.entities.client;
+
+import com.jenny.compressedtnt.blocks.blocks;
+import com.jenny.compressedtnt.entities.StrongerPrimedTNT;
+import com.mojang.blaze3d.vertex.PoseStack;
+import com.mojang.math.Axis;
+import net.minecraft.client.renderer.MultiBufferSource;
+import net.minecraft.client.renderer.block.BlockRenderDispatcher;
+import net.minecraft.client.renderer.entity.EntityRenderer;
+import net.minecraft.client.renderer.entity.EntityRendererProvider;
+import net.minecraft.client.renderer.entity.TntMinecartRenderer;
+import net.minecraft.client.renderer.texture.TextureAtlas;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.util.Mth;
+import net.minecraft.world.level.block.Block;
+import org.jetbrains.annotations.NotNull;
+
+public class strongerTNTRenderer extends EntityRenderer<StrongerPrimedTNT> {
+    private final BlockRenderDispatcher blockRenderer;
+
+    public strongerTNTRenderer(EntityRendererProvider.Context pContext) {
+        super(pContext);
+        this.shadowRadius = 0.5F;
+        this.blockRenderer = pContext.getBlockRenderDispatcher();
+    }
+
+    public void render(StrongerPrimedTNT pEntity, float pEntityYaw, float pPartialTicks, PoseStack pPoseStack, @NotNull MultiBufferSource pBuffer, int pPackedLight) {
+        pPoseStack.pushPose();
+        pPoseStack.translate(0.0F, 0.5F, 0.0F);
+        int i = pEntity.getFuse();
+        if ((float)i - pPartialTicks + 1.0F < 10.0F) {
+            float f = 1.0F - ((float)i - pPartialTicks + 1.0F) / 10.0F;
+            f = Mth.clamp(f, 0.0F, 1.0F);
+            f *= f;
+            f *= f;
+            float f1 = 1.0F + f * 0.3F;
+            pPoseStack.scale(f1, f1, f1);
+        }
+        Block block = switch ((int) pEntity.getPower()) {
+            case 8 -> blocks.TNT_8.get();
+            case 16 -> blocks.TNT_16.get();
+            case 32 -> blocks.TNT_32.get();
+            case 64 -> blocks.TNT_64.get();
+            case 128 -> blocks.TNT_128.get();
+            default -> blocks.TNT_HOMING.get();
+        };
+
+        pPoseStack.mulPose(Axis.YP.rotationDegrees(-90.0F));
+        pPoseStack.translate(-0.5F, -0.5F, 0.5F);
+        pPoseStack.mulPose(Axis.YP.rotationDegrees(90.0F));
+        TntMinecartRenderer.renderWhiteSolidBlock(this.blockRenderer, block.defaultBlockState(), pPoseStack, pBuffer, pPackedLight, i / 5 % 2 == 0);
+        pPoseStack.popPose();
+        super.render(pEntity, pEntityYaw, pPartialTicks, pPoseStack, pBuffer, pPackedLight);
+    }
+
+    public @NotNull ResourceLocation getTextureLocation(@NotNull StrongerPrimedTNT pEntity) {
+        return TextureAtlas.LOCATION_BLOCKS;
+    }
+}
diff --git a/src/main/java/com/jenny/compressedtnt/entities/entities.java b/src/main/java/com/jenny/compressedtnt/entities/entities.java
index c8a3637..9b6eebf 100644
--- a/src/main/java/com/jenny/compressedtnt/entities/entities.java
+++ b/src/main/java/com/jenny/compressedtnt/entities/entities.java
@@ -1,5 +1,8 @@
 package com.jenny.compressedtnt.entities;
 
+import com.jenny.compressedtnt.blocks.blocks;
+import com.jenny.compressedtnt.entities.client.*;
+import net.minecraft.client.renderer.entity.EntityRenderers;
 import net.minecraft.world.entity.EntityType;
 import net.minecraft.world.entity.MobCategory;
 import net.minecraftforge.eventbus.api.IEventBus;
@@ -15,9 +18,25 @@ public class entities {
 
     public static final RegistryObject<EntityType<homingPrimedTNT>> TNT_HOMING =
             ENTITY_TYPES.register("tnt_homing", () -> EntityType.Builder.<homingPrimedTNT>of(homingPrimedTNT::new, MobCategory.MISC)
-                    .sized(2.5f, 2.5f).build("tnt_homing"));
+                    .sized(0.98F, 0.7F).fireImmune().clientTrackingRange(8).build("tnt_homing"));
+
+    public static final RegistryObject<EntityType<StrongerPrimedTNT>> TNT_STRONGER =
+            ENTITY_TYPES.register("tnt_stronger", () -> EntityType.Builder.<StrongerPrimedTNT>of(StrongerPrimedTNT::new, MobCategory.MISC)
+                    .sized(0.98F, 0.7F).fireImmune().clientTrackingRange(8).build("tnt_stronger"));
+
+    public static final RegistryObject<EntityType<ClusterPrimedTNT>> TNT_CLUSTER =
+            ENTITY_TYPES.register("tnt_cluster", () -> EntityType.Builder.<ClusterPrimedTNT>of(ClusterPrimedTNT::new, MobCategory.MISC)
+                    .sized(0.48F, 0.48F).fireImmune().clientTrackingRange(8).build("tnt_cluster"));
 
     public static void register(IEventBus eventBus) {
         ENTITY_TYPES.register(eventBus);
     }
-}
+
+    public static void registerRenderers () {
+        EntityRenderers.register(TNT_STRONGER.get(), strongerTNTRenderer::new);
+        EntityRenderers.register(TNT_CLUSTER.get(), clusterTNTRenderer::new);
+        EntityRenderers.register(TNT_HOMING.get(), pContext -> new BaseTNTRenderer(pContext, blocks.TNT_HOMING.get()));
+
+
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jenny/compressedtnt/entities/homingPrimedTNT.java b/src/main/java/com/jenny/compressedtnt/entities/homingPrimedTNT.java
index 7b06527..b3bce8d 100644
--- a/src/main/java/com/jenny/compressedtnt/entities/homingPrimedTNT.java
+++ b/src/main/java/com/jenny/compressedtnt/entities/homingPrimedTNT.java
@@ -9,19 +9,14 @@ import org.jetbrains.annotations.NotNull;
 
 import javax.annotation.Nullable;
 
-public class homingPrimedTNT extends BasePrimedTNT {
-    float pRadius = 0;
+public class homingPrimedTNT extends basePrimedTNT {
     float speed = 0;
     Entity target;
 
-    @Nullable
-    private LivingEntity owner;
-
     public homingPrimedTNT (Level pLevel, double pX, double pY, double pZ, @Nullable LivingEntity pOwner, float power, int fuse, float speed) {
         this(entities.TNT_HOMING.get(), pLevel);
         this.setPos(pX, pY, pZ);
-        this.owner = pOwner;
-        this.pRadius = power;
+        this.setOwner(pOwner);
         this.speed = speed;
         this.target = null;
         this.setPower(power);
@@ -29,7 +24,7 @@ public class homingPrimedTNT extends BasePrimedTNT {
     }
 
     public homingPrimedTNT(EntityType<homingPrimedTNT> entityType, Level level) {
-        super(entityType, level);
+        super(entityType, level, null);
     }
 
     private Vec3 targetVector() {
@@ -68,12 +63,6 @@ public class homingPrimedTNT extends BasePrimedTNT {
         super.tick();
     }
 
-
-    @Nullable
-    public LivingEntity getOwner() {
-        return this.owner;
-    }
-
     protected float getEyeHeight(@NotNull Pose pPose, @NotNull EntityDimensions pSize) {
         return 0.15F;
     }
diff --git a/src/main/resources/assets/compressedtnt/blockstates/tnt_homing.json b/src/main/resources/assets/compressedtnt/blockstates/tnt_homing.json
new file mode 100644
index 0000000..cb874f1
--- /dev/null
+++ b/src/main/resources/assets/compressedtnt/blockstates/tnt_homing.json
@@ -0,0 +1,7 @@
+{
+  "variants": {
+    "": {
+      "model": "compressedtnt:block/tnt_homing"
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/compressedtnt/recipes/tnt_homing.json b/src/main/resources/data/compressedtnt/recipes/tnt_homing.json
new file mode 100644
index 0000000..f06d4b5
--- /dev/null
+++ b/src/main/resources/data/compressedtnt/recipes/tnt_homing.json
@@ -0,0 +1,15 @@
+{
+  "type": "minecraft:crafting_shapeless",
+  "category": "redstone",
+  "ingredients":[
+    {
+      "item": "minecraft:tnt"
+    },
+    {
+      "item": "minecraft:ender_eye"
+    }
+  ],
+  "result": {
+    "item": "compressedtnt:tnt_homing"
+  }
+}
\ No newline at end of file