提高爆炸物整体伤害,优化武器经验获取方式,简化捷径包的配方,优化爆炸音效,添加大爆炸的音效,修复发射器类重生异常扣除弹药bug,添加强力吸引的贴图和配方,削减靶子受击音效的传播范围
This commit is contained in:
parent
022af31a42
commit
61fb748a33
57 changed files with 247 additions and 104 deletions
|
@ -111,12 +111,12 @@ public class CannonHudOverlay {
|
||||||
|
|
||||||
if (cannon instanceof Mk42Entity) {
|
if (cannon instanceof Mk42Entity) {
|
||||||
health = cannon.getEntityData().get(net.mcreator.superbwarfare.entity.Mk42Entity.HEALTH);
|
health = cannon.getEntityData().get(net.mcreator.superbwarfare.entity.Mk42Entity.HEALTH);
|
||||||
maxHealth = 500;
|
maxHealth = 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cannon instanceof Mle1934Entity) {
|
if (cannon instanceof Mle1934Entity) {
|
||||||
health = cannon.getEntityData().get(net.mcreator.superbwarfare.entity.Mle1934Entity.HEALTH);
|
health = cannon.getEntityData().get(net.mcreator.superbwarfare.entity.Mle1934Entity.HEALTH);
|
||||||
maxHealth = 600;
|
maxHealth = 1200;
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiGraphics guiGraphics = event.getGuiGraphics();
|
GuiGraphics guiGraphics = event.getGuiGraphics();
|
||||||
|
|
|
@ -41,6 +41,7 @@ public class KillMessageOverlay {
|
||||||
private static final ResourceLocation BLEEDING = ModUtils.loc("textures/screens/damage_types/bleeding.png");
|
private static final ResourceLocation BLEEDING = ModUtils.loc("textures/screens/damage_types/bleeding.png");
|
||||||
private static final ResourceLocation SHOCK = ModUtils.loc("textures/screens/damage_types/shock.png");
|
private static final ResourceLocation SHOCK = ModUtils.loc("textures/screens/damage_types/shock.png");
|
||||||
private static final ResourceLocation BLOOD_CRYSTAL = ModUtils.loc("textures/screens/damage_types/blood_crystal.png");
|
private static final ResourceLocation BLOOD_CRYSTAL = ModUtils.loc("textures/screens/damage_types/blood_crystal.png");
|
||||||
|
private static final ResourceLocation BURN = ModUtils.loc("textures/screens/damage_types/burn.png");
|
||||||
|
|
||||||
private static final ResourceLocation WORLD_PEACE_STAFF = ModUtils.loc("textures/gun_icon/compat/world_peace_staff.png");
|
private static final ResourceLocation WORLD_PEACE_STAFF = ModUtils.loc("textures/gun_icon/compat/world_peace_staff.png");
|
||||||
|
|
||||||
|
@ -255,7 +256,7 @@ public class KillMessageOverlay {
|
||||||
icon = null;
|
icon = null;
|
||||||
} else {
|
} else {
|
||||||
// 如果是其他伤害,则渲染对应图标
|
// 如果是其他伤害,则渲染对应图标
|
||||||
if (record.damageType == DamageTypes.EXPLOSION || record.damageType == DamageTypes.PLAYER_EXPLOSION || record.damageType == ModDamageTypes.PROJECTILE_BOOM) {
|
if (record.damageType == DamageTypes.EXPLOSION || record.damageType == DamageTypes.PLAYER_EXPLOSION || record.damageType == ModDamageTypes.PROJECTILE_BOOM || record.damageType == DamageTypes.FIREWORKS) {
|
||||||
icon = EXPLOSION;
|
icon = EXPLOSION;
|
||||||
} else if (record.damageType == DamageTypes.PLAYER_ATTACK) {
|
} else if (record.damageType == DamageTypes.PLAYER_ATTACK) {
|
||||||
icon = KNIFE;
|
icon = KNIFE;
|
||||||
|
@ -269,6 +270,8 @@ public class KillMessageOverlay {
|
||||||
icon = BLOOD_CRYSTAL;
|
icon = BLOOD_CRYSTAL;
|
||||||
} else if (record.damageType == ModDamageTypes.SHOCK) {
|
} else if (record.damageType == ModDamageTypes.SHOCK) {
|
||||||
icon = SHOCK;
|
icon = SHOCK;
|
||||||
|
} else if (record.damageType == ModDamageTypes.BURN || record.damageType == DamageTypes.IN_FIRE || record.damageType == DamageTypes.ON_FIRE || record.damageType == DamageTypes.LAVA) {
|
||||||
|
icon = BURN;
|
||||||
} else {
|
} else {
|
||||||
icon = GENERIC;
|
icon = GENERIC;
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,8 +228,8 @@ public class ClaymoreEntity extends Entity implements GeoEntity, AnimatedEntity,
|
||||||
|
|
||||||
private void triggerExplode(Entity target) {
|
private void triggerExplode(Entity target) {
|
||||||
CustomExplosion explosion = new CustomExplosion(this.level(), this,
|
CustomExplosion explosion = new CustomExplosion(this.level(), this,
|
||||||
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 40f,
|
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 140f,
|
||||||
target.getX(), target.getY(), target.getZ(), 4f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
target.getX(), target.getY(), target.getZ(), 5f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
|
||||||
explosion.explode();
|
explosion.explode();
|
||||||
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
|
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
|
||||||
explosion.finalizeExplosion(false);
|
explosion.finalizeExplosion(false);
|
||||||
|
|
|
@ -185,6 +185,8 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
|
||||||
this.entityData.set(ROT_Z, compound.getFloat("rotZ"));
|
this.entityData.set(ROT_Z, compound.getFloat("rotZ"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void baseTick() {
|
public void baseTick() {
|
||||||
super.baseTick();
|
super.baseTick();
|
||||||
|
@ -224,7 +226,7 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
|
||||||
this.entityData.set(MOVE_Y, 1.5f);
|
this.entityData.set(MOVE_Y, 1.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.entityData.set(MOVE_Y, Mth.lerp(0.1f, this.entityData.get(MOVE_Y), 0));
|
this.entityData.set(MOVE_Y, Mth.lerp(0.5f, this.entityData.get(MOVE_Y), 0));
|
||||||
|
|
||||||
this.setDeltaMovement(new Vec3(
|
this.setDeltaMovement(new Vec3(
|
||||||
this.getDeltaMovement().x + -this.entityData.get(MOVE_Z) * 0.1f * this.getLookAngle().x,
|
this.getDeltaMovement().x + -this.entityData.get(MOVE_Z) * 0.1f * this.getLookAngle().x,
|
||||||
|
@ -242,7 +244,7 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
|
||||||
Vec3 vec = this.getDeltaMovement();
|
Vec3 vec = this.getDeltaMovement();
|
||||||
if (this.getDeltaMovement().horizontalDistanceSqr() < 0.75) {
|
if (this.getDeltaMovement().horizontalDistanceSqr() < 0.75) {
|
||||||
if (this.move) {
|
if (this.move) {
|
||||||
this.setDeltaMovement(vec.multiply(1.04, 1, 1.04));
|
this.setDeltaMovement(vec.multiply(1.04, 0.99, 1.04));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ public class Mk42Entity extends Entity implements GeoEntity, ICannonEntity {
|
||||||
public static final EntityDataAccessor<Integer> TYPE = SynchedEntityData.defineId(Mk42Entity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> TYPE = SynchedEntityData.defineId(Mk42Entity.class, EntityDataSerializers.INT);
|
||||||
public static final EntityDataAccessor<Float> HEALTH = SynchedEntityData.defineId(Mk42Entity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> HEALTH = SynchedEntityData.defineId(Mk42Entity.class, EntityDataSerializers.FLOAT);
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
public static final float MAX_HEALTH = 500.0f;
|
public static final float MAX_HEALTH = 700.0f;
|
||||||
protected int interpolationSteps;
|
protected int interpolationSteps;
|
||||||
protected double serverYRot;
|
protected double serverYRot;
|
||||||
protected double serverXRot;
|
protected double serverXRot;
|
||||||
|
@ -283,21 +283,21 @@ public class Mk42Entity extends Entity implements GeoEntity, ICannonEntity {
|
||||||
int durability = 0;
|
int durability = 0;
|
||||||
|
|
||||||
if (stack.is(ModItems.HE_5_INCHES.get())) {
|
if (stack.is(ModItems.HE_5_INCHES.get())) {
|
||||||
hitDamage = 180;
|
hitDamage = 400;
|
||||||
explosionRadius = 10;
|
explosionRadius = 12;
|
||||||
explosionDamage = 220;
|
explosionDamage = 420;
|
||||||
fireProbability = 0.18F;
|
fireProbability = 0.18F;
|
||||||
fireTime = 2;
|
fireTime = 2;
|
||||||
durability = 1;
|
durability = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stack.is(ModItems.AP_5_INCHES.get())) {
|
if (stack.is(ModItems.AP_5_INCHES.get())) {
|
||||||
hitDamage = 360;
|
hitDamage = 800;
|
||||||
explosionRadius = 3;
|
explosionRadius = 3;
|
||||||
explosionDamage = 100;
|
explosionDamage = 200;
|
||||||
fireProbability = 0;
|
fireProbability = 0;
|
||||||
fireTime = 0;
|
fireTime = 0;
|
||||||
durability = 30;
|
durability = 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!player.isCreative()) {
|
if (!player.isCreative()) {
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity {
|
||||||
public static final EntityDataAccessor<Float> HEALTH = SynchedEntityData.defineId(Mle1934Entity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> HEALTH = SynchedEntityData.defineId(Mle1934Entity.class, EntityDataSerializers.FLOAT);
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
|
||||||
public static final float MAX_HEALTH = 600.0f;
|
public static final float MAX_HEALTH = 800.0f;
|
||||||
|
|
||||||
public String animationprocedure = "empty";
|
public String animationprocedure = "empty";
|
||||||
|
|
||||||
|
@ -282,9 +282,9 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity {
|
||||||
boolean salvoShoot = false;
|
boolean salvoShoot = false;
|
||||||
|
|
||||||
if (stack.is(ModItems.HE_5_INCHES.get())) {
|
if (stack.is(ModItems.HE_5_INCHES.get())) {
|
||||||
hitDamage = 200;
|
hitDamage = 450;
|
||||||
explosionRadius = 13;
|
explosionRadius = 13;
|
||||||
explosionDamage = 240;
|
explosionDamage = 480;
|
||||||
fireProbability = 0.24F;
|
fireProbability = 0.24F;
|
||||||
fireTime = 5;
|
fireTime = 5;
|
||||||
durability = 1;
|
durability = 1;
|
||||||
|
@ -292,12 +292,12 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stack.is(ModItems.AP_5_INCHES.get())) {
|
if (stack.is(ModItems.AP_5_INCHES.get())) {
|
||||||
hitDamage = 400;
|
hitDamage = 900;
|
||||||
explosionRadius = 3.8f;
|
explosionRadius = 3.8f;
|
||||||
explosionDamage = 120;
|
explosionDamage = 220;
|
||||||
fireProbability = 0;
|
fireProbability = 0;
|
||||||
fireTime = 0;
|
fireTime = 0;
|
||||||
durability = 50;
|
durability = 70;
|
||||||
salvoShoot = stack.getCount() > 1 || player.isCreative();
|
salvoShoot = stack.getCount() > 1 || player.isCreative();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,9 +106,9 @@ public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEnt
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.level().isClientSide()) {
|
if (!this.level().isClientSide()) {
|
||||||
this.level().playSound(null, BlockPos.containing(this.getX(), this.getY(), this.getZ()), ModSounds.HIT.get(), SoundSource.BLOCKS, 3, 1);
|
this.level().playSound(null, BlockPos.containing(this.getX(), this.getY(), this.getZ()), ModSounds.HIT.get(), SoundSource.BLOCKS, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
this.level().playLocalSound(this.getX(), this.getY(), this.getZ(), ModSounds.HIT.get(), SoundSource.BLOCKS, 3, 1, false);
|
this.level().playLocalSound(this.getX(), this.getY(), this.getZ(), ModSounds.HIT.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
}
|
}
|
||||||
return super.hurt(source, amount);
|
return super.hurt(source, amount);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ import net.minecraftforge.network.PlayMessages;
|
||||||
|
|
||||||
public class GunGrenadeEntity extends ThrowableItemProjectile {
|
public class GunGrenadeEntity extends ThrowableItemProjectile {
|
||||||
private float monsterMultiplier = 0.0f;
|
private float monsterMultiplier = 0.0f;
|
||||||
private float damage = 5.0f;
|
private float damage = 80.0f;
|
||||||
|
|
||||||
public GunGrenadeEntity(EntityType<? extends GunGrenadeEntity> type, Level world) {
|
public GunGrenadeEntity(EntityType<? extends GunGrenadeEntity> type, Level world) {
|
||||||
super(type, world);
|
super(type, world);
|
||||||
|
@ -83,16 +83,16 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof Monster monster) {
|
if (entity instanceof Monster monster) {
|
||||||
monster.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * damageMultiplier);
|
monster.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 1.6f * this.damage * damageMultiplier);
|
||||||
} else {
|
} else {
|
||||||
entity.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage);
|
entity.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 1.6f * this.damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.tickCount > 0) {
|
if (this.tickCount > 0) {
|
||||||
if (this.level() instanceof ServerLevel) {
|
if (this.level() instanceof ServerLevel) {
|
||||||
ProjectileTool.causeCustomExplode(this,
|
ProjectileTool.causeCustomExplode(this,
|
||||||
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
||||||
entity, this.damage * 1.8f, 7.5f, this.monsterMultiplier);
|
entity, this.damage * 1.4f, 7.5f, this.monsterMultiplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ public class GunGrenadeEntity extends ThrowableItemProjectile {
|
||||||
if (this.level() instanceof ServerLevel) {
|
if (this.level() instanceof ServerLevel) {
|
||||||
ProjectileTool.causeCustomExplode(this,
|
ProjectileTool.causeCustomExplode(this,
|
||||||
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
||||||
this, this.damage * 1.8f, 7.5f, this.monsterMultiplier);
|
this, this.damage * 1.4f, 7.5f, this.monsterMultiplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,7 @@ public class HandGrenadeEntity extends ThrowableItemProjectile {
|
||||||
if (this.fuse <= 0) {
|
if (this.fuse <= 0) {
|
||||||
this.discard();
|
this.discard();
|
||||||
if (!this.level().isClientSide) {
|
if (!this.level().isClientSide) {
|
||||||
ProjectileTool.causeCustomExplode(this, 90f, 6.5f, 1.25f);
|
ProjectileTool.causeCustomExplode(this, 175f, 7.25f, 2.2f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
|
||||||
|
|
||||||
public String animationprocedure = "empty";
|
public String animationprocedure = "empty";
|
||||||
private float monsterMultiplier = 0.0f;
|
private float monsterMultiplier = 0.0f;
|
||||||
private float damage = 300.0f;
|
private float damage = 700.0f;
|
||||||
|
|
||||||
public JavelinMissileEntity(EntityType<? extends JavelinMissileEntity> type, Level world) {
|
public JavelinMissileEntity(EntityType<? extends JavelinMissileEntity> type, Level world) {
|
||||||
super(type, world);
|
super(type, world);
|
||||||
|
@ -129,7 +129,7 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
|
||||||
if (this.level() instanceof ServerLevel) {
|
if (this.level() instanceof ServerLevel) {
|
||||||
ProjectileTool.causeCustomExplode(this,
|
ProjectileTool.causeCustomExplode(this,
|
||||||
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
||||||
entity, this.damage, 8.0f, this.monsterMultiplier);
|
entity, this.damage, 6.0f, this.monsterMultiplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
|
||||||
if (this.level() instanceof ServerLevel) {
|
if (this.level() instanceof ServerLevel) {
|
||||||
ProjectileTool.causeCustomExplode(this,
|
ProjectileTool.causeCustomExplode(this,
|
||||||
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
||||||
this, this.damage, 8.0f, this.monsterMultiplier);
|
this, this.damage, 6.0f, this.monsterMultiplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,10 +185,10 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
|
||||||
if (Math.sqrt(Math.pow(px - ex, 2) + Math.pow(pz - ez, 2)) > 10) {
|
if (Math.sqrt(Math.pow(px - ex, 2) + Math.pow(pz - ez, 2)) > 10) {
|
||||||
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(), entity.getY() + Mth.clamp(4 * this.tickCount, 0, 90), entity.getZ()));
|
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(), entity.getY() + Mth.clamp(4 * this.tickCount, 0, 90), entity.getZ()));
|
||||||
} else {
|
} else {
|
||||||
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(), entity.getEyeY() + (entity instanceof EnderDragon ? -3 : 1), entity.getZ()));
|
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(), entity.getEyeY() + (entity instanceof EnderDragon ? -3 : 0), entity.getZ()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(), entity.getEyeY() + (entity instanceof EnderDragon ? -3 : 1), entity.getZ()));
|
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(), entity.getEyeY() + (entity instanceof EnderDragon ? -3 : 0), entity.getZ()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ import net.minecraftforge.network.PlayMessages;
|
||||||
|
|
||||||
public class MortarShellEntity extends ThrowableItemProjectile {
|
public class MortarShellEntity extends ThrowableItemProjectile {
|
||||||
|
|
||||||
private float damage = 150f;
|
private float damage = 250f;
|
||||||
private int life = 600;
|
private int life = 600;
|
||||||
private float radius = 12.5f;
|
private float radius = 12.5f;
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ public class MortarShellEntity extends ThrowableItemProjectile {
|
||||||
if (pCompound.contains("Damage")) {
|
if (pCompound.contains("Damage")) {
|
||||||
this.damage = pCompound.getFloat("Damage");
|
this.damage = pCompound.getFloat("Damage");
|
||||||
} else {
|
} else {
|
||||||
this.damage = 150f;
|
this.damage = 250f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCompound.contains("Life")) {
|
if (pCompound.contains("Life")) {
|
||||||
|
|
|
@ -302,14 +302,13 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fireBullet && dragonBreath && this.level() instanceof ServerLevel serverLevel) {
|
if (fireBullet && dragonBreath && this.level() instanceof ServerLevel serverLevel) {
|
||||||
for (int index0 = 0; index0 < 1; index0++) {
|
double randomPos = this.tickCount * 0.08 * (Math.random() - 0.5);
|
||||||
ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME,
|
ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME,
|
||||||
this.getX(), this.getY(), this.getZ(),
|
(this.xo + this.getX()) / 2 + randomPos, (this.yo + this.getY()) / 2 + randomPos, (this.zo + this.getZ()) / 2 + randomPos,
|
||||||
0,
|
0,
|
||||||
this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z,
|
this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z,
|
||||||
this.getDeltaMovement().length(), true
|
Math.max(this.getDeltaMovement().length() - 1.1 * this.tickCount, 0.2), true
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,8 +82,7 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti
|
||||||
if (state.getBlock() instanceof BellBlock bell) {
|
if (state.getBlock() instanceof BellBlock bell) {
|
||||||
bell.attemptToRing(this.level(), resultPos, blockResult.getDirection());
|
bell.attemptToRing(this.level(), resultPos, blockResult.getDirection());
|
||||||
}
|
}
|
||||||
|
ProjectileTool.causeCustomExplode(this, 135f, 6.75f, 1.5f);
|
||||||
ProjectileTool.causeCustomExplode(this, 75f, 5.75f, 1.25f);
|
|
||||||
break;
|
break;
|
||||||
case ENTITY:
|
case ENTITY:
|
||||||
EntityHitResult entityResult = (EntityHitResult) result;
|
EntityHitResult entityResult = (EntityHitResult) result;
|
||||||
|
@ -98,8 +97,7 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti
|
||||||
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5));
|
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ProjectileTool.causeCustomExplode(this, 150f, 4.75f, 2f);
|
||||||
ProjectileTool.causeCustomExplode(this, entity, 75f, 5.75f, 1.25f);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -114,7 +112,7 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti
|
||||||
if (this.fuse <= 0) {
|
if (this.fuse <= 0) {
|
||||||
this.discard();
|
this.discard();
|
||||||
if (!this.level().isClientSide) {
|
if (!this.level().isClientSide) {
|
||||||
ProjectileTool.causeCustomExplode(this, 75f, 5.75f, 1.25f);
|
ProjectileTool.causeCustomExplode(this, 135f, 6.75f, 1.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
package net.mcreator.superbwarfare.entity.projectile;
|
package net.mcreator.superbwarfare.entity.projectile;
|
||||||
|
|
||||||
import net.mcreator.superbwarfare.ModUtils;
|
import net.mcreator.superbwarfare.ModUtils;
|
||||||
|
import net.mcreator.superbwarfare.config.server.ExplosionDestroyConfig;
|
||||||
import net.mcreator.superbwarfare.entity.AnimatedEntity;
|
import net.mcreator.superbwarfare.entity.AnimatedEntity;
|
||||||
import net.mcreator.superbwarfare.init.ModDamageTypes;
|
import net.mcreator.superbwarfare.init.ModDamageTypes;
|
||||||
import net.mcreator.superbwarfare.init.ModEntities;
|
import net.mcreator.superbwarfare.init.ModEntities;
|
||||||
import net.mcreator.superbwarfare.init.ModItems;
|
import net.mcreator.superbwarfare.init.ModItems;
|
||||||
import net.mcreator.superbwarfare.init.ModSounds;
|
import net.mcreator.superbwarfare.init.ModSounds;
|
||||||
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
|
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
|
||||||
|
import net.mcreator.superbwarfare.tools.CustomExplosion;
|
||||||
import net.mcreator.superbwarfare.tools.ParticleTool;
|
import net.mcreator.superbwarfare.tools.ParticleTool;
|
||||||
import net.mcreator.superbwarfare.tools.ProjectileTool;
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
|
@ -19,12 +20,14 @@ import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.monster.Monster;
|
import net.minecraft.world.entity.monster.Monster;
|
||||||
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
|
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.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.BellBlock;
|
import net.minecraft.world.level.block.BellBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
@ -42,6 +45,8 @@ import software.bernie.geckolib.core.animation.RawAnimation;
|
||||||
import software.bernie.geckolib.core.object.PlayState;
|
import software.bernie.geckolib.core.object.PlayState;
|
||||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntity, AnimatedEntity {
|
public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntity, AnimatedEntity {
|
||||||
public static final EntityDataAccessor<String> ANIMATION = SynchedEntityData.defineId(RpgRocketEntity.class, EntityDataSerializers.STRING);
|
public static final EntityDataAccessor<String> ANIMATION = SynchedEntityData.defineId(RpgRocketEntity.class, EntityDataSerializers.STRING);
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
@ -49,7 +54,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
|
||||||
public String animationprocedure = "empty";
|
public String animationprocedure = "empty";
|
||||||
|
|
||||||
private float monsterMultiplier = 0.0f;
|
private float monsterMultiplier = 0.0f;
|
||||||
private float damage = 150f;
|
private float damage = 500f;
|
||||||
|
|
||||||
public RpgRocketEntity(EntityType<? extends RpgRocketEntity> type, Level world) {
|
public RpgRocketEntity(EntityType<? extends RpgRocketEntity> type, Level world) {
|
||||||
super(type, world);
|
super(type, world);
|
||||||
|
@ -100,14 +105,14 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof Monster monster) {
|
if (entity instanceof Monster monster) {
|
||||||
monster.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * damageMultiplier);
|
monster.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), 1.4f * this.damage * damageMultiplier);
|
||||||
} else {
|
} else {
|
||||||
entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), this.damage);
|
entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), this.damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.tickCount > 1) {
|
if (this.tickCount > 1) {
|
||||||
if (this.level() instanceof ServerLevel) {
|
if (this.level() instanceof ServerLevel) {
|
||||||
ProjectileTool.causeCustomExplode(this,
|
causeRpgExplode(this,
|
||||||
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
||||||
entity, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
|
entity, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
|
||||||
}
|
}
|
||||||
|
@ -128,7 +133,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
|
||||||
|
|
||||||
if (this.tickCount > 1) {
|
if (this.tickCount > 1) {
|
||||||
if (this.level() instanceof ServerLevel) {
|
if (this.level() instanceof ServerLevel) {
|
||||||
ProjectileTool.causeCustomExplode(this,
|
causeRpgExplode(this,
|
||||||
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
||||||
this, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
|
this, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
|
||||||
}
|
}
|
||||||
|
@ -157,7 +162,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
|
||||||
|
|
||||||
if (this.tickCount > 100 || this.isInWater()) {
|
if (this.tickCount > 100 || this.isInWater()) {
|
||||||
if (this.level() instanceof ServerLevel) {
|
if (this.level() instanceof ServerLevel) {
|
||||||
ProjectileTool.causeCustomExplode(this,
|
causeRpgExplode(this,
|
||||||
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()),
|
||||||
this, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
|
this, this.damage * 0.67f, 10.0f, this.monsterMultiplier);
|
||||||
}
|
}
|
||||||
|
@ -165,6 +170,16 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void causeRpgExplode(ThrowableItemProjectile projectile, @Nullable DamageSource source, Entity target, float damage, float radius, float damageMultiplier) {
|
||||||
|
CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, source, damage,
|
||||||
|
target.getX(), target.getY(), target.getZ(), radius, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier);
|
||||||
|
explosion.explode();
|
||||||
|
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion);
|
||||||
|
explosion.finalizeExplosion(false);
|
||||||
|
ParticleTool.spawnHugeExplosionParticles(projectile.level(), projectile.position());
|
||||||
|
projectile.discard();
|
||||||
|
}
|
||||||
|
|
||||||
private PlayState movementPredicate(AnimationState<RpgRocketEntity> event) {
|
private PlayState movementPredicate(AnimationState<RpgRocketEntity> event) {
|
||||||
if (this.animationprocedure.equals("empty")) {
|
if (this.animationprocedure.equals("empty")) {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.idle"));
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.rpg.idle"));
|
||||||
|
|
|
@ -68,6 +68,8 @@ public class LivingEventHandler {
|
||||||
handleGunPerksWhenDeath(event);
|
handleGunPerksWhenDeath(event);
|
||||||
handlePlayerKillEntity(event);
|
handlePlayerKillEntity(event);
|
||||||
handlePlayerDeathDropAmmo(event.getEntity());
|
handlePlayerDeathDropAmmo(event.getEntity());
|
||||||
|
giveKillExpToWeapon(event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -162,8 +164,33 @@ public class LivingEventHandler {
|
||||||
if (!(sourceEntity instanceof Player player)) return;
|
if (!(sourceEntity instanceof Player player)) return;
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
if (event.getEntity() instanceof TargetEntity) return;
|
||||||
|
|
||||||
double amount = event.getAmount();
|
double amount = Math.min(0.125 * event.getAmount(), event.getEntity().getMaxHealth());
|
||||||
|
|
||||||
|
// 先处理发射器类武器或高爆弹的爆炸伤害
|
||||||
|
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
|
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0) {
|
||||||
|
stack.getOrCreateTag().putDouble("Exp", stack.getOrCreateTag().getDouble("Exp") + amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 再判断是不是枪械能造成的伤害
|
||||||
|
if (!DamageTypeTool.isGunDamage(source)) return;
|
||||||
|
|
||||||
|
stack.getOrCreateTag().putDouble("Exp", stack.getOrCreateTag().getDouble("Exp") + amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void giveKillExpToWeapon(LivingDeathEvent event) {
|
||||||
|
DamageSource source = event.getSource();
|
||||||
|
if (source == null) return;
|
||||||
|
Entity sourceEntity = source.getEntity();
|
||||||
|
if (!(sourceEntity instanceof Player player)) return;
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
if (event.getEntity() instanceof TargetEntity) return;
|
||||||
|
|
||||||
|
double amount = 20 + 2 * event.getEntity().getMaxHealth();
|
||||||
|
|
||||||
// 先处理发射器类武器或高爆弹的爆炸伤害
|
// 先处理发射器类武器或高爆弹的爆炸伤害
|
||||||
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
|
@ -185,16 +212,17 @@ public class LivingEventHandler {
|
||||||
if (!(sourceEntity instanceof Player player)) return;
|
if (!(sourceEntity instanceof Player player)) return;
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
if (event.getEntity() instanceof TargetEntity) return;
|
||||||
|
|
||||||
var tag = stack.getOrCreateTag();
|
var tag = stack.getOrCreateTag();
|
||||||
int level = stack.getOrCreateTag().getInt("Level");
|
int level = stack.getOrCreateTag().getInt("Level");
|
||||||
double exp = stack.getOrCreateTag().getDouble("Exp");
|
double exp = stack.getOrCreateTag().getDouble("Exp");
|
||||||
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 140 * level + 20;
|
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
|
||||||
|
|
||||||
if (exp >= upgradeExpNeeded) {
|
if (exp >= upgradeExpNeeded) {
|
||||||
tag.putDouble("Exp", exp - upgradeExpNeeded);
|
tag.putDouble("Exp", exp - upgradeExpNeeded);
|
||||||
tag.putInt("Level", level + 1);
|
tag.putInt("Level", level + 1);
|
||||||
tag.putDouble("UpgradePoint", tag.getDouble("UpgradePoint") + 0.25);
|
tag.putDouble("UpgradePoint", tag.getDouble("UpgradePoint") + 0.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -317,19 +317,19 @@ public class PlayerEventHandler {
|
||||||
if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && cap.rifleAmmo > 0) {
|
if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && cap.rifleAmmo > 0) {
|
||||||
GunsTool.reload(player, stack, GunInfo.Type.RIFLE);
|
GunsTool.reload(player, stack, GunInfo.Type.RIFLE);
|
||||||
}
|
}
|
||||||
if (stack.getItem() == ModItems.TASER.get() && stack.getOrCreateTag().getInt("max_ammo") > 0) {
|
if (stack.getItem() == ModItems.TASER.get() && stack.getOrCreateTag().getInt("max_ammo") > 0 && stack.getOrCreateTag().getInt("ammo") == 0) {
|
||||||
stack.getOrCreateTag().putInt("ammo", 1);
|
stack.getOrCreateTag().putInt("ammo", 1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
if (stack.getItem() == ModItems.M_79.get() && stack.getOrCreateTag().getInt("max_ammo") > 0) {
|
if (stack.getItem() == ModItems.M_79.get() && stack.getOrCreateTag().getInt("max_ammo") > 0 && stack.getOrCreateTag().getInt("ammo") == 0) {
|
||||||
stack.getOrCreateTag().putInt("ammo", 1);
|
stack.getOrCreateTag().putInt("ammo", 1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
if (stack.getItem() == ModItems.RPG.get() && stack.getOrCreateTag().getInt("max_ammo") > 0) {
|
if (stack.getItem() == ModItems.RPG.get() && stack.getOrCreateTag().getInt("max_ammo") > 0 && stack.getOrCreateTag().getInt("ammo") == 0) {
|
||||||
stack.getOrCreateTag().putInt("ammo", 1);
|
stack.getOrCreateTag().putInt("ammo", 1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
if (stack.getItem() == ModItems.JAVELIN.get() && stack.getOrCreateTag().getInt("max_ammo") > 0) {
|
if (stack.getItem() == ModItems.JAVELIN.get() && stack.getOrCreateTag().getInt("max_ammo") > 0 && stack.getOrCreateTag().getInt("ammo") == 0) {
|
||||||
stack.getOrCreateTag().putInt("ammo", 1);
|
stack.getOrCreateTag().putInt("ammo", 1);
|
||||||
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots());
|
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots());
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ public class ModDamageTypes {
|
||||||
public static final ResourceKey<DamageType> GUN_FIRE_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_absolute"));
|
public static final ResourceKey<DamageType> GUN_FIRE_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_absolute"));
|
||||||
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_headshot"));
|
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_headshot"));
|
||||||
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_headshot_absolute"));
|
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_headshot_absolute"));
|
||||||
|
public static final ResourceKey<DamageType> BURN = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "burn"));
|
||||||
public static final ResourceKey<DamageType> MINE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "mine"));
|
public static final ResourceKey<DamageType> MINE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "mine"));
|
||||||
public static final ResourceKey<DamageType> BEAST = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "beast"));
|
public static final ResourceKey<DamageType> BEAST = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "beast"));
|
||||||
public static final ResourceKey<DamageType> SHOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "shock"));
|
public static final ResourceKey<DamageType> SHOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "shock"));
|
||||||
|
@ -43,6 +44,10 @@ public class ModDamageTypes {
|
||||||
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(SHOCK), attacker);
|
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(SHOCK), attacker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static DamageSource causeBurnDamage(RegistryAccess registryAccess, @Nullable Entity attacker) {
|
||||||
|
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(BURN), attacker);
|
||||||
|
}
|
||||||
|
|
||||||
public static DamageSource causeProjectileBoomDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) {
|
public static DamageSource causeProjectileBoomDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) {
|
||||||
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(PROJECTILE_BOOM), directEntity, attacker);
|
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(PROJECTILE_BOOM), directEntity, attacker);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,9 @@ public class ModSounds {
|
||||||
public static final RegistryObject<SoundEvent> EXPLOSION_CLOSE = REGISTRY.register("explosion_close", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_close")));
|
public static final RegistryObject<SoundEvent> EXPLOSION_CLOSE = REGISTRY.register("explosion_close", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_close")));
|
||||||
public static final RegistryObject<SoundEvent> EXPLOSION_FAR = REGISTRY.register("explosion_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_far")));
|
public static final RegistryObject<SoundEvent> EXPLOSION_FAR = REGISTRY.register("explosion_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_far")));
|
||||||
public static final RegistryObject<SoundEvent> EXPLOSION_VERY_FAR = REGISTRY.register("explosion_very_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_very_far")));
|
public static final RegistryObject<SoundEvent> EXPLOSION_VERY_FAR = REGISTRY.register("explosion_very_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_very_far")));
|
||||||
|
public static final RegistryObject<SoundEvent> HUGE_EXPLOSION_CLOSE = REGISTRY.register("huge_explosion_close", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "huge_explosion_close")));
|
||||||
|
public static final RegistryObject<SoundEvent> HUGE_EXPLOSION_FAR = REGISTRY.register("huge_explosion_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "huge_explosion_far")));
|
||||||
|
public static final RegistryObject<SoundEvent> HUGE_EXPLOSION_VERY_FAR = REGISTRY.register("huge_explosion_very_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "huge_explosion_very_far")));
|
||||||
public static final RegistryObject<SoundEvent> EXPLOSION_WATER = REGISTRY.register("explosion_water", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_water")));
|
public static final RegistryObject<SoundEvent> EXPLOSION_WATER = REGISTRY.register("explosion_water", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "explosion_water")));
|
||||||
|
|
||||||
public static final RegistryObject<SoundEvent> HUNTING_RIFLE_FIRE_1P = REGISTRY.register("hunting_rifle_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "hunting_rifle_fire_1p")));
|
public static final RegistryObject<SoundEvent> HUNTING_RIFLE_FIRE_1P = REGISTRY.register("hunting_rifle_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "hunting_rifle_fire_1p")));
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class LivingEntityMixin {
|
||||||
private double modifyApplyKnockbackArgs(double original) {
|
private double modifyApplyKnockbackArgs(double original) {
|
||||||
if (this.target$source.is(ModDamageTypes.GUN_FIRE) || this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)
|
if (this.target$source.is(ModDamageTypes.GUN_FIRE) || this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)
|
||||||
|| this.target$source.is(ModDamageTypes.SHOCK) || this.target$source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE)
|
|| this.target$source.is(ModDamageTypes.SHOCK) || this.target$source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE)
|
||||||
|| this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)) {
|
|| this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)|| this.target$source.is(ModDamageTypes.BURN)) {
|
||||||
return 0.05 * original;
|
return 0.05 * original;
|
||||||
}
|
}
|
||||||
return original;
|
return original;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package net.mcreator.superbwarfare.mobeffect;
|
package net.mcreator.superbwarfare.mobeffect;
|
||||||
|
|
||||||
import net.mcreator.superbwarfare.ModUtils;
|
import net.mcreator.superbwarfare.ModUtils;
|
||||||
|
import net.mcreator.superbwarfare.init.ModDamageTypes;
|
||||||
import net.mcreator.superbwarfare.init.ModMobEffects;
|
import net.mcreator.superbwarfare.init.ModMobEffects;
|
||||||
import net.mcreator.superbwarfare.init.ModSounds;
|
import net.mcreator.superbwarfare.init.ModSounds;
|
||||||
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
|
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
|
||||||
|
@ -35,7 +36,7 @@ public class BurnMobEffect extends MobEffect {
|
||||||
attacker = entity.level().getEntity(entity.getPersistentData().getInt("BurnAttacker"));
|
attacker = entity.level().getEntity(entity.getPersistentData().getInt("BurnAttacker"));
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.hurt(new DamageSource(entity.level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.IN_FIRE), attacker), 0.6f + (0.3f * amplifier));
|
entity.hurt(new DamageSource(entity.level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(ModDamageTypes.BURN), attacker), 0.6f + (0.3f * amplifier));
|
||||||
entity.invulnerableTime = 0;
|
entity.invulnerableTime = 0;
|
||||||
|
|
||||||
if (attacker instanceof ServerPlayer player) {
|
if (attacker instanceof ServerPlayer player) {
|
||||||
|
@ -100,7 +101,11 @@ public class BurnMobEffect extends MobEffect {
|
||||||
LivingEntity living = event.getEntity();
|
LivingEntity living = event.getEntity();
|
||||||
|
|
||||||
if (living.hasEffect(ModMobEffects.BURN.get())) {
|
if (living.hasEffect(ModMobEffects.BURN.get())) {
|
||||||
living.setSecondsOnFire(1);
|
living.setRemainingFireTicks(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (living.isInWater()) {
|
||||||
|
living.removeEffect(ModMobEffects.BURN.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,8 @@ public class DamageTypeTool {
|
||||||
|
|
||||||
public static boolean isGunDamage(DamageSource source) {
|
public static boolean isGunDamage(DamageSource source) {
|
||||||
return source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)
|
return source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)
|
||||||
|| source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE);
|
|| source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)
|
||||||
|
|| source.is(ModDamageTypes.SHOCK)|| source.is(ModDamageTypes.BURN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isGunDamage(ResourceKey<DamageType> damageType) {
|
public static boolean isGunDamage(ResourceKey<DamageType> damageType) {
|
||||||
|
|
|
@ -53,16 +53,16 @@ public class ParticleTool {
|
||||||
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 3, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 3, 1);
|
||||||
}
|
}
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 8, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 4, 1);
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_FAR.get(), SoundSource.BLOCKS, 16, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_FAR.get(), SoundSource.BLOCKS, 8, 1);
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 32, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 16, 1);
|
||||||
} else {
|
} else {
|
||||||
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 3, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
}
|
}
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 24, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_FAR.get(), SoundSource.BLOCKS, 24, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_FAR.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 64, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level instanceof ServerLevel serverLevel) {
|
if (level instanceof ServerLevel serverLevel) {
|
||||||
|
@ -73,10 +73,11 @@ public class ParticleTool {
|
||||||
sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, x, y, z, 60, 3, 0.5, 3, 0.1, true);
|
sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, x, y, z, 60, 3, 0.5, 3, 0.1, true);
|
||||||
}
|
}
|
||||||
sendParticle(serverLevel, ParticleTypes.EXPLOSION, x, y + 1, z, 5, 0.7, 0.7, 0.7, 1, true);
|
sendParticle(serverLevel, ParticleTypes.EXPLOSION, x, y + 1, z, 5, 0.7, 0.7, 0.7, 1, true);
|
||||||
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 20, 0.2, 0.7, 0.2, 0.02, true);
|
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y + 1, z, 20, 0.2, 1, 0.2, 0.02, true);
|
||||||
sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, x, y + 1, z, 10, 0.4, 1, 0.4, 0.02, true);
|
sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, x, y + 1, z, 10, 0.4, 1, 0.4, 0.02, true);
|
||||||
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y, z, 20, 1, 0.001, 1, 0.01, true);
|
sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, x, y + 0.25, z, 40, 2, 0.001, 2, 0.01, true);
|
||||||
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), x, y, z, 30, 0, 0, 0, 0.2, true);
|
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), x, y + 0.2, z, 50, 0, 0, 0, 0.9, true);
|
||||||
|
sendParticle(serverLevel, ParticleTypes.FLASH, x, y + 0.5, z, 50, 0.2, 0.2, 0.2, 20, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,16 +90,16 @@ public class ParticleTool {
|
||||||
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 3, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 3, 1);
|
||||||
}
|
}
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 8, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.HUGE_EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 8, 1);
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_FAR.get(), SoundSource.BLOCKS, 16, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.HUGE_EXPLOSION_FAR.get(), SoundSource.BLOCKS, 16, 1);
|
||||||
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 32, 1);
|
level.playSound(null, BlockPos.containing(x, y + 1, z), ModSounds.HUGE_EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 32, 1);
|
||||||
} else {
|
} else {
|
||||||
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
if ((level.getBlockState(BlockPos.containing(x, y, z))).getBlock() == Blocks.WATER) {
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 3, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_WATER.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
}
|
}
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 24, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.HUGE_EXPLOSION_CLOSE.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_FAR.get(), SoundSource.BLOCKS, 24, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.HUGE_EXPLOSION_FAR.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
level.playLocalSound(x, (y + 1), z, ModSounds.EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 64, 1, false);
|
level.playLocalSound(x, (y + 1), z, ModSounds.HUGE_EXPLOSION_VERY_FAR.get(), SoundSource.BLOCKS, 1, 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level instanceof ServerLevel serverLevel) {
|
if (level instanceof ServerLevel serverLevel) {
|
||||||
|
|
|
@ -295,6 +295,7 @@ public class TooltipTool {
|
||||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||||
.append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN)));
|
.append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN)));
|
||||||
|
|
||||||
|
addLevelTips(tooltip, stack);
|
||||||
int upgradePoint = Mth.floor(ItemNBTTool.getDouble(stack, "UpgradePoint", 0));
|
int upgradePoint = Mth.floor(ItemNBTTool.getDouble(stack, "UpgradePoint", 0));
|
||||||
|
|
||||||
tooltip.add(Component.translatable("des.superbwarfare.tips.upgrade_point").withStyle(ChatFormatting.GRAY)
|
tooltip.add(Component.translatable("des.superbwarfare.tips.upgrade_point").withStyle(ChatFormatting.GRAY)
|
||||||
|
|
|
@ -309,6 +309,9 @@
|
||||||
"death.attack.cannon_fire": "%1$s was cracked by a shell",
|
"death.attack.cannon_fire": "%1$s was cracked by a shell",
|
||||||
"death.attack.cannon_fire.entity": "%1$s was cracked by %2$s",
|
"death.attack.cannon_fire.entity": "%1$s was cracked by %2$s",
|
||||||
"death.attack.cannon_fire.item": "%1$s was cracked by %2$s using %3$s",
|
"death.attack.cannon_fire.item": "%1$s was cracked by %2$s using %3$s",
|
||||||
|
"death.attack.burn": "%1$s被烧糊了",
|
||||||
|
"death.attack.burn.entity": "%1$s被%2$s烧成了焦炭",
|
||||||
|
"death.attack.burn.item": "%1$s被%2$s烧成了焦炭",
|
||||||
|
|
||||||
"gui.superbwarfare.mortar_gui.button_set": "Confirm",
|
"gui.superbwarfare.mortar_gui.button_set": "Confirm",
|
||||||
|
|
||||||
|
|
|
@ -309,6 +309,9 @@
|
||||||
"death.attack.cannon_fire": "%1$s被炮弹打得四分五裂",
|
"death.attack.cannon_fire": "%1$s被炮弹打得四分五裂",
|
||||||
"death.attack.cannon_fire.entity": "%1$s被%2$s用炮弹打得四分五裂",
|
"death.attack.cannon_fire.entity": "%1$s被%2$s用炮弹打得四分五裂",
|
||||||
"death.attack.cannon_fire.item": "%1$s被%2$s用%3$s打得四分五裂",
|
"death.attack.cannon_fire.item": "%1$s被%2$s用%3$s打得四分五裂",
|
||||||
|
"death.attack.burn": "%1$s被烧糊了",
|
||||||
|
"death.attack.burn.entity": "%1$s被%2$s烧成了焦炭",
|
||||||
|
"death.attack.burn.item": "%1$s被%2$s烧成了焦炭",
|
||||||
|
|
||||||
"gui.superbwarfare.mortar_gui.button_set": "确认",
|
"gui.superbwarfare.mortar_gui.button_set": "确认",
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/perk/powerful_attraction"
|
||||||
|
}
|
||||||
|
}
|
|
@ -2261,5 +2261,45 @@
|
||||||
"stream": false
|
"stream": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"huge_explosion_close": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:explosion/huge_explosion_close",
|
||||||
|
"stream": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:explosion/huge_explosion_close2",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"huge_explosion_far": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:explosion/huge_explosion_far",
|
||||||
|
"stream": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:explosion/huge_explosion_far2",
|
||||||
|
"stream": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:explosion/huge_explosion_far3",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"huge_explosion_very_far": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:explosion/huge_explosion_very_far",
|
||||||
|
"stream": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:explosion/huge_explosion_very_far2",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 620 B |
Binary file not shown.
After Width: | Height: | Size: 232 B |
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"replace": false,
|
||||||
|
"values": [
|
||||||
|
"superbwarfare:burn"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"exhaustion": 0,
|
||||||
|
"message_id": "burn",
|
||||||
|
"scaling": "never"
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
"spread": 4,
|
"spread": 4,
|
||||||
"recoil_x": 0.005,
|
"recoil_x": 0.005,
|
||||||
"recoil_y": 0.026,
|
"recoil_y": 0.026,
|
||||||
"damage": 3,
|
"damage": 5,
|
||||||
"headshot": 1.5,
|
"headshot": 1.5,
|
||||||
"velocity": 15,
|
"velocity": 15,
|
||||||
"mag": 2,
|
"mag": 2,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"CustomZoom": 0.75,
|
"CustomZoom": 0.75,
|
||||||
"spread": 4,
|
"spread": 4,
|
||||||
"headshot": 2.5,
|
"headshot": 2.5,
|
||||||
"damage": 36,
|
"damage": 48,
|
||||||
"weight": 3,
|
"weight": 3,
|
||||||
"BypassesArmor": 0.25
|
"BypassesArmor": 0.25
|
||||||
}
|
}
|
|
@ -5,6 +5,6 @@
|
||||||
"mag": 1,
|
"mag": 1,
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
"EmptyReloadTime": 78,
|
"EmptyReloadTime": 78,
|
||||||
"damage": 300,
|
"damage": 700,
|
||||||
"BypassesArmor": 1
|
"BypassesArmor": 1
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
"spread": 1.5,
|
"spread": 1.5,
|
||||||
"recoil_x": 0.004,
|
"recoil_x": 0.004,
|
||||||
"recoil_y": 0.023,
|
"recoil_y": 0.023,
|
||||||
"damage": 40,
|
"damage": 80,
|
||||||
"velocity": 3.75,
|
"velocity": 3.75,
|
||||||
"mag": 1,
|
"mag": 1,
|
||||||
"weight": 4,
|
"weight": 4,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"spread": 8,
|
"spread": 8,
|
||||||
"recoil_x": 0.01,
|
"recoil_x": 0.01,
|
||||||
"recoil_y": 0.038,
|
"recoil_y": 0.038,
|
||||||
"damage": 100,
|
"damage": 140,
|
||||||
"headshot": 3,
|
"headshot": 3,
|
||||||
"velocity": 36,
|
"velocity": 36,
|
||||||
"projectile_amount": 1,
|
"projectile_amount": 1,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"spread": 5,
|
"spread": 5,
|
||||||
"recoil_x": 0.008,
|
"recoil_x": 0.008,
|
||||||
"recoil_y": 0.018,
|
"recoil_y": 0.018,
|
||||||
"damage": 250,
|
"damage": 500,
|
||||||
"velocity": 4,
|
"velocity": 4,
|
||||||
"mag": 1,
|
"mag": 1,
|
||||||
"weight": 7,
|
"weight": 7,
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"category": "equipment",
|
||||||
|
"pattern": [
|
||||||
|
"dbe",
|
||||||
|
"cac",
|
||||||
|
" c "
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"a": {
|
||||||
|
"item": "superbwarfare:empty_perk"
|
||||||
|
},
|
||||||
|
"b": {
|
||||||
|
"tag": "forge:ender_pearls"
|
||||||
|
},
|
||||||
|
"c": {
|
||||||
|
"tag": "forge:ingots/iron"
|
||||||
|
},
|
||||||
|
"d": {
|
||||||
|
"tag": "forge:dusts/redstone"
|
||||||
|
},
|
||||||
|
"e": {
|
||||||
|
"tag": "forge:gems/lapis"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "superbwarfare:powerful_attraction",
|
||||||
|
"count": 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +1,14 @@
|
||||||
{
|
{
|
||||||
"type": "minecraft:crafting_shaped",
|
"type": "minecraft:crafting_shapeless",
|
||||||
"category": "misc",
|
"category": "misc",
|
||||||
"pattern": [
|
"ingredients": [
|
||||||
"ada",
|
{
|
||||||
"cbc",
|
|
||||||
"ada"
|
|
||||||
],
|
|
||||||
"key": {
|
|
||||||
"a": {
|
|
||||||
"item": "minecraft:diamond"
|
|
||||||
},
|
|
||||||
"b": {
|
|
||||||
"item": "superbwarfare:epic_material_pack"
|
"item": "superbwarfare:epic_material_pack"
|
||||||
},
|
},
|
||||||
"c": {
|
{
|
||||||
"item": "minecraft:netherite_upgrade_smithing_template"
|
|
||||||
},
|
|
||||||
"d": {
|
|
||||||
"item": "minecraft:nether_star"
|
"item": "minecraft:nether_star"
|
||||||
}
|
}
|
||||||
},
|
],
|
||||||
"result": {
|
"result": {
|
||||||
"item": "superbwarfare:shortcut_pack",
|
"item": "superbwarfare:shortcut_pack",
|
||||||
"count": 1
|
"count": 1
|
||||||
|
|
Loading…
Add table
Reference in a new issue