修复标枪发射问题
This commit is contained in:
parent
10a807adf2
commit
1153af4061
8 changed files with 31 additions and 43 deletions
|
@ -1,6 +1,5 @@
|
|||
package com.atsuishio.superbwarfare.item.gun;
|
||||
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
||||
|
||||
|
@ -16,7 +15,7 @@ public interface SpecialFireWeapon {
|
|||
* @param player 玩家
|
||||
*/
|
||||
|
||||
default void fireOnPress(Player player, final CompoundTag tag) {
|
||||
default void fireOnPress(Player player, final GunData data) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -24,7 +23,7 @@ public interface SpecialFireWeapon {
|
|||
*
|
||||
* @param player 玩家
|
||||
*/
|
||||
default void fireOnRelease(Player player, final CompoundTag tag) {
|
||||
default void fireOnRelease(Player player, final GunData data) {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -293,8 +293,9 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnRelease(Player player, final CompoundTag tag) {
|
||||
public void fireOnRelease(Player player, final GunData data) {
|
||||
fire(player);
|
||||
var tag = data.getTag();
|
||||
tag.putBoolean("Seeking", false);
|
||||
tag.putInt("SeekTime", 0);
|
||||
tag.putString("TargetEntity", "none");
|
||||
|
@ -305,10 +306,8 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnPress(Player player, CompoundTag tag) {
|
||||
var stack = player.getMainHandItem();
|
||||
var data = GunData.from(stack);
|
||||
tag = data.getTag();
|
||||
public void fireOnPress(Player player, final GunData data) {
|
||||
var tag = data.getTag();
|
||||
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (cap != null && !cap.zoom || data.getAmmo() <= 0) return;
|
||||
|
|
|
@ -23,7 +23,6 @@ import com.atsuishio.superbwarfare.tools.SoundTool;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
@ -171,12 +170,12 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnPress(Player player, final CompoundTag tag) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
var data = GunData.from(stack);
|
||||
public void fireOnPress(Player player, final GunData data) {
|
||||
if (data.isReloading()) return;
|
||||
ItemStack stack = data.getStack();
|
||||
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return;
|
||||
|
||||
var tag = data.getTag();
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
boolean zooming = cap != null && cap.zoom;
|
||||
double spread = data.spread();
|
||||
|
@ -226,6 +225,5 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
|
||||
player.getCooldowns().addCooldown(stack.getItem(), 2);
|
||||
data.setAmmo(data.getAmmo() - 1);
|
||||
data.save();
|
||||
}
|
||||
}
|
|
@ -23,7 +23,6 @@ import com.atsuishio.superbwarfare.tools.SoundTool;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
@ -181,11 +180,10 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnPress(Player player, CompoundTag tag) {
|
||||
public void fireOnPress(Player player, final GunData data) {
|
||||
Level level = player.level();
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
var data = GunData.from(stack);
|
||||
tag = data.getTag();
|
||||
var tag = data.getTag();
|
||||
|
||||
if (data.isReloading()
|
||||
|| player.getCooldowns().isOnCooldown(stack.getItem())
|
||||
|
@ -249,6 +247,5 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
|
||||
player.getCooldowns().addCooldown(stack.getItem(), 10);
|
||||
data.setAmmo(data.getAmmo() - 1);
|
||||
data.save();
|
||||
}
|
||||
}
|
|
@ -21,7 +21,6 @@ import com.atsuishio.superbwarfare.tools.SoundTool;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
@ -270,12 +269,12 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnPress(Player player, final CompoundTag tag) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
var data = GunData.from(stack);
|
||||
public void fireOnPress(Player player, final GunData data) {
|
||||
if (data.isReloading()) return;
|
||||
ItemStack stack = data.getStack();
|
||||
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return;
|
||||
|
||||
var tag = data.getTag();
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
boolean zooming = cap != null && cap.zoom;
|
||||
double spread = data.spread();
|
||||
|
@ -343,7 +342,6 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
|||
}
|
||||
|
||||
data.setAmmo(data.getAmmo() - 1);
|
||||
data.save();
|
||||
player.getCooldowns().addCooldown(stack.getItem(), 6);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
|
|||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunData;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
|
||||
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
|
||||
|
@ -21,7 +22,6 @@ import com.atsuishio.superbwarfare.tools.NBTTool;
|
|||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
|
@ -169,10 +169,11 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnRelease(Player player, final CompoundTag tag) {
|
||||
public void fireOnRelease(Player player, final GunData data) {
|
||||
if (player.level().isClientSide()) return;
|
||||
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
var tag = data.getTag();
|
||||
var stack = data.getStack();
|
||||
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
|
||||
|
||||
if (player instanceof ServerPlayer serverPlayer) {
|
||||
|
@ -209,7 +210,6 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
player.getCooldowns().addCooldown(stack.getItem(), 7);
|
||||
GunsTool.setGunIntTag(tag, "ArrowEmpty", 7);
|
||||
GunsTool.setGunDoubleTag(tag, "Power", 0);
|
||||
NBTTool.saveTag(stack, tag);
|
||||
|
||||
if (!InventoryTool.hasCreativeAmmoBox(player) && !player.isCreative()) {
|
||||
player.getInventory().clearOrCountMatchingItems(p -> Items.ARROW == p.getItem(), 1, player.inventoryMenu.getCraftSlots());
|
||||
|
@ -218,7 +218,7 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnPress(Player player, final CompoundTag tag) {
|
||||
public void fireOnPress(Player player, final GunData data) {
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (cap != null) {
|
||||
cap.bowPullHold = true;
|
||||
|
|
|
@ -22,7 +22,6 @@ import com.atsuishio.superbwarfare.tools.NBTTool;
|
|||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
|
@ -224,10 +223,10 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
|||
}
|
||||
|
||||
@Override
|
||||
public void fireOnPress(Player player, final CompoundTag tag) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
var data = GunData.from(stack);
|
||||
public void fireOnPress(Player player, final GunData data) {
|
||||
if (data.isReloading()) return;
|
||||
ItemStack stack = data.getStack();
|
||||
var tag = data.getTag();
|
||||
|
||||
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), tag);
|
||||
var energyStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||
|
@ -266,7 +265,6 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
|
|||
|
||||
data.setAmmo(data.getAmmo() - 1);
|
||||
data.getTag().putBoolean("shoot", true);
|
||||
data.save();
|
||||
energyStorage.extractEnergy(400 + 100 * perkLevel, false);
|
||||
}
|
||||
|
||||
|
|
|
@ -46,15 +46,15 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
|
|||
if (player.isSpectator()) return;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.GUN)) return;
|
||||
final var tag = NBTTool.getTag(stack);
|
||||
var data = GunData.from(stack);
|
||||
final var tag = data.getTag();
|
||||
|
||||
handleGunBolt(player, stack, tag);
|
||||
handleGunBolt(player, stack);
|
||||
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (type == 0) {
|
||||
var data = GunData.from(stack);
|
||||
if (tag.getDouble("prepare") == 0 && data.isReloading() && data.getAmmo() > 0) {
|
||||
NBTTool.saveTag(stack, tag);
|
||||
tag.putDouble("force_stop", 1);
|
||||
}
|
||||
|
||||
if (cap != null) {
|
||||
|
@ -66,7 +66,7 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
|
|||
if (cap != null) cap.syncPlayerVariables(player);
|
||||
return;
|
||||
}
|
||||
specialFireWeapon.fireOnPress(player, tag);
|
||||
specialFireWeapon.fireOnPress(player, data);
|
||||
|
||||
if (cap != null) {
|
||||
cap.holdFire = true;
|
||||
|
@ -81,17 +81,16 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
|
|||
|
||||
// 松开开火
|
||||
if (stack.getItem() instanceof SpecialFireWeapon specialFireWeapon) {
|
||||
specialFireWeapon.fireOnRelease(player, tag);
|
||||
specialFireWeapon.fireOnRelease(player, data);
|
||||
}
|
||||
}
|
||||
data.save();
|
||||
}
|
||||
|
||||
NBTTool.saveTag(stack, tag);
|
||||
}
|
||||
|
||||
private static void handleGunBolt(Player player, ItemStack stack, CompoundTag tag) {
|
||||
private static void handleGunBolt(Player player, ItemStack stack) {
|
||||
if (!stack.is(ModTags.Items.GUN)) return;
|
||||
var data = GunData.from(stack);
|
||||
tag = data.getTag();
|
||||
CompoundTag tag = data.getTag();
|
||||
|
||||
if (data.boltActionTime() > 0
|
||||
&& data.getAmmo() > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0)
|
||||
|
|
Loading…
Add table
Reference in a new issue