修改部分发射器发射逻辑
This commit is contained in:
parent
aa8e951e51
commit
4822382dc7
19 changed files with 162 additions and 201 deletions
|
@ -1,4 +1,4 @@
|
||||||
// 1.21.1 2025-04-09T03:50:51.7343276 Tags for minecraft:item mod id superbwarfare
|
// 1.21.1 2025-04-14T16:44:38.0133635 Tags for minecraft:item mod id superbwarfare
|
||||||
44a232152f5941d0435a35483b37f8ed22fd10bf data/c/tags/item/dusts.json
|
44a232152f5941d0435a35483b37f8ed22fd10bf data/c/tags/item/dusts.json
|
||||||
0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/c/tags/item/dusts/coal_coke.json
|
0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/c/tags/item/dusts/coal_coke.json
|
||||||
295ddf906b7133a0558d03e9a60eea18281fe430 data/c/tags/item/dusts/iron.json
|
295ddf906b7133a0558d03e9a60eea18281fe430 data/c/tags/item/dusts/iron.json
|
||||||
|
@ -41,7 +41,7 @@ d39c5c787667ce78c214bc2fbd4931891ebaf936 data/superbwarfare/tags/item/launcher.j
|
||||||
ab580f3989177c0589c43ca346db571011600187 data/superbwarfare/tags/item/launcher/grenade.json
|
ab580f3989177c0589c43ca346db571011600187 data/superbwarfare/tags/item/launcher/grenade.json
|
||||||
b404c6fd99d2ca68c6738f225cb7d68ee443c10a data/superbwarfare/tags/item/machine_gun.json
|
b404c6fd99d2ca68c6738f225cb7d68ee443c10a data/superbwarfare/tags/item/machine_gun.json
|
||||||
a53020091752016da6602ee1b8b7e08823614344 data/superbwarfare/tags/item/military_armor.json
|
a53020091752016da6602ee1b8b7e08823614344 data/superbwarfare/tags/item/military_armor.json
|
||||||
35840286824cc674ec120615dd5dc14980769e15 data/superbwarfare/tags/item/normal_gun.json
|
9e203e417380442166a000bca86744916a2fb1c5 data/superbwarfare/tags/item/normal_gun.json
|
||||||
15328cd564c931cc0a4fc000596240f93a7b29a1 data/superbwarfare/tags/item/revolver.json
|
15328cd564c931cc0a4fc000596240f93a7b29a1 data/superbwarfare/tags/item/revolver.json
|
||||||
aaa533157491a82b8e23b2914deef67c4078cbed data/superbwarfare/tags/item/rifle.json
|
aaa533157491a82b8e23b2914deef67c4078cbed data/superbwarfare/tags/item/rifle.json
|
||||||
a249d9d052cdc24b34e0e51ab991329f6c76e8ab data/superbwarfare/tags/item/shotgun.json
|
a249d9d052cdc24b34e0e51ab991329f6c76e8ab data/superbwarfare/tags/item/shotgun.json
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
"superbwarfare:m_4",
|
"superbwarfare:m_4",
|
||||||
"superbwarfare:devotion",
|
"superbwarfare:devotion",
|
||||||
"superbwarfare:trachelium",
|
"superbwarfare:trachelium",
|
||||||
|
"superbwarfare:m_79",
|
||||||
"superbwarfare:hunting_rifle",
|
"superbwarfare:hunting_rifle",
|
||||||
"superbwarfare:ntw_20",
|
"superbwarfare:ntw_20",
|
||||||
"superbwarfare:m_98b",
|
"superbwarfare:m_98b",
|
||||||
|
@ -21,12 +22,15 @@
|
||||||
"superbwarfare:m_870",
|
"superbwarfare:m_870",
|
||||||
"superbwarfare:marlin",
|
"superbwarfare:marlin",
|
||||||
"superbwarfare:glock_17",
|
"superbwarfare:glock_17",
|
||||||
|
"superbwarfare:rpg",
|
||||||
"superbwarfare:glock_18",
|
"superbwarfare:glock_18",
|
||||||
"superbwarfare:m_1911",
|
"superbwarfare:m_1911",
|
||||||
"superbwarfare:qbz_95",
|
"superbwarfare:qbz_95",
|
||||||
"superbwarfare:k_98",
|
"superbwarfare:k_98",
|
||||||
"superbwarfare:mosin_nagant",
|
"superbwarfare:mosin_nagant",
|
||||||
"superbwarfare:mp_443",
|
"superbwarfare:mp_443",
|
||||||
"superbwarfare:insidious"
|
"superbwarfare:insidious",
|
||||||
|
"superbwarfare:secondary_cataclysm",
|
||||||
|
"superbwarfare:taser"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -95,9 +95,10 @@ public class ModItemTagProvider extends ItemTagsProvider {
|
||||||
|
|
||||||
this.tag(ModTags.Items.NORMAL_GUN).add(
|
this.tag(ModTags.Items.NORMAL_GUN).add(
|
||||||
ModItems.HOMEMADE_SHOTGUN.get(), ModItems.AK_47.get(), ModItems.AK_12.get(), ModItems.SVD.get(), ModItems.M_60.get(), ModItems.MK_14.get(), ModItems.VECTOR.get(),
|
ModItems.HOMEMADE_SHOTGUN.get(), ModItems.AK_47.get(), ModItems.AK_12.get(), ModItems.SVD.get(), ModItems.M_60.get(), ModItems.MK_14.get(), ModItems.VECTOR.get(),
|
||||||
ModItems.SKS.get(), ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(), ModItems.TRACHELIUM.get(),
|
ModItems.SKS.get(), ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(), ModItems.TRACHELIUM.get(), ModItems.M_79.get(),
|
||||||
ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.M_98B.get(), ModItems.SENTINEL.get(), ModItems.M_870.get(), ModItems.MARLIN.get(), ModItems.GLOCK_17.get(),
|
ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.M_98B.get(), ModItems.SENTINEL.get(), ModItems.M_870.get(), ModItems.MARLIN.get(), ModItems.GLOCK_17.get(), ModItems.RPG.get(),
|
||||||
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get(), ModItems.MP_443.get(), ModItems.INSIDIOUS.get()
|
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get(), ModItems.MP_443.get(), ModItems.INSIDIOUS.get(), ModItems.SECONDARY_CATACLYSM.get(),
|
||||||
|
ModItems.TASER.get()
|
||||||
);
|
);
|
||||||
|
|
||||||
this.tag(ModTags.Items.USE_HANDGUN_AMMO).add(
|
this.tag(ModTags.Items.USE_HANDGUN_AMMO).add(
|
||||||
|
|
|
@ -780,10 +780,19 @@ public class ClientEventHandler {
|
||||||
var charged = cap != null && cap.getEnergyStored() > 0;
|
var charged = cap != null && cap.getEnergyStored() > 0;
|
||||||
|
|
||||||
if (charged) {
|
if (charged) {
|
||||||
SoundEvent sound1p = BuiltInRegistries.SOUND_EVENT.get(Mod.loc("sentinel_charge_fire_1p"));
|
SoundEvent sound1p = ModSounds.SENTINEL_CHARGE_FIRE_1P.get();
|
||||||
if (sound1p != null) {
|
player.playSound(sound1p, 2f, (float) ((2 * org.joml.Math.random() - 1) * 0.05f + 1.0f));
|
||||||
player.playSound(sound1p, 2f, (float) ((2 * org.joml.Math.random() - 1) * 0.05f + 1.0f));
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get()) {
|
||||||
|
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
|
var charged = cap != null && cap.getEnergyStored() > 3000;
|
||||||
|
|
||||||
|
if (charged && zoom) {
|
||||||
|
SoundEvent sound1p = ModSounds.SECONDARY_CATACLYSM_FIRE_1P_CHARGE.get();
|
||||||
|
player.playSound(sound1p, 2f, (float) ((2 * org.joml.Math.random() - 1) * 0.05f + 1.0f));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||||
import com.atsuishio.superbwarfare.event.events.ReloadEvent;
|
import com.atsuishio.superbwarfare.event.events.ReloadEvent;
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
import com.atsuishio.superbwarfare.init.*;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.PressFireSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.value.ReloadState;
|
import com.atsuishio.superbwarfare.item.gun.data.value.ReloadState;
|
||||||
|
@ -80,7 +81,7 @@ public class GunEventHandler {
|
||||||
/**
|
/**
|
||||||
* 根据武器的注册名来寻找音效并播放
|
* 根据武器的注册名来寻找音效并播放
|
||||||
*/
|
*/
|
||||||
public static void playGunSounds(Player player) {
|
public static void playGunSounds(Player player, boolean zoom) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!(stack.getItem() instanceof GunItem)) return;
|
if (!(stack.getItem() instanceof GunItem)) return;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
|
@ -95,20 +96,24 @@ public class GunEventHandler {
|
||||||
if (cap != null && cap.getEnergyStored() > 0) {
|
if (cap != null && cap.getEnergyStored() > 0) {
|
||||||
float soundRadius = (float) data.soundRadius();
|
float soundRadius = (float) data.soundRadius();
|
||||||
|
|
||||||
SoundEvent sound3p = BuiltInRegistries.SOUND_EVENT.get(Mod.loc("sentinel_charge_fire_3p"));
|
player.playSound(ModSounds.SENTINEL_CHARGE_FAR.get(), soundRadius * 0.7f, 1f);
|
||||||
if (sound3p != null) {
|
player.playSound(ModSounds.SENTINEL_CHARGE_FIRE_3P.get(), soundRadius * 0.4f, 1f);
|
||||||
player.playSound(sound3p, soundRadius * 0.4f, 1f);
|
player.playSound(ModSounds.SENTINEL_CHARGE_VERYFAR.get(), soundRadius, 1f);
|
||||||
}
|
|
||||||
|
|
||||||
SoundEvent soundFar = BuiltInRegistries.SOUND_EVENT.get(Mod.loc("sentinel_charge_far"));
|
return;
|
||||||
if (soundFar != null) {
|
}
|
||||||
player.playSound(soundFar, soundRadius * 0.7f, 1f);
|
}
|
||||||
}
|
|
||||||
|
if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get()) {
|
||||||
|
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
|
|
||||||
|
if (cap != null && cap.getEnergyStored() > 3000 && zoom) {
|
||||||
|
float soundRadius = (float) data.soundRadius();
|
||||||
|
|
||||||
|
player.playSound(ModSounds.SECONDARY_CATACLYSM_FIRE_3P_CHARGE.get(), soundRadius * 0.4f, 1f);
|
||||||
|
player.playSound(ModSounds.SECONDARY_CATACLYSM_FAR_CHARGE.get(), soundRadius * 0.7f, 1f);
|
||||||
|
player.playSound(ModSounds.SECONDARY_CATACLYSM_VERYFAR_CHARGE.get(), soundRadius, 1f);
|
||||||
|
|
||||||
SoundEvent soundVeryFar = BuiltInRegistries.SOUND_EVENT.get(Mod.loc("sentinel_charge_veryfar"));
|
|
||||||
if (soundVeryFar != null) {
|
|
||||||
player.playSound(soundVeryFar, soundRadius, 1f);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,79 +178,83 @@ public class GunEventHandler {
|
||||||
var stack = data.stack();
|
var stack = data.stack();
|
||||||
|
|
||||||
if (!player.level().isClientSide()) {
|
if (!player.level().isClientSide()) {
|
||||||
float headshot = (float) data.headshot();
|
if (stack.getItem() instanceof PressFireSpecialWeapon pressFireSpecialWeapon) {
|
||||||
float damage = (float) data.damage();
|
pressFireSpecialWeapon.fireOnPress(player, data, spared, zoom);
|
||||||
float velocity = (float) (data.velocity() * perkSpeed(data));
|
} else {
|
||||||
int projectileAmount = data.projectileAmount();
|
float headshot = (float) data.headshot();
|
||||||
float bypassArmorRate = (float) data.bypassArmor();
|
float damage = (float) data.damage();
|
||||||
var perkInstance = data.perk.getInstance(Perk.Type.AMMO);
|
float velocity = (float) (data.velocity() * perkSpeed(data));
|
||||||
var perk = perkInstance != null ? perkInstance.perk() : null;
|
int projectileAmount = data.projectileAmount();
|
||||||
|
float bypassArmorRate = (float) data.bypassArmor();
|
||||||
|
var perkInstance = data.perk.getInstance(Perk.Type.AMMO);
|
||||||
|
var perk = perkInstance != null ? perkInstance.perk() : null;
|
||||||
|
|
||||||
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
||||||
.shooter(player)
|
.shooter(player)
|
||||||
.damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
|
.damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
|
||||||
.damage(damage)
|
.damage(damage)
|
||||||
.headShot(headshot)
|
.headShot(headshot)
|
||||||
.zoom(zoom)
|
.zoom(zoom)
|
||||||
.setGunItemId(stack);
|
.setGunItemId(stack);
|
||||||
|
|
||||||
if (perk instanceof AmmoPerk ammoPerk) {
|
if (perk instanceof AmmoPerk ammoPerk) {
|
||||||
int level = data.perk.getLevel(perk);
|
int level = data.perk.getLevel(perk);
|
||||||
|
|
||||||
bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
|
bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
|
||||||
projectile.setRGB(ammoPerk.rgb);
|
projectile.setRGB(ammoPerk.rgb);
|
||||||
|
|
||||||
if (!ammoPerk.mobEffects.get().isEmpty()) {
|
if (!ammoPerk.mobEffects.get().isEmpty()) {
|
||||||
int amplifier;
|
int amplifier;
|
||||||
if (perk.descriptionId.equals("blade_bullet")) {
|
if (perk.descriptionId.equals("blade_bullet")) {
|
||||||
amplifier = level / 3;
|
amplifier = level / 3;
|
||||||
} else if (perk.descriptionId.equals("bread_bullet")) {
|
} else if (perk.descriptionId.equals("bread_bullet")) {
|
||||||
amplifier = 1;
|
amplifier = 1;
|
||||||
} else {
|
} else {
|
||||||
amplifier = level - 1;
|
amplifier = level - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<MobEffectInstance> mobEffectInstances = new ArrayList<>();
|
||||||
|
for (MobEffect effect : ammoPerk.mobEffects.get()) {
|
||||||
|
mobEffectInstances.add(new MobEffectInstance(Holder.direct(effect), 70 + 30 * level, amplifier));
|
||||||
|
}
|
||||||
|
projectile.effect(mobEffectInstances);
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<MobEffectInstance> mobEffectInstances = new ArrayList<>();
|
if (perk.descriptionId.equals("bread_bullet")) {
|
||||||
for (MobEffect effect : ammoPerk.mobEffects.get()) {
|
projectile.knockback(level * 0.3f);
|
||||||
mobEffectInstances.add(new MobEffectInstance(Holder.direct(effect), 70 + 30 * level, amplifier));
|
projectile.forceKnockback();
|
||||||
}
|
}
|
||||||
projectile.effect(mobEffectInstances);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perk.descriptionId.equals("bread_bullet")) {
|
bypassArmorRate = Math.max(bypassArmorRate, 0);
|
||||||
projectile.knockback(level * 0.3f);
|
projectile.bypassArmorRate(bypassArmorRate);
|
||||||
projectile.forceKnockback();
|
|
||||||
|
if (perk == ModPerks.SILVER_BULLET.get()) {
|
||||||
|
int level = data.perk.getLevel(perk);
|
||||||
|
projectile.undeadMultiple(1.0f + 0.5f * level);
|
||||||
|
} else if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||||
|
projectile.beast();
|
||||||
|
} else if (perk == ModPerks.JHP_BULLET.get()) {
|
||||||
|
int level = data.perk.getLevel(perk);
|
||||||
|
projectile.jhpBullet(level);
|
||||||
|
} else if (perk == ModPerks.HE_BULLET.get()) {
|
||||||
|
int level = data.perk.getLevel(perk);
|
||||||
|
projectile.heBullet(level);
|
||||||
|
} else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
||||||
|
int level = data.perk.getLevel(perk);
|
||||||
|
projectile.fireBullet(level, stack.is(ModTags.Items.SHOTGUN));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
||||||
|
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
||||||
|
int level = data.perk.getLevel(dmgPerk);
|
||||||
|
projectile.monsterMultiple(0.1f + 0.1f * level);
|
||||||
|
}
|
||||||
|
|
||||||
|
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
|
||||||
|
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, stack.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity, (float) spared);
|
||||||
|
player.level().addFreshEntity(projectile);
|
||||||
}
|
}
|
||||||
|
|
||||||
bypassArmorRate = Math.max(bypassArmorRate, 0);
|
|
||||||
projectile.bypassArmorRate(bypassArmorRate);
|
|
||||||
|
|
||||||
if (perk == ModPerks.SILVER_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.undeadMultiple(1.0f + 0.5f * level);
|
|
||||||
} else if (perk == ModPerks.BEAST_BULLET.get()) {
|
|
||||||
projectile.beast();
|
|
||||||
} else if (perk == ModPerks.JHP_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.jhpBullet(level);
|
|
||||||
} else if (perk == ModPerks.HE_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.heBullet(level);
|
|
||||||
} else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.fireBullet(level, stack.is(ModTags.Items.SHOTGUN));
|
|
||||||
}
|
|
||||||
|
|
||||||
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
|
||||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
|
||||||
int level = data.perk.getLevel(dmgPerk);
|
|
||||||
projectile.monsterMultiple(0.1f + 0.1f * level);
|
|
||||||
}
|
|
||||||
|
|
||||||
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
|
|
||||||
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, stack.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity, (float) spared);
|
|
||||||
player.level().addFreshEntity(projectile);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.atsuishio.superbwarfare.item.gun;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不使用普通子弹的按下开火武器的开火处理
|
||||||
|
*/
|
||||||
|
public interface PressFireSpecialWeapon {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按下按键时武器发射处理
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
*/
|
||||||
|
|
||||||
|
default void fireOnPress(Player player, GunData data, double spread, boolean zoom) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,7 +7,7 @@ import net.minecraft.world.entity.player.Player;
|
||||||
/**
|
/**
|
||||||
* 拥有特殊开火方式的武器的开火处理
|
* 拥有特殊开火方式的武器的开火处理
|
||||||
*/
|
*/
|
||||||
public interface SpecialFireWeapon {
|
public interface ReleaseSpecialWeapon {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -12,7 +12,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
import com.atsuishio.superbwarfare.item.gun.ReleaseSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
|
@ -56,7 +56,7 @@ import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
public class JavelinItem extends GunItem implements GeoItem, ReleaseSpecialWeapon {
|
||||||
|
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
public static ItemDisplayContext transformType;
|
public static ItemDisplayContext transformType;
|
||||||
|
|
|
@ -9,21 +9,17 @@ import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
import com.atsuishio.superbwarfare.item.gun.PressFireSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
||||||
|
@ -32,7 +28,6 @@ import net.minecraft.world.item.ItemDisplayContext;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Rarity;
|
import net.minecraft.world.item.Rarity;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.neoforged.neoforge.network.PacketDistributor;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import software.bernie.geckolib.animatable.GeoItem;
|
import software.bernie.geckolib.animatable.GeoItem;
|
||||||
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||||
|
@ -45,7 +40,7 @@ import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
public class M79Item extends GunItem implements GeoItem, PressFireSpecialWeapon {
|
||||||
|
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
public static ItemDisplayContext transformType;
|
public static ItemDisplayContext transformType;
|
||||||
|
@ -167,13 +162,11 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data, boolean zoom) {
|
public void fireOnPress(Player player, final GunData data, double spread, boolean zoom) {
|
||||||
if (data.reloading()) return;
|
if (data.reloading()) return;
|
||||||
ItemStack stack = data.stack();
|
ItemStack stack = data.stack();
|
||||||
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo.get() <= 0) return;
|
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo.get() <= 0) return;
|
||||||
|
|
||||||
double spread = data.spread();
|
|
||||||
|
|
||||||
if (player.level() instanceof ServerLevel serverLevel) {
|
if (player.level() instanceof ServerLevel serverLevel) {
|
||||||
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, serverLevel,
|
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, serverLevel,
|
||||||
(float) data.damage(),
|
(float) data.damage(),
|
||||||
|
@ -206,19 +199,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
|
player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
|
||||||
player.getZ() + 1.8 * player.getLookAngle().z,
|
player.getZ() + 1.8 * player.getLookAngle().z,
|
||||||
4, 0.1, 0.1, 0.1, 0.002, true);
|
4, 0.1, 0.1, 0.1, 0.002, true);
|
||||||
|
|
||||||
var serverPlayer = (ServerPlayer) player;
|
|
||||||
|
|
||||||
SoundTool.playLocalSound(serverPlayer, ModSounds.M_79_FIRE_1P.get(), 2, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_FIRE_3P.get(), SoundSource.PLAYERS, 2, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_FAR.get(), SoundSource.PLAYERS, 5, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
|
|
||||||
|
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 2);
|
|
||||||
data.ammo.set(data.ammo.get() - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -9,21 +9,17 @@ import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
import com.atsuishio.superbwarfare.item.gun.PressFireSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
||||||
|
@ -32,7 +28,6 @@ import net.minecraft.world.item.ItemDisplayContext;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Rarity;
|
import net.minecraft.world.item.Rarity;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.neoforged.neoforge.network.PacketDistributor;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import software.bernie.geckolib.animatable.GeoItem;
|
import software.bernie.geckolib.animatable.GeoItem;
|
||||||
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||||
|
@ -47,7 +42,7 @@ import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
public class RpgItem extends GunItem implements GeoItem, PressFireSpecialWeapon {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAmmoDisplayName(GunData data) {
|
public String getAmmoDisplayName(GunData data) {
|
||||||
|
@ -179,16 +174,10 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data, boolean zoom) {
|
public void fireOnPress(Player player, final GunData data, double spread, boolean zoom) {
|
||||||
Level level = player.level();
|
Level level = player.level();
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
|
|
||||||
if (data.reloading()
|
if (data.reloading()) return;
|
||||||
|| player.getCooldowns().isOnCooldown(stack.getItem())
|
|
||||||
|| data.ammo.get() <= 0
|
|
||||||
) return;
|
|
||||||
|
|
||||||
double spread = data.spread();
|
|
||||||
|
|
||||||
if (player.level() instanceof ServerLevel serverLevel) {
|
if (player.level() instanceof ServerLevel serverLevel) {
|
||||||
RpgRocketEntity rocket = new RpgRocketEntity(player, level,
|
RpgRocketEntity rocket = new RpgRocketEntity(player, level,
|
||||||
|
@ -226,23 +215,9 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
||||||
player.getZ() + 1.8 * player.getLookAngle().z,
|
player.getZ() + 1.8 * player.getLookAngle().z,
|
||||||
30, 0.4, 0.4, 0.4, 0.005, true);
|
30, 0.4, 0.4, 0.4, 0.005, true);
|
||||||
|
|
||||||
var serverPlayer = (ServerPlayer) player;
|
|
||||||
|
|
||||||
SoundTool.playLocalSound(serverPlayer, ModSounds.RPG_FIRE_1P.get(), 2, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_FIRE_3P.get(), SoundSource.PLAYERS, 2, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_FAR.get(), SoundSource.PLAYERS, 5, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
|
|
||||||
|
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
|
||||||
}
|
}
|
||||||
|
data.isEmpty.set(true);
|
||||||
if (data.ammo.get() == 1) {
|
data.closeHammer.set(true);
|
||||||
data.isEmpty.set(true);
|
|
||||||
data.closeHammer.set(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 10);
|
|
||||||
data.ammo.set(data.ammo.get() - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -8,24 +8,19 @@ import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.init.ModEnumExtensions;
|
import com.atsuishio.superbwarfare.init.ModEnumExtensions;
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
|
||||||
import com.atsuishio.superbwarfare.item.EnergyStorageItem;
|
import com.atsuishio.superbwarfare.item.EnergyStorageItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
import com.atsuishio.superbwarfare.item.gun.PressFireSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||||
import com.atsuishio.superbwarfare.tools.InventoryTool;
|
import com.atsuishio.superbwarfare.tools.InventoryTool;
|
||||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.EquipmentSlotGroup;
|
import net.minecraft.world.entity.EquipmentSlotGroup;
|
||||||
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
|
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
|
||||||
|
@ -38,7 +33,6 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.component.ItemAttributeModifiers;
|
import net.minecraft.world.item.component.ItemAttributeModifiers;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.neoforged.neoforge.capabilities.Capabilities;
|
import net.neoforged.neoforge.capabilities.Capabilities;
|
||||||
import net.neoforged.neoforge.network.PacketDistributor;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import software.bernie.geckolib.animatable.GeoItem;
|
import software.bernie.geckolib.animatable.GeoItem;
|
||||||
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||||
|
@ -51,7 +45,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireWeapon, EnergyStorageItem {
|
public class SecondaryCataclysm extends GunItem implements GeoItem, PressFireSpecialWeapon, EnergyStorageItem {
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
public static ItemDisplayContext transformType;
|
public static ItemDisplayContext transformType;
|
||||||
|
|
||||||
|
@ -264,13 +258,11 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data, boolean zoom) {
|
public void fireOnPress(Player player, final GunData data, double spread, boolean zoom) {
|
||||||
if (data.reloading()) return;
|
if (data.reloading()) return;
|
||||||
ItemStack stack = data.stack();
|
ItemStack stack = data.stack();
|
||||||
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo.get() <= 0) return;
|
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo.get() <= 0) return;
|
||||||
|
|
||||||
double spread = data.spread();
|
|
||||||
|
|
||||||
var stackCap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
var stackCap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
var hasEnoughEnergy = stackCap != null && stackCap.getEnergyStored() >= 3000;
|
var hasEnoughEnergy = stackCap != null && stackCap.getEnergyStored() >= 3000;
|
||||||
|
|
||||||
|
@ -310,31 +302,13 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
||||||
player.getZ() + 1.8 * player.getLookAngle().z,
|
player.getZ() + 1.8 * player.getLookAngle().z,
|
||||||
4, 0.1, 0.1, 0.1, 0.002, true);
|
4, 0.1, 0.1, 0.1, 0.002, true);
|
||||||
|
|
||||||
|
|
||||||
var serverPlayer = (ServerPlayer) player;
|
|
||||||
|
|
||||||
if (isChargedFire) {
|
if (isChargedFire) {
|
||||||
SoundTool.playLocalSound(serverPlayer, ModSounds.SECONDARY_CATACLYSM_FIRE_1P_CHARGE.get(), 1, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FIRE_3P_CHARGE.get(), SoundSource.PLAYERS, 3, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FAR_CHARGE.get(), SoundSource.PLAYERS, 5, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_VERYFAR_CHARGE.get(), SoundSource.PLAYERS, 10, 1);
|
|
||||||
|
|
||||||
var itemCap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
var itemCap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
if (itemCap != null) {
|
if (itemCap != null) {
|
||||||
itemCap.extractEnergy(3000, false);
|
itemCap.extractEnergy(3000, false);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
SoundTool.playLocalSound(serverPlayer, ModSounds.SECONDARY_CATACLYSM_FIRE_1P.get(), 1, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FIRE_3P.get(), SoundSource.PLAYERS, 3, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FAR.get(), SoundSource.PLAYERS, 5, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data.ammo.set(data.ammo.get() - 1);
|
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 6);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -8,7 +8,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
import com.atsuishio.superbwarfare.item.gun.ReleaseSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
||||||
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||||
|
@ -40,7 +40,7 @@ import java.util.function.Supplier;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.network.message.send.FireMessage.spawnBullet;
|
import static com.atsuishio.superbwarfare.network.message.send.FireMessage.spawnBullet;
|
||||||
|
|
||||||
public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon {
|
||||||
|
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
public static ItemDisplayContext transformType;
|
public static ItemDisplayContext transformType;
|
||||||
|
|
|
@ -10,17 +10,14 @@ import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.EnergyStorageItem;
|
import com.atsuishio.superbwarfare.item.EnergyStorageItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
import com.atsuishio.superbwarfare.item.gun.PressFireSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
||||||
|
@ -30,7 +27,6 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Rarity;
|
import net.minecraft.world.item.Rarity;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.neoforged.neoforge.capabilities.Capabilities;
|
import net.neoforged.neoforge.capabilities.Capabilities;
|
||||||
import net.neoforged.neoforge.network.PacketDistributor;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import software.bernie.geckolib.animatable.GeoItem;
|
import software.bernie.geckolib.animatable.GeoItem;
|
||||||
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||||
|
@ -43,7 +39,7 @@ import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, EnergyStorageItem {
|
public class TaserItem extends GunItem implements GeoItem, EnergyStorageItem, PressFireSpecialWeapon {
|
||||||
|
|
||||||
public static final int MAX_ENERGY = 6000;
|
public static final int MAX_ENERGY = 6000;
|
||||||
|
|
||||||
|
@ -218,7 +214,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fireOnPress(Player player, final GunData data, boolean zoom) {
|
public void fireOnPress(Player player, final GunData data, double spread, boolean zoom) {
|
||||||
if (data.reloading()) return;
|
if (data.reloading()) return;
|
||||||
ItemStack stack = data.stack();
|
ItemStack stack = data.stack();
|
||||||
|
|
||||||
|
@ -226,22 +222,14 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
||||||
var energyStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
var energyStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||||
var hasEnoughEnergy = energyStorage != null && energyStorage.getEnergyStored() >= 400 + 100 * perkLevel;
|
var hasEnoughEnergy = energyStorage != null && energyStorage.getEnergyStored() >= 400 + 100 * perkLevel;
|
||||||
|
|
||||||
if (player.getCooldowns().isOnCooldown(stack.getItem())
|
if (!hasEnoughEnergy) return;
|
||||||
|| data.ammo.get() <= 0
|
|
||||||
|| !hasEnoughEnergy
|
|
||||||
) return;
|
|
||||||
|
|
||||||
player.getCooldowns().addCooldown(stack.getItem(), 5);
|
player.getCooldowns().addCooldown(stack.getItem(), 5);
|
||||||
|
|
||||||
if (player instanceof ServerPlayer serverPlayer) {
|
if (player instanceof ServerPlayer serverPlayer) {
|
||||||
double spread = data.spread();
|
|
||||||
|
|
||||||
int volt = data.perk.getLevel(ModPerks.VOLT_OVERLOAD);
|
int volt = data.perk.getLevel(ModPerks.VOLT_OVERLOAD);
|
||||||
int wireLength = data.perk.getLevel(ModPerks.LONGER_WIRE);
|
int wireLength = data.perk.getLevel(ModPerks.LONGER_WIRE);
|
||||||
|
|
||||||
SoundTool.playLocalSound(serverPlayer, ModSounds.TASER_FIRE_1P.get(), 1, 1);
|
|
||||||
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.TASER_FIRE_3P.get(), SoundSource.PLAYERS, 1, 1);
|
|
||||||
|
|
||||||
var level = serverPlayer.level();
|
var level = serverPlayer.level();
|
||||||
|
|
||||||
TaserBulletEntity taserBulletProjectile = new TaserBulletEntity(player, level,
|
TaserBulletEntity taserBulletProjectile = new TaserBulletEntity(player, level,
|
||||||
|
@ -251,11 +239,8 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
||||||
taserBulletProjectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) data.velocity(),
|
taserBulletProjectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) data.velocity(),
|
||||||
(float) (zoom ? 0.1 : spread));
|
(float) (zoom ? 0.1 : spread));
|
||||||
level.addFreshEntity(taserBulletProjectile);
|
level.addFreshEntity(taserBulletProjectile);
|
||||||
|
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data.ammo.set(data.ammo.get() - 1);
|
|
||||||
energyStorage.extractEnergy(400 + 100 * perkLevel, false);
|
energyStorage.extractEnergy(400 + 100 * perkLevel, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ import com.atsuishio.superbwarfare.init.ModAttachments;
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.init.ModTags;
|
import com.atsuishio.superbwarfare.init.ModTags;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
import com.atsuishio.superbwarfare.item.gun.ReleaseSpecialWeapon;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.special.BocekItem;
|
import com.atsuishio.superbwarfare.item.gun.special.BocekItem;
|
||||||
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||||
|
@ -62,15 +62,15 @@ public record FireMessage(int msgType, double power, boolean zoom) implements Cu
|
||||||
cap.edit = false;
|
cap.edit = false;
|
||||||
|
|
||||||
// 按下开火
|
// 按下开火
|
||||||
if (!(stack.getItem() instanceof SpecialFireWeapon specialFireWeapon)) return;
|
if (!(stack.getItem() instanceof ReleaseSpecialWeapon releaseSpecialWeapon)) return;
|
||||||
specialFireWeapon.fireOnPress(player, data, zoom);
|
releaseSpecialWeapon.fireOnPress(player, data, zoom);
|
||||||
} else if (type == 1) {
|
} else if (type == 1) {
|
||||||
// 松开开火
|
// 松开开火
|
||||||
if (stack.getItem() instanceof SpecialFireWeapon specialFireWeapon) {
|
if (stack.getItem() instanceof ReleaseSpecialWeapon releaseSpecialWeapon) {
|
||||||
if (specialFireWeapon instanceof BocekItem) {
|
if (releaseSpecialWeapon instanceof BocekItem) {
|
||||||
specialFireWeapon.fireOnRelease(player, data, power, zoom);
|
releaseSpecialWeapon.fireOnRelease(player, data, power, zoom);
|
||||||
} else {
|
} else {
|
||||||
specialFireWeapon.fireOnRelease(player, data, 0, zoom);
|
releaseSpecialWeapon.fireOnRelease(player, data, 0, zoom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ public record ShootMessage(double spread, boolean zoom) implements CustomPacketP
|
||||||
GunEventHandler.gunShoot(player, data, spared, zoom);
|
GunEventHandler.gunShoot(player, data, spared, zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
GunEventHandler.playGunSounds(player);
|
GunEventHandler.playGunSounds(player, zoom);
|
||||||
}
|
}
|
||||||
} else if (stack.is(ModItems.MINIGUN.get())) {
|
} else if (stack.is(ModItems.MINIGUN.get())) {
|
||||||
var cap = player.getData(ModAttachments.PLAYER_VARIABLE).watch();
|
var cap = player.getData(ModAttachments.PLAYER_VARIABLE).watch();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"Spread": 1.5,
|
"Spread": 3.5,
|
||||||
"RecoilX": 0.004,
|
"RecoilX": 0.004,
|
||||||
"RecoilY": 0.023,
|
"RecoilY": 0.023,
|
||||||
"Damage": 40,
|
"Damage": 40,
|
||||||
|
@ -9,5 +9,6 @@
|
||||||
"Magazine": 1,
|
"Magazine": 1,
|
||||||
"Weight": 4,
|
"Weight": 4,
|
||||||
"EmptyReloadTime": 64,
|
"EmptyReloadTime": 64,
|
||||||
|
"RPM": 180,
|
||||||
"AmmoType": "superbwarfare:grenade_40mm"
|
"AmmoType": "superbwarfare:grenade_40mm"
|
||||||
}
|
}
|
|
@ -9,5 +9,6 @@
|
||||||
"Magazine": 1,
|
"Magazine": 1,
|
||||||
"Weight": 7,
|
"Weight": 7,
|
||||||
"EmptyReloadTime": 103,
|
"EmptyReloadTime": 103,
|
||||||
|
"RPM": 120,
|
||||||
"AmmoType": "superbwarfare:rocket"
|
"AmmoType": "superbwarfare:rocket"
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"Spread": 1.5,
|
"Spread": 5,
|
||||||
"RecoilX": 0.004,
|
"RecoilX": 0.004,
|
||||||
"RecoilY": 0.023,
|
"RecoilY": 0.023,
|
||||||
"Damage": 30,
|
"Damage": 30,
|
||||||
|
@ -12,5 +12,6 @@
|
||||||
"IterativeTime": 20,
|
"IterativeTime": 20,
|
||||||
"FinishTime": 19,
|
"FinishTime": 19,
|
||||||
"SoundRadius": 8,
|
"SoundRadius": 8,
|
||||||
|
"RPM": 300,
|
||||||
"AmmoType": "superbwarfare:grenade_40mm"
|
"AmmoType": "superbwarfare:grenade_40mm"
|
||||||
}
|
}
|
|
@ -7,5 +7,6 @@
|
||||||
"Magazine": 1,
|
"Magazine": 1,
|
||||||
"Weight": 1,
|
"Weight": 1,
|
||||||
"EmptyReloadTime": 58,
|
"EmptyReloadTime": 58,
|
||||||
|
"RPM": 240,
|
||||||
"AmmoType": "superbwarfare:taser_electrode"
|
"AmmoType": "superbwarfare:taser_electrode"
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue