优化NBT#CustomMagazine

This commit is contained in:
17146 2025-01-04 01:14:28 +08:00
parent e2252e4ff8
commit 4830dc1366
13 changed files with 35 additions and 25 deletions

View file

@ -401,7 +401,8 @@ public class GunEventHandler {
if (!(stack.getItem() instanceof GunItem gunItem)) return; if (!(stack.getItem() instanceof GunItem gunItem)) return;
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0)
+ (gunItem.bulletInBarrel(stack) ? 1 : 0)); + (gunItem.bulletInBarrel(stack) ? 1 : 0));
} else { } else {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
@ -424,7 +425,8 @@ public class GunEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) {
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0));
} else { } else {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
GunsTool.reload(player, stack, GunInfo.Type.SHOTGUN); GunsTool.reload(player, stack, GunInfo.Type.SHOTGUN);
@ -581,7 +583,8 @@ public class GunEventHandler {
&& tag.getInt("reload_stage") == 2 && tag.getInt("reload_stage") == 2
&& tag.getInt("iterative") == 0 && tag.getInt("iterative") == 0
&& !tag.getBoolean("stop") && !tag.getBoolean("stop")
&& GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { && GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) {
playGunLoopReloadSounds(player); playGunLoopReloadSounds(player);
int iterativeTime = GunsTool.getGunIntTag(stack, "IterativeTime", 0); int iterativeTime = GunsTool.getGunIntTag(stack, "IterativeTime", 0);
@ -611,7 +614,8 @@ public class GunEventHandler {
// 二阶段结束 // 二阶段结束
if (tag.getInt("iterative") == 1) { if (tag.getInt("iterative") == 1) {
// 装满结束 // 装满结束
if (GunsTool.getGunIntTag(stack, "Ammo", 0) >= GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) >= GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) {
tag.putInt("reload_stage", 3); tag.putInt("reload_stage", 3);
} }

View file

@ -615,7 +615,7 @@ public class LivingEventHandler {
float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.07f : 0f); float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.07f : 0f);
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0);
int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0); int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0);
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);

View file

@ -330,7 +330,8 @@ public class PlayerEventHandler {
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());
} }
} else { } else {
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0));
} }
GunsTool.setGunBooleanTag(stack, "HoldOpen", false); GunsTool.setGunBooleanTag(stack, "HoldOpen", false);
} }

View file

@ -70,10 +70,13 @@ public abstract class GunItem extends Item {
handleGunPerks(stack); handleGunPerks(stack);
handleGunAttachment(stack); handleGunAttachment(stack);
if ((gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1) if ((gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) >
|| (!gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")) GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0) + 1)
|| (!gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) >
GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0))
) { ) {
int count = GunsTool.getGunIntTag(stack, "Ammo", 0) - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (gunItem.bulletInBarrel(stack) ? 1 : 0); int count = GunsTool.getGunIntTag(stack, "Ammo", 0) - GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0) - (gunItem.bulletInBarrel(stack) ? 1 : 0);
entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
@ -88,7 +91,8 @@ public abstract class GunItem extends Item {
capability.syncPlayerVariables(entity); capability.syncPlayerVariables(entity);
}); });
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (gunItem.bulletInBarrel(stack) ? 1 : 0)); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0) + (gunItem.bulletInBarrel(stack) ? 1 : 0));
} }
} }
} }
@ -167,7 +171,7 @@ public abstract class GunItem extends Item {
GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 0); GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 0);
GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0); GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0);
int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0);
GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, GunsTool.getGunIntTag(stack, "Ammo", 0) + 2)); GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, GunsTool.getGunIntTag(stack, "Ammo", 0) + 2));
} }
} }

View file

@ -187,7 +187,7 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem {
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); GunsTool.setGunIntTag(stack, "CustomMagazine", customMag);
} }
@Override @Override

View file

@ -196,7 +196,7 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem {
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); GunsTool.setGunIntTag(stack, "CustomMagazine", customMag);
} }
@Override @Override

View file

@ -178,7 +178,7 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem {
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); GunsTool.setGunIntTag(stack, "CustomMagazine", customMag);
} }
@Override @Override

View file

@ -197,7 +197,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
GunsTool.setGunBooleanTag(stack, "CanSwitchScope", scopeType == 2); GunsTool.setGunBooleanTag(stack, "CanSwitchScope", scopeType == 2);
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); GunsTool.setGunIntTag(stack, "CustomMagazine", customMag);
} }
@Override @Override

View file

@ -181,7 +181,7 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem {
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); GunsTool.setGunIntTag(stack, "CustomMagazine", customMag);
} }
@Override @Override

View file

@ -184,7 +184,7 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem {
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); GunsTool.setGunIntTag(stack, "CustomMagazine", customMag);
} }
@Override @Override

View file

@ -158,7 +158,7 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
}; };
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); GunsTool.setGunDoubleTag(stack, "CustomMagazine", customMag);
} }
public static ItemStack getGunInstance() { public static ItemStack getGunInstance() {

View file

@ -94,22 +94,23 @@ public class ReloadMessage {
if (gunItem.isOpenBolt(stack)) { if (gunItem.isOpenBolt(stack)) {
if (gunItem.bulletInBarrel(stack)) { if (gunItem.bulletInBarrel(stack)) {
if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag") + 1) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + GunsTool.getGunIntTag(stack, "CustomMagazine", 0) + 1) {
GunsTool.setGunBooleanTag(stack, "StartReload", true); GunsTool.setGunBooleanTag(stack, "StartReload", true);
} }
} else { } else {
if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) {
GunsTool.setGunBooleanTag(stack, "StartReload", true); GunsTool.setGunBooleanTag(stack, "StartReload", true);
} }
} }
} else if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) { } else if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) {
GunsTool.setGunBooleanTag(stack, "StartReload", true); GunsTool.setGunBooleanTag(stack, "StartReload", true);
} }
return; return;
} }
if (canSingleReload) { if (canSingleReload) {
if (GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0)
+ GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) {
tag.putBoolean("start_single_reload", true); tag.putBoolean("start_single_reload", true);
} }
} }

View file

@ -73,7 +73,7 @@ public class GunsTool {
stack.addTagElement("GunData", data); stack.addTagElement("GunData", data);
}); });
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0)
+ stack.getOrCreateTag().getInt("customMag")); + GunsTool.getGunIntTag(stack, "CustomMagazine", 0));
} }
} }
@ -103,9 +103,9 @@ public class GunsTool {
public static void reload(Player player, ItemStack stack, GunInfo.Type type, boolean extraOne) { public static void reload(Player player, ItemStack stack, GunInfo.Type type, boolean extraOne) {
CompoundTag tag = stack.getOrCreateTag(); CompoundTag tag = stack.getOrCreateTag();
if (!(stack.getItem() instanceof GunItem gunItem)) return; if (!(stack.getItem() instanceof GunItem)) return;
int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag"); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0);
int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0); int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0);
int ammoToAdd = mag - ammo + (extraOne ? 1 : 0); int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);