移除更多无用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()
) {
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
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()) {
PacketDistributor.sendToServer(new ReloadMessage(0));
ClientEventHandler.burstFireAmount = 0;
@ -345,11 +345,11 @@ public class ClickHandler {
} else {
PacketDistributor.sendToServer(new FireMessage(0));
if ((!(data.normalReloading() || data.emptyReloading())
&& !data.isReloading()
&& !data.reloading()
&& !GunsTool.getGunBooleanTag(tag, "Charging")
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction"))
&& drawTime < 0.01) {
if (data.getFireMode() == 1) {
if (data.fireMode() == 1) {
if (ClientEventHandler.burstFireAmount == 0) {
ClientEventHandler.burstFireAmount = data.burstAmount();
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -48,8 +48,8 @@ public class Glock18ItemModel extends GeoModel<Glock18Item> {
if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack);
var tag = data.getTag();
int mode = GunsTool.getGunIntTag(tag, "FireMode");
var tag = data.tag();
int mode = data.fireMode();
if (mode == 0) {
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));
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 3.1));
data.save();
@ -155,7 +155,7 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
l.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);

View file

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

View file

@ -69,7 +69,7 @@ public class JavelinItemModel extends GeoModel<JavelinItem> {
javelin.setHidden(gun.getPosZ() > 15.85);
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosZ() > 15.85));
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.sniper.K98Item;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
@ -46,8 +45,8 @@ public class K98ItemModel extends GeoModel<K98Item> {
if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack);
final var tag = data.getTag();
if (NBTTool.getTag(stack).getDouble("prepare") > 11 && GunsTool.getGunIntTag(tag, "Ammo") == 1) {
final var tag = data.tag();
if (tag.getDouble("prepare") > 11 && data.ammo() == 1) {
clip.setScaleX(0);
clip.setScaleY(0);
clip.setScaleZ(0);
@ -110,7 +109,7 @@ public class K98ItemModel extends GeoModel<K98Item> {
float numR = (float) (1 - 0.52 * 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.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ());

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -87,7 +87,7 @@ public class MosinNagantItemModel extends GeoModel<MosinNagantItem> {
}
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.4));
data.save();
@ -125,7 +125,7 @@ public class MosinNagantItemModel extends GeoModel<MosinNagantItem> {
float numR = (float) (1 - 0.97 * 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.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ());

View file

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

View file

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

View file

@ -46,7 +46,7 @@ public class RpgItemModel extends GeoModel<RpgItem> {
if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
if (GunsTool.getGunBooleanTag(tag, "CloseHammer")) {
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 tag = data.getTag();
var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.65));
data.save();

View file

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

View file

@ -77,7 +77,7 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
holo.setPosY(0.09f);
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.4));
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.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) {
ammo.setScaleX((float) GunsTool.getGunIntTag(tag, "Ammo") / 5);
if (data.ammo() <= 5) {
ammo.setScaleX((float) data.ammo() / 5);
}
GeoBone camera = getAnimationProcessor().getBone("camera");

View file

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

View file

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

View file

@ -154,7 +154,7 @@ public class TracheliumItemModel extends GeoModel<Trachelium> {
CrossHairOverlay.gunRot = shen.getRotZ();
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));
data.save();

View file

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

View file

@ -391,7 +391,7 @@ public class AmmoBarOverlay {
}
private static ResourceLocation getFireMode(GunData data) {
return switch (data.getFireMode()) {
return switch (data.fireMode()) {
case 1 -> BURST;
case 2 -> AUTO;
default -> SEMI;
@ -400,7 +400,8 @@ public class AmmoBarOverlay {
private static int getGunAmmoCount(Player player) {
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()) {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
@ -411,7 +412,7 @@ public class AmmoBarOverlay {
return GunsTool.getGunIntTag(tag, "MaxAmmo");
}
return GunsTool.getGunIntTag(tag, "Ammo");
return data.ammo();
}
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.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.item.gun.GunData;
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool;
import com.atsuishio.superbwarfare.tools.SeekTool;
import com.mojang.blaze3d.platform.GlStateManager;
@ -55,9 +55,11 @@ public class JavelinHudOverlay {
if (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player))
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.depthMask(false);
RenderSystem.enableBlend();
@ -78,7 +80,7 @@ public class JavelinHudOverlay {
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(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) {
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() {
int level = data.getLevel();
double rate = data.getExp() / (20 * Math.pow(level, 2) + 160 * level + 20);
int level = data.level();
double rate = data.exp() / (20 * Math.pow(level, 2) + 160 * level + 20);
ChatFormatting formatting;
if (level < 10) {
@ -154,7 +154,7 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
* 获取武器强化点数文本组件
*/
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)
.append(Component.literal("").withStyle(ChatFormatting.RESET))
.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);
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);
return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY)
.append(Component.literal("").withStyle(ChatFormatting.RESET))

View file

@ -312,7 +312,7 @@ public class ClientEventHandler {
&& !notInGame()
&& cap != null && !cap.edit
&& !(data.normalReloading() || data.emptyReloading())
&& !data.isReloading()
&& !data.reloading()
&& !player.getCooldowns().isOnCooldown(stack.getItem())
&& !GunsTool.getGunBooleanTag(tag, "Charging")) {
gunMelee = 36;
@ -392,10 +392,10 @@ public class ClientEventHandler {
return;
}
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
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);
@ -473,9 +473,9 @@ public class ClientEventHandler {
&& cap != null && !cap.edit
&& !notInGame()
&& (!(data.normalReloading() || data.emptyReloading())
&& !data.isReloading()
&& !data.reloading()
&& !GunsTool.getGunBooleanTag(tag, "Charging")
&& data.getAmmo() > 0
&& data.ammo() > 0
&& !player.getCooldowns().isOnCooldown(stack.getItem())
&& !GunsTool.getGunBooleanTag(tag, "NeedBoltAction")
&& revolverPre(tag))
@ -552,14 +552,14 @@ public class ClientEventHandler {
ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack);
if (stack.is(ModTags.Items.NORMAL_GUN)) {
if (data.getAmmo() > 0) {
int mode = data.getFireMode();
if (data.ammo() > 0) {
int mode = data.fireMode();
if (mode != 2) {
holdFire = false;
}
if (mode == 1) {
if (data.getAmmo() == 1) {
if (data.ammo() == 1) {
burstFireAmount = 1;
}
if (burstFireAmount == 1) {
@ -585,7 +585,7 @@ public class ClientEventHandler {
}
// 判断是否为栓动武器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);
}
@ -1066,7 +1066,7 @@ public class ClientEventHandler {
if (!(entity instanceof Player player)) return;
var stack = player.getMainHandItem();
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
float times = 5 * Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
double weight = data.weight();

View file

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

View file

@ -217,14 +217,14 @@ public class LivingEventHandler {
// 先处理发射器类武器或高爆弹的爆炸伤害
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
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;
data.setExp(data.getExp() + amount);
data.setExp(data.exp() + amount);
data.save();
}
@ -243,27 +243,27 @@ public class LivingEventHandler {
// 先处理发射器类武器或高爆弹的爆炸伤害
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
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)) {
data.setExp(data.getExp() + amount);
data.setExp(data.exp() + amount);
}
// 提升武器等级
int level = data.getLevel();
double exp = data.getExp();
int level = data.level();
double exp = data.exp();
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
while (exp >= upgradeExpNeeded) {
exp -= upgradeExpNeeded;
level = data.getLevel() + 1;
level = data.level() + 1;
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
data.setExp(exp);
data.setLevel(level);
data.setUpgradePoint(data.getUpgradePoint() + 0.5);
data.setUpgradePoint(data.upgradePoint() + 0.5);
}
data.save();
}
@ -277,17 +277,17 @@ public class LivingEventHandler {
if (event.getEntity() instanceof TargetEntity) return;
var data = GunData.from(stack);
int level = data.getLevel();
double exp = data.getExp();
int level = data.level();
double exp = data.exp();
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
while (exp >= upgradeExpNeeded) {
exp -= upgradeExpNeeded;
level = data.getLevel() + 1;
level = data.level() + 1;
upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
data.setExp(exp);
data.setLevel(level);
data.setUpgradePoint(data.getUpgradePoint() + 0.5);
data.setUpgradePoint(data.upgradePoint() + 0.5);
}
data.save();
}
@ -357,8 +357,8 @@ public class LivingEventHandler {
stopGunReloadSound(serverPlayer, oldGun);
var oldData = GunData.from(oldStack);
oldTag = oldData.getTag();
var data = oldData.getData();
oldTag = oldData.tag();
var data = oldData.data();
if (oldData.boltActionTime() > 0) {
data.putInt("BoltActionTick", 0);
@ -395,7 +395,7 @@ public class LivingEventHandler {
if (newStack.getItem() instanceof GunItem) {
var newData = GunData.from(newStack);
newTag = newData.getTag();
newTag = newData.tag();
player.getPersistentData().putDouble("noRun", 40);
newTag.putBoolean("draw", true);
@ -577,7 +577,7 @@ public class LivingEventHandler {
private static void handleClipPerks(ItemStack 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);
if (healClipLevel != 0) {
GunsTool.setPerkIntTag(tag, "HealClipTime", 80 + healClipLevel * 20);
@ -592,7 +592,7 @@ public class LivingEventHandler {
private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (GunsTool.getPerkIntTag(tag, "KillClipTime") > 0) {
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
if (level == 0) {
@ -605,7 +605,7 @@ public class LivingEventHandler {
private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), tag);
if (level == 0) return;
@ -614,7 +614,7 @@ public class LivingEventHandler {
private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag);
if (level == 0) return;
@ -628,7 +628,7 @@ public class LivingEventHandler {
private static void handleKillingTallyAddCount(ItemStack 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);
if (level != 0) {
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) {
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);
if (level == 0) return;
@ -657,7 +657,7 @@ public class LivingEventHandler {
private static void handleSubsistence(ItemStack stack, Player player) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), tag);
if (level == 0) return;
@ -667,7 +667,7 @@ public class LivingEventHandler {
if (cap == null) return;
int mag = data.magazine();
int ammo = data.getAmmo();
int ammo = data.ammo();
int ammoReload = (int) Math.min(mag, mag * rate);
int ammoNeed = Math.min(mag - ammo, ammoReload);
@ -697,7 +697,7 @@ public class LivingEventHandler {
private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), tag);
if (level == 0) return;
@ -709,7 +709,7 @@ public class LivingEventHandler {
private static void handleHeadSeekerTime(ItemStack 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);
if (level == 0) return;
@ -719,7 +719,7 @@ public class LivingEventHandler {
private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag);
if (level == 0) return;
@ -730,7 +730,7 @@ public class LivingEventHandler {
private static void handleDesperado(ItemStack stack) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag);
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.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunData;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.tools.*;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
@ -29,16 +30,16 @@ public class PlayerEventHandler {
@SubscribeEvent
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
Player player = event.getEntity();
ItemStack stack = player.getMainHandItem();
var tag = NBTTool.getTag(stack);
if (stack.is(ModItems.MONITOR.get()) && tag.getBoolean("Using")) {
ItemStack mainStack = player.getMainHandItem();
var tag = NBTTool.getTag(mainStack);
if (mainStack.is(ModItems.MONITOR.get()) && tag.getBoolean("Using")) {
tag.putBoolean("Using", false);
NBTTool.saveTag(stack, tag);
NBTTool.saveTag(mainStack, tag);
}
for (ItemStack pStack : player.getInventory().items) {
if (pStack.is(ModTags.Items.GUN)) {
for (ItemStack stack : player.getInventory().items) {
if (stack.getItem() instanceof GunItem) {
var data = GunData.from(stack);
tag = data.getTag();
tag = data.tag();
tag.putBoolean("draw", true);
@ -65,7 +66,7 @@ public class PlayerEventHandler {
for (ItemStack stack : player.getInventory().items) {
if (stack.is(ModTags.Items.GUN)) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
tag.putBoolean("draw", true);
@ -203,9 +204,9 @@ public class PlayerEventHandler {
ItemStack stack = player.getMainHandItem();
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);
data.save();
}
@ -218,7 +219,7 @@ public class PlayerEventHandler {
if (cap == null) return;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (cap.bowPullHold) {
if (stack.getItem() == ModItems.BOCEK.get()
@ -273,7 +274,7 @@ public class PlayerEventHandler {
for (ItemStack stack : player.getInventory().items) {
if (stack.is(ModTags.Items.GUN)) {
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
if (!InventoryTool.hasCreativeAmmoBox(player)) {
var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE);
@ -295,19 +296,19 @@ public class PlayerEventHandler {
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);
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);
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);
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);
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();
var data = GunData.from(output);
data.setUpgradePoint(data.getUpgradePoint() + 1);
data.setUpgradePoint(data.upgradePoint() + 1);
data.save();
event.setOutput(output);

View file

@ -50,7 +50,7 @@ public class ReloadEventHandler {
private static void handleHealClipPre(ItemStack stack) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int time = GunsTool.getPerkIntTag(tag, "HealClipTime");
if (time > 0) {
GunsTool.setPerkIntTag(tag, "HealClipTime", 0);
@ -63,7 +63,7 @@ public class ReloadEventHandler {
private static void handleHealClipPost(Player player, ItemStack stack) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (!GunsTool.getPerkBooleanTag(tag, "HealClip")) return;
int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag);
@ -80,7 +80,7 @@ public class ReloadEventHandler {
private static void handleKillClipPre(ItemStack stack) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int time = GunsTool.getPerkIntTag(tag, "KillClipReloadTime");
if (time > 0) {
GunsTool.setPerkIntTag(tag, "KillClipReloadTime", 0);
@ -93,7 +93,7 @@ public class ReloadEventHandler {
private static void handleKillClipPost(ItemStack stack) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (!GunsTool.getPerkBooleanTag(tag, "KillClip")) return;
int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag);
@ -103,7 +103,7 @@ public class ReloadEventHandler {
private static void handleKillingTallyPre(ItemStack 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);
if (level == 0) return;
@ -113,7 +113,7 @@ public class ReloadEventHandler {
private static void handleDesperadoPre(ItemStack stack) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
int time = GunsTool.getPerkIntTag(tag, "DesperadoTime");
if (time > 0) {
GunsTool.setPerkIntTag(tag, "DesperadoTime", 0);
@ -126,7 +126,7 @@ public class ReloadEventHandler {
private static void handleDesperadoPost(ItemStack stack) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (!GunsTool.getPerkBooleanTag(tag, "Desperado")) return;
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 java.util.HashMap;
import java.util.UUID;
import java.util.WeakHashMap;
public class GunData {
private final ItemStack stack;
private final GunItem item;
private CompoundTag tag;
private CompoundTag data;
private final CompoundTag tag;
private final CompoundTag data;
private final CompoundTag perk;
private final String id;
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) {
if (!(stack.getItem() instanceof GunItem gunItem)) {
throw new IllegalArgumentException("stack is not GunItem!");
@ -39,7 +29,34 @@ public class GunData {
this.stack = stack;
var id = stack.getDescriptionId();
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) {
@ -49,22 +66,26 @@ public class GunData {
return dataCache.get(stack);
}
public GunItem getItem() {
public GunItem item() {
return item;
}
public ItemStack getStack() {
public ItemStack stack() {
return stack;
}
public CompoundTag getTag() {
public CompoundTag tag() {
return tag;
}
public CompoundTag getData() {
public CompoundTag data() {
return data;
}
public CompoundTag perk() {
return perk;
}
private double getGunData(String key) {
return getGunData(key, 0);
}
@ -144,7 +165,7 @@ public class GunData {
if (normalReload == 0) return emptyReload;
if (emptyReload == 0) return normalReload;
return getAmmo() < magazine() ? normalReload : emptyReload;
return ammo() < magazine() ? normalReload : emptyReload;
}
public double soundRadius() {
@ -171,7 +192,7 @@ public class GunData {
return item.getCustomWeight(stack);
}
public int getAmmo() {
public int ammo() {
return data.getInt("Ammo");
}
@ -179,7 +200,7 @@ public class GunData {
data.putInt("Ammo", ammo);
}
public boolean isReloading() {
public boolean reloading() {
return getReloadState() != ReloadState.NOT_RELOADING;
}
@ -209,7 +230,7 @@ public class GunData {
return (int) getGunData("BurstAmount");
}
public int getFireMode() {
public int fireMode() {
if (data.contains("FireMode")) {
return data.getInt("FireMode");
}
@ -220,7 +241,7 @@ public class GunData {
data.putInt("FireMode", fireMode);
}
public int getLevel() {
public int level() {
return data.getInt("Level");
}
@ -228,7 +249,7 @@ public class GunData {
data.putInt("Level", level);
}
public double getExp() {
public double exp() {
return data.getDouble("Exp");
}
@ -236,7 +257,7 @@ public class GunData {
data.putDouble("Exp", exp);
}
public double getUpgradePoint() {
public double upgradePoint() {
return data.getDouble("UpgradePoint");
}

View file

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

View file

@ -66,29 +66,19 @@ public abstract class GunItem extends Item implements CustomRendererItem {
) return;
var data = GunData.from(stack);
var tag = data.getTag();
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);
var tag = data.tag();
if (!data.initialized()) {
data.initialize();
if (level.getServer() != null && entity instanceof Player player && player.isCreative()) {
GunsTool.initCreativeGun(stack, name);
} else {
GunsTool.initGun(tag, name);
data.setAmmo(data.magazine());
}
GunsTool.generateAndSetUUID(tag);
tag.putBoolean("init", true);
}
tag.putBoolean("draw", false);
handleGunPerks(data);
var hasBulletInBarrel = gunItem.hasBulletInBarrel(stack);
var ammoCount = data.getAmmo();
var ammoCount = data.ammo();
var magazine = data.magazine();
if ((hasBulletInBarrel && ammoCount > magazine + 1) || (!hasBulletInBarrel && ammoCount > magazine)) {
@ -109,7 +99,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
}
capability.syncPlayerVariables(entity);
}
GunsTool.setGunIntTag(tag, "Ammo", magazine + (hasBulletInBarrel ? 1 : 0));
data.setAmmo(magazine + (hasBulletInBarrel ? 1 : 0));
}
data.save();
}
@ -174,7 +164,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
private void handleGunPerks(GunData data) {
var tag = data.getTag();
var tag = data.tag();
reducePerkTagCoolDown(tag, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker",
"DesperadoTime", "DesperadoTimePost");
@ -186,7 +176,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
GunsTool.setPerkIntTag(tag, "FourthTimesCharmCount", 0);
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) {
CompoundTag tag = GunData.from(stack).getTag().getCompound("Attachments");
CompoundTag tag = GunData.from(stack).tag().getCompound("Attachments");
double scopeWeight = switch (tag.getInt("Scope")) {
case 1 -> 0.5;
@ -454,7 +444,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
* 获取额外音效半径加成
*/
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) {

View file

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

View file

@ -57,7 +57,7 @@ public class Ntw20Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
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();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (player.isSprinting() && player.onGround()
&& 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) {
super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (entity instanceof Player player && selected) {
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
@ -242,7 +242,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
Level level = player.level();
ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack);
CompoundTag tag = data.getTag();
CompoundTag tag = data.tag();
if (tag.getInt("SeekTime") < 20) return;
@ -289,14 +289,14 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
}
player.getCooldowns().addCooldown(stack.getItem(), 10);
data.setAmmo(data.getAmmo() - 1);
data.setAmmo(data.ammo() - 1);
data.save();
}
@Override
public void fireOnRelease(Player player, final GunData data) {
fire(player);
var tag = data.getTag();
var tag = data.tag();
tag.putBoolean("Seeking", false);
tag.putInt("SeekTime", 0);
tag.putString("TargetEntity", "none");
@ -308,10 +308,10 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon {
@Override
public void fireOnPress(Player player, final GunData data) {
var tag = data.getTag();
var tag = data.tag();
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);

View file

@ -129,7 +129,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
super.inventoryTick(stack, world, entity, slot, selected);
if (entity instanceof Player player) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
data.save();
}
@ -171,11 +171,11 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon {
@Override
public void fireOnPress(Player player, final GunData data) {
if (data.isReloading()) return;
ItemStack stack = data.getStack();
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return;
if (data.reloading()) return;
ItemStack stack = data.stack();
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);
boolean zooming = cap != null && cap.zoom;
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());
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) {
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
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);
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
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (tag.getBoolean("draw")) {
tag.putBoolean("draw", false);
if (GunsTool.getGunIntTag(tag, "Ammo") == 0) {
if (data.ammo() == 0) {
tag.putDouble("empty", 1);
}
}
@ -183,11 +183,11 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon {
public void fireOnPress(Player player, final GunData data) {
Level level = player.level();
ItemStack stack = player.getMainHandItem();
var tag = data.getTag();
var tag = data.tag();
if (data.isReloading()
if (data.reloading()
|| player.getCooldowns().isOnCooldown(stack.getItem())
|| data.getAmmo() <= 0
|| data.ammo() <= 0
) return;
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));
}
if (data.getAmmo() == 1) {
if (data.ammo() == 1) {
tag.putBoolean("empty", true);
GunsTool.setGunBooleanTag(tag, "CloseHammer", true);
}
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();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.prepare"));
@ -128,7 +128,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
&& data.getReloadStage() != 3
&& ClientEventHandler.drawTime < 0.01
&& ClientEventHandler.gunMelee == 0
&& !data.isReloading()
&& !data.reloading()
) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
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) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
data.save();
}
@ -270,11 +270,11 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
@Override
public void fireOnPress(Player player, final GunData data) {
if (data.isReloading()) return;
ItemStack stack = data.getStack();
if (player.getCooldowns().isOnCooldown(stack.getItem()) || data.getAmmo() <= 0) return;
if (data.reloading()) return;
ItemStack stack = data.stack();
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);
boolean zooming = cap != null && cap.zoom;
double spread = data.spread();
@ -301,7 +301,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
gunGrenadeEntity.charged(isChargedFire);
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) {
gunGrenadeEntity.setExplosionRadius((float) data.explosionRadius() * 0.5f);
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));
}
data.setAmmo(data.getAmmo() - 1);
data.setAmmo(data.ammo() - 1);
player.getCooldowns().addCooldown(stack.getItem(), 6);
}

View file

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

View file

@ -37,7 +37,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
public class MinigunItem extends GunItem implements GeoItem {
@Override
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";
@ -129,7 +129,7 @@ public class MinigunItem extends GunItem implements GeoItem {
}
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.isInWater()) {
ParticleTool.sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP,

View file

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

View file

@ -52,7 +52,7 @@ public class Mk14Item extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
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 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();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
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 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
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (tag.getBoolean("draw")) {
tag.putBoolean("draw", false);
if (GunsTool.getGunIntTag(tag, "Ammo") == 0) {
if (data.ammo() == 0) {
GunsTool.setGunBooleanTag(tag, "HoldOpen", true);
}
data.save();

View file

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

View file

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

View file

@ -51,17 +51,17 @@ public class MosinNagantItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
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"));
}
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"));
}
@ -86,7 +86,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0
@ -95,7 +95,7 @@ public class MosinNagantItem extends GunItem implements GeoItem {
&& data.getReloadStage() != 2
&& data.getReloadStage() != 3
&& ClientEventHandler.drawTime < 0.01
&& !data.isReloading()
&& !data.reloading()
) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && GunsTool.getGunIntTag(tag, "BoltActionTick") == 0) {
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();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) {
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();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (player.isSprinting() && player.onGround()
&& 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) {
super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
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) {
super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (entity instanceof Player player) {
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
data.save();
@ -172,8 +172,8 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon {
public void fireOnRelease(Player player, final GunData data) {
if (player.level().isClientSide()) return;
var tag = data.getTag();
var stack = data.getStack();
var tag = data.tag();
var stack = data.stack();
var perk = PerkHelper.getPerkByType(tag, Perk.Type.AMMO);
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) {
super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack);
final var tag = data.getTag();
final var tag = data.tag();
if (entity instanceof Player player) {
GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player));
@ -224,16 +224,16 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
@Override
public void fireOnPress(Player player, final GunData data) {
if (data.isReloading()) return;
ItemStack stack = data.getStack();
var tag = data.getTag();
if (data.reloading()) return;
ItemStack stack = data.stack();
var tag = data.tag();
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), tag);
var energyStorage = stack.getCapability(Capabilities.EnergyStorage.ITEM);
var hasEnoughEnergy = energyStorage != null && energyStorage.getEnergyStored() >= 400 + 100 * perkLevel;
if (player.getCooldowns().isOnCooldown(stack.getItem())
|| data.getAmmo() <= 0
|| data.ammo() <= 0
|| !hasEnoughEnergy
) return;
@ -263,8 +263,8 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
}
data.setAmmo(data.getAmmo() - 1);
data.getTag().putBoolean("shoot", true);
data.setAmmo(data.ammo() - 1);
data.tag().putBoolean("shoot", true);
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.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.util.Mth;
import net.minecraft.world.Container;
@ -209,15 +208,14 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
return;
}
var data = GunData.from(stack);
var tag = data.getTag();
double oldPoint = data.getUpgradePoint();
double oldPoint = data.upgradePoint();
int point = (int) oldPoint;
int newPoint = this.upgradePoint.get();
int delta = newPoint - point;
if (delta != 0) {
GunsTool.setGunDoubleTag(tag, "UpgradePoint", oldPoint + delta);
data.setUpgradePoint(oldPoint + delta);
data.save();
}
}
@ -240,7 +238,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
ItemStack result = gun.copy();
var data = GunData.from(result);
final var tag = data.getTag();
final var tag = data.tag();
if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem<?> perkItem) {
if (gunItem.canApplyPerk(perkItem.getPerk())) {
@ -299,15 +297,15 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
var data = GunData.from(gun);
if (level <= 0) {
this.upgradePoint.set((int) data.getUpgradePoint());
this.upgradePoint.set((int) data.upgradePoint());
return;
}
ItemStack output = gun.copy();
final var outputTag = NBTTool.getTag(output);
PerkHelper.removePerkByType(outputTag, perkItem.getPerk().type);
data.setUpgradePoint(Math.min(MAX_UPGRADE_POINT, level - 1 + data.getUpgradePoint()));
this.upgradePoint.set((int) data.getUpgradePoint());
data.setUpgradePoint(Math.min(MAX_UPGRADE_POINT, level - 1 + data.upgradePoint()));
this.upgradePoint.set((int) data.upgradePoint());
data.save();
this.container.setItem(INPUT_SLOT, output);
@ -340,9 +338,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
private void onPlaceGun(ItemStack stack) {
if (!(stack.getItem() instanceof GunItem)) return;
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));
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();
if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
if (stack.is(ModItems.MINIGUN.get())) {
double minRpm = 300 - 1200;

View file

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

View file

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

View file

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

View file

@ -41,17 +41,17 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
if (!(stack.getItem() instanceof GunItem gunItem)) return;
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
if (!player.isSpectator()
&& !GunsTool.getGunBooleanTag(tag, "Charging")
&& GunsTool.getGunIntTag(tag, "ReloadTime") == 0
&& GunsTool.getGunIntTag(tag, "BoltActionTick") == 0
&& !data.isReloading()
&& !data.reloading()
) {
boolean canSingleReload = gunItem.isIterativeReload(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()));
@ -79,21 +79,21 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload {
if (gunItem.isOpenBolt(stack)) {
if (gunItem.hasBulletInBarrel(stack)) {
if (data.getAmmo() < magazine + 1) {
if (data.ammo() < magazine + 1) {
GunsTool.setGunBooleanTag(tag, "StartReload", true);
}
} else {
if (data.getAmmo() < magazine) {
if (data.ammo() < magazine) {
GunsTool.setGunBooleanTag(tag, "StartReload", true);
}
}
} else if (data.getAmmo() < magazine) {
} else if (data.ammo() < magazine) {
GunsTool.setGunBooleanTag(tag, "StartReload", true);
}
return;
}
if (canSingleReload && data.getAmmo() < data.magazine()) {
if (canSingleReload && data.ammo() < data.magazine()) {
tag.putBoolean("start_single_reload", true);
}
data.save();

View file

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

View file

@ -45,14 +45,14 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
public static void pressAction(Player player, double spared) {
ItemStack stack = player.getMainHandItem();
var data = GunData.from(stack);
var tag = data.getTag();
var tag = data.tag();
if (stack.is(ModTags.Items.NORMAL_GUN)) {
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);
}
@ -61,14 +61,14 @@ public record ShootMessage(double spread) implements CustomPacketPayload {
}
// 判断是否为栓动武器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);
}
data.setAmmo(data.getAmmo() - 1);
data.setAmmo(data.ammo() - 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);
}

View file

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

View file

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

View file

@ -66,7 +66,7 @@ public class PerkHelper {
}
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) {
@ -89,7 +89,7 @@ public class PerkHelper {
}
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) {
@ -113,7 +113,7 @@ public class PerkHelper {
}
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
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
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) {
var data = gunData.getData();
var data = gunData.data();
int mag = gunData.magazine();
int ammo = gunData.getAmmo();
int ammo = gunData.ammo();
int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);
// 空仓换弹的栓动武器应该在换弹后取消待上膛标记
@ -157,6 +115,7 @@ public class GunsTool {
/* PerkData */
public static void setPerkIntTag(final CompoundTag rootTag, String name, int num) {
CompoundTag tag = rootTag.getCompound("PerkData");
if (!tag.contains(name) && num == 0) return;
tag.putInt(name, num);
rootTag.put("PerkData", tag);
}
@ -168,6 +127,7 @@ public class GunsTool {
public static void setPerkDoubleTag(final CompoundTag rootTag, String name, double num) {
CompoundTag tag = rootTag.getCompound("PerkData");
if (!tag.contains(name) && num == 0) return;
tag.putDouble(name, num);
rootTag.put("PerkData", tag);
}
@ -179,6 +139,7 @@ public class GunsTool {
public static void setPerkBooleanTag(final CompoundTag rootTag, String name, boolean flag) {
CompoundTag tag = rootTag.getCompound("PerkData");
if (!tag.contains(name) && !flag) return;
tag.putBoolean(name, flag);
rootTag.put("PerkData", tag);
}
@ -228,9 +189,7 @@ public class GunsTool {
}
public static int getGunIntTag(final CompoundTag tag, String name) {
var data = tag.getCompound("GunData");
if (!data.contains(name)) return (int) getGunDefaultData(tag, name);
return data.getInt(name);
return getGunIntTag(tag, name, 0);
}
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) {
var data = tag.getCompound("GunData");
if (!data.contains(name) && !tag.getBoolean("init")) return getGunDefaultData(tag, name);
return data.getDouble(name);
return getGunDoubleTag(tag, name, 0);
}
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) {
var data = tag.getCompound("GunData");
if (!data.contains(name)) return getGunDefaultData(tag, name) != 0;
if (!data.contains(name)) return false;
return data.getBoolean(name);
}