实现了穿透机制
This commit is contained in:
parent
d7ba906c0f
commit
b80b554993
1 changed files with 26 additions and 9 deletions
|
@ -22,6 +22,8 @@ import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.level.Explosion;
|
import net.minecraft.world.level.Explosion;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
import net.minecraft.world.phys.EntityHitResult;
|
import net.minecraft.world.phys.EntityHitResult;
|
||||||
import net.minecraftforge.network.NetworkHooks;
|
import net.minecraftforge.network.NetworkHooks;
|
||||||
|
@ -34,6 +36,7 @@ public class CannonShellEntity extends ThrowableItemProjectile {
|
||||||
private float explosionDamage = 0;
|
private float explosionDamage = 0;
|
||||||
private float fireProbability = 0;
|
private float fireProbability = 0;
|
||||||
private int fireTime = 0;
|
private int fireTime = 0;
|
||||||
|
private int durability = 40;
|
||||||
|
|
||||||
public CannonShellEntity(EntityType<? extends CannonShellEntity> type, Level world) {
|
public CannonShellEntity(EntityType<? extends CannonShellEntity> type, Level world) {
|
||||||
super(type, world);
|
super(type, world);
|
||||||
|
@ -60,6 +63,11 @@ public class CannonShellEntity extends ThrowableItemProjectile {
|
||||||
this(TargetModEntities.CANNON_SHELL.get(), level);
|
this(TargetModEntities.CANNON_SHELL.get(), level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CannonShellEntity durability(int durability) {
|
||||||
|
this.durability = durability;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Packet<ClientGamePacketListener> getAddEntityPacket() {
|
public Packet<ClientGamePacketListener> getAddEntityPacket() {
|
||||||
return NetworkHooks.getEntitySpawningPacket(this);
|
return NetworkHooks.getEntitySpawningPacket(this);
|
||||||
|
@ -70,7 +78,6 @@ public class CannonShellEntity extends ThrowableItemProjectile {
|
||||||
return TargetModItems.HE_5_INCHES.get();
|
return TargetModItems.HE_5_INCHES.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onHitEntity(EntityHitResult entityHitResult) {
|
public void onHitEntity(EntityHitResult entityHitResult) {
|
||||||
Entity entity = entityHitResult.getEntity();
|
Entity entity = entityHitResult.getEntity();
|
||||||
|
@ -99,13 +106,24 @@ public class CannonShellEntity extends ThrowableItemProjectile {
|
||||||
int y = blockHitResult.getBlockPos().getY();
|
int y = blockHitResult.getBlockPos().getY();
|
||||||
int z = blockHitResult.getBlockPos().getZ();
|
int z = blockHitResult.getBlockPos().getZ();
|
||||||
|
|
||||||
float hardness = this.level().getBlockState(BlockPos.containing(x, y, z)).getDestroySpeed(this.level(), BlockPos.containing(x, y, z));
|
BlockState blockState = this.level().getBlockState(BlockPos.containing(x, y, z));
|
||||||
|
if (blockState.is(Blocks.BEDROCK) || blockState.is(Blocks.BARRIER)) {
|
||||||
|
if (!this.level().isClientSide()) {
|
||||||
if (!this.level().isClientSide() && this.level() instanceof ServerLevel) {
|
causeExplode();
|
||||||
causeExplode();
|
}
|
||||||
|
this.discard();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float hardness = this.level().getBlockState(BlockPos.containing(x, y, z)).getBlock().defaultDestroyTime();
|
||||||
|
this.durability -= (int) hardness;
|
||||||
|
|
||||||
|
if (this.durability <= 0) {
|
||||||
|
if (!this.level().isClientSide()) {
|
||||||
|
causeExplode();
|
||||||
|
}
|
||||||
|
this.discard();
|
||||||
}
|
}
|
||||||
this.discard();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -124,8 +142,7 @@ public class CannonShellEntity extends ThrowableItemProjectile {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void causeExplode() {
|
private void causeExplode() {
|
||||||
|
if (Math.random() > fireProbability) {
|
||||||
if (Math.random() > fireProbability){
|
|
||||||
fireTime = 0;
|
fireTime = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue