From 339c466c88a7ae891571a7c001d2fdb3c8571b87 Mon Sep 17 00:00:00 2001 From: Jenny Date: Mon, 27 Jan 2025 21:53:33 +0100 Subject: [PATCH] tunnel arrow --- gradle.properties | 2 +- .../jenny/enhancedexplosives/creativeTab.java | 1 + .../datagen/ModItemModelProvider.java | 1 + .../entities/arrows/tunnelArrow.java | 68 ++++++++++++++++++ .../enhancedexplosives/entities/entities.java | 5 ++ .../enhancedexplosives/eventBusEvents.java | 2 + .../enhancedexplosives/items/ArrowTunnel.java | 20 ++++++ .../jenny/enhancedexplosives/items/items.java | 1 + .../particles/particles.java | 2 + .../assets/enhancedexplosives/lang/en_us.json | 12 ++-- .../particles/particle_tunnel_arrow.json | 5 ++ .../textures/item/arrow_tunnel.png | Bin 0 -> 206 bytes .../particle/particle_tunnel_arrow.png | Bin 0 -> 132 bytes .../data/minecraft/tags/items/arrows.json | 3 +- 14 files changed, 115 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java create mode 100644 src/main/java/com/jenny/enhancedexplosives/items/ArrowTunnel.java create mode 100644 src/main/resources/assets/enhancedexplosives/particles/particle_tunnel_arrow.json create mode 100644 src/main/resources/assets/enhancedexplosives/textures/item/arrow_tunnel.png create mode 100644 src/main/resources/assets/enhancedexplosives/textures/particle/particle_tunnel_arrow.png diff --git a/gradle.properties b/gradle.properties index 43075a8..8b20d8e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ mod_name=Enhanced Explosives # 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.8.11 +mod_version=0.9.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/enhancedexplosives/creativeTab.java b/src/main/java/com/jenny/enhancedexplosives/creativeTab.java index c4b1217..ad02a57 100644 --- a/src/main/java/com/jenny/enhancedexplosives/creativeTab.java +++ b/src/main/java/com/jenny/enhancedexplosives/creativeTab.java @@ -32,6 +32,7 @@ public class creativeTab { output.accept(items.TNT_ARROW.get()); output.accept(items.CONCUSSIVE_ARROW.get()); output.accept(items.CARPET_ARROW.get()); + output.accept(items.TUNNEL_ARROW.get()); output.accept(items.DYNAMITE.get()); }).title(Component.literal("Enhanced Explosives")).build()); diff --git a/src/main/java/com/jenny/enhancedexplosives/datagen/ModItemModelProvider.java b/src/main/java/com/jenny/enhancedexplosives/datagen/ModItemModelProvider.java index aa2c0b5..2821bf6 100644 --- a/src/main/java/com/jenny/enhancedexplosives/datagen/ModItemModelProvider.java +++ b/src/main/java/com/jenny/enhancedexplosives/datagen/ModItemModelProvider.java @@ -22,6 +22,7 @@ public class ModItemModelProvider extends ItemModelProvider { simpleItem(items.TNT_ARROW); simpleItem(items.CONCUSSIVE_ARROW); simpleItem(items.CARPET_ARROW); + simpleItem(items.TUNNEL_ARROW); } private ItemModelBuilder simpleItem(RegistryObject item) { diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java new file mode 100644 index 0000000..f7723d9 --- /dev/null +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java @@ -0,0 +1,68 @@ +package com.jenny.enhancedexplosives.entities.arrows; + +import com.jenny.enhancedexplosives.config.ConfigClient; +import com.jenny.enhancedexplosives.entities.entities; +import com.jenny.enhancedexplosives.particles.particles; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; + +public class tunnelArrow extends baseArrow{ + public static int explosionCount = 16; + public static int spacing = 2; + + public tunnelArrow(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); + } + + public tunnelArrow(Level pLevel, LivingEntity pShooter) { + super(pLevel, pShooter, entities.ARROW_TUNNEL.get()); + } + + @Override + public void tick() { + super.tick(); + if (inGround) { + explode(); + discard(); + } + } + + @Override + protected void doPostHurtEffects(@NotNull LivingEntity pTarget) { + explode(); + this.discard(); + } + + protected void explode() { + Vec3 rot = getTargetVec( - getXRot(), - getYRot(), 0); + for (int i = 0; i < explosionCount; i++) { + Vec3 pos = position().add(rot.multiply(i * spacing, i * spacing, i * spacing)); + this.level().explode(this, pos.x, pos.y, pos.z, 8.0f, Level.ExplosionInteraction.TNT); + } + } + + public static Vec3 getTargetVec(float xRot, float yRot, float zRot) { + float f = -Mth.sin((float) (yRot * (Math.PI / 180F))) * Mth.cos(xRot * ((float)Math.PI / 180F)); + float f1 = -Mth.sin((xRot + zRot) * ((float)Math.PI / 180F)); + float f2 = Mth.cos(yRot * ((float)Math.PI / 180F)) * Mth.cos(xRot * ((float)Math.PI / 180F)); + return new Vec3(f, f1, f2); + } + + @Override + public void spawnParticles(float partialTicks) { + for (int i = 1; i <= ConfigClient.calcPCount(3); i++) { + double m = (double) level().getRandom().nextIntBetweenInclusive(- 100, 100) / 100; + Vec3 DeltaMovement = getDeltaMovement(); + Vec3 pos = new Vec3( + (double) level().getRandom().nextIntBetweenInclusive(-5, 5) / 10, + 0, + (double) level().getRandom().nextIntBetweenInclusive(-5, 5) / 10 + ).normalize().multiply(m, m, m).add(getPosition(partialTicks)); + level().addParticle(particles.TUNNEL_ARROW_PARTICLE.get(), pos.x, pos.y, pos.z, DeltaMovement.x, DeltaMovement.y, DeltaMovement.z); + } + } +} diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/entities.java b/src/main/java/com/jenny/enhancedexplosives/entities/entities.java index ab83c37..61d3e9f 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/entities.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/entities.java @@ -71,6 +71,10 @@ public class entities { ENTITY_TYPES.register("dynamite", () -> EntityType.Builder.of(dynamite::new, MobCategory.MISC) .sized(0.48F, 0.48F).clientTrackingRange(64).build("dynamite")); + public static final RegistryObject> ARROW_TUNNEL = + ENTITY_TYPES.register("arrow_tunnel", () -> EntityType.Builder.of(tunnelArrow::new, MobCategory.MISC) + .sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_tunnel")); + public static void register(IEventBus eventBus) { ENTITY_TYPES.register(eventBus); } @@ -90,6 +94,7 @@ public class entities { EntityRenderers.register(ARROW_CONCUSSIVE.get(), TNTArrowRenderer::new); EntityRenderers.register(ARROW_CARPET.get(), TNTArrowRenderer::new); EntityRenderers.register(ARROW_CARPT_PART.get(), TNTArrowRenderer::new); + EntityRenderers.register(ARROW_TUNNEL.get(), TNTArrowRenderer::new); EntityRenderers.register(ARROW_CLAYMORE.get(), baseArrowRenderer::new); } } \ No newline at end of file diff --git a/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java b/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java index adb0489..cec204b 100644 --- a/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java +++ b/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java @@ -26,5 +26,7 @@ public class eventBusEvents { ArrowParticle.Provider::new); Minecraft.getInstance().particleEngine.register(particles.CARPET_ARROW_PARTICLE.get(), ArrowParticle.Provider::new); + Minecraft.getInstance().particleEngine.register(particles.TUNNEL_ARROW_PARTICLE.get(), + ArrowParticle.Provider::new); } } diff --git a/src/main/java/com/jenny/enhancedexplosives/items/ArrowTunnel.java b/src/main/java/com/jenny/enhancedexplosives/items/ArrowTunnel.java new file mode 100644 index 0000000..bdee68b --- /dev/null +++ b/src/main/java/com/jenny/enhancedexplosives/items/ArrowTunnel.java @@ -0,0 +1,20 @@ +package com.jenny.enhancedexplosives.items; + +import com.jenny.enhancedexplosives.entities.arrows.tunnelArrow; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +public class ArrowTunnel extends ArrowAbstract { + public ArrowTunnel(Properties properties){ + super(properties); + } + + @Override + @NotNull + public AbstractArrow createArrow(@NotNull Level pLevel, @NotNull ItemStack pStack, @NotNull LivingEntity pShooter) { + return new tunnelArrow(pLevel, pShooter); + } +} diff --git a/src/main/java/com/jenny/enhancedexplosives/items/items.java b/src/main/java/com/jenny/enhancedexplosives/items/items.java index 908b759..fa8e8ff 100644 --- a/src/main/java/com/jenny/enhancedexplosives/items/items.java +++ b/src/main/java/com/jenny/enhancedexplosives/items/items.java @@ -15,6 +15,7 @@ public class items { 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 final RegistryObject DYNAMITE = ITEMS.register("dynamite", () -> new Dynamite(new Item.Properties())); + public static final RegistryObject TUNNEL_ARROW = ITEMS.register("arrow_tunnel", () -> new ArrowTunnel(new Item.Properties())); public static void register(IEventBus bus) { ITEMS.register(bus); diff --git a/src/main/java/com/jenny/enhancedexplosives/particles/particles.java b/src/main/java/com/jenny/enhancedexplosives/particles/particles.java index a4decb5..8e39120 100644 --- a/src/main/java/com/jenny/enhancedexplosives/particles/particles.java +++ b/src/main/java/com/jenny/enhancedexplosives/particles/particles.java @@ -18,6 +18,8 @@ public class particles { PARTICLES.register("particle_tnt_arrow", () -> new SimpleParticleType(true)); public static final RegistryObject CARPET_ARROW_PARTICLE = PARTICLES.register("particle_carpet_arrow", () -> new SimpleParticleType(true)); + public static final RegistryObject TUNNEL_ARROW_PARTICLE = + PARTICLES.register("particle_tunnel_arrow", () -> new SimpleParticleType(true)); public static void register(IEventBus bus) { PARTICLES.register(bus); diff --git a/src/main/resources/assets/enhancedexplosives/lang/en_us.json b/src/main/resources/assets/enhancedexplosives/lang/en_us.json index 29fbc10..5172682 100644 --- a/src/main/resources/assets/enhancedexplosives/lang/en_us.json +++ b/src/main/resources/assets/enhancedexplosives/lang/en_us.json @@ -13,11 +13,6 @@ "block.enhancedexplosives.tnt_selective": "Selective TNT", "block.enhancedexplosives.tnt_ender": "Ender TNT", - "item.enhancedexplosives.arrow_tnt": "TNT Arrow", - "item.enhancedexplosives.arrow_concussive": "Concussive Arrow", - "item.enhancedexplosives.arrow_carpet": "Carpet Bombing Arrow", - "item.enhancedexplosives.dynamite": "Dynamite", - "tooltip.enhancedexplosives.tnt_cluster_2": "splits into 2 small TNTs", "tooltip.enhancedexplosives.tnt_cluster_4": "splits into 4 small TNTs", "tooltip.enhancedexplosives.tnt_cluster_8": "splits into 8 small TNTs", @@ -27,8 +22,15 @@ "tooltip.enhancedexplosives.tnt_selective": "only destroys the type of block it explodes on", "tooltip.enhancedexplosives.tnt_ender": "teleports in a 16 block radius upon priming", + "item.enhancedexplosives.arrow_tnt": "TNT Arrow", + "item.enhancedexplosives.arrow_concussive": "Concussive Arrow", + "item.enhancedexplosives.arrow_carpet": "Carpet Bombing Arrow", + "item.enhancedexplosives.arrow_tunnel": "Tunnel Arrow", + "item.enhancedexplosives.dynamite": "Dynamite", + "tooltip.enhancedexplosives.arrow_tnt": "explodes on impact", "tooltip.enhancedexplosives.arrow_concussive": "explodes on impact without block damage", "tooltip.enhancedexplosives.arrow_carpet": "splits into multiple TNT arrows when it starts falling", + "tooltip.enhancedexplosives.arrow_tunnel": "explodes along the direction it is looking at", "tooltip.enhancedexplosives.dynamite": "TNT, but throwable" } \ No newline at end of file diff --git a/src/main/resources/assets/enhancedexplosives/particles/particle_tunnel_arrow.json b/src/main/resources/assets/enhancedexplosives/particles/particle_tunnel_arrow.json new file mode 100644 index 0000000..f73b95b --- /dev/null +++ b/src/main/resources/assets/enhancedexplosives/particles/particle_tunnel_arrow.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "enhancedexplosives:particle_tunnel_arrow" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/enhancedexplosives/textures/item/arrow_tunnel.png b/src/main/resources/assets/enhancedexplosives/textures/item/arrow_tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..692116fedf4a9f20d3ac9629c4d2d149a79856b1 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Iy_w*Lo9le z6C{cf4wDuFg^Yt;8s&3@CPg=DL6X5An9VRoQvKIdX2| zzi;Y1Z+@lRxCa!EckcUbe?~PWd)bL+ii>_8Y-a!8FKg{KDNQZq?D=`N$rC0`N)iY+ zQM_5iR$cx3Kfj#KkNo_6|9Sfp+a|1?8NWuyK*{{u}1Kq^n>FVdQ&MBb@0Efm` A4FCWD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/enhancedexplosives/textures/particle/particle_tunnel_arrow.png b/src/main/resources/assets/enhancedexplosives/textures/particle/particle_tunnel_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..94d380aee845e96a70fa4a4a68d6e20e31ad2313 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|>^xl@LnNjq z?Wv@?puEPEjCGAa4c dQVumXhT1-biQ8CLD+5hp@O1TaS?83{1OO}^B#Qt5 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/minecraft/tags/items/arrows.json b/src/main/resources/data/minecraft/tags/items/arrows.json index 4e18218..27ee3b6 100644 --- a/src/main/resources/data/minecraft/tags/items/arrows.json +++ b/src/main/resources/data/minecraft/tags/items/arrows.json @@ -2,6 +2,7 @@ "values": [ "enhancedexplosives:arrow_tnt", "enhancedexplosives:arrow_concussive", - "enhancedexplosives:arrow_carpet" + "enhancedexplosives:arrow_carpet", + "enhancedexplosives:arrow_tunnel" ] } \ No newline at end of file