二次灾变在充能状态,瞄准射击初速为原本的三倍

This commit is contained in:
Atsuihsio 2025-01-11 22:54:51 +08:00
parent 5c6bdbba00
commit f69b4997e0
8 changed files with 77 additions and 1 deletions

View file

@ -321,6 +321,10 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_FIRE_3P = REGISTRY.register("secondary_cataclysm_fire_3p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_fire_3p"))); public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_FIRE_3P = REGISTRY.register("secondary_cataclysm_fire_3p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_fire_3p")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_FAR = REGISTRY.register("secondary_cataclysm_far", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_far"))); public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_FAR = REGISTRY.register("secondary_cataclysm_far", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_far")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_VERYFAR = REGISTRY.register("secondary_cataclysm_veryfar", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_veryfar"))); public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_VERYFAR = REGISTRY.register("secondary_cataclysm_veryfar", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_veryfar")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_FIRE_1P_CHARGE = REGISTRY.register("secondary_cataclysm_fire_1p_charge", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_fire_1p_charge")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_FIRE_3P_CHARGE = REGISTRY.register("secondary_cataclysm_fire_3p_charge", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_fire_3p_charge")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_FAR_CHARGE = REGISTRY.register("secondary_cataclysm_far_charge", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_far_charge")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_VERYFAR_CHARGE = REGISTRY.register("secondary_cataclysm_veryfar_charge", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_veryfar_charge")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_PREPARE_LOAD = REGISTRY.register("secondary_cataclysm_prepare_load", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_prepare_load"))); public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_PREPARE_LOAD = REGISTRY.register("secondary_cataclysm_prepare_load", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_prepare_load")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_LOOP = REGISTRY.register("secondary_cataclysm_loop", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_loop"))); public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_LOOP = REGISTRY.register("secondary_cataclysm_loop", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_loop")));
public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_END = REGISTRY.register("secondary_cataclysm_end", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_end"))); public static final RegistryObject<SoundEvent> SECONDARY_CATACLYSM_END = REGISTRY.register("secondary_cataclysm_end", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("secondary_cataclysm_end")));

View file

@ -195,6 +195,32 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, AnimatedItem
if (entity instanceof Player player) { if (entity instanceof Player player) {
GunsTool.setGunIntTag(stack, "MaxAmmo", getAmmoCount(player)); GunsTool.setGunIntTag(stack, "MaxAmmo", getAmmoCount(player));
} }
if (entity instanceof Player player) {
for (var cell : player.getInventory().items) {
if (cell.is(ModItems.CELL.get())) {
assert stack.getCapability(ForgeCapabilities.ENERGY).resolve().isPresent();
var stackStorage = stack.getCapability(ForgeCapabilities.ENERGY).resolve().get();
int stackMaxEnergy = stackStorage.getMaxEnergyStored();
int stackEnergy = stackStorage.getEnergyStored();
assert cell.getCapability(ForgeCapabilities.ENERGY).resolve().isPresent();
var cellStorage = cell.getCapability(ForgeCapabilities.ENERGY).resolve().get();
int cellEnergy = cellStorage.getEnergyStored();
int stackEnergyNeed = Math.min(cellEnergy, stackMaxEnergy - stackEnergy);
if (cellEnergy > 0) {
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
iEnergyStorage -> iEnergyStorage.receiveEnergy(stackEnergyNeed, false)
);
}
cell.getCapability(ForgeCapabilities.ENERGY).ifPresent(
cEnergy -> cEnergy.extractEnergy(stackEnergyNeed, false)
);
}
}
}
} }
protected static boolean check(ItemStack stack) { protected static boolean check(ItemStack stack) {

View file

@ -541,6 +541,13 @@ public class FireMessage {
boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom; boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom;
double spread = GunsTool.getGunDoubleTag(stack, "Spread"); double spread = GunsTool.getGunDoubleTag(stack, "Spread");
AtomicBoolean flag = new AtomicBoolean(false);
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
iEnergyStorage -> flag.set(iEnergyStorage.getEnergyStored() >= 1500)
);
boolean chargeFire = zoom && flag.get();
Level level = player.level(); Level level = player.level();
if (!level.isClientSide()) { if (!level.isClientSide()) {
GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level,
@ -555,7 +562,7 @@ public class FireMessage {
} }
gunGrenadeEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); gunGrenadeEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0), gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (chargeFire ? 3 : 1) * (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0),
(float) (zoom ? 0.1 : spread)); (float) (zoom ? 0.1 : spread));
level.addFreshEntity(gunGrenadeEntity); level.addFreshEntity(gunGrenadeEntity);
} }
@ -575,6 +582,13 @@ public class FireMessage {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
} }
if (chargeFire) {
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
energy -> energy.extractEnergy(1500, false)
);
}
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);
player.getCooldowns().addCooldown(stack.getItem(), 6); player.getCooldowns().addCooldown(stack.getItem(), 6);

View file

@ -2664,5 +2664,37 @@
"stream": false "stream": false
} }
] ]
},
"secondary_cataclysm_fire_1p_charge": {
"sounds": [
{
"name": "superbwarfare:secondary_cataclysm/secondary_cataclysm_charge_fire_1p",
"stream": false
}
]
},
"secondary_cataclysm_fire_3p_charge": {
"sounds": [
{
"name": "superbwarfare:secondary_cataclysm/secondary_cataclysm_charge_fire_3p",
"stream": false
}
]
},
"secondary_cataclysm_far_charge": {
"sounds": [
{
"name": "superbwarfare:secondary_cataclysm/secondary_cataclysm_charge_far",
"stream": false
}
]
},
"secondary_cataclysm_veryfar_charge": {
"sounds": [
{
"name": "superbwarfare:secondary_cataclysm/secondary_cataclysm_charge_veryfar",
"stream": false
}
]
} }
} }