diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java index 66b34a359..936725233 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java @@ -581,7 +581,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa protected void explosionBulletBlock(Entity projectile, float damage, int heLevel, float monsterMultiple, Vec3 hitVec) { CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, ModDamageTypes.causeProjectileBoomDamage(projectile.level().registryAccess(), projectile, this.getShooter()), (float) ((0.9 * damage) * (1 + 0.1 * heLevel)), - hitVec.x, hitVec.y, hitVec.z, (float) ((1.5 + 0.02 * damage) * (1 + 0.05 * heLevel))).setDamageMultiplier(monsterMultiple).isBulletExplode(true); + hitVec.x, hitVec.y, hitVec.z, (float) ((1.5 + 0.02 * damage) * (1 + 0.05 * heLevel))).setDamageMultiplier(monsterMultiple).bulletExplode(); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion); explosion.finalizeExplosion(false); @@ -591,7 +591,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa protected void explosionBulletEntity(Entity projectile, Entity target, float damage, int heLevel, float monsterMultiple) { CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, ModDamageTypes.causeProjectileBoomDamage(projectile.level().registryAccess(), projectile, this.getShooter()), (float) ((0.8 * damage) * (1 + 0.1 * heLevel)), - target.getX(), target.getY(), target.getZ(), (float) ((1.5 + 0.02 * damage) * (1 + 0.05 * heLevel))).setDamageMultiplier(monsterMultiple).isBulletExplode(true); + target.getX(), target.getY(), target.getZ(), (float) ((1.5 + 0.02 * damage) * (1 + 0.05 * heLevel))).setDamageMultiplier(monsterMultiple).bulletExplode(); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion); explosion.finalizeExplosion(false); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/ContainerMobileEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/ContainerMobileEntity.java index 0db87b96d..aa9a5fb32 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/ContainerMobileEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/ContainerMobileEntity.java @@ -12,14 +12,12 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.HasCustomInventoryScreen; -import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.vehicle.ContainerEntity; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.entity.HopperBlockEntity; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ForgeCapabilities; @@ -28,8 +26,6 @@ import net.minecraftforge.items.wrapper.InvWrapper; import org.jetbrains.annotations.Nullable; import org.joml.Math; -import java.util.List; - public class ContainerMobileEntity extends MobileVehicleEntity implements HasCustomInventoryScreen, ContainerEntity { public static final int CONTAINER_SIZE = 102; @@ -83,10 +79,6 @@ public class ContainerMobileEntity extends MobileVehicleEntity implements HasCus public void baseTick() { super.baseTick(); - if (this.canPickUpItems()) { - this.pickUpItems(); - } - for (var stack : this.getItemStacks()) { int neededEnergy = this.getMaxEnergy() - this.getEnergy(); if (neededEnergy <= 0) break; @@ -105,21 +97,6 @@ public class ContainerMobileEntity extends MobileVehicleEntity implements HasCus this.refreshDimensions(); } - public boolean canPickUpItems() { - return false; - } - - public void pickUpItems() { - List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate(0.2F, 0.1, 0.2F)); - if (!list.isEmpty()) { - for (ItemEntity entity : list) { - if (!this.level().isClientSide) { - HopperBlockEntity.addItem(this, entity); - } - } - } - } - @Override public void openCustomInventoryScreen(Player pPlayer) { pPlayer.openMenu(this); diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java b/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java index 34ab5f729..25dc2dac4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/CustomExplosion.java @@ -30,6 +30,7 @@ import java.util.Optional; import java.util.Set; public class CustomExplosion extends Explosion { + private final Level level; private final double x; private final double y; @@ -42,7 +43,6 @@ public class CustomExplosion extends Explosion { private final float damage; private int fireTime; private float damageMultiplier; - private boolean bullet; public CustomExplosion(Level pLevel, @Nullable Entity pSource, @Nullable DamageSource source, @Nullable ExplosionDamageCalculator pDamageCalculator, float damage, double pToBlowX, double pToBlowY, double pToBlowZ, float pRadius, @@ -80,9 +80,7 @@ public class CustomExplosion extends Explosion { this(pLevel, pSource, source, null, damage, pToBlowX, pToBlowY, pToBlowZ, pRadius, BlockInteraction.KEEP); final Vec3 center = new Vec3(pToBlowX, pToBlowY, pToBlowZ); - for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(radius), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { - if (target instanceof ServerPlayer serverPlayer && !(target == pSource && pSource.getVehicle() != null)) { ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(20 + 0.02 * damage, pRadius,10 + 0.03 * damage, pToBlowX, pToBlowY, pToBlowZ)); } @@ -99,8 +97,7 @@ public class CustomExplosion extends Explosion { return this; } - public CustomExplosion isBulletExplode(boolean bullet) { - this.bullet = bullet; + public CustomExplosion bulletExplode() { return this; } @@ -172,14 +169,12 @@ public class CustomExplosion extends Explosion { double yDistance = (entity instanceof PrimedTnt ? entity.getY() : entity.getEyeY()) - this.y; double zDistance = entity.getZ() - this.z; double distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance + zDistance * zDistance); + if (distance != 0.0D) { - xDistance /= distance; - yDistance /= distance; - zDistance /= distance; double seenPercent = Mth.clamp(getSeenPercent(position, entity), 0.01 * ExplosionConfig.EXPLOSION_PENETRATION_RATIO.get(), Double.POSITIVE_INFINITY); double damagePercent = (1.0D - distanceRate) * seenPercent; - double damageFinal = (damagePercent * damagePercent + damagePercent) / 2.0D * damage; + if (entity instanceof Monster monster) { monster.hurt(this.damageSource, (float) damageFinal * (1 + 0.2f * this.damageMultiplier)); } else {