diff --git a/gradle.properties b/gradle.properties index 56441ae..88a2e3c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ mod_name=Compressed TNT # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=0.4.0 +mod_version=0.5.0 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/com/jenny/compressedtnt/creativeTab.java b/src/main/java/com/jenny/compressedtnt/creativeTab.java index 567330f..ee18bb9 100644 --- a/src/main/java/com/jenny/compressedtnt/creativeTab.java +++ b/src/main/java/com/jenny/compressedtnt/creativeTab.java @@ -28,6 +28,7 @@ public class creativeTab { output.accept(blocks.TNT_BLACK_HOLE.get()); output.accept(blocks.TNT_CLAYMORE.get()); output.accept(items.TNT_ARROW.get()); + output.accept(items.CONCUSSIVE_ARROW.get()); }).title(Component.literal("Compressed TNT")).build()); public static void register(IEventBus bus) { diff --git a/src/main/java/com/jenny/compressedtnt/datagen/ModItemModelProvider.java b/src/main/java/com/jenny/compressedtnt/datagen/ModItemModelProvider.java index 3b25395..0045972 100644 --- a/src/main/java/com/jenny/compressedtnt/datagen/ModItemModelProvider.java +++ b/src/main/java/com/jenny/compressedtnt/datagen/ModItemModelProvider.java @@ -20,6 +20,7 @@ public class ModItemModelProvider extends ItemModelProvider { @Override protected void registerModels() { simpleItem(items.TNT_ARROW); + simpleItem(items.CONCUSSIVE_ARROW); } private ItemModelBuilder simpleItem(RegistryObject item) { diff --git a/src/main/java/com/jenny/compressedtnt/entities/arrows/concussiveArrow.java b/src/main/java/com/jenny/compressedtnt/entities/arrows/concussiveArrow.java new file mode 100644 index 0000000..7f261e3 --- /dev/null +++ b/src/main/java/com/jenny/compressedtnt/entities/arrows/concussiveArrow.java @@ -0,0 +1,48 @@ +package com.jenny.compressedtnt.entities.arrows; + +import com.jenny.compressedtnt.entities.entities; +import com.jenny.compressedtnt.items.items; +import net.minecraft.client.particle.Particle; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.ParticleTypes; +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 org.jetbrains.annotations.NotNull; + +public class concussiveArrow extends baseArrow{ + public concussiveArrow(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); + } + + public concussiveArrow(Level pLevel, LivingEntity pShooter) { + super(pLevel, pShooter, entities.ARROW_CONCUSSIVE.get()); + } + + @Override + public void tick() { + super.tick(); + if (level().isClientSide()) { + level().addParticle(ParticleTypes.SMOKE, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } + if (this.inGround) { + this.level().explode(this, getX(), getY(), getZ(), 8.0f, Level.ExplosionInteraction.NONE); + //this.level().explode(this, null, new NilExplosionCalculator(), this.getX(), this.getY(), this.getZ(), 8, false, Level.ExplosionInteraction.NONE); + this.discard(); + } + } + + @Override + protected void doPostHurtEffects(@NotNull LivingEntity pTarget) { + this.level().explode(this, getX(), getY(), getZ(), 8.0f, Level.ExplosionInteraction.NONE); + //this.level().explode(this, null, new NilExplosionCalculator(), this.getX(), this.getY(), this.getZ(), 8, false, Level.ExplosionInteraction.NONE); + this.discard(); + } + + @NotNull + protected ItemStack getPickupItem() { + return new ItemStack(items.CONCUSSIVE_ARROW.get()); + } +} diff --git a/src/main/java/com/jenny/compressedtnt/entities/arrows/tntArrow.java b/src/main/java/com/jenny/compressedtnt/entities/arrows/tntArrow.java index 350dc38..33c852b 100644 --- a/src/main/java/com/jenny/compressedtnt/entities/arrows/tntArrow.java +++ b/src/main/java/com/jenny/compressedtnt/entities/arrows/tntArrow.java @@ -3,6 +3,7 @@ package com.jenny.compressedtnt.entities.arrows; import com.jenny.compressedtnt.items.items; import com.jenny.compressedtnt.entities.entities; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; @@ -21,6 +22,9 @@ public class tntArrow extends baseArrow { @Override public void tick() { super.tick(); + if (level().isClientSide()) { + level().addParticle(ParticleTypes.SMOKE, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } if (this.inGround) { this.level().explode(this, this.getX(), this.getY(), this.getZ(), 2, Level.ExplosionInteraction.TNT); this.discard(); @@ -30,6 +34,7 @@ public class tntArrow extends baseArrow { @Override protected void doPostHurtEffects(@NotNull LivingEntity pTarget) { this.level().explode(this, this.getX(), this.getY(), this.getZ(), 2, Level.ExplosionInteraction.TNT); + this.discard(); } @NotNull diff --git a/src/main/java/com/jenny/compressedtnt/entities/client/TNTArrowRenderer.java b/src/main/java/com/jenny/compressedtnt/entities/client/TNTArrowRenderer.java index f62ceaa..5dd0b83 100644 --- a/src/main/java/com/jenny/compressedtnt/entities/client/TNTArrowRenderer.java +++ b/src/main/java/com/jenny/compressedtnt/entities/client/TNTArrowRenderer.java @@ -1,6 +1,6 @@ package com.jenny.compressedtnt.entities.client; -import com.jenny.compressedtnt.entities.arrows.tntArrow; +import com.jenny.compressedtnt.entities.arrows.baseArrow; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.Blocks; import org.jetbrains.annotations.NotNull; -public class TNTArrowRenderer extends EntityRenderer { +public class TNTArrowRenderer extends EntityRenderer { private final BlockRenderDispatcher blockRenderer; private float i = 0; @@ -24,7 +24,7 @@ public class TNTArrowRenderer extends EntityRenderer { this.blockRenderer = pContext.getBlockRenderDispatcher(); } - public void render(@NotNull tntArrow pEntity, float pEntityYaw, float pPartialTicks, PoseStack pPoseStack, @NotNull MultiBufferSource pBuffer, int pPackedLight) { + public void render(@NotNull baseArrow pEntity, float pEntityYaw, float pPartialTicks, PoseStack pPoseStack, @NotNull MultiBufferSource pBuffer, int pPackedLight) { pPoseStack.pushPose(); pPoseStack.translate(0.0F, 0.5F, 0.0F); pPoseStack.scale(0.5f, 0.5f, 0.5f); @@ -38,7 +38,7 @@ public class TNTArrowRenderer extends EntityRenderer { } @NotNull - public ResourceLocation getTextureLocation(@NotNull tntArrow pEntity) { + public ResourceLocation getTextureLocation(@NotNull baseArrow 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 4b7cabe..fc8eb31 100644 --- a/src/main/java/com/jenny/compressedtnt/entities/entities.java +++ b/src/main/java/com/jenny/compressedtnt/entities/entities.java @@ -1,6 +1,6 @@ package com.jenny.compressedtnt.entities; -import com.jenny.compressedtnt.entities.arrows.tntArrow; +import com.jenny.compressedtnt.entities.arrows.*; import com.jenny.compressedtnt.entities.client.BaseTNTRenderer; import com.jenny.compressedtnt.entities.client.TNTArrowRenderer; import com.jenny.compressedtnt.entities.client.clusterTNTRenderer; @@ -44,6 +44,10 @@ public class entities { ENTITY_TYPES.register("arrow_tnt", () -> EntityType.Builder.of(tntArrow::new, MobCategory.MISC) .sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_tnt")); + public static final RegistryObject> ARROW_CONCUSSIVE = + ENTITY_TYPES.register("arrow_concussive", () -> EntityType.Builder.of(concussiveArrow::new, MobCategory.MISC) + .sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_concussive")); + public static void register(IEventBus eventBus) { ENTITY_TYPES.register(eventBus); } @@ -56,5 +60,6 @@ public class entities { EntityRenderers.register(TNT_CLUSTER.get(), clusterTNTRenderer::new); EntityRenderers.register(ARROW_TNT.get(), TNTArrowRenderer::new); + EntityRenderers.register(ARROW_CONCUSSIVE.get(), TNTArrowRenderer::new); } } \ No newline at end of file diff --git a/src/main/java/com/jenny/compressedtnt/items/ArrowConcussive.java b/src/main/java/com/jenny/compressedtnt/items/ArrowConcussive.java new file mode 100644 index 0000000..1e9e90e --- /dev/null +++ b/src/main/java/com/jenny/compressedtnt/items/ArrowConcussive.java @@ -0,0 +1,22 @@ +package com.jenny.compressedtnt.items; + +import com.jenny.compressedtnt.entities.arrows.concussiveArrow; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ArrowItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +public class ArrowConcussive extends ArrowItem { + public ArrowConcussive(Item.Properties properties){ + super(properties); + } + + @Override + @NotNull + public AbstractArrow createArrow(@NotNull Level pLevel, @NotNull ItemStack pStack, @NotNull LivingEntity pShooter) { + return new concussiveArrow(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 f113b72..d4456d6 100644 --- a/src/main/java/com/jenny/compressedtnt/items/items.java +++ b/src/main/java/com/jenny/compressedtnt/items/items.java @@ -12,6 +12,7 @@ public class items { public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); 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 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 86ff80f..2938ccc 100644 --- a/src/main/resources/assets/compressedtnt/lang/en_us.json +++ b/src/main/resources/assets/compressedtnt/lang/en_us.json @@ -11,5 +11,6 @@ "block.compressedtnt.tnt_black_hole": "Black Hole TNT", "block.compressedtnt.tnt_claymore": "Claymore TNT", - "item.compressedtnt.arrow_tnt": "TNT Arrow" + "item.compressedtnt.arrow_tnt": "TNT Arrow", + "item.compressedtnt.arrow_concussive": "Concussive Arrow" } \ No newline at end of file diff --git a/src/main/resources/assets/compressedtnt/textures/item/arrow_concussive.png b/src/main/resources/assets/compressedtnt/textures/item/arrow_concussive.png new file mode 100644 index 0000000..a303245 Binary files /dev/null and b/src/main/resources/assets/compressedtnt/textures/item/arrow_concussive.png differ diff --git a/src/main/resources/data/compressedtnt/recipes/arrow_concussive.json b/src/main/resources/data/compressedtnt/recipes/arrow_concussive.json new file mode 100644 index 0000000..893c6d1 --- /dev/null +++ b/src/main/resources/data/compressedtnt/recipes/arrow_concussive.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "ingredients":[ + { + "item": "compressedtnt:arrow_tnt" + }, + { + "item": "minecraft:water_bucket" + } + ], + "result": { + "item": "compressedtnt:arrow_tnt" + } +} \ 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 87508ec..638b793 100644 --- a/src/main/resources/data/minecraft/tags/items/arrows.json +++ b/src/main/resources/data/minecraft/tags/items/arrows.json @@ -1,5 +1,6 @@ { "values": [ - "compressedtnt:arrow_tnt" + "compressedtnt:arrow_tnt", + "compressedtnt:arrow_concussive" ] } \ No newline at end of file