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

This commit is contained in:
Jenny committed 2025-02-08 15:14:11 +01:00
1 parent b74e6ef7f0
commit 257553d374
4 files changed
+23 -10

No files matched your search

@@ -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,
@@ -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
@@ -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);