diff --git a/gradle.properties b/gradle.properties index a599aab..8aebcb6 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.8 +mod_version=0.8.9 # 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/entities/arrows/carpetArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrow.java index da86380..fdb899a 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrow.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrow.java @@ -1,8 +1,9 @@ package com.jenny.enhancedexplosives.entities.arrows; +import com.jenny.enhancedexplosives.config.ConfigClient; import com.jenny.enhancedexplosives.entities.entities; import com.jenny.enhancedexplosives.items.items; -import net.minecraft.core.particles.ParticleTypes; +import com.jenny.enhancedexplosives.particles.particles; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -12,8 +13,6 @@ 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) { @@ -26,26 +25,24 @@ public class carpetArrow extends baseArrow { @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) { + if (getDeltaMovement().y < 0) { 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); + carpetArrowPart arrow = new carpetArrowPart(entities.ARROW_CARPT_PART.get(), level()); + double r = (double) rng.nextIntBetweenInclusive(-100, 100) / 200; + Vec3 move = new Vec3( + (double) rng.nextIntBetweenInclusive(-100, 100) / 100, + 0, + (double) rng.nextIntBetweenInclusive(-100, 100) / 100).normalize().multiply(r, 0, r); arrow.setPos(position()); - arrow.setDeltaMovement(delta.add(move.multiply(0.2, 0, 0.2))); + arrow.setDeltaMovement(move.add(getDeltaMovement())); level().addFreshEntity(arrow); } } @@ -54,4 +51,18 @@ public class carpetArrow extends baseArrow { protected ItemStack getPickupItem() { return new ItemStack(items.CARPET_ARROW.get()); } + + @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, 0, m).add(getPosition(partialTicks)); + level().addParticle(particles.CARPET_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/arrows/carpetArrowPart.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrowPart.java new file mode 100644 index 0000000..15be11e --- /dev/null +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrowPart.java @@ -0,0 +1,56 @@ +package com.jenny.enhancedexplosives.entities.arrows; + +import com.jenny.enhancedexplosives.config.ConfigClient; +import com.jenny.enhancedexplosives.entities.entities; +import com.jenny.enhancedexplosives.items.items; +import com.jenny.enhancedexplosives.particles.particles; +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 carpetArrowPart extends baseArrow { + public carpetArrowPart(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); + } + + public carpetArrowPart(Level pLevel, LivingEntity pShooter) { + super(pLevel, pShooter, entities.ARROW_CARPT_PART.get()); + } + + @Override + public void tick() { + super.tick(); + if (this.inGround) { + this.level().explode(this, getX(), getY(), getZ(), 8.0f, 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.discard(); + } + + @NotNull + protected ItemStack getPickupItem() { + return new ItemStack(items.CONCUSSIVE_ARROW.get()); + } + + @Override + public void spawnParticles(float partialTicks) { + for (int i = 1; i <= ConfigClient.calcPCount(1); 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.CONCUSSIVE_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 da1b71f..ab83c37 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/entities.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/entities.java @@ -63,6 +63,10 @@ public class entities { ENTITY_TYPES.register("arrow_claymore", () -> EntityType.Builder.of(claymoreArrow::new, MobCategory.MISC) .sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_claymore")); + public static final RegistryObject> ARROW_CARPT_PART = + ENTITY_TYPES.register("arrow_carpet_part", () -> EntityType.Builder.of(carpetArrowPart::new, MobCategory.MISC) + .sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_carpet_part")); + public static final RegistryObject> DYNAMITE = ENTITY_TYPES.register("dynamite", () -> EntityType.Builder.of(dynamite::new, MobCategory.MISC) .sized(0.48F, 0.48F).clientTrackingRange(64).build("dynamite")); @@ -85,6 +89,7 @@ public class entities { EntityRenderers.register(ARROW_TNT.get(), TNTArrowRenderer::new); 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_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 7588b89..adb0489 100644 --- a/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java +++ b/src/main/java/com/jenny/enhancedexplosives/eventBusEvents.java @@ -3,9 +3,16 @@ package com.jenny.enhancedexplosives; import com.jenny.enhancedexplosives.particles.ArrowParticle; import com.jenny.enhancedexplosives.particles.particles; import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.TextureSheetParticle; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; import net.minecraftforge.client.event.RegisterParticleProvidersEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.RegistryObject; + +import java.util.Iterator; import static com.jenny.enhancedexplosives.EnhancedExplosives.MODID; @@ -17,5 +24,7 @@ public class eventBusEvents { ArrowParticle.Provider::new); Minecraft.getInstance().particleEngine.register(particles.TNT_ARROW_PARTICLE.get(), ArrowParticle.Provider::new); + Minecraft.getInstance().particleEngine.register(particles.CARPET_ARROW_PARTICLE.get(), + ArrowParticle.Provider::new); } } diff --git a/src/main/java/com/jenny/enhancedexplosives/particles/particles.java b/src/main/java/com/jenny/enhancedexplosives/particles/particles.java index 0301147..a4decb5 100644 --- a/src/main/java/com/jenny/enhancedexplosives/particles/particles.java +++ b/src/main/java/com/jenny/enhancedexplosives/particles/particles.java @@ -1,10 +1,7 @@ package com.jenny.enhancedexplosives.particles; -import net.minecraft.client.particle.Particle; import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.SimpleParticleType; -import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; @@ -19,6 +16,8 @@ public class particles { PARTICLES.register("particle_concussive_arrow", () -> new SimpleParticleType(true)); public static final RegistryObject TNT_ARROW_PARTICLE = 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 void register(IEventBus bus) { PARTICLES.register(bus); diff --git a/src/main/resources/assets/enhancedexplosives/particles/particle_carpet_arrow.json b/src/main/resources/assets/enhancedexplosives/particles/particle_carpet_arrow.json new file mode 100644 index 0000000..0695bf2 --- /dev/null +++ b/src/main/resources/assets/enhancedexplosives/particles/particle_carpet_arrow.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "enhancedexplosives:particle_carpet_arrow" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/enhancedexplosives/textures/particle/particle_carpet_arrow.png b/src/main/resources/assets/enhancedexplosives/textures/particle/particle_carpet_arrow.png new file mode 100644 index 0000000..676d27d Binary files /dev/null and b/src/main/resources/assets/enhancedexplosives/textures/particle/particle_carpet_arrow.png differ