From e02551f4fbc29036605b75614dd5be58aa521b54 Mon Sep 17 00:00:00 2001 From: Jenny Date: Fri, 24 Jan 2025 02:25:53 +0100 Subject: [PATCH] added concussive arrow & more particles for arrows --- gradle.properties | 2 +- .../com/jenny/compressedtnt/creativeTab.java | 1 + .../datagen/ModItemModelProvider.java | 1 + .../entities/arrows/concussiveArrow.java | 48 ++++++++++++++++++ .../entities/arrows/tntArrow.java | 5 ++ .../entities/client/TNTArrowRenderer.java | 8 +-- .../compressedtnt/entities/entities.java | 7 ++- .../compressedtnt/items/ArrowConcussive.java | 22 ++++++++ .../com/jenny/compressedtnt/items/items.java | 1 + .../assets/compressedtnt/lang/en_us.json | 3 +- .../textures/item/arrow_concussive.png | Bin 0 -> 207 bytes .../recipes/arrow_concussive.json | 15 ++++++ .../data/minecraft/tags/items/arrows.json | 3 +- 13 files changed, 108 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/jenny/compressedtnt/entities/arrows/concussiveArrow.java create mode 100644 src/main/java/com/jenny/compressedtnt/items/ArrowConcussive.java create mode 100644 src/main/resources/assets/compressedtnt/textures/item/arrow_concussive.png create mode 100644 src/main/resources/data/compressedtnt/recipes/arrow_concussive.json 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 0000000000000000000000000000000000000000..a303245c10a5e73aafb0d9096e9a9c76735c7517 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Iz3$+Lo9le z6C^SYc&uVGYkT=$QbI!FpHWWIkJB6GPHYY7O<_)BJO6*~%UAzzN-X=Ip7x3_hX?!j?zR1?*{5{&2@`{|mvz*c6$?^bP0l+XkK DXBSu* literal 0 HcmV?d00001 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