diff --git a/src/main/java/com/jenny/compressedtnt/creativeTab.java b/src/main/java/com/jenny/compressedtnt/creativeTab.java index ee18bb9..d5af9e5 100644 --- a/src/main/java/com/jenny/compressedtnt/creativeTab.java +++ b/src/main/java/com/jenny/compressedtnt/creativeTab.java @@ -29,6 +29,7 @@ public class creativeTab { output.accept(blocks.TNT_CLAYMORE.get()); output.accept(items.TNT_ARROW.get()); output.accept(items.CONCUSSIVE_ARROW.get()); + output.accept(items.CARPET_ARROW.get()); }).title(Component.literal("Compressed TNT")).build()); public static void register(IEventBus bus) { diff --git a/src/main/java/com/jenny/compressedtnt/entities/arrows/carpetArrow.java b/src/main/java/com/jenny/compressedtnt/entities/arrows/carpetArrow.java new file mode 100644 index 0000000..a7593c0 --- /dev/null +++ b/src/main/java/com/jenny/compressedtnt/entities/arrows/carpetArrow.java @@ -0,0 +1,57 @@ +package com.jenny.compressedtnt.entities.arrows; + +import com.jenny.compressedtnt.entities.entities; +import com.jenny.compressedtnt.items.items; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; + +public class carpetArrow extends baseArrow { + private int tick = 0; + private Vec3 pos = position(); + public final int childCount = 32; + + public carpetArrow(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); + } + + public carpetArrow(Level pLevel, LivingEntity pShooter) { + super(pLevel, pShooter, entities.ARROW_CARPET.get()); + } + + @Override + public void tick() { + pos = position(); + super.tick(); + if (level().isClientSide()) { + level().addParticle(ParticleTypes.SMOKE, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } + tick++; + if (pos.y > position().y) { + spawnChildren(childCount); + discard(); + } + } + + protected void spawnChildren(int count) { + Vec3 delta = getDeltaMovement(); + RandomSource rng = level().getRandom(); + for (int i = 0; i < count; i++) { + concussiveArrow arrow = new concussiveArrow(entities.ARROW_CONCUSSIVE.get(), level()); + Vec3 move = delta.add((float) rng.nextInt(-10, 11) / 10, 0, (float) rng.nextInt(-10, 11) / 10); + arrow.setPos(position()); + arrow.setDeltaMovement(delta.add(move.multiply(0.2, 0, 0.2))); + level().addFreshEntity(arrow); + } + } + + @NotNull + protected ItemStack getPickupItem() { + return new ItemStack(items.CARPET_ARROW.get()); + } +} diff --git a/src/main/java/com/jenny/compressedtnt/entities/entities.java b/src/main/java/com/jenny/compressedtnt/entities/entities.java index fc8eb31..eb205c7 100644 --- a/src/main/java/com/jenny/compressedtnt/entities/entities.java +++ b/src/main/java/com/jenny/compressedtnt/entities/entities.java @@ -48,6 +48,10 @@ public class entities { ENTITY_TYPES.register("arrow_concussive", () -> EntityType.Builder.of(concussiveArrow::new, MobCategory.MISC) .sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_concussive")); + public static final RegistryObject> ARROW_CARPET = + ENTITY_TYPES.register("arrow_carpet", () -> EntityType.Builder.of(carpetArrow::new, MobCategory.MISC) + .sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_carpet")); + public static void register(IEventBus eventBus) { ENTITY_TYPES.register(eventBus); } @@ -61,5 +65,6 @@ public class entities { EntityRenderers.register(ARROW_TNT.get(), TNTArrowRenderer::new); EntityRenderers.register(ARROW_CONCUSSIVE.get(), TNTArrowRenderer::new); + EntityRenderers.register(ARROW_CARPET.get(), TNTArrowRenderer::new); } } \ No newline at end of file diff --git a/src/main/java/com/jenny/compressedtnt/items/ArrowCarpet.java b/src/main/java/com/jenny/compressedtnt/items/ArrowCarpet.java new file mode 100644 index 0000000..86996ee --- /dev/null +++ b/src/main/java/com/jenny/compressedtnt/items/ArrowCarpet.java @@ -0,0 +1,22 @@ +package com.jenny.compressedtnt.items; + +import com.jenny.compressedtnt.entities.arrows.carpetArrow; +import com.jenny.compressedtnt.entities.arrows.tntArrow; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ArrowItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +public class ArrowCarpet extends ArrowItem { + public ArrowCarpet(Properties properties){ + super(properties); + } + + @Override + @NotNull + public AbstractArrow createArrow(@NotNull Level pLevel, @NotNull ItemStack pStack, @NotNull LivingEntity pShooter) { + return new carpetArrow(pLevel, pShooter); + } +} diff --git a/src/main/java/com/jenny/compressedtnt/items/items.java b/src/main/java/com/jenny/compressedtnt/items/items.java index d4456d6..96a27cf 100644 --- a/src/main/java/com/jenny/compressedtnt/items/items.java +++ b/src/main/java/com/jenny/compressedtnt/items/items.java @@ -13,6 +13,8 @@ public class items { public static final RegistryObject TNT_ARROW = ITEMS.register("arrow_tnt", () -> new ArrowTNT(new Item.Properties())); public static final RegistryObject CONCUSSIVE_ARROW = ITEMS.register("arrow_concussive", () -> new ArrowConcussive(new Item.Properties())); + public static final RegistryObject CARPET_ARROW = ITEMS.register("arrow_carpet", () -> new ArrowCarpet(new Item.Properties())); + public static void register(IEventBus bus) { ITEMS.register(bus); diff --git a/src/main/resources/assets/compressedtnt/lang/en_us.json b/src/main/resources/assets/compressedtnt/lang/en_us.json index 2938ccc..74ff4d9 100644 --- a/src/main/resources/assets/compressedtnt/lang/en_us.json +++ b/src/main/resources/assets/compressedtnt/lang/en_us.json @@ -12,5 +12,6 @@ "block.compressedtnt.tnt_claymore": "Claymore TNT", "item.compressedtnt.arrow_tnt": "TNT Arrow", - "item.compressedtnt.arrow_concussive": "Concussive Arrow" + "item.compressedtnt.arrow_concussive": "Concussive Arrow", + "item.compressedtnt.arrow_carpet": "Carpet Bombing Arrow" } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/arrows.json b/src/main/resources/data/minecraft/tags/items/arrows.json index 638b793..d8bd5cb 100644 --- a/src/main/resources/data/minecraft/tags/items/arrows.json +++ b/src/main/resources/data/minecraft/tags/items/arrows.json @@ -1,6 +1,7 @@ { "values": [ "compressedtnt:arrow_tnt", - "compressedtnt:arrow_concussive" + "compressedtnt:arrow_concussive", + "compressedtnt:arrow_carpet" ] } \ No newline at end of file