carpetArrows explode when hurt by explosion, prevents first arrows from shooting others away.

This commit is contained in:
Jenny 2025-02-08 15:14:11 +01:00
parent b74e6ef7f0
commit 257553d374
Signed by: Jenny
GPG Key ID: 2072A14E40940632
4 changed files with 23 additions and 10 deletions

View File

@ -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.10.2
mod_version=0.11.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

View File

@ -35,7 +35,7 @@ public class carpetArrow extends baseArrow {
protected void spawnChildren(int count) {
RandomSource rng = level().getRandom();
for (int i = 0; i < count; i++) {
carpetArrowPart arrow = new carpetArrowPart(entities.ARROW_CARPT_PART.get(), level());
carpetArrowPart arrow = new carpetArrowPart(entities.ARROW_CARPET_PART.get(), level());
double r = (double) rng.nextIntBetweenInclusive(-100, 100) / 200;
Vec3 move = new Vec3(
(double) rng.nextIntBetweenInclusive(-100, 100) / 100,

View File

@ -4,6 +4,9 @@ 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.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageType;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
@ -17,22 +20,32 @@ public class carpetArrowPart extends baseArrow {
}
public carpetArrowPart(Level pLevel, LivingEntity pShooter) {
super(pLevel, pShooter, entities.ARROW_CARPT_PART.get());
super(pLevel, pShooter, entities.ARROW_CARPET_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();
if (this.inGround || this.hurtMarked) {
explode();
}
}
@Override
protected void doPostHurtEffects(@NotNull LivingEntity pTarget) {
this.level().explode(this, getX(), getY(), getZ(), 8.0f, Level.ExplosionInteraction.NONE);
this.discard();
explode();
}
public void explode() {
if (!level().isClientSide) {
level().explode(this, getX(), getY(), getZ(), 8.0f, Level.ExplosionInteraction.NONE);
}
discard();
}
@Override
public boolean hurt(@NotNull DamageSource pSource, float pAmount) {
return super.hurt(pSource, pAmount) || pSource.is(DamageTypes.EXPLOSION);
}
@NotNull

View File

@ -67,7 +67,7 @@ public class entities {
ENTITY_TYPES.register("arrow_claymore", () -> EntityType.Builder.<claymoreArrow>of(claymoreArrow::new, MobCategory.MISC)
.sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_claymore"));
public static final RegistryObject<EntityType<carpetArrowPart>> ARROW_CARPT_PART =
public static final RegistryObject<EntityType<carpetArrowPart>> ARROW_CARPET_PART =
ENTITY_TYPES.register("arrow_carpet_part", () -> EntityType.Builder.<carpetArrowPart>of(carpetArrowPart::new, MobCategory.MISC)
.sized(0.48F, 0.48F).clientTrackingRange(64).build("arrow_carpet_part"));
@ -99,7 +99,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_CARPET_PART.get(), TNTArrowRenderer::new);
EntityRenderers.register(ARROW_TUNNEL.get(), TNTArrowRenderer::new);
EntityRenderers.register(ARROW_CLAYMORE.get(), baseArrowRenderer::new);