移除更多无用NBT,重命名部分getter

This commit is contained in:
Light_Quanta 2025-04-05 19:10:49 +08:00
parent b7083324b0
commit 825cd772e6
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
78 changed files with 312 additions and 345 deletions

View file

@ -334,10 +334,10 @@ public class ClickHandler {
&& !notInGame() && !notInGame()
) { ) {
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
if (!gunItem.useBackpackAmmo(stack) && data.getAmmo() <= 0 && GunsTool.getGunIntTag(tag, "ReloadTime") == 0) { if (!gunItem.useBackpackAmmo(stack) && data.ammo() <= 0 && GunsTool.getGunIntTag(tag, "ReloadTime") == 0) {
if (ReloadConfig.LEFT_CLICK_RELOAD.get()) { if (ReloadConfig.LEFT_CLICK_RELOAD.get()) {
PacketDistributor.sendToServer(new ReloadMessage(0)); PacketDistributor.sendToServer(new ReloadMessage(0));
ClientEventHandler.burstFireAmount = 0; ClientEventHandler.burstFireAmount = 0;
@ -345,11 +345,11 @@ public class ClickHandler {
} else { } else {
PacketDistributor.sendToServer(new FireMessage(0)); PacketDistributor.sendToServer(new FireMessage(0));
if ((!(data.normalReloading() || data.emptyReloading()) if ((!(data.normalReloading() || data.emptyReloading())
&& !data.isReloading() && !data.reloading()
&& !GunsTool.getGunBooleanTag(tag, "Charging") && !GunsTool.getGunBooleanTag(tag, "Charging")
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction")) && !GunsTool.getGunBooleanTag(tag, "NeedBoltAction"))
&& drawTime < 0.01) { && drawTime < 0.01) {
if (data.getFireMode() == 1) { if (data.fireMode() == 1) {
if (ClientEventHandler.burstFireAmount == 0) { if (ClientEventHandler.burstFireAmount == 0) {
ClientEventHandler.burstFireAmount = data.burstAmount(); ClientEventHandler.burstFireAmount = data.burstAmount();
} }

View file

@ -18,7 +18,7 @@ public class PoseTool {
var data = GunData.from(stack); var data = GunData.from(stack);
if (data.emptyReloading() if (data.emptyReloading()
|| data.getReloadState() == GunData.ReloadState.NORMAL_RELOADING || data.getReloadState() == GunData.ReloadState.NORMAL_RELOADING
|| data.isReloading() || data.reloading()
|| GunsTool.getGunBooleanTag(tag, "Charging") || GunsTool.getGunBooleanTag(tag, "Charging")
) { ) {
return HumanoidModel.ArmPose.CROSSBOW_CHARGE; return HumanoidModel.ArmPose.CROSSBOW_CHARGE;

View file

@ -74,7 +74,7 @@ public class AK12ItemModel extends GeoModel<AK12Item> {
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
int type = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE); int type = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE);
float posY = switch (type) { float posY = switch (type) {

View file

@ -115,7 +115,7 @@ public class AK47ItemModel extends GeoModel<AK47Item> {
scope3.setScaleZ(1f - (0.7f * (float) zp)); scope3.setScaleZ(1f - (0.7f * (float) zp));
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
data.save(); data.save();

View file

@ -106,7 +106,7 @@ public class BocekItemModel extends GeoModel<BocekItem> {
shen.setRotZ(60 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz) - 0.2f); shen.setRotZ(60 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz) - 0.2f);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !((shen_pos.getPosX() < -0.6 && gun.getPosZ() < -2))); tag.putBoolean("HoloHidden", !((shen_pos.getPosX() < -0.6 && gun.getPosZ() < -2)));
data.save(); data.save();

View file

@ -75,7 +75,7 @@ public class DevotionItemModel extends GeoModel<DevotionItem> {
GeoBone holo = getAnimationProcessor().getBone("holo"); GeoBone holo = getAnimationProcessor().getBone("holo");
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
data.save(); data.save();

View file

@ -104,7 +104,7 @@ public class Glock17ItemModel extends GeoModel<Glock17Item> {
float numP = (float) (1 - 0.68 * zt); float numP = (float) (1 - 0.68 * zt);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());

View file

@ -48,8 +48,8 @@ public class Glock18ItemModel extends GeoModel<Glock18Item> {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
int mode = GunsTool.getGunIntTag(tag, "FireMode"); int mode = data.fireMode();
if (mode == 0) { if (mode == 0) {
switch_.setRotX(35 * Mth.DEG_TO_RAD); switch_.setRotX(35 * Mth.DEG_TO_RAD);
} }

View file

@ -109,7 +109,7 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
scope3.setScaleZ(1f - (0.5f * (float) zp)); scope3.setScaleZ(1f - (0.5f * (float) zp));
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 3.1)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 3.1));
data.save(); data.save();
@ -155,7 +155,7 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
l.setRotX(rotXBipod * Mth.DEG_TO_RAD); l.setRotX(rotXBipod * Mth.DEG_TO_RAD);
r.setRotX(rotXBipod * Mth.DEG_TO_RAD); r.setRotX(rotXBipod * Mth.DEG_TO_RAD);
int mode = GunsTool.getGunIntTag(tag, "FireMode"); int mode = data.fireMode();
kuaimanji.setRotX(mode == 2 ? 90 * Mth.DEG_TO_RAD : 0); kuaimanji.setRotX(mode == 2 ? 90 * Mth.DEG_TO_RAD : 0);

View file

@ -69,7 +69,7 @@ public class InsidiousItemModel extends GeoModel<InsidiousItem> {
gun.setScaleZ(1f - (0.82f * (float) zp)); gun.setScaleZ(1f - (0.82f * (float) zp));
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 3)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 3));
data.save(); data.save();

View file

@ -69,7 +69,7 @@ public class JavelinItemModel extends GeoModel<JavelinItem> {
javelin.setHidden(gun.getPosZ() > 15.85); javelin.setHidden(gun.getPosZ() > 15.85);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosZ() > 15.85)); tag.putBoolean("HoloHidden", !(gun.getPosZ() > 15.85));
data.save(); data.save();

View file

@ -7,7 +7,6 @@ import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunData; import com.atsuishio.superbwarfare.item.gun.GunData;
import com.atsuishio.superbwarfare.item.gun.sniper.K98Item; import com.atsuishio.superbwarfare.item.gun.sniper.K98Item;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -46,8 +45,8 @@ public class K98ItemModel extends GeoModel<K98Item> {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (NBTTool.getTag(stack).getDouble("prepare") > 11 && GunsTool.getGunIntTag(tag, "Ammo") == 1) { if (tag.getDouble("prepare") > 11 && data.ammo() == 1) {
clip.setScaleX(0); clip.setScaleX(0);
clip.setScaleY(0); clip.setScaleY(0);
clip.setScaleZ(0); clip.setScaleZ(0);
@ -110,7 +109,7 @@ public class K98ItemModel extends GeoModel<K98Item> {
float numR = (float) (1 - 0.52 * zt); float numR = (float) (1 - 0.52 * zt);
float numP = (float) (1 - 0.58 * zt); float numP = (float) (1 - 0.58 * zt);
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0 || data.isReloading()) { if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0 || data.reloading()) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY()); main.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ()); main.setRotZ(numR * main.getRotZ());

View file

@ -106,7 +106,7 @@ public class M1911ItemModel extends GeoModel<M1911Item> {
float numP = (float) (1 - 0.68 * zt); float numP = (float) (1 - 0.68 * zt);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY()); main.setRotY(numR * main.getRotY());

View file

@ -131,7 +131,7 @@ public class M4ItemModel extends GeoModel<M4Item> {
button7.setScaleX(1f - (0.5f * (float) zp)); button7.setScaleX(1f - (0.5f * (float) zp));
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.385)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.385));
data.save(); data.save();

View file

@ -60,8 +60,8 @@ public class M60ItemModel extends GeoModel<M60Item> {
} }
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
int ammo = GunsTool.getGunIntTag(tag, "Ammo"); int ammo = data.ammo();
boolean flag = GunsTool.getGunBooleanTag(tag, "HideBulletChain"); boolean flag = GunsTool.getGunBooleanTag(tag, "HideBulletChain");
if (ammo < 5 && flag) { if (ammo < 5 && flag) {

View file

@ -99,7 +99,7 @@ public class M870ItemModel extends GeoModel<M870Item> {
float numR = (float) (1 - 0.72 * zt); float numR = (float) (1 - 0.72 * zt);
float numP = (float) (1 - 0.82 * zt); float numP = (float) (1 - 0.82 * zt);
if (GunData.from(stack).isReloading()) { if (GunData.from(stack).reloading()) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY()); main.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ()); main.setRotZ(numR * main.getRotZ());

View file

@ -89,7 +89,7 @@ public class M98bItemModel extends GeoModel<M98bItem> {
gun.setRotZ((float) (0.02f * zpz)); gun.setRotZ((float) (0.02f * zpz));
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
data.save(); data.save();

View file

@ -101,7 +101,7 @@ public class MarlinItemModel extends GeoModel<MarlinItem> {
float numR = (float) (1 - 0.55 * zt); float numR = (float) (1 - 0.55 * zt);
float numP = (float) (1 - 0.88 * zt); float numP = (float) (1 - 0.88 * zt);
if (GunData.from(stack).isReloading()) { if (GunData.from(stack).reloading()) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY()); main.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ()); main.setRotZ(numR * main.getRotZ());

View file

@ -140,7 +140,7 @@ public class Mk14ItemModel extends GeoModel<Mk14Item> {
action.setPosZ(2.5f * (float) fp); action.setPosZ(2.5f * (float) fp);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.5)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.5));
data.save(); data.save();

View file

@ -87,7 +87,7 @@ public class MosinNagantItemModel extends GeoModel<MosinNagantItem> {
} }
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.4)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.4));
data.save(); data.save();
@ -125,7 +125,7 @@ public class MosinNagantItemModel extends GeoModel<MosinNagantItem> {
float numR = (float) (1 - 0.97 * zt); float numR = (float) (1 - 0.97 * zt);
float numP = (float) (1 - 0.81 * zt); float numP = (float) (1 - 0.81 * zt);
if (data.isReloading() || GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (data.reloading() || GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY()); main.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ()); main.setRotZ(numR * main.getRotZ());

View file

@ -103,7 +103,7 @@ public class Mp443ItemModel extends GeoModel<Mp443Item> {
float numP = (float) (1 - 0.68 * zt); float numP = (float) (1 - 0.68 * zt);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY()); main.setRotY(numR * main.getRotY());

View file

@ -138,7 +138,7 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
CrossHairOverlay.gunRot = shen.getRotZ(); CrossHairOverlay.gunRot = shen.getRotZ();
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 4.3)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 4.3));
data.save(); data.save();

View file

@ -46,7 +46,7 @@ public class RpgItemModel extends GeoModel<RpgItem> {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (GunsTool.getGunBooleanTag(tag, "CloseHammer")) { if (GunsTool.getGunBooleanTag(tag, "CloseHammer")) {
hammer.setRotX(-90 * Mth.DEG_TO_RAD); hammer.setRotX(-90 * Mth.DEG_TO_RAD);
} }

View file

@ -76,7 +76,7 @@ public class RpkItemModel extends GeoModel<RpkItem> {
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.65)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.65));
data.save(); data.save();

View file

@ -101,7 +101,7 @@ public class SecondaryCataclysmModel extends GeoModel<SecondaryCataclysm> {
float numP = (float) (1 - 0.68 * zt); float numP = (float) (1 - 0.68 * zt);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY()); main.setRotY(numR * main.getRotY());

View file

@ -77,7 +77,7 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
holo.setPosY(0.09f); holo.setPosY(0.09f);
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.4)); tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.4));
data.save(); data.save();
@ -108,8 +108,8 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY)); root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY));
root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ)); root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ));
if (GunsTool.getGunIntTag(tag, "Ammo") <= 5) { if (data.ammo() <= 5) {
ammo.setScaleX((float) GunsTool.getGunIntTag(tag, "Ammo") / 5); ammo.setScaleX((float) data.ammo() / 5);
} }
GeoBone camera = getAnimationProcessor().getBone("camera"); GeoBone camera = getAnimationProcessor().getBone("camera");

View file

@ -69,7 +69,7 @@ public class SksItemModel extends GeoModel<SksItem> {
gun.setRotZ((float) (0.05f * zpz)); gun.setRotZ((float) (0.05f * zpz));
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", gun.getPosX() <= 1.2); tag.putBoolean("HoloHidden", gun.getPosX() <= 1.2);
data.save(); data.save();
GeoBone shen = getAnimationProcessor().getBone("shen"); GeoBone shen = getAnimationProcessor().getBone("shen");

View file

@ -111,7 +111,7 @@ public class SvdItemModel extends GeoModel<SvdItem> {
cross3.setScaleY((float) (1f + (0.1 * zp))); cross3.setScaleY((float) (1f + (0.1 * zp)));
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", gun.getPosX() <= 1.4); tag.putBoolean("HoloHidden", gun.getPosX() <= 1.4);
data.save(); data.save();

View file

@ -154,7 +154,7 @@ public class TracheliumItemModel extends GeoModel<Trachelium> {
CrossHairOverlay.gunRot = shen.getRotZ(); CrossHairOverlay.gunRot = shen.getRotZ();
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("HoloHidden", (gun.getPosX() <= 3 || Mth.abs(shen.getRotX()) > (scopeType == 2 ? 3 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotX()) > (scopeType == 2 ? 5.7 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotY()) > 3 * Mth.DEG_TO_RAD)); tag.putBoolean("HoloHidden", (gun.getPosX() <= 3 || Mth.abs(shen.getRotX()) > (scopeType == 2 ? 3 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotX()) > (scopeType == 2 ? 5.7 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotY()) > 3 * Mth.DEG_TO_RAD));
data.save(); data.save();

View file

@ -56,8 +56,8 @@ public class VectorItemModel extends GeoModel<VectorItem> {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
int mode = GunsTool.getGunIntTag(tag, "FireMode"); int mode = data.fireMode();
if (mode == 0) { if (mode == 0) {
kmj.setRotX(-120 * Mth.DEG_TO_RAD); kmj.setRotX(-120 * Mth.DEG_TO_RAD);
} }

View file

@ -391,7 +391,7 @@ public class AmmoBarOverlay {
} }
private static ResourceLocation getFireMode(GunData data) { private static ResourceLocation getFireMode(GunData data) {
return switch (data.getFireMode()) { return switch (data.fireMode()) {
case 1 -> BURST; case 1 -> BURST;
case 2 -> AUTO; case 2 -> AUTO;
default -> SEMI; default -> SEMI;
@ -400,7 +400,8 @@ public class AmmoBarOverlay {
private static int getGunAmmoCount(Player player) { private static int getGunAmmoCount(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
final var tag = NBTTool.getTag(stack); var data = GunData.from(stack);
var tag = data.tag();
if (stack.getItem() == ModItems.MINIGUN.get()) { if (stack.getItem() == ModItems.MINIGUN.get()) {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
@ -411,7 +412,7 @@ public class AmmoBarOverlay {
return GunsTool.getGunIntTag(tag, "MaxAmmo"); return GunsTool.getGunIntTag(tag, "MaxAmmo");
} }
return GunsTool.getGunIntTag(tag, "Ammo"); return data.ammo();
} }
private static String getPlayerAmmoCount(Player player) { private static String getPlayerAmmoCount(Player player) {

View file

@ -6,8 +6,8 @@ import com.atsuishio.superbwarfare.client.RenderHelper;
import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.item.gun.GunData;
import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import com.atsuishio.superbwarfare.tools.SeekTool; import com.atsuishio.superbwarfare.tools.SeekTool;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
@ -55,9 +55,11 @@ public class JavelinHudOverlay {
if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)) if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player))
return; return;
var tag = NBTTool.getTag(stack);
if ((stack.getItem() == ModItems.JAVELIN.get() && !tag.getBoolean("HoloHidden")) && Minecraft.getInstance().options.getCameraType().isFirstPerson() && ClientEventHandler.zoom) { if ((stack.getItem() == ModItems.JAVELIN.get() && !NBTTool.getTag(stack).getBoolean("HoloHidden")) && Minecraft.getInstance().options.getCameraType().isFirstPerson() && ClientEventHandler.zoom) {
var data = GunData.from(stack);
var tag = data.tag();
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
RenderSystem.depthMask(false); RenderSystem.depthMask(false);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
@ -78,7 +80,7 @@ public class JavelinHudOverlay {
float j1 = l + j; float j1 = l + j;
preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/javelin_hud.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/javelin_hud.png"), k, l, 0, 0.0F, i, j, i, j);
preciseBlit(event.getGuiGraphics(), Mod.loc(tag.getBoolean("TopMode") ? "textures/screens/javelin/top.png" : "textures/screens/javelin/dir.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), Mod.loc(tag.getBoolean("TopMode") ? "textures/screens/javelin/top.png" : "textures/screens/javelin/dir.png"), k, l, 0, 0.0F, i, j, i, j);
preciseBlit(event.getGuiGraphics(), Mod.loc(GunsTool.getGunIntTag(tag, "Ammo") > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), Mod.loc(data.ammo() > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j);
if (tag.getInt("SeekTime") > 1 && tag.getInt("SeekTime") < 20) { if (tag.getInt("SeekTime") > 1 && tag.getInt("SeekTime") < 20) {
preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/seek.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), Mod.loc("textures/screens/javelin/seek.png"), k, l, 0, 0.0F, i, j, i, j);
} }

View file

@ -127,8 +127,8 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
* 获取武器等级文本组件 * 获取武器等级文本组件
*/ */
protected Component getLevelComponent() { protected Component getLevelComponent() {
int level = data.getLevel(); int level = data.level();
double rate = data.getExp() / (20 * Math.pow(level, 2) + 160 * level + 20); double rate = data.exp() / (20 * Math.pow(level, 2) + 160 * level + 20);
ChatFormatting formatting; ChatFormatting formatting;
if (level < 10) { if (level < 10) {
@ -154,7 +154,7 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
* 获取武器强化点数文本组件 * 获取武器强化点数文本组件
*/ */
protected Component getUpgradePointComponent() { protected Component getUpgradePointComponent() {
int upgradePoint = Mth.floor(data.getUpgradePoint()); int upgradePoint = Mth.floor(data.upgradePoint());
return Component.translatable("des.superbwarfare.guns.upgrade_point").withStyle(ChatFormatting.GRAY) return Component.translatable("des.superbwarfare.guns.upgrade_point").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))
.append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.WHITE).withStyle(ChatFormatting.BOLD)); .append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.WHITE).withStyle(ChatFormatting.BOLD));

View file

@ -19,7 +19,7 @@ public class ClientSentinelImageTooltip extends ClientEnergyImageTooltip {
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM); var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
if (cap != null && cap.getEnergyStored() > 0) { if (cap != null && cap.getEnergyStored() > 0) {
double damage = (data.damage() + GunsTool.getGunDoubleTag(data.getTag(), "ChargedDamage")) double damage = (data.damage() + GunsTool.getGunDoubleTag(data.tag(), "ChargedDamage"))
* TooltipTool.perkDamage(stack); * TooltipTool.perkDamage(stack);
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY) return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal("").withStyle(ChatFormatting.RESET))

View file

@ -312,7 +312,7 @@ public class ClientEventHandler {
&& !notInGame() && !notInGame()
&& cap != null && !cap.edit && cap != null && !cap.edit
&& !(data.normalReloading() || data.emptyReloading()) && !(data.normalReloading() || data.emptyReloading())
&& !data.isReloading() && !data.reloading()
&& !player.getCooldowns().isOnCooldown(stack.getItem()) && !player.getCooldowns().isOnCooldown(stack.getItem())
&& !GunsTool.getGunBooleanTag(tag, "Charging")) { && !GunsTool.getGunBooleanTag(tag, "Charging")) {
gunMelee = 36; gunMelee = 36;
@ -392,10 +392,10 @@ public class ClientEventHandler {
return; return;
} }
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
int mode = data.getFireMode(); int mode = data.fireMode();
// 精准度 // 精准度
float times = (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); float times = (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
@ -473,9 +473,9 @@ public class ClientEventHandler {
&& cap != null && !cap.edit && cap != null && !cap.edit
&& !notInGame() && !notInGame()
&& (!(data.normalReloading() || data.emptyReloading()) && (!(data.normalReloading() || data.emptyReloading())
&& !data.isReloading() && !data.reloading()
&& !GunsTool.getGunBooleanTag(tag, "Charging") && !GunsTool.getGunBooleanTag(tag, "Charging")
&& data.getAmmo() > 0 && data.ammo() > 0
&& !player.getCooldowns().isOnCooldown(stack.getItem()) && !player.getCooldowns().isOnCooldown(stack.getItem())
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction") && !GunsTool.getGunBooleanTag(tag, "NeedBoltAction")
&& revolverPre(tag)) && revolverPre(tag))
@ -552,14 +552,14 @@ public class ClientEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack); var data = GunData.from(stack);
if (stack.is(ModTags.Items.NORMAL_GUN)) { if (stack.is(ModTags.Items.NORMAL_GUN)) {
if (data.getAmmo() > 0) { if (data.ammo() > 0) {
int mode = data.getFireMode(); int mode = data.fireMode();
if (mode != 2) { if (mode != 2) {
holdFire = false; holdFire = false;
} }
if (mode == 1) { if (mode == 1) {
if (data.getAmmo() == 1) { if (data.ammo() == 1) {
burstFireAmount = 1; burstFireAmount = 1;
} }
if (burstFireAmount == 1) { if (burstFireAmount == 1) {
@ -585,7 +585,7 @@ public class ClientEventHandler {
} }
// 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态 // 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态
if (data.boltActionTime() > 0 && data.getAmmo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) { if (data.boltActionTime() > 0 && data.ammo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true); GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true);
} }
@ -1066,7 +1066,7 @@ public class ClientEventHandler {
if (!(entity instanceof Player player)) return; if (!(entity instanceof Player player)) return;
var stack = player.getMainHandItem(); var stack = player.getMainHandItem();
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
float times = 5 * Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(); float times = 5 * Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
double weight = data.weight(); double weight = data.weight();

View file

@ -65,8 +65,8 @@ public class GunEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(ModTags.Items.NORMAL_GUN)) { if (stack.is(ModTags.Items.NORMAL_GUN)) {
var tag = gunData.getTag(); var tag = gunData.tag();
var data = gunData.getData(); var data = gunData.data();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
data.putInt("BoltActionTick", GunsTool.getGunIntTag(tag, "BoltActionTick") - 1); data.putInt("BoltActionTick", GunsTool.getGunIntTag(tag, "BoltActionTick") - 1);
@ -92,7 +92,7 @@ public class GunEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (!player.level().isClientSide) { if (!player.level().isClientSide) {
String origin = stack.getItem().getDescriptionId(); String origin = stack.getItem().getDescriptionId();
@ -321,15 +321,15 @@ public class GunEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!(stack.getItem() instanceof GunItem gunItem)) return; if (!(stack.getItem() instanceof GunItem gunItem)) return;
var tag = gunData.getTag(); var tag = gunData.tag();
var data = gunData.getData(); var data = gunData.data();
// 启动换弹 // 启动换弹
if (GunsTool.getGunBooleanTag(tag, "StartReload")) { if (GunsTool.getGunBooleanTag(tag, "StartReload")) {
NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack)); NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
if (gunItem.isOpenBolt(stack)) { if (gunItem.isOpenBolt(stack)) {
if (gunData.getAmmo() == 0) { if (gunData.ammo() == 0) {
data.putInt("ReloadTime", gunData.emptyReloadTime() + 1); data.putInt("ReloadTime", gunData.emptyReloadTime() + 1);
gunData.setReloadState(GunData.ReloadState.EMPTY_RELOADING); gunData.setReloadState(GunData.ReloadState.EMPTY_RELOADING);
playGunEmptyReloadSounds(player); playGunEmptyReloadSounds(player);
@ -391,7 +391,7 @@ public class GunEventHandler {
if (data.getInt("ReloadTime") == 1) { if (data.getInt("ReloadTime") == 1) {
if (gunItem.isOpenBolt(stack)) { if (gunItem.isOpenBolt(stack)) {
if (gunData.getAmmo() == 0) { if (gunData.ammo() == 0) {
playGunEmptyReload(player, gunData); playGunEmptyReload(player, gunData);
} else { } else {
playGunNormalReload(player, gunData); playGunNormalReload(player, gunData);
@ -404,8 +404,8 @@ public class GunEventHandler {
} }
public static void playGunNormalReload(Player player, GunData gunData) { public static void playGunNormalReload(Player player, GunData gunData) {
var stack = gunData.getStack(); var stack = gunData.stack();
var gunItem = gunData.getItem(); var gunItem = gunData.item();
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
gunData.setAmmo(gunData.magazine() + (gunItem.hasBulletInBarrel(stack) ? 1 : 0)); gunData.setAmmo(gunData.magazine() + (gunItem.hasBulletInBarrel(stack) ? 1 : 0));
@ -427,7 +427,7 @@ public class GunEventHandler {
} }
public static void playGunEmptyReload(Player player, GunData gunData) { public static void playGunEmptyReload(Player player, GunData gunData) {
ItemStack stack = gunData.getStack(); ItemStack stack = gunData.stack();
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
gunData.setAmmo(gunData.magazine()); gunData.setAmmo(gunData.magazine());
@ -502,7 +502,7 @@ public class GunEventHandler {
private static void handleGunSingleReload(Player player, GunData gunData) { private static void handleGunSingleReload(Player player, GunData gunData) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!(stack.getItem() instanceof GunItem)) return; if (!(stack.getItem() instanceof GunItem)) return;
var tag = gunData.getTag(); var tag = gunData.tag();
// 换弹流程计时器 // 换弹流程计时器
if (tag.getDouble("prepare") > 0) { if (tag.getDouble("prepare") > 0) {
@ -529,13 +529,13 @@ public class GunEventHandler {
if (tag.getBoolean("start_single_reload")) { if (tag.getBoolean("start_single_reload")) {
NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack)); NeoForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
if ((gunData.prepareLoadTime() != 0 && gunData.getAmmo() == 0) || stack.is(ModItems.SECONDARY_CATACLYSM.get())) { if ((gunData.prepareLoadTime() != 0 && gunData.ammo() == 0) || stack.is(ModItems.SECONDARY_CATACLYSM.get())) {
// 此处判断空仓换弹的时候是否在准备阶段就需要装填一发如M870 // 此处判断空仓换弹的时候是否在准备阶段就需要装填一发如M870
playGunPrepareLoadReloadSounds(player); playGunPrepareLoadReloadSounds(player);
int prepareLoadTime = gunData.prepareLoadTime(); int prepareLoadTime = gunData.prepareLoadTime();
tag.putInt("prepare_load", prepareLoadTime + 1); tag.putInt("prepare_load", prepareLoadTime + 1);
player.getCooldowns().addCooldown(stack.getItem(), prepareLoadTime); player.getCooldowns().addCooldown(stack.getItem(), prepareLoadTime);
} else if (gunData.prepareEmptyTime() != 0 && gunData.getAmmo() == 0) { } else if (gunData.prepareEmptyTime() != 0 && gunData.ammo() == 0) {
// 此处判断空仓换弹如莫辛纳甘 // 此处判断空仓换弹如莫辛纳甘
playGunEmptyPrepareSounds(player); playGunEmptyPrepareSounds(player);
int prepareEmptyTime = gunData.prepareEmptyTime(); int prepareEmptyTime = gunData.prepareEmptyTime();
@ -581,13 +581,13 @@ public class GunEventHandler {
tag.putBoolean("force_stage3_start", true); tag.putBoolean("force_stage3_start", true);
} else if (stack.is(ModTags.Items.LAUNCHER) && GunsTool.getGunIntTag(tag, "MaxAmmo") == 0) { } else if (stack.is(ModTags.Items.LAUNCHER) && GunsTool.getGunIntTag(tag, "MaxAmmo") == 0) {
tag.putBoolean("force_stage3_start", true); tag.putBoolean("force_stage3_start", true);
} else if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.getAmmo() >= gunData.magazine()) { } else if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.ammo() >= gunData.magazine()) {
tag.putBoolean("force_stage3_start", true); tag.putBoolean("force_stage3_start", true);
} else { } else {
gunData.setReloadStage(2); gunData.setReloadStage(2);
} }
} else { } else {
if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.getAmmo() >= gunData.magazine()) { if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.ammo() >= gunData.magazine()) {
tag.putBoolean("force_stage3_start", true); tag.putBoolean("force_stage3_start", true);
} else { } else {
gunData.setReloadStage(2); gunData.setReloadStage(2);
@ -606,7 +606,7 @@ public class GunEventHandler {
&& gunData.getReloadStage() == 2 && gunData.getReloadStage() == 2
&& tag.getInt("iterative") == 0 && tag.getInt("iterative") == 0
&& !tag.getBoolean("stop") && !tag.getBoolean("stop")
&& gunData.getAmmo() < gunData.magazine() && gunData.ammo() < gunData.magazine()
) { ) {
playGunLoopReloadSounds(player); playGunLoopReloadSounds(player);
@ -643,7 +643,7 @@ public class GunEventHandler {
// 二阶段结束 // 二阶段结束
if (tag.getInt("iterative") == 1) { if (tag.getInt("iterative") == 1) {
// 装满结束 // 装满结束
if (gunData.getAmmo() >= gunData.magazine()) { if (gunData.ammo() >= gunData.magazine()) {
gunData.setReloadStage(3); gunData.setReloadStage(3);
} }
@ -701,7 +701,7 @@ public class GunEventHandler {
} }
public static void singleLoad(Player player, GunData data) { public static void singleLoad(Player player, GunData data) {
data.setAmmo(data.getAmmo() + 1); data.setAmmo(data.ammo() + 1);
if (!InventoryTool.hasCreativeAmmoBox(player)) { if (!InventoryTool.hasCreativeAmmoBox(player)) {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
@ -842,8 +842,8 @@ public class GunEventHandler {
*/ */
private static void handleSentinelCharge(Player player, GunData gunData) { private static void handleSentinelCharge(Player player, GunData gunData) {
if (!(player.getMainHandItem().getItem() instanceof GunItem)) return; if (!(player.getMainHandItem().getItem() instanceof GunItem)) return;
var tag = gunData.getTag(); var tag = gunData.tag();
final var data = gunData.getData(); final var data = gunData.data();
// 启动换弹 // 启动换弹
if (GunsTool.getGunBooleanTag(tag, "StartCharge")) { if (GunsTool.getGunBooleanTag(tag, "StartCharge")) {

View file

@ -217,14 +217,14 @@ public class LivingEventHandler {
// 先处理发射器类武器或高爆弹的爆炸伤害 // 先处理发射器类武器或高爆弹的爆炸伤害
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) { if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) { if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) {
data.setExp(data.getExp() + amount); data.setExp(data.exp() + amount);
} }
} }
// 再判断是不是枪械能造成的伤害 // 再判断是不是枪械能造成的伤害
if (!DamageTypeTool.isGunDamage(source)) return; if (!DamageTypeTool.isGunDamage(source)) return;
data.setExp(data.getExp() + amount); data.setExp(data.exp() + amount);
data.save(); data.save();
} }
@ -243,27 +243,27 @@ public class LivingEventHandler {
// 先处理发射器类武器或高爆弹的爆炸伤害 // 先处理发射器类武器或高爆弹的爆炸伤害
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) { if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) { if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), tag) > 0) {
data.setExp(data.getExp() + amount); data.setExp(data.exp() + amount);
} }
} }
// 再判断是不是枪械能造成的伤害 // 再判断是不是枪械能造成的伤害
if (DamageTypeTool.isGunDamage(source)) { if (DamageTypeTool.isGunDamage(source)) {
data.setExp(data.getExp() + amount); data.setExp(data.exp() + amount);
} }
// 提升武器等级 // 提升武器等级
int level = data.getLevel(); int level = data.level();
double exp = data.getExp(); double exp = data.exp();
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20; double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
while (exp >= upgradeExpNeeded) { while (exp >= upgradeExpNeeded) {
exp -= upgradeExpNeeded; exp -= upgradeExpNeeded;
level = data.getLevel() + 1; level = data.level() + 1;
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20; upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
data.setExp(exp); data.setExp(exp);
data.setLevel(level); data.setLevel(level);
data.setUpgradePoint(data.getUpgradePoint() + 0.5); data.setUpgradePoint(data.upgradePoint() + 0.5);
} }
data.save(); data.save();
} }
@ -277,17 +277,17 @@ public class LivingEventHandler {
if (event.getEntity() instanceof TargetEntity) return; if (event.getEntity() instanceof TargetEntity) return;
var data = GunData.from(stack); var data = GunData.from(stack);
int level = data.getLevel(); int level = data.level();
double exp = data.getExp(); double exp = data.exp();
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20; double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
while (exp >= upgradeExpNeeded) { while (exp >= upgradeExpNeeded) {
exp -= upgradeExpNeeded; exp -= upgradeExpNeeded;
level = data.getLevel() + 1; level = data.level() + 1;
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20; upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
data.setExp(exp); data.setExp(exp);
data.setLevel(level); data.setLevel(level);
data.setUpgradePoint(data.getUpgradePoint() + 0.5); data.setUpgradePoint(data.upgradePoint() + 0.5);
} }
data.save(); data.save();
} }
@ -357,8 +357,8 @@ public class LivingEventHandler {
stopGunReloadSound(serverPlayer, oldGun); stopGunReloadSound(serverPlayer, oldGun);
var oldData = GunData.from(oldStack); var oldData = GunData.from(oldStack);
oldTag = oldData.getTag(); oldTag = oldData.tag();
var data = oldData.getData(); var data = oldData.data();
if (oldData.boltActionTime() > 0) { if (oldData.boltActionTime() > 0) {
data.putInt("BoltActionTick", 0); data.putInt("BoltActionTick", 0);
@ -395,7 +395,7 @@ public class LivingEventHandler {
if (newStack.getItem() instanceof GunItem) { if (newStack.getItem() instanceof GunItem) {
var newData = GunData.from(newStack); var newData = GunData.from(newStack);
newTag = newData.getTag(); newTag = newData.tag();
player.getPersistentData().putDouble("noRun", 40); player.getPersistentData().putDouble("noRun", 40);
newTag.putBoolean("draw", true); newTag.putBoolean("draw", true);
@ -577,7 +577,7 @@ public class LivingEventHandler {
private static void handleClipPerks(ItemStack stack) { private static void handleClipPerks(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag); int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag);
if (healClipLevel != 0) { if (healClipLevel != 0) {
GunsTool.setPerkIntTag(tag, "HealClipTime", 80 + healClipLevel * 20); GunsTool.setPerkIntTag(tag, "HealClipTime", 80 + healClipLevel * 20);
@ -592,7 +592,7 @@ public class LivingEventHandler {
private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (GunsTool.getPerkIntTag(tag, "KillClipTime") > 0) { if (GunsTool.getPerkIntTag(tag, "KillClipTime") > 0) {
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
if (level == 0) { if (level == 0) {
@ -605,7 +605,7 @@ public class LivingEventHandler {
private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -614,7 +614,7 @@ public class LivingEventHandler {
private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -628,7 +628,7 @@ public class LivingEventHandler {
private static void handleKillingTallyAddCount(ItemStack stack) { private static void handleKillingTallyAddCount(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
if (level != 0) { if (level != 0) {
GunsTool.setPerkIntTag(tag, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(tag, "KillingTally") + 1)); GunsTool.setPerkIntTag(tag, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(tag, "KillingTally") + 1));
@ -638,7 +638,7 @@ public class LivingEventHandler {
private static void handleFourthTimesCharm(ItemStack stack) { private static void handleFourthTimesCharm(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -657,7 +657,7 @@ public class LivingEventHandler {
private static void handleSubsistence(ItemStack stack, Player player) { private static void handleSubsistence(ItemStack stack, Player player) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -667,7 +667,7 @@ public class LivingEventHandler {
if (cap == null) return; if (cap == null) return;
int mag = data.magazine(); int mag = data.magazine();
int ammo = data.getAmmo(); int ammo = data.ammo();
int ammoReload = (int) Math.min(mag, mag * rate); int ammoReload = (int) Math.min(mag, mag * rate);
int ammoNeed = Math.min(mag - ammo, ammoReload); int ammoNeed = Math.min(mag - ammo, ammoReload);
@ -697,7 +697,7 @@ public class LivingEventHandler {
private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) { private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -709,7 +709,7 @@ public class LivingEventHandler {
private static void handleHeadSeekerTime(ItemStack stack) { private static void handleHeadSeekerTime(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -719,7 +719,7 @@ public class LivingEventHandler {
private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) { private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -730,7 +730,7 @@ public class LivingEventHandler {
private static void handleDesperado(ItemStack stack) { private static void handleDesperado(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag);
if (level == 0) return; if (level == 0) return;

View file

@ -7,6 +7,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunData; import com.atsuishio.superbwarfare.item.gun.GunData;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.tools.*; import com.atsuishio.superbwarfare.tools.*;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -29,16 +30,16 @@ public class PlayerEventHandler {
@SubscribeEvent @SubscribeEvent
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
Player player = event.getEntity(); Player player = event.getEntity();
ItemStack stack = player.getMainHandItem(); ItemStack mainStack = player.getMainHandItem();
var tag = NBTTool.getTag(stack); var tag = NBTTool.getTag(mainStack);
if (stack.is(ModItems.MONITOR.get()) && tag.getBoolean("Using")) { if (mainStack.is(ModItems.MONITOR.get()) && tag.getBoolean("Using")) {
tag.putBoolean("Using", false); tag.putBoolean("Using", false);
NBTTool.saveTag(stack, tag); NBTTool.saveTag(mainStack, tag);
} }
for (ItemStack pStack : player.getInventory().items) { for (ItemStack stack : player.getInventory().items) {
if (pStack.is(ModTags.Items.GUN)) { if (stack.getItem() instanceof GunItem) {
var data = GunData.from(stack); var data = GunData.from(stack);
tag = data.getTag(); tag = data.tag();
tag.putBoolean("draw", true); tag.putBoolean("draw", true);
@ -65,7 +66,7 @@ public class PlayerEventHandler {
for (ItemStack stack : player.getInventory().items) { for (ItemStack stack : player.getInventory().items) {
if (stack.is(ModTags.Items.GUN)) { if (stack.is(ModTags.Items.GUN)) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
tag.putBoolean("draw", true); tag.putBoolean("draw", true);
@ -203,9 +204,9 @@ public class PlayerEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if ((stack.is(ModItems.RPG.get()) || stack.is(ModItems.BOCEK.get())) && data.getAmmo() == 1) { if ((stack.is(ModItems.RPG.get()) || stack.is(ModItems.BOCEK.get())) && data.ammo() == 1) {
tag.putDouble("empty", 0); tag.putDouble("empty", 0);
data.save(); data.save();
} }
@ -218,7 +219,7 @@ public class PlayerEventHandler {
if (cap == null) return; if (cap == null) return;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (cap.bowPullHold) { if (cap.bowPullHold) {
if (stack.getItem() == ModItems.BOCEK.get() if (stack.getItem() == ModItems.BOCEK.get()
@ -273,7 +274,7 @@ public class PlayerEventHandler {
for (ItemStack stack : player.getInventory().items) { for (ItemStack stack : player.getInventory().items) {
if (stack.is(ModTags.Items.GUN)) { if (stack.is(ModTags.Items.GUN)) {
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (!InventoryTool.hasCreativeAmmoBox(player)) { if (!InventoryTool.hasCreativeAmmoBox(player)) {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
@ -295,19 +296,19 @@ public class PlayerEventHandler {
GunsTool.reload(player, stack, data, AmmoType.HEAVY); GunsTool.reload(player, stack, data, AmmoType.HEAVY);
} }
if (stack.getItem() == ModItems.TASER.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) { if (stack.getItem() == ModItems.TASER.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
data.setAmmo(1); data.setAmmo(1);
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots()); player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots());
} }
if (stack.getItem() == ModItems.M_79.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) { if (stack.getItem() == ModItems.M_79.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
data.setAmmo(1); data.setAmmo(1);
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots()); player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots());
} }
if (stack.getItem() == ModItems.RPG.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) { if (stack.getItem() == ModItems.RPG.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
data.setAmmo(1); data.setAmmo(1);
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots()); player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots());
} }
if (stack.getItem() == ModItems.JAVELIN.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && GunsTool.getGunIntTag(tag, "Ammo") == 0) { if (stack.getItem() == ModItems.JAVELIN.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 && data.ammo() == 0) {
data.setAmmo(1); data.setAmmo(1);
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots()); player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots());
} }
@ -364,7 +365,7 @@ public class PlayerEventHandler {
ItemStack output = left.copy(); ItemStack output = left.copy();
var data = GunData.from(output); var data = GunData.from(output);
data.setUpgradePoint(data.getUpgradePoint() + 1); data.setUpgradePoint(data.upgradePoint() + 1);
data.save(); data.save();
event.setOutput(output); event.setOutput(output);

View file

@ -50,7 +50,7 @@ public class ReloadEventHandler {
private static void handleHealClipPre(ItemStack stack) { private static void handleHealClipPre(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int time = GunsTool.getPerkIntTag(tag, "HealClipTime"); int time = GunsTool.getPerkIntTag(tag, "HealClipTime");
if (time > 0) { if (time > 0) {
GunsTool.setPerkIntTag(tag, "HealClipTime", 0); GunsTool.setPerkIntTag(tag, "HealClipTime", 0);
@ -63,7 +63,7 @@ public class ReloadEventHandler {
private static void handleHealClipPost(Player player, ItemStack stack) { private static void handleHealClipPost(Player player, ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (!GunsTool.getPerkBooleanTag(tag, "HealClip")) return; if (!GunsTool.getPerkBooleanTag(tag, "HealClip")) return;
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag); int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag);
@ -80,7 +80,7 @@ public class ReloadEventHandler {
private static void handleKillClipPre(ItemStack stack) { private static void handleKillClipPre(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int time = GunsTool.getPerkIntTag(tag, "KillClipReloadTime"); int time = GunsTool.getPerkIntTag(tag, "KillClipReloadTime");
if (time > 0) { if (time > 0) {
GunsTool.setPerkIntTag(tag, "KillClipReloadTime", 0); GunsTool.setPerkIntTag(tag, "KillClipReloadTime", 0);
@ -93,7 +93,7 @@ public class ReloadEventHandler {
private static void handleKillClipPost(ItemStack stack) { private static void handleKillClipPost(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (!GunsTool.getPerkBooleanTag(tag, "KillClip")) return; if (!GunsTool.getPerkBooleanTag(tag, "KillClip")) return;
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
@ -103,7 +103,7 @@ public class ReloadEventHandler {
private static void handleKillingTallyPre(ItemStack stack) { private static void handleKillingTallyPre(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
if (level == 0) return; if (level == 0) return;
@ -113,7 +113,7 @@ public class ReloadEventHandler {
private static void handleDesperadoPre(ItemStack stack) { private static void handleDesperadoPre(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
int time = GunsTool.getPerkIntTag(tag, "DesperadoTime"); int time = GunsTool.getPerkIntTag(tag, "DesperadoTime");
if (time > 0) { if (time > 0) {
GunsTool.setPerkIntTag(tag, "DesperadoTime", 0); GunsTool.setPerkIntTag(tag, "DesperadoTime", 0);
@ -126,7 +126,7 @@ public class ReloadEventHandler {
private static void handleDesperadoPost(ItemStack stack) { private static void handleDesperadoPost(ItemStack stack) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (!GunsTool.getPerkBooleanTag(tag, "Desperado")) return; if (!GunsTool.getPerkBooleanTag(tag, "Desperado")) return;
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag); int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag);

View file

@ -8,29 +8,19 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.component.CustomData;
import java.util.HashMap; import java.util.HashMap;
import java.util.UUID;
import java.util.WeakHashMap; import java.util.WeakHashMap;
public class GunData { public class GunData {
private final ItemStack stack; private final ItemStack stack;
private final GunItem item; private final GunItem item;
private CompoundTag tag; private final CompoundTag tag;
private CompoundTag data; private final CompoundTag data;
private final CompoundTag perk;
private final String id; private final String id;
private static final WeakHashMap<ItemStack, GunData> dataCache = new WeakHashMap<>(); private static final WeakHashMap<ItemStack, GunData> dataCache = new WeakHashMap<>();
private void loadTags() {
var customData = stack.get(DataComponents.CUSTOM_DATA);
this.tag = customData != null ? customData.copyTag() : new CompoundTag();
if (!tag.contains("GunData")) {
data = new CompoundTag();
tag.put("GunData", data);
} else {
data = tag.getCompound("GunData");
}
}
private GunData(ItemStack stack) { private GunData(ItemStack stack) {
if (!(stack.getItem() instanceof GunItem gunItem)) { if (!(stack.getItem() instanceof GunItem gunItem)) {
throw new IllegalArgumentException("stack is not GunItem!"); throw new IllegalArgumentException("stack is not GunItem!");
@ -39,7 +29,34 @@ public class GunData {
this.stack = stack; this.stack = stack;
var id = stack.getDescriptionId(); var id = stack.getDescriptionId();
this.id = id.substring(id.lastIndexOf(".") + 1); this.id = id.substring(id.lastIndexOf(".") + 1);
loadTags();
var customData = stack.get(DataComponents.CUSTOM_DATA);
this.tag = customData != null ? customData.copyTag() : new CompoundTag();
if (!tag.contains("GunData")) {
data = new CompoundTag();
tag.put("GunData", data);
} else {
data = tag.getCompound("GunData");
}
if (!tag.contains("PerkData")) {
perk = new CompoundTag();
tag.put("PerkData", perk);
} else {
perk = tag.getCompound("PerkData");
}
}
public boolean initialized() {
return data.hasUUID("UUID");
}
public void initialize() {
if (initialized()) return;
data.putUUID("UUID", UUID.randomUUID());
save();
} }
public static GunData from(ItemStack stack) { public static GunData from(ItemStack stack) {
@ -49,22 +66,26 @@ public class GunData {
return dataCache.get(stack); return dataCache.get(stack);
} }
public GunItem getItem() { public GunItem item() {
return item; return item;
} }
public ItemStack getStack() { public ItemStack stack() {
return stack; return stack;
} }
public CompoundTag getTag() { public CompoundTag tag() {
return tag; return tag;
} }
public CompoundTag getData() { public CompoundTag data() {
return data; return data;
} }
public CompoundTag perk() {
return perk;
}
private double getGunData(String key) { private double getGunData(String key) {
return getGunData(key, 0); return getGunData(key, 0);
} }
@ -144,7 +165,7 @@ public class GunData {
if (normalReload == 0) return emptyReload; if (normalReload == 0) return emptyReload;
if (emptyReload == 0) return normalReload; if (emptyReload == 0) return normalReload;
return getAmmo() < magazine() ? normalReload : emptyReload; return ammo() < magazine() ? normalReload : emptyReload;
} }
public double soundRadius() { public double soundRadius() {
@ -171,7 +192,7 @@ public class GunData {
return item.getCustomWeight(stack); return item.getCustomWeight(stack);
} }
public int getAmmo() { public int ammo() {
return data.getInt("Ammo"); return data.getInt("Ammo");
} }
@ -179,7 +200,7 @@ public class GunData {
data.putInt("Ammo", ammo); data.putInt("Ammo", ammo);
} }
public boolean isReloading() { public boolean reloading() {
return getReloadState() != ReloadState.NOT_RELOADING; return getReloadState() != ReloadState.NOT_RELOADING;
} }
@ -209,7 +230,7 @@ public class GunData {
return (int) getGunData("BurstAmount"); return (int) getGunData("BurstAmount");
} }
public int getFireMode() { public int fireMode() {
if (data.contains("FireMode")) { if (data.contains("FireMode")) {
return data.getInt("FireMode"); return data.getInt("FireMode");
} }
@ -220,7 +241,7 @@ public class GunData {
data.putInt("FireMode", fireMode); data.putInt("FireMode", fireMode);
} }
public int getLevel() { public int level() {
return data.getInt("Level"); return data.getInt("Level");
} }
@ -228,7 +249,7 @@ public class GunData {
data.putInt("Level", level); data.putInt("Level", level);
} }
public double getExp() { public double exp() {
return data.getDouble("Exp"); return data.getDouble("Exp");
} }
@ -236,7 +257,7 @@ public class GunData {
data.putDouble("Exp", exp); data.putDouble("Exp", exp);
} }
public double getUpgradePoint() { public double upgradePoint() {
return data.getDouble("UpgradePoint"); return data.getDouble("UpgradePoint");
} }

View file

@ -13,7 +13,7 @@ public class GunEvents {
var stack = event.getItemEntity().getItem(); var stack = event.getItemEntity().getItem();
if (stack.is(ModTags.Items.GUN)) { if (stack.is(ModTags.Items.GUN)) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
tag.putBoolean("draw", true); tag.putBoolean("draw", true);
data.save(); data.save();
} }

View file

@ -66,29 +66,19 @@ public abstract class GunItem extends Item implements CustomRendererItem {
) return; ) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (tag.getString("id").isEmpty()) {
var id = stack.getDescriptionId();
tag.putString("id", id.substring(id.lastIndexOf(".") + 1));
}
if (!tag.getBoolean("init")) {
var name = this.getDescriptionId().substring(this.getDescriptionId().lastIndexOf('.') + 1);
if (!data.initialized()) {
data.initialize();
if (level.getServer() != null && entity instanceof Player player && player.isCreative()) { if (level.getServer() != null && entity instanceof Player player && player.isCreative()) {
GunsTool.initCreativeGun(stack, name); data.setAmmo(data.magazine());
} else {
GunsTool.initGun(tag, name);
} }
GunsTool.generateAndSetUUID(tag);
tag.putBoolean("init", true);
} }
tag.putBoolean("draw", false); tag.putBoolean("draw", false);
handleGunPerks(data); handleGunPerks(data);
var hasBulletInBarrel = gunItem.hasBulletInBarrel(stack); var hasBulletInBarrel = gunItem.hasBulletInBarrel(stack);
var ammoCount = data.getAmmo(); var ammoCount = data.ammo();
var magazine = data.magazine(); var magazine = data.magazine();
if ((hasBulletInBarrel && ammoCount > magazine + 1) || (!hasBulletInBarrel && ammoCount > magazine)) { if ((hasBulletInBarrel && ammoCount > magazine + 1) || (!hasBulletInBarrel && ammoCount > magazine)) {
@ -109,7 +99,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
} }
capability.syncPlayerVariables(entity); capability.syncPlayerVariables(entity);
} }
GunsTool.setGunIntTag(tag, "Ammo", magazine + (hasBulletInBarrel ? 1 : 0)); data.setAmmo(magazine + (hasBulletInBarrel ? 1 : 0));
} }
data.save(); data.save();
} }
@ -174,7 +164,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
private void handleGunPerks(GunData data) { private void handleGunPerks(GunData data) {
var tag = data.getTag(); var tag = data.tag();
reducePerkTagCoolDown(tag, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker", reducePerkTagCoolDown(tag, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker",
"DesperadoTime", "DesperadoTimePost"); "DesperadoTime", "DesperadoTimePost");
@ -186,7 +176,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
GunsTool.setPerkIntTag(tag, "FourthTimesCharmCount", 0); GunsTool.setPerkIntTag(tag, "FourthTimesCharmCount", 0);
int mag = data.magazine(); int mag = data.magazine();
GunsTool.setGunIntTag(tag, "Ammo", Math.min(mag, GunsTool.getGunIntTag(tag, "Ammo") + 2)); data.setAmmo(Math.min(mag, data.ammo() + 2));
} }
} }
} }
@ -407,7 +397,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
* 获取额外总重量加成 * 获取额外总重量加成
*/ */
public double getCustomWeight(ItemStack stack) { public double getCustomWeight(ItemStack stack) {
CompoundTag tag = GunData.from(stack).getTag().getCompound("Attachments"); CompoundTag tag = GunData.from(stack).tag().getCompound("Attachments");
double scopeWeight = switch (tag.getInt("Scope")) { double scopeWeight = switch (tag.getInt("Scope")) {
case 1 -> 0.5; case 1 -> 0.5;
@ -454,7 +444,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
* 获取额外音效半径加成 * 获取额外音效半径加成
*/ */
public double getCustomSoundRadius(ItemStack stack) { public double getCustomSoundRadius(ItemStack stack) {
return GunData.from(stack).getTag().getCompound("Attachments").getInt("Barrel") == 2 ? 0.6 : 1; return GunData.from(stack).tag().getCompound("Attachments").getInt("Barrel") == 2 ? 0.6 : 1;
} }
public int getCustomBoltActionTime(ItemStack stack) { public int getCustomBoltActionTime(ItemStack stack) {

View file

@ -106,7 +106,7 @@ public class Trachelium extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean stock = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK) == 2; boolean stock = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK) == 2;
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) > 0 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE) > 0; boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) > 0 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE) > 0;
@ -237,10 +237,8 @@ public class Trachelium extends GunItem implements GeoItem {
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
final var tag = NBTTool.getTag(stack); final var tag = NBTTool.getTag(stack);
GunsTool.setGunIntTag(tag, "BoltActionTime", tag.getBoolean("DA") ? 12 : 0);
int scopeType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE); int scopeType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE);
int gripType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP);
int stockType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK); int stockType = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.STOCK);
CompoundTag tags = tag.getCompound("Attachments"); CompoundTag tags = tag.getCompound("Attachments");
@ -255,7 +253,7 @@ public class Trachelium extends GunItem implements GeoItem {
@Override @Override
public int getCustomBoltActionTime(ItemStack stack) { public int getCustomBoltActionTime(ItemStack stack) {
return GunData.from(stack).getTag().getBoolean("DA") ? 12 : 0; return GunData.from(stack).tag().getBoolean("DA") ? 12 : 0;
} }
@Override @Override

View file

@ -57,7 +57,7 @@ public class Ntw20Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift"));
@ -80,7 +80,7 @@ public class Ntw20Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (player.isSprinting() && player.onGround() if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0

View file

@ -134,7 +134,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (entity instanceof Player player && selected) { if (entity instanceof Player player && selected) {
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
@ -242,7 +242,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
Level level = player.level(); Level level = player.level();
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack); var data = GunData.from(stack);
CompoundTag tag = data.getTag(); CompoundTag tag = data.tag();
if (tag.getInt("SeekTime") < 20) return; if (tag.getInt("SeekTime") < 20) return;
@ -289,14 +289,14 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
} }
player.getCooldowns().addCooldown(stack.getItem(), 10); player.getCooldowns().addCooldown(stack.getItem(), 10);
data.setAmmo(data.getAmmo() - 1); data.setAmmo(data.ammo() - 1);
data.save(); data.save();
} }
@Override @Override
public void fireOnRelease(Player player, final GunData data) { public void fireOnRelease(Player player, final GunData data) {
fire(player); fire(player);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("Seeking", false); tag.putBoolean("Seeking", false);
tag.putInt("SeekTime", 0); tag.putInt("SeekTime", 0);
tag.putString("TargetEntity", "none"); tag.putString("TargetEntity", "none");
@ -308,10 +308,10 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
@Override @Override
public void fireOnPress(Player player, final GunData data) { public void fireOnPress(Player player, final GunData data) {
var tag = data.getTag(); var tag = data.tag();
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
if (cap != null && !cap.zoom || data.getAmmo() <= 0) return; if (cap != null && !cap.zoom || data.ammo() <= 0) return;
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8); Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8);

View file

@ -129,7 +129,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
if (entity instanceof Player player) { if (entity instanceof Player player) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
data.save(); data.save();
} }
@ -171,11 +171,11 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
@Override @Override
public void fireOnPress(Player player, final GunData data) { public void fireOnPress(Player player, final GunData data) {
if (data.isReloading()) return; if (data.reloading()) return;
ItemStack stack = data.getStack(); ItemStack stack = data.stack();
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return; if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo() <= 0) return;
var tag = data.getTag(); var tag = data.tag();
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
boolean zooming = cap != null && cap.zoom; boolean zooming = cap != null && cap.zoom;
double spread = data.spread(); double spread = data.spread();
@ -196,7 +196,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
gunGrenadeEntity.setNoGravity(PerkHelper.getPerkByType(tag, Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get()); gunGrenadeEntity.setNoGravity(PerkHelper.getPerkByType(tag, Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get());
float velocity = (float) data.velocity(); float velocity = (float) data.velocity();
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.getTag()); int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.tag());
if (perkLevel > 0) { if (perkLevel > 0) {
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f); gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
gunGrenadeEntity.setDamage((float) data.explosionDamage() * (1.1f + perkLevel * 0.1f)); gunGrenadeEntity.setDamage((float) data.explosionDamage() * (1.1f + perkLevel * 0.1f));
@ -224,6 +224,6 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
} }
player.getCooldowns().addCooldown(stack.getItem(), 2); player.getCooldowns().addCooldown(stack.getItem(), 2);
data.setAmmo(data.getAmmo() - 1); data.setAmmo(data.ammo() - 1);
} }
} }

View file

@ -133,11 +133,11 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (tag.getBoolean("draw")) { if (tag.getBoolean("draw")) {
tag.putBoolean("draw", false); tag.putBoolean("draw", false);
if (GunsTool.getGunIntTag(tag, "Ammo") == 0) { if (data.ammo() == 0) {
tag.putDouble("empty", 1); tag.putDouble("empty", 1);
} }
} }
@ -183,11 +183,11 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
public void fireOnPress(Player player, final GunData data) { public void fireOnPress(Player player, final GunData data) {
Level level = player.level(); Level level = player.level();
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
var tag = data.getTag(); var tag = data.tag();
if (data.isReloading() if (data.reloading()
|| player.getCooldowns().isOnCooldown(stack.getItem()) || player.getCooldowns().isOnCooldown(stack.getItem())
|| data.getAmmo() <= 0 || data.ammo() <= 0
) return; ) return;
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
@ -240,12 +240,12 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10)); PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
} }
if (data.getAmmo() == 1) { if (data.ammo() == 1) {
tag.putBoolean("empty", true); tag.putBoolean("empty", true);
GunsTool.setGunBooleanTag(tag, "CloseHammer", true); GunsTool.setGunBooleanTag(tag, "CloseHammer", true);
} }
player.getCooldowns().addCooldown(stack.getItem(), 10); player.getCooldowns().addCooldown(stack.getItem(), 10);
data.setAmmo(data.getAmmo() - 1); data.setAmmo(data.ammo() - 1);
} }
} }

View file

@ -88,7 +88,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) { if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.prepare")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.prepare"));
@ -128,7 +128,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
&& data.getReloadStage() != 3 && data.getReloadStage() != 3
&& ClientEventHandler.drawTime < 0.01 && ClientEventHandler.drawTime < 0.01
&& ClientEventHandler.gunMelee == 0 && ClientEventHandler.gunMelee == 0
&& !data.isReloading() && !data.reloading()
) { ) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sc.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.sc.run_fast"));
@ -181,7 +181,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
if (entity instanceof Player player) { if (entity instanceof Player player) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
data.save(); data.save();
} }
@ -270,11 +270,11 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
@Override @Override
public void fireOnPress(Player player, final GunData data) { public void fireOnPress(Player player, final GunData data) {
if (data.isReloading()) return; if (data.reloading()) return;
ItemStack stack = data.getStack(); ItemStack stack = data.stack();
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return; if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.ammo() <= 0) return;
var tag = data.getTag(); var tag = data.tag();
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
boolean zooming = cap != null && cap.zoom; boolean zooming = cap != null && cap.zoom;
double spread = data.spread(); double spread = data.spread();
@ -301,7 +301,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
gunGrenadeEntity.charged(isChargedFire); gunGrenadeEntity.charged(isChargedFire);
float velocity = (float) data.velocity(); float velocity = (float) data.velocity();
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.getTag()); int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), data.tag());
if (perkLevel > 0) { if (perkLevel > 0) {
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f); gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
gunGrenadeEntity.setDamage((float) data.damage() * (1.1f + perkLevel * 0.1f)); gunGrenadeEntity.setDamage((float) data.damage() * (1.1f + perkLevel * 0.1f));
@ -341,7 +341,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10)); PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
} }
data.setAmmo(data.getAmmo() - 1); data.setAmmo(data.ammo() - 1);
player.getCooldowns().addCooldown(stack.getItem(), 6); player.getCooldowns().addCooldown(stack.getItem(), 6);
} }

View file

@ -108,11 +108,11 @@ public class M60Item extends GunItem implements GeoItem {
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (tag.getBoolean("draw")) { if (tag.getBoolean("draw")) {
tag.putBoolean("draw", false); tag.putBoolean("draw", false);
if (GunsTool.getGunIntTag(tag, "Ammo") <= 5) { if (data.ammo() <= 5) {
GunsTool.setGunBooleanTag(tag, "HideBulletChain", true); GunsTool.setGunBooleanTag(tag, "HideBulletChain", true);
} }
data.save(); data.save();

View file

@ -37,7 +37,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
public class MinigunItem extends GunItem implements GeoItem { public class MinigunItem extends GunItem implements GeoItem {
@Override @Override
public int getCustomRPM(ItemStack stack) { public int getCustomRPM(ItemStack stack) {
return GunData.from(stack).getData().getInt("CustomRPM"); return GunData.from(stack).data().getInt("CustomRPM");
} }
private static final String TAG_HEAT = "heat"; private static final String TAG_HEAT = "heat";
@ -129,7 +129,7 @@ public class MinigunItem extends GunItem implements GeoItem {
} }
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (entity instanceof ServerPlayer serverPlayer && entity.level() instanceof ServerLevel serverLevel && tag.getDouble("heat") > 4 && entity.isInWaterOrRain()) { if (entity instanceof ServerPlayer serverPlayer && entity.level() instanceof ServerLevel serverLevel && tag.getDouble("heat") > 4 && entity.isInWaterOrRain()) {
if (entity.isInWater()) { if (entity.isInWater()) {
ParticleTool.sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, ParticleTool.sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP,

View file

@ -57,7 +57,7 @@ public class AK12Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2; boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2; boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;

View file

@ -57,7 +57,7 @@ public class AK47Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2; boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2; boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;

View file

@ -52,7 +52,7 @@ public class Hk416Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2; boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2; boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;

View file

@ -53,7 +53,7 @@ public class M4Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2; boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2; boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;

View file

@ -50,7 +50,7 @@ public class MarlinItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift"));
@ -87,7 +87,7 @@ public class MarlinItem extends GunItem implements GeoItem {
&& player.onGround() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0
&& ClientEventHandler.drawTime < 0.01 && ClientEventHandler.drawTime < 0.01
&& !data.isReloading()) { && !data.reloading()) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.run_fast"));
} else { } else {

View file

@ -52,7 +52,7 @@ public class Mk14Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2; boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2; boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;

View file

@ -56,7 +56,7 @@ public class Qbz95Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2; boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;
boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2; boolean grip = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.GRIP) == 2;

View file

@ -92,11 +92,11 @@ public class SksItem extends GunItem implements GeoItem {
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (tag.getBoolean("draw")) { if (tag.getBoolean("draw")) {
tag.putBoolean("draw", false); tag.putBoolean("draw", false);
if (GunsTool.getGunIntTag(tag, "Ammo") == 0) { if (data.ammo() == 0) {
GunsTool.setGunBooleanTag(tag, "HoldOpen", true); GunsTool.setGunBooleanTag(tag, "HoldOpen", true);
} }
data.save(); data.save();

View file

@ -96,7 +96,7 @@ public class M870Item extends GunItem implements GeoItem {
&& player.onGround() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0
&& ClientEventHandler.drawTime < 0.01 && ClientEventHandler.drawTime < 0.01
&& !data.isReloading()) { && !data.reloading()) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast"));
} else { } else {

View file

@ -52,7 +52,7 @@ public class VectorItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2; boolean drum = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.MAGAZINE) == 2;

View file

@ -51,7 +51,7 @@ public class K98Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.k98.shift"));
@ -87,7 +87,7 @@ public class K98Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (player.isSprinting() && player.onGround() if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0
@ -96,7 +96,7 @@ public class K98Item extends GunItem implements GeoItem {
&& data.getReloadStage() != 2 && data.getReloadStage() != 2
&& data.getReloadStage() != 3 && data.getReloadStage() != 3
&& ClientEventHandler.drawTime < 0.01 && ClientEventHandler.drawTime < 0.01
&& !data.isReloading() && !data.reloading()
) { ) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.k98.run_fast"));

View file

@ -50,7 +50,7 @@ public class M98bItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift"));
@ -73,7 +73,7 @@ public class M98bItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (player.isSprinting() && player.onGround() if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0

View file

@ -51,17 +51,17 @@ public class MosinNagantItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift"));
} }
if (data.getReloadStage() == 1 && GunsTool.getGunIntTag(tag, "Ammo") == 0) { if (data.getReloadStage() == 1 && data.ammo() == 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty"));
} }
if (data.getReloadStage() == 1 && GunsTool.getGunIntTag(tag, "Ammo") > 0) { if (data.getReloadStage() == 1 && data.ammo() > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare"));
} }
@ -86,7 +86,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (player.isSprinting() && player.onGround() if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0
@ -95,7 +95,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
&& data.getReloadStage() != 2 && data.getReloadStage() != 2
&& data.getReloadStage() != 3 && data.getReloadStage() != 3
&& ClientEventHandler.drawTime < 0.01 && ClientEventHandler.drawTime < 0.01
&& !data.isReloading() && !data.reloading()
) { ) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mosin.run_fast"));

View file

@ -77,7 +77,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sentinel.shift"));
@ -104,7 +104,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (player.isSprinting() && player.onGround() if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0
@ -138,7 +138,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM); var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
if (cap != null && cap.getEnergyStored() > 0) { if (cap != null && cap.getEnergyStored() > 0) {

View file

@ -118,7 +118,7 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (entity instanceof Player player) { if (entity instanceof Player player) {
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
data.save(); data.save();
@ -172,8 +172,8 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
public void fireOnRelease(Player player, final GunData data) { public void fireOnRelease(Player player, final GunData data) {
if (player.level().isClientSide()) return; if (player.level().isClientSide()) return;
var tag = data.getTag(); var tag = data.tag();
var stack = data.getStack(); var stack = data.stack();
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {

View file

@ -147,7 +147,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (entity instanceof Player player) { if (entity instanceof Player player) {
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
@ -224,16 +224,16 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
@Override @Override
public void fireOnPress(Player player, final GunData data) { public void fireOnPress(Player player, final GunData data) {
if (data.isReloading()) return; if (data.reloading()) return;
ItemStack stack = data.getStack(); ItemStack stack = data.stack();
var tag = data.getTag(); var tag = data.tag();
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), tag); int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), tag);
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 (player.getCooldowns().isOnCooldown(stack.getItem())
|| data.getAmmo() <= 0 || data.ammo() <= 0
|| !hasEnoughEnergy || !hasEnoughEnergy
) return; ) return;
@ -263,8 +263,8 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10)); PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
} }
data.setAmmo(data.getAmmo() - 1); data.setAmmo(data.ammo() - 1);
data.getTag().putBoolean("shoot", true); data.tag().putBoolean("shoot", true);
energyStorage.extractEnergy(400 + 100 * perkLevel, false); energyStorage.extractEnergy(400 + 100 * perkLevel, false);
} }

View file

@ -8,7 +8,6 @@ import com.atsuishio.superbwarfare.item.gun.GunData;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
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.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.Container; import net.minecraft.world.Container;
@ -209,15 +208,14 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
return; return;
} }
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag();
double oldPoint = data.getUpgradePoint(); double oldPoint = data.upgradePoint();
int point = (int) oldPoint; int point = (int) oldPoint;
int newPoint = this.upgradePoint.get(); int newPoint = this.upgradePoint.get();
int delta = newPoint - point; int delta = newPoint - point;
if (delta != 0) { if (delta != 0) {
GunsTool.setGunDoubleTag(tag, "UpgradePoint", oldPoint + delta); data.setUpgradePoint(oldPoint + delta);
data.save(); data.save();
} }
} }
@ -240,7 +238,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
ItemStack result = gun.copy(); ItemStack result = gun.copy();
var data = GunData.from(result); var data = GunData.from(result);
final var tag = data.getTag(); final var tag = data.tag();
if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem<?> perkItem) { if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem<?> perkItem) {
if (gunItem.canApplyPerk(perkItem.getPerk())) { if (gunItem.canApplyPerk(perkItem.getPerk())) {
@ -299,15 +297,15 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
var data = GunData.from(gun); var data = GunData.from(gun);
if (level <= 0) { if (level <= 0) {
this.upgradePoint.set((int) data.getUpgradePoint()); this.upgradePoint.set((int) data.upgradePoint());
return; return;
} }
ItemStack output = gun.copy(); ItemStack output = gun.copy();
final var outputTag = NBTTool.getTag(output); final var outputTag = NBTTool.getTag(output);
PerkHelper.removePerkByType(outputTag, perkItem.getPerk().type); PerkHelper.removePerkByType(outputTag, perkItem.getPerk().type);
data.setUpgradePoint(Math.min(MAX_UPGRADE_POINT, level - 1 + data.getUpgradePoint())); data.setUpgradePoint(Math.min(MAX_UPGRADE_POINT, level - 1 + data.upgradePoint()));
this.upgradePoint.set((int) data.getUpgradePoint()); this.upgradePoint.set((int) data.upgradePoint());
data.save(); data.save();
this.container.setItem(INPUT_SLOT, output); this.container.setItem(INPUT_SLOT, output);
@ -340,9 +338,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
private void onPlaceGun(ItemStack stack) { private void onPlaceGun(ItemStack stack) {
if (!(stack.getItem() instanceof GunItem)) return; if (!(stack.getItem() instanceof GunItem)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
int point = (int) data.getUpgradePoint(); int point = (int) data.upgradePoint();
this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT)); this.upgradePoint.set(Mth.clamp(point, 0, MAX_UPGRADE_POINT));
var ammoPerk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO); var ammoPerk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);

View file

@ -34,7 +34,7 @@ public record AdjustZoomFovMessage(double scroll) implements CustomPacketPayload
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (stack.is(ModItems.MINIGUN.get())) { if (stack.is(ModItems.MINIGUN.get())) {
double minRpm = 300 - 1200; double minRpm = 300 - 1200;

View file

@ -35,7 +35,7 @@ public record EditMessage(int msgType) implements CustomPacketPayload {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var rootTag = data.getTag(); var rootTag = data.tag();
CompoundTag tag = rootTag.getCompound("Attachments"); CompoundTag tag = rootTag.getCompound("Attachments");
switch (type) { switch (type) {
case 0 -> { case 0 -> {

View file

@ -47,13 +47,13 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
handleGunBolt(player, stack); handleGunBolt(player, stack);
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
if (type == 0) { if (type == 0) {
if (tag.getDouble("prepare") == 0 && data.isReloading() && data.getAmmo() > 0) { if (tag.getDouble("prepare") == 0 && data.reloading() && data.ammo() > 0) {
tag.putDouble("force_stop", 1); tag.putDouble("force_stop", 1);
} }
@ -90,14 +90,14 @@ public record FireMessage(int msgType) implements CustomPacketPayload {
private static void handleGunBolt(Player player, ItemStack stack) { private static void handleGunBolt(Player player, ItemStack stack) {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
CompoundTag tag = data.getTag(); CompoundTag tag = data.tag();
if (data.boltActionTime() > 0 if (data.boltActionTime() > 0
&& data.getAmmo() > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0) && data.ammo() > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0)
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0 && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
&& !(data.normalReloading() && !(data.normalReloading()
|| data.emptyReloading()) || data.emptyReloading())
&& !data.isReloading() && !data.reloading()
&& !GunsTool.getGunBooleanTag(tag, "Charging")) { && !GunsTool.getGunBooleanTag(tag, "Charging")) {
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunBooleanTag(tag, "NeedBoltAction")) { if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunBooleanTag(tag, "NeedBoltAction")) {
GunsTool.setGunIntTag(tag, "BoltActionTick", data.boltActionTime() + 1); GunsTool.setGunIntTag(tag, "BoltActionTick", data.boltActionTime() + 1);

View file

@ -35,8 +35,8 @@ public record FireModeMessage(int msgType) implements CustomPacketPayload {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.getItem() instanceof GunItem gunItem) { if (stack.getItem() instanceof GunItem gunItem) {
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
int fireMode = data.getFireMode(); int fireMode = data.fireMode();
int mode = gunItem.getAvailableFireModes(); int mode = gunItem.getAvailableFireModes();
mode &= 0b111; mode &= 0b111;

View file

@ -41,17 +41,17 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
if (!(stack.getItem() instanceof GunItem gunItem)) return; if (!(stack.getItem() instanceof GunItem gunItem)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (!player.isSpectator() if (!player.isSpectator()
&& !GunsTool.getGunBooleanTag(tag, "Charging") && !GunsTool.getGunBooleanTag(tag, "Charging")
&& GunsTool.getGunIntTag(tag, "ReloadTime") == 0 && GunsTool.getGunIntTag(tag, "ReloadTime") == 0
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0 && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
&& !data.isReloading() && !data.reloading()
) { ) {
boolean canSingleReload = gunItem.isIterativeReload(stack); boolean canSingleReload = gunItem.isIterativeReload(stack);
boolean canReload = gunItem.isMagazineReload(stack) && !gunItem.isClipReload(stack); boolean canReload = gunItem.isMagazineReload(stack) && !gunItem.isClipReload(stack);
boolean clipLoad = data.getAmmo() == 0 && gunItem.isClipReload(stack); boolean clipLoad = data.ammo() == 0 && gunItem.isClipReload(stack);
// 检查备弹 // 检查备弹
boolean hasCreativeAmmoBox = player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get())); boolean hasCreativeAmmoBox = player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()));
@ -79,21 +79,21 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
if (gunItem.isOpenBolt(stack)) { if (gunItem.isOpenBolt(stack)) {
if (gunItem.hasBulletInBarrel(stack)) { if (gunItem.hasBulletInBarrel(stack)) {
if (data.getAmmo() < magazine + 1) { if (data.ammo() < magazine + 1) {
GunsTool.setGunBooleanTag(tag, "StartReload", true); GunsTool.setGunBooleanTag(tag, "StartReload", true);
} }
} else { } else {
if (data.getAmmo() < magazine) { if (data.ammo() < magazine) {
GunsTool.setGunBooleanTag(tag, "StartReload", true); GunsTool.setGunBooleanTag(tag, "StartReload", true);
} }
} }
} else if (data.getAmmo() < magazine) { } else if (data.ammo() < magazine) {
GunsTool.setGunBooleanTag(tag, "StartReload", true); GunsTool.setGunBooleanTag(tag, "StartReload", true);
} }
return; return;
} }
if (canSingleReload && data.getAmmo() < data.magazine()) { if (canSingleReload && data.ammo() < data.magazine()) {
tag.putBoolean("start_single_reload", true); tag.putBoolean("start_single_reload", true);
} }
data.save(); data.save();

View file

@ -28,7 +28,7 @@ public record SensitivityMessage(boolean isAdd) implements CustomPacketPayload {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
if (message.isAdd) { if (message.isAdd) {
tag.putInt("sensitivity", Math.min(10, tag.getInt("sensitivity") + 1)); tag.putInt("sensitivity", Math.min(10, tag.getInt("sensitivity") + 1));
} else { } else {

View file

@ -45,14 +45,14 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
public static void pressAction(Player player, double spared) { public static void pressAction(Player player, double spared) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack); var data = GunData.from(stack);
var tag = data.getTag(); var tag = data.tag();
if (stack.is(ModTags.Items.NORMAL_GUN)) { if (stack.is(ModTags.Items.NORMAL_GUN)) {
int projectileAmount = data.projectileAmount(); int projectileAmount = data.projectileAmount();
if (data.getAmmo() > 0) { if (data.ammo() > 0) {
// 空仓挂机 // 空仓挂机
if (data.getAmmo() == 1) { if (data.ammo() == 1) {
GunsTool.setGunBooleanTag(tag, "HoldOpen", true); GunsTool.setGunBooleanTag(tag, "HoldOpen", true);
} }
@ -61,14 +61,14 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
} }
// 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态 // 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态
if (data.boltActionTime() > 0 && data.getAmmo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) { if (data.boltActionTime() > 0 && data.ammo() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true); GunsTool.setGunBooleanTag(tag, "NeedBoltAction", true);
} }
data.setAmmo(data.getAmmo() - 1); data.setAmmo(data.ammo() - 1);
tag.putDouble("empty", 1); tag.putDouble("empty", 1);
if (stack.getItem() == ModItems.M_60.get() && data.getAmmo() <= 5) { if (stack.getItem() == ModItems.M_60.get() && data.ammo() <= 5) {
GunsTool.setGunBooleanTag(tag, "HideBulletChain", true); GunsTool.setGunBooleanTag(tag, "HideBulletChain", true);
} }

View file

@ -28,7 +28,7 @@ public record SwitchScopeMessage(double scroll) implements CustomPacketPayload {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.getTag(); final var tag = data.tag();
tag.putBoolean("ScopeAlt", tag.getBoolean("ScopeAlt")); tag.putBoolean("ScopeAlt", tag.getBoolean("ScopeAlt"));
data.save(); data.save();
} }

View file

@ -64,7 +64,7 @@ public record ZoomMessage(int msgType) implements CustomPacketPayload {
if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) { if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) {
var handItem = player.getMainHandItem(); var handItem = player.getMainHandItem();
var data = GunData.from(handItem); var data = GunData.from(handItem);
var tag = data.getTag(); var tag = data.tag();
tag.putBoolean("Seeking", false); tag.putBoolean("Seeking", false);
tag.putInt("SeekTime", 0); tag.putInt("SeekTime", 0);

View file

@ -66,7 +66,7 @@ public class PerkHelper {
} }
public static int getItemPerkLevel(Perk perk, GunData data) { public static int getItemPerkLevel(Perk perk, GunData data) {
return getItemPerkLevel(perk, data.getTag()); return getItemPerkLevel(perk, data.tag());
} }
public static int getItemPerkLevel(Perk perk, final CompoundTag tag) { public static int getItemPerkLevel(Perk perk, final CompoundTag tag) {
@ -89,7 +89,7 @@ public class PerkHelper {
} }
public static CompoundTag getPerkTag(GunData data, Perk.Type type) { public static CompoundTag getPerkTag(GunData data, Perk.Type type) {
return getPerkTag(data.getTag(), type); return getPerkTag(data.tag(), type);
} }
public static CompoundTag getPerkTag(final CompoundTag tag, Perk.Type type) { public static CompoundTag getPerkTag(final CompoundTag tag, Perk.Type type) {
@ -113,7 +113,7 @@ public class PerkHelper {
} }
public static Perk getPerkByType(GunData data, Perk.Type type) { public static Perk getPerkByType(GunData data, Perk.Type type) {
return getPerkByType(data.getTag(), type); return getPerkByType(data.tag(), type);
} }

View file

@ -55,48 +55,6 @@ public class GunsTool {
} }
} }
public static void initGun(final CompoundTag tag, String location) {
if (gunsData != null && gunsData.get(location) != null) {
CompoundTag data = tag.getCompound("GunData");
// gunsData.get(location).forEach(data::putDouble);
data.putBoolean("Init", true);
tag.put("GunData", data);
}
}
public static void initCreativeGun(ItemStack stack, String location) {
var data = GunData.from(stack);
var fillAmmo = !data.getData().getBoolean("Init");
initGun(data.getTag(), location);
data.save();
if (fillAmmo) {
data.setAmmo(data.magazine());
data.save();
}
}
public static void generateAndSetUUID(final CompoundTag tag) {
UUID uuid = UUID.randomUUID();
var data = tag.getCompound("GunData");
data.putUUID("UUID", uuid);
tag.put("GunData", data);
}
public static double getGunDefaultData(final CompoundTag tag, String name) {
var id = tag.getString("id");
if (!tag.getBoolean("init")) {
return GunsTool.gunsData
.getOrDefault(id, new HashMap<>())
.getOrDefault(name, 0.0);
}
return getGunDoubleTag(tag, name);
}
@SubscribeEvent @SubscribeEvent
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) { public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
if (event.getEntity() instanceof ServerPlayer player) { if (event.getEntity() instanceof ServerPlayer player) {
@ -127,10 +85,10 @@ public class GunsTool {
} }
public static void reload(Player player, ItemStack stack, GunData gunData, AmmoType type, boolean extraOne) { public static void reload(Player player, ItemStack stack, GunData gunData, AmmoType type, boolean extraOne) {
var data = gunData.getData(); var data = gunData.data();
int mag = gunData.magazine(); int mag = gunData.magazine();
int ammo = gunData.getAmmo(); int ammo = gunData.ammo();
int ammoToAdd = mag - ammo + (extraOne ? 1 : 0); int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);
// 空仓换弹的栓动武器应该在换弹后取消待上膛标记 // 空仓换弹的栓动武器应该在换弹后取消待上膛标记
@ -157,6 +115,7 @@ public class GunsTool {
/* PerkData */ /* PerkData */
public static void setPerkIntTag(final CompoundTag rootTag, String name, int num) { public static void setPerkIntTag(final CompoundTag rootTag, String name, int num) {
CompoundTag tag = rootTag.getCompound("PerkData"); CompoundTag tag = rootTag.getCompound("PerkData");
if (!tag.contains(name) && num == 0) return;
tag.putInt(name, num); tag.putInt(name, num);
rootTag.put("PerkData", tag); rootTag.put("PerkData", tag);
} }
@ -168,6 +127,7 @@ public class GunsTool {
public static void setPerkDoubleTag(final CompoundTag rootTag, String name, double num) { public static void setPerkDoubleTag(final CompoundTag rootTag, String name, double num) {
CompoundTag tag = rootTag.getCompound("PerkData"); CompoundTag tag = rootTag.getCompound("PerkData");
if (!tag.contains(name) && num == 0) return;
tag.putDouble(name, num); tag.putDouble(name, num);
rootTag.put("PerkData", tag); rootTag.put("PerkData", tag);
} }
@ -179,6 +139,7 @@ public class GunsTool {
public static void setPerkBooleanTag(final CompoundTag rootTag, String name, boolean flag) { public static void setPerkBooleanTag(final CompoundTag rootTag, String name, boolean flag) {
CompoundTag tag = rootTag.getCompound("PerkData"); CompoundTag tag = rootTag.getCompound("PerkData");
if (!tag.contains(name) && !flag) return;
tag.putBoolean(name, flag); tag.putBoolean(name, flag);
rootTag.put("PerkData", tag); rootTag.put("PerkData", tag);
} }
@ -228,9 +189,7 @@ public class GunsTool {
} }
public static int getGunIntTag(final CompoundTag tag, String name) { public static int getGunIntTag(final CompoundTag tag, String name) {
var data = tag.getCompound("GunData"); return getGunIntTag(tag, name, 0);
if (!data.contains(name)) return (int) getGunDefaultData(tag, name);
return data.getInt(name);
} }
public static int getGunIntTag(final CompoundTag tag, String name, int defaultValue) { public static int getGunIntTag(final CompoundTag tag, String name, int defaultValue) {
@ -246,9 +205,7 @@ public class GunsTool {
} }
public static double getGunDoubleTag(final CompoundTag tag, String name) { public static double getGunDoubleTag(final CompoundTag tag, String name) {
var data = tag.getCompound("GunData"); return getGunDoubleTag(tag, name, 0);
if (!data.contains(name) && !tag.getBoolean("init")) return getGunDefaultData(tag, name);
return data.getDouble(name);
} }
public static double getGunDoubleTag(final CompoundTag tag, String name, double defaultValue) { public static double getGunDoubleTag(final CompoundTag tag, String name, double defaultValue) {
@ -265,7 +222,7 @@ public class GunsTool {
public static boolean getGunBooleanTag(final CompoundTag tag, String name) { public static boolean getGunBooleanTag(final CompoundTag tag, String name) {
var data = tag.getCompound("GunData"); var data = tag.getCompound("GunData");
if (!data.contains(name)) return getGunDefaultData(tag, name) != 0; if (!data.contains(name)) return false;
return data.getBoolean(name); return data.getBoolean(name);
} }