修复并优化部分数据读取存储问题
This commit is contained in:
parent
78f579d7d7
commit
1b614de660
23 changed files with 192 additions and 152 deletions
|
@ -344,11 +344,9 @@ public class ClickHandler {
|
|||
}
|
||||
} else {
|
||||
PacketDistributor.sendToServer(new FireMessage(0));
|
||||
if ((!(data.normalReloading() || data.emptyReloading())
|
||||
&& !data.reloading()
|
||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
||||
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction"))
|
||||
&& drawTime < 0.01) {
|
||||
if ((!data.reloading() && !data.charging()
|
||||
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction")
|
||||
) && drawTime < 0.01) {
|
||||
if (data.fireMode() == 1) {
|
||||
if (ClientEventHandler.burstFireAmount == 0) {
|
||||
ClientEventHandler.burstFireAmount = data.burstAmount();
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
package com.atsuishio.superbwarfare.client;
|
||||
|
||||
import com.atsuishio.superbwarfare.item.gun.GunData;
|
||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
|
@ -14,15 +13,14 @@ import net.neoforged.api.distmarker.OnlyIn;
|
|||
public class PoseTool {
|
||||
|
||||
public static HumanoidModel.ArmPose pose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) {
|
||||
var tag = NBTTool.getTag(stack);
|
||||
if (stack.getItem() instanceof GunItem) {
|
||||
var data = GunData.from(stack);
|
||||
if (data.emptyReloading()
|
||||
|| data.getReloadState() == GunData.ReloadState.NORMAL_RELOADING
|
||||
|| data.reloading()
|
||||
|| GunsTool.getGunBooleanTag(tag, "Charging")
|
||||
) {
|
||||
if (data.reloading() || data.charging()) {
|
||||
return HumanoidModel.ArmPose.CROSSBOW_CHARGE;
|
||||
} else if (entityLiving.isSprinting() && entityLiving.onGround() && entityLiving.getPersistentData().getDouble("noRun") == 0) {
|
||||
}
|
||||
}
|
||||
|
||||
if (entityLiving.isSprinting() && entityLiving.onGround() && entityLiving.getPersistentData().getDouble("noRun") == 0) {
|
||||
return HumanoidModel.ArmPose.CROSSBOW_CHARGE;
|
||||
} else {
|
||||
return HumanoidModel.ArmPose.BOW_AND_ARROW;
|
||||
|
|
|
@ -46,7 +46,7 @@ public class K98ItemModel extends GeoModel<K98Item> {
|
|||
|
||||
var data = GunData.from(stack);
|
||||
final var tag = data.tag();
|
||||
if (tag.getDouble("prepare") > 11 && data.ammo() == 1) {
|
||||
if (tag.getDouble("PrepareTime") > 11 && data.ammo() == 1) {
|
||||
clip.setScaleX(0);
|
||||
clip.setScaleY(0);
|
||||
clip.setScaleZ(0);
|
||||
|
|
|
@ -84,7 +84,7 @@ public class MarlinItemModel extends GeoModel<MarlinItem> {
|
|||
|
||||
CrossHairOverlay.gunRot = shen.getRotZ();
|
||||
|
||||
if (NBTTool.getTag(stack).getBoolean("empty")) {
|
||||
if (NBTTool.getTag(stack).getBoolean("IsEmpty")) {
|
||||
jichui.setRotX(-0.52f);
|
||||
}
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
|
|||
float numR = (float) (1 - 0.9 * zt);
|
||||
float numP = (float) (1 - 0.98 * zt);
|
||||
|
||||
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0 || GunsTool.getGunBooleanTag(tag, "Charging")) {
|
||||
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0 || data.charging()) {
|
||||
main.setRotX(numR * main.getRotX());
|
||||
main.setRotY(numR * main.getRotY());
|
||||
main.setRotZ(numR * main.getRotZ());
|
||||
|
|
|
@ -78,7 +78,7 @@ public class RpgItemRenderer extends GeoItemRenderer<RpgItem> {
|
|||
if (!itemStack.is(ModTags.Items.GUN)) return;
|
||||
|
||||
if (name.equals("Rockets")) {
|
||||
bone.setHidden(NBTTool.getTag(itemStack).getBoolean("empty"));
|
||||
bone.setHidden(NBTTool.getTag(itemStack).getBoolean("IsEmpty"));
|
||||
}
|
||||
|
||||
if (name.equals("flare")) {
|
||||
|
|
|
@ -265,6 +265,7 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
|
|||
this.entityData.set(CONTROLLER, player.getStringUUID());
|
||||
|
||||
Monitor.link(tag, this.getStringUUID());
|
||||
NBTTool.saveTag(stack, tag);
|
||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.monitor.linked").withStyle(ChatFormatting.GREEN), true);
|
||||
|
||||
if (player instanceof ServerPlayer serverPlayer) {
|
||||
|
|
|
@ -313,8 +313,9 @@ public class ClientEventHandler {
|
|||
&& cap != null && !cap.edit
|
||||
&& !(data.normalReloading() || data.emptyReloading())
|
||||
&& !data.reloading()
|
||||
&& !data.charging()
|
||||
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
|
||||
) {
|
||||
gunMelee = 36;
|
||||
cantFireTime = 40;
|
||||
player.playSound(SoundEvents.PLAYER_ATTACK_SWEEP, 1f, 1);
|
||||
|
@ -474,7 +475,7 @@ public class ClientEventHandler {
|
|||
&& !notInGame()
|
||||
&& (!(data.normalReloading() || data.emptyReloading())
|
||||
&& !data.reloading()
|
||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
||||
&& !data.charging()
|
||||
&& data.ammo() > 0
|
||||
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
||||
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction")
|
||||
|
|
|
@ -73,7 +73,7 @@ public class GunEventHandler {
|
|||
}
|
||||
|
||||
if (stack.getItem() == ModItems.MARLIN.get() && GunsTool.getGunIntTag(tag, "BoltActionTick") == 9) {
|
||||
tag.putBoolean("empty", false);
|
||||
tag.remove("IsEmpty");
|
||||
}
|
||||
|
||||
if (GunsTool.getGunIntTag(tag, "BoltActionTick") == 1) {
|
||||
|
@ -334,7 +334,7 @@ public class GunEventHandler {
|
|||
gunData.setReloadState(GunData.ReloadState.EMPTY_RELOADING);
|
||||
playGunEmptyReloadSounds(player);
|
||||
}
|
||||
data.putBoolean("StartReload", false);
|
||||
data.remove("StartReload");
|
||||
}
|
||||
|
||||
if (data.getInt("ReloadTime") > 0) {
|
||||
|
@ -343,27 +343,27 @@ public class GunEventHandler {
|
|||
|
||||
if (stack.getItem() == ModItems.RPG.get()) {
|
||||
if (data.getInt("ReloadTime") == 84) {
|
||||
tag.putBoolean("empty", false);
|
||||
tag.remove("IsEmpty");
|
||||
}
|
||||
if (data.getInt("ReloadTime") == 9) {
|
||||
data.putBoolean("CloseHammer", false);
|
||||
data.remove("CloseHammer");
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.MK_14.get() && data.getInt("ReloadTime") == 18) {
|
||||
data.putBoolean("HoldOpen", false);
|
||||
data.remove("HoldOpen");
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.SVD.get() && data.getInt("ReloadTime") == 17) {
|
||||
data.putBoolean("HoldOpen", false);
|
||||
data.remove("HoldOpen");
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.SKS.get() && data.getInt("ReloadTime") == 14) {
|
||||
data.putBoolean("HoldOpen", false);
|
||||
data.remove("HoldOpen");
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.M_60.get() && data.getInt("ReloadTime") == 55) {
|
||||
data.putBoolean("HideBulletChain", false);
|
||||
data.remove("HideBulletChain");
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.GLOCK_17.get()
|
||||
|
@ -372,12 +372,12 @@ public class GunEventHandler {
|
|||
|| stack.getItem() == ModItems.MP_443.get()
|
||||
) {
|
||||
if (data.getInt("ReloadTime") == 9) {
|
||||
data.putBoolean("HoldOpen", false);
|
||||
data.remove("HoldOpen");
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.QBZ_95.get() && data.getInt("ReloadTime") == 14) {
|
||||
data.putBoolean("HoldOpen", false);
|
||||
data.remove("HoldOpen");
|
||||
}
|
||||
|
||||
if (data.getInt("ReloadTime") == 1) {
|
||||
|
@ -390,7 +390,7 @@ public class GunEventHandler {
|
|||
} else {
|
||||
playGunEmptyReload(player, gunData);
|
||||
}
|
||||
data.putBoolean("StartReload", false);
|
||||
data.remove("StartReload");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -496,90 +496,90 @@ public class GunEventHandler {
|
|||
var tag = gunData.tag();
|
||||
|
||||
// 换弹流程计时器
|
||||
if (tag.getDouble("prepare") > 0) {
|
||||
tag.putDouble("prepare", tag.getDouble("prepare") - 1);
|
||||
if (tag.getDouble("PrepareTime") > 0) {
|
||||
tag.putDouble("PrepareTime", tag.getDouble("PrepareTime") - 1);
|
||||
}
|
||||
if (tag.getDouble("prepare_load") > 0) {
|
||||
tag.putDouble("prepare_load", tag.getDouble("prepare_load") - 1);
|
||||
if (tag.getDouble("PrepareLoadTime") > 0) {
|
||||
tag.putDouble("PrepareLoadTime", tag.getDouble("PrepareLoadTime") - 1);
|
||||
}
|
||||
if (tag.getDouble("iterative") > 0) {
|
||||
tag.putDouble("iterative", tag.getDouble("iterative") - 1);
|
||||
if (tag.getDouble("IterativeLoadTime") > 0) {
|
||||
tag.putDouble("IterativeLoadTime", tag.getDouble("IterativeLoadTime") - 1);
|
||||
}
|
||||
if (tag.getDouble("finish") > 0) {
|
||||
tag.putDouble("finish", tag.getDouble("finish") - 1);
|
||||
if (tag.getDouble("FinishTime") > 0) {
|
||||
tag.putDouble("FinishTime", tag.getDouble("FinishTime") - 1);
|
||||
}
|
||||
|
||||
// player.displayClientMessage(Component.literal("prepare: " + new DecimalFormat("##.#").format(tag.getDouble("prepare"))
|
||||
// + " prepare_load: " + new DecimalFormat("##.#").format(tag.getDouble("prepare_load"))
|
||||
// + " iterative: " + new DecimalFormat("##.#").format(tag.getDouble("iterative"))
|
||||
// + " finish: " + new DecimalFormat("##.#").format(tag.getDouble("finish"))
|
||||
// player.displayClientMessage(Component.literal("prepare: " + new DecimalFormat("##.#").format(tag.getDouble("PrepareTime"))
|
||||
// + " prepare_load: " + new DecimalFormat("##.#").format(tag.getDouble("PrepareLoadTime"))
|
||||
// + " iterative: " + new DecimalFormat("##.#").format(tag.getDouble("IterativeLoadTime"))
|
||||
// + " finish: " + new DecimalFormat("##.#").format(tag.getDouble("FinishTime"))
|
||||
// + " reload_stage: " + new DecimalFormat("##.#").format(tag.getDouble("reload_stage"))
|
||||
// ), true);
|
||||
|
||||
// 一阶段
|
||||
if (tag.getBoolean("start_single_reload")) {
|
||||
if (tag.getBoolean("StartSingleReload")) {
|
||||
NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
|
||||
|
||||
if ((gunData.prepareLoadTime() != 0 && gunData.ammo() == 0) || stack.is(ModItems.SECONDARY_CATACLYSM.get())) {
|
||||
// 此处判断空仓换弹的时候,是否在准备阶段就需要装填一发,如M870
|
||||
playGunPrepareLoadReloadSounds(player);
|
||||
int prepareLoadTime = gunData.prepareLoadTime();
|
||||
tag.putInt("prepare_load", prepareLoadTime + 1);
|
||||
tag.putInt("PrepareLoadTime", prepareLoadTime + 1);
|
||||
player.getCooldowns().addCooldown(stack.getItem(), prepareLoadTime);
|
||||
} else if (gunData.prepareEmptyTime() != 0 && gunData.ammo() == 0) {
|
||||
// 此处判断空仓换弹,如莫辛纳甘
|
||||
playGunEmptyPrepareSounds(player);
|
||||
int prepareEmptyTime = gunData.prepareEmptyTime();
|
||||
tag.putInt("prepare", prepareEmptyTime + 1);
|
||||
tag.putInt("PrepareTime", prepareEmptyTime + 1);
|
||||
player.getCooldowns().addCooldown(stack.getItem(), prepareEmptyTime);
|
||||
} else {
|
||||
playGunPrepareReloadSounds(player);
|
||||
int prepareTime = gunData.prepareTime();
|
||||
tag.putInt("prepare", prepareTime + 1);
|
||||
tag.putInt("PrepareTime", prepareTime + 1);
|
||||
player.getCooldowns().addCooldown(stack.getItem(), prepareTime);
|
||||
}
|
||||
|
||||
tag.putBoolean("force_stop", false);
|
||||
tag.putBoolean("stop", false);
|
||||
tag.remove("ForceStop");
|
||||
tag.remove("Stopped");
|
||||
gunData.setReloadStage(1);
|
||||
gunData.setReloadState(GunData.ReloadState.NORMAL_RELOADING);
|
||||
tag.putBoolean("start_single_reload", false);
|
||||
tag.remove("StartSingleReload");
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.M_870.get() && tag.getInt("prepare_load") == 10) {
|
||||
if (stack.getItem() == ModItems.M_870.get() && tag.getInt("PrepareLoadTime") == 10) {
|
||||
singleLoad(player, gunData);
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get() && tag.getInt("prepare_load") == 3) {
|
||||
if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get() && tag.getInt("PrepareLoadTime") == 3) {
|
||||
singleLoad(player, gunData);
|
||||
}
|
||||
|
||||
// 一阶段结束,检查备弹,如果有则二阶段启动,无则直接跳到三阶段
|
||||
if ((tag.getDouble("prepare") == 1 || tag.getDouble("prepare_load") == 1)) {
|
||||
if ((tag.getDouble("PrepareTime") == 1 || tag.getDouble("PrepareLoadTime") == 1)) {
|
||||
if (!InventoryTool.hasCreativeAmmoBox(player)) {
|
||||
var capability = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (capability == null) capability = new PlayerVariable();
|
||||
|
||||
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else if ((stack.is(ModTags.Items.USE_HANDGUN_AMMO) || stack.is(ModTags.Items.SMG)) && capability.handgunAmmo == 0) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && capability.heavyAmmo == 0) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else if (stack.is(ModTags.Items.LAUNCHER) && GunsTool.getGunIntTag(tag, "MaxAmmo") == 0) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.ammo() >= gunData.magazine()) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else {
|
||||
gunData.setReloadStage(2);
|
||||
}
|
||||
} else {
|
||||
if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.ammo() >= gunData.magazine()) {
|
||||
tag.putBoolean("force_stage3_start", true);
|
||||
tag.putBoolean("ForceStartStage3", true);
|
||||
} else {
|
||||
gunData.setReloadStage(2);
|
||||
}
|
||||
|
@ -588,51 +588,51 @@ public class GunEventHandler {
|
|||
}
|
||||
|
||||
// 强制停止换弹,进入三阶段
|
||||
if (tag.getBoolean("force_stop") && gunData.getReloadStage() == 2 && tag.getInt("iterative") > 0) {
|
||||
tag.putBoolean("stop", true);
|
||||
if (tag.getBoolean("ForceStop") && gunData.getReloadStage() == 2 && tag.getInt("IterativeLoadTime") > 0) {
|
||||
tag.putBoolean("Stopped", true);
|
||||
}
|
||||
|
||||
// 二阶段
|
||||
if ((tag.getDouble("prepare") == 0 || tag.getDouble("prepare_load") == 0)
|
||||
if ((tag.getDouble("PrepareTime") == 0 || tag.getDouble("PrepareLoadTime") == 0)
|
||||
&& gunData.getReloadStage() == 2
|
||||
&& tag.getInt("iterative") == 0
|
||||
&& !tag.getBoolean("stop")
|
||||
&& tag.getInt("IterativeLoadTime") == 0
|
||||
&& !tag.getBoolean("Stopped")
|
||||
&& gunData.ammo() < gunData.magazine()
|
||||
) {
|
||||
|
||||
playGunLoopReloadSounds(player);
|
||||
int iterativeTime = gunData.iterativeTime();
|
||||
tag.putDouble("iterative", iterativeTime);
|
||||
tag.putDouble("IterativeLoadTime", iterativeTime);
|
||||
player.getCooldowns().addCooldown(stack.getItem(), iterativeTime);
|
||||
// 动画播放nbt
|
||||
if (tag.getDouble("load_index") == 1) {
|
||||
tag.putDouble("load_index", 0);
|
||||
if (tag.getDouble("LoadIndex") == 1) {
|
||||
tag.putDouble("LoadIndex", 0);
|
||||
} else {
|
||||
tag.putDouble("load_index", 1);
|
||||
tag.putDouble("LoadIndex", 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 装填
|
||||
if ((stack.getItem() == ModItems.M_870.get()
|
||||
|| stack.getItem() == ModItems.MARLIN.get())
|
||||
&& tag.getInt("iterative") == 3
|
||||
&& tag.getInt("IterativeLoadTime") == 3
|
||||
) {
|
||||
singleLoad(player, gunData);
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get() && tag.getInt("iterative") == 16) {
|
||||
if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get() && tag.getInt("IterativeLoadTime") == 16) {
|
||||
singleLoad(player, gunData);
|
||||
}
|
||||
|
||||
if ((stack.getItem() == ModItems.K_98.get()
|
||||
|| stack.getItem() == ModItems.MOSIN_NAGANT.get())
|
||||
&& tag.getInt("iterative") == 1
|
||||
&& tag.getInt("IterativeLoadTime") == 1
|
||||
) {
|
||||
singleLoad(player, gunData);
|
||||
}
|
||||
|
||||
// 二阶段结束
|
||||
if (tag.getInt("iterative") == 1) {
|
||||
if (tag.getInt("IterativeLoadTime") == 1) {
|
||||
// 装满结束
|
||||
if (gunData.ammo() >= gunData.magazine()) {
|
||||
gunData.setReloadStage(3);
|
||||
|
@ -657,35 +657,35 @@ public class GunEventHandler {
|
|||
}
|
||||
|
||||
// 强制结束
|
||||
if (tag.getBoolean("stop")) {
|
||||
if (tag.getBoolean("Stopped")) {
|
||||
gunData.setReloadStage(3);
|
||||
tag.putBoolean("force_stop", false);
|
||||
tag.putBoolean("stop", false);
|
||||
tag.remove("ForceStop");
|
||||
tag.remove("Stopped");
|
||||
}
|
||||
}
|
||||
|
||||
// 三阶段
|
||||
if ((tag.getInt("iterative") == 1 && gunData.getReloadStage() == 3) || tag.getBoolean("force_stage3_start")) {
|
||||
if ((tag.getInt("IterativeLoadTime") == 1 && gunData.getReloadStage() == 3) || tag.getBoolean("ForceStartStage3")) {
|
||||
gunData.setReloadStage(3);
|
||||
tag.putBoolean("force_stage3_start", false);
|
||||
tag.remove("ForceStartStage3");
|
||||
int finishTime = gunData.finishTime();
|
||||
tag.putInt("finish", finishTime + 2);
|
||||
tag.putInt("FinishTime", finishTime + 2);
|
||||
player.getCooldowns().addCooldown(stack.getItem(), finishTime + 2);
|
||||
playGunEndReloadSounds(player);
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.MARLIN.get() && tag.getInt("finish") == 10) {
|
||||
tag.putBoolean("empty", false);
|
||||
if (stack.getItem() == ModItems.MARLIN.get() && tag.getInt("FinishTime") == 10) {
|
||||
tag.remove("IsEmpty");
|
||||
}
|
||||
|
||||
// 三阶段结束
|
||||
if (tag.getInt("finish") == 1) {
|
||||
if (tag.getInt("FinishTime") == 1) {
|
||||
gunData.setReloadStage(0);
|
||||
if (gunData.boltActionTime() > 0) {
|
||||
GunsTool.setGunBooleanTag(tag, "NeedBoltAction", false);
|
||||
}
|
||||
gunData.setReloadState(GunData.ReloadState.NOT_RELOADING);
|
||||
tag.putBoolean("start_single_reload", false);
|
||||
tag.remove("StartSingleReload");
|
||||
|
||||
NeoForge.EVENT_BUS.post(new ReloadEvent.Post(player, stack));
|
||||
}
|
||||
|
@ -831,32 +831,29 @@ public class GunEventHandler {
|
|||
/**
|
||||
* 哨兵充能
|
||||
*/
|
||||
private static void handleSentinelCharge(Player player, GunData gunData) {
|
||||
private static void handleSentinelCharge(Player player, GunData data) {
|
||||
if (!(player.getMainHandItem().getItem() instanceof GunItem)) return;
|
||||
var tag = gunData.tag();
|
||||
final var data = gunData.data();
|
||||
|
||||
// 启动换弹
|
||||
if (GunsTool.getGunBooleanTag(tag, "StartCharge")) {
|
||||
data.putInt("ChargeTime", 127);
|
||||
data.putBoolean("Charging", true);
|
||||
// 启动充能
|
||||
if (data.charge.shouldStartCharge()) {
|
||||
data.charge.setTime(127);
|
||||
|
||||
SoundEvent sound1p = BuiltInRegistries.SOUND_EVENT.get(Mod.loc("sentinel_charge"));
|
||||
if (sound1p != null && player instanceof ServerPlayer serverPlayer) {
|
||||
SoundTool.playLocalSound(serverPlayer, sound1p, 2f, 1f);
|
||||
}
|
||||
|
||||
data.putBoolean("StartCharge", true);
|
||||
data.charge.markStarted();
|
||||
}
|
||||
|
||||
if (GunsTool.getGunIntTag(tag, "ChargeTime") > 0) {
|
||||
data.putInt("ChargeTime", data.getInt("ChargeTime") - 1);
|
||||
if (data.charge.time() > 0) {
|
||||
data.charge.reduce();
|
||||
}
|
||||
|
||||
if (GunsTool.getGunIntTag(tag, "ChargeTime") == 17) {
|
||||
if (data.charge.time() == 17) {
|
||||
for (var cell : player.getInventory().items) {
|
||||
if (cell.is(ModItems.CELL.get())) {
|
||||
var stackStorage = cell.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||
var stackStorage = data.stack().getCapability(Capabilities.EnergyStorage.ITEM);
|
||||
if (stackStorage == null) continue;
|
||||
|
||||
int stackMaxEnergy = stackStorage.getMaxEnergyStored();
|
||||
|
@ -875,9 +872,5 @@ public class GunEventHandler {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (GunsTool.getGunIntTag(tag, "ChargeTime") == 1) {
|
||||
data.putBoolean("Charging", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -370,18 +370,17 @@ public class LivingEventHandler {
|
|||
oldData.setReloadState(GunData.ReloadState.NOT_RELOADING);
|
||||
|
||||
if (oldData.iterativeTime() != 0) {
|
||||
oldTag.putBoolean("force_stop", false);
|
||||
oldTag.putBoolean("stop", false);
|
||||
oldTag.remove("ForceStop");
|
||||
oldTag.remove("Stopped");
|
||||
oldData.setReloadStage(0);
|
||||
oldTag.putDouble("prepare", 0);
|
||||
oldTag.putDouble("prepare_load", 0);
|
||||
oldTag.putDouble("iterative", 0);
|
||||
oldTag.putDouble("finish", 0);
|
||||
oldTag.remove("PrepareTime");
|
||||
oldTag.remove("PrepareLoadTime");
|
||||
oldTag.remove("IterativeLoadTime");
|
||||
oldTag.remove("FinishTime");
|
||||
}
|
||||
|
||||
if (oldStack.is(ModItems.SENTINEL.get())) {
|
||||
data.putBoolean("Charging", false);
|
||||
data.putInt("ChargeTime", 0);
|
||||
oldData.charge.reset();
|
||||
}
|
||||
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
|
@ -406,22 +405,21 @@ public class LivingEventHandler {
|
|||
newData.setReloadState(GunData.ReloadState.NOT_RELOADING);
|
||||
|
||||
var data = newTag.getCompound("GunData");
|
||||
data.putInt("ReloadTime", 0);
|
||||
data.remove("ReloadTime");
|
||||
newTag.put("GunData", data);
|
||||
|
||||
if (newData.iterativeTime() != 0) {
|
||||
newTag.putBoolean("force_stop", false);
|
||||
newTag.putBoolean("stop", false);
|
||||
newTag.remove("ForceStop");
|
||||
newTag.remove("Stopped");
|
||||
newData.setReloadStage(0);
|
||||
newTag.putDouble("prepare", 0);
|
||||
newTag.putDouble("prepare_load", 0);
|
||||
newTag.putDouble("iterative", 0);
|
||||
newTag.putDouble("finish", 0);
|
||||
newTag.remove("PrepareTime");
|
||||
newTag.remove("PrepareLoadTime");
|
||||
newTag.remove("IterativeLoadTime");
|
||||
newTag.remove("FinishTime");
|
||||
}
|
||||
|
||||
if (newStack.is(ModItems.SENTINEL.get())) {
|
||||
GunsTool.setGunBooleanTag(newTag, "Charging", false);
|
||||
GunsTool.setGunIntTag(newTag, "ChargeTime", 0);
|
||||
newData.charge.reset();
|
||||
}
|
||||
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), newTag);
|
||||
|
|
|
@ -207,7 +207,7 @@ public class PlayerEventHandler {
|
|||
var tag = data.tag();
|
||||
|
||||
if ((stack.is(ModItems.RPG.get()) || stack.is(ModItems.BOCEK.get())) && data.ammo() == 1) {
|
||||
tag.putDouble("empty", 0);
|
||||
tag.remove("IsEmpty");
|
||||
data.save();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -315,16 +315,64 @@ public class GunData {
|
|||
}
|
||||
|
||||
public void setReloadState(ReloadState state) {
|
||||
if (state == ReloadState.NOT_RELOADING) {
|
||||
data.remove("ReloadState");
|
||||
} else {
|
||||
data.putInt("ReloadState", state.ordinal());
|
||||
}
|
||||
}
|
||||
|
||||
public int getReloadStage() {
|
||||
return data.getInt("ReloadStage");
|
||||
}
|
||||
|
||||
public void setReloadStage(int stage) {
|
||||
if (stage == 0) {
|
||||
data.remove("ReloadStage");
|
||||
} else {
|
||||
data.putInt("ReloadStage", stage);
|
||||
}
|
||||
}
|
||||
|
||||
public final Charge charge = new Charge();
|
||||
|
||||
public class Charge {
|
||||
public void markStart() {
|
||||
data.putBoolean("StartCharge", true);
|
||||
}
|
||||
|
||||
public boolean shouldStartCharge() {
|
||||
return data.getBoolean("StartCharge");
|
||||
}
|
||||
|
||||
public void markStarted() {
|
||||
data.remove("StartCharge");
|
||||
}
|
||||
|
||||
public int time() {
|
||||
return data.getInt("ChargeTime");
|
||||
}
|
||||
|
||||
public void reduce() {
|
||||
setTime(time() - 1);
|
||||
}
|
||||
|
||||
public void setTime(int chargeTime) {
|
||||
if (chargeTime <= 0) {
|
||||
data.remove("ChargeTime");
|
||||
} else {
|
||||
data.putInt("ChargeTime", chargeTime);
|
||||
}
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
setTime(0);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean charging() {
|
||||
return charge.time() > 0;
|
||||
}
|
||||
|
||||
public void save() {
|
||||
stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag));
|
||||
|
|
|
@ -138,7 +138,7 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
tag.putBoolean("draw", false);
|
||||
|
||||
if (data.ammo() == 0) {
|
||||
tag.putDouble("empty", 1);
|
||||
tag.putBoolean("IsEmpty", true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -241,7 +241,7 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
|
|||
}
|
||||
|
||||
if (data.ammo() == 1) {
|
||||
tag.putBoolean("empty", true);
|
||||
tag.putBoolean("IsEmpty", true);
|
||||
GunsTool.setGunBooleanTag(tag, "CloseHammer", true);
|
||||
}
|
||||
|
||||
|
|
|
@ -90,15 +90,15 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
|
|||
var data = GunData.from(stack);
|
||||
final var tag = data.tag();
|
||||
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) {
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("PrepareLoadTime") > 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.prepare"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 0 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 0 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.iterativeload"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 1 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 1 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.iterativeload2"));
|
||||
}
|
||||
|
||||
|
|
|
@ -56,15 +56,15 @@ public class MarlinItem extends GunItem implements GeoItem {
|
|||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift"));
|
||||
}
|
||||
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("prepare") > 0) {
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("PrepareTime") > 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.prepare"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 0 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 0 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 1 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 1 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload2"));
|
||||
}
|
||||
|
||||
|
|
|
@ -61,19 +61,19 @@ public class M870Item extends GunItem implements GeoItem {
|
|||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.shift"));
|
||||
}
|
||||
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) {
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("PrepareLoadTime") > 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.preparealt"));
|
||||
}
|
||||
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("prepare") > 0) {
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("PrepareTime") > 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.prepare"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 0 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 0 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.iterativeload"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 1 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 1 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.iterativeload2"));
|
||||
}
|
||||
|
||||
|
|
|
@ -61,15 +61,15 @@ public class K98Item extends GunItem implements GeoItem {
|
|||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.reload_empty"));
|
||||
}
|
||||
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("prepare") > 0) {
|
||||
if (data.getReloadStage() == 1 && tag.getDouble("PrepareTime") > 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.prepare"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 0 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 0 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.iterativeload"));
|
||||
}
|
||||
|
||||
if (tag.getDouble("load_index") == 1 && data.getReloadStage() == 2) {
|
||||
if (tag.getDouble("LoadIndex") == 1 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.iterativeload2"));
|
||||
}
|
||||
|
||||
|
|
|
@ -65,11 +65,11 @@ public class MosinNagantItem extends GunItem implements GeoItem {
|
|||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare"));
|
||||
}
|
||||
|
||||
if (NBTTool.getTag(stack).getDouble("load_index") == 0 && data.getReloadStage() == 2) {
|
||||
if (NBTTool.getTag(stack).getDouble("LoadIndex") == 0 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload"));
|
||||
}
|
||||
|
||||
if (NBTTool.getTag(stack).getDouble("load_index") == 1 && data.getReloadStage() == 2) {
|
||||
if (NBTTool.getTag(stack).getDouble("LoadIndex") == 1 && data.getReloadStage() == 2) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload2"));
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
|
|||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.reload_normal"));
|
||||
}
|
||||
|
||||
if (GunsTool.getGunBooleanTag(tag, "Charging")) {
|
||||
if (data.charging()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.charge"));
|
||||
}
|
||||
|
||||
|
@ -105,8 +105,10 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
|
|||
|
||||
if (player.isSprinting() && player.onGround()
|
||||
&& player.getPersistentData().getDouble("noRun") == 0
|
||||
&& !(data.normalReloading() || data.emptyReloading())
|
||||
&& !GunsTool.getGunBooleanTag(tag, "Charging") && ClientEventHandler.drawTime < 0.01) {
|
||||
&& !data.reloading()
|
||||
&& !data.charging()
|
||||
&& ClientEventHandler.drawTime < 0.01
|
||||
) {
|
||||
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sentinel.run_fast"));
|
||||
} else {
|
||||
|
|
|
@ -52,8 +52,8 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
|
|||
|
||||
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
|
||||
if (type == 0) {
|
||||
if (tag.getDouble("prepare") == 0 && data.reloading() && data.ammo() > 0) {
|
||||
tag.putDouble("force_stop", 1);
|
||||
if (tag.getDouble("PrepareTime") == 0 && data.reloading() && data.ammo() > 0) {
|
||||
tag.putBoolean("ForceStop", true);
|
||||
}
|
||||
|
||||
if (cap != null) {
|
||||
|
@ -97,7 +97,8 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
|
|||
&& !(data.normalReloading()
|
||||
|| data.emptyReloading())
|
||||
&& !data.reloading()
|
||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
|
||||
&& !data.charging()
|
||||
) {
|
||||
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunBooleanTag(tag, "NeedBoltAction")) {
|
||||
GunsTool.setGunIntTag(tag, "BoltActionTick", data.boltActionTime() + 1);
|
||||
GunEventHandler.playGunBoltSounds(player);
|
||||
|
|
|
@ -90,13 +90,13 @@ public record FireModeMessage(int msgType) implements CustomPacketPayload {
|
|||
&& !player.isSpectator()
|
||||
&& !(player.getCooldowns().isOnCooldown(stack.getItem()))
|
||||
&& GunsTool.getGunIntTag(tag, "ReloadTime") == 0
|
||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
|
||||
|
||||
&& !data.charging()
|
||||
) {
|
||||
for (var cell : player.getInventory().items) {
|
||||
if (cell.is(ModItems.CELL.get())) {
|
||||
var cap = cell.getCapability(Capabilities.EnergyStorage.ITEM);
|
||||
if (cap != null && cap.getEnergyStored() > 0) {
|
||||
GunsTool.setGunBooleanTag(tag, "StartCharge", true);
|
||||
data.charge.markStart();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,10 +44,10 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
|
|||
var tag = data.tag();
|
||||
|
||||
if (!player.isSpectator()
|
||||
&& !GunsTool.getGunBooleanTag(tag, "Charging")
|
||||
&& !data.charging()
|
||||
&& !data.reloading()
|
||||
&& GunsTool.getGunIntTag(tag, "ReloadTime") == 0
|
||||
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
|
||||
&& !data.reloading()
|
||||
) {
|
||||
boolean canSingleReload = gunItem.isIterativeReload(stack);
|
||||
boolean canReload = gunItem.isMagazineReload(stack) && !gunItem.isClipReload(stack);
|
||||
|
@ -94,7 +94,7 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
|
|||
}
|
||||
|
||||
if (canSingleReload && data.ammo() < data.magazine()) {
|
||||
tag.putBoolean("start_single_reload", true);
|
||||
tag.putBoolean("StartSingleReload", true);
|
||||
}
|
||||
data.save();
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
|
|||
}
|
||||
|
||||
data.setAmmo(data.ammo() - 1);
|
||||
tag.putDouble("empty", 1);
|
||||
tag.putBoolean("IsEmpty", true);
|
||||
|
||||
if (stack.getItem() == ModItems.M_60.get() && data.ammo() <= 5) {
|
||||
GunsTool.setGunBooleanTag(tag, "HideBulletChain", true);
|
||||
|
|
Loading…
Add table
Reference in a new issue