优化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 (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));
} else {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
@ -424,7 +425,8 @@ public class GunEventHandler {
ItemStack stack = player.getMainHandItem();
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 {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
GunsTool.reload(player, stack, GunInfo.Type.SHOTGUN);
@ -581,7 +583,8 @@ public class GunEventHandler {
&& tag.getInt("reload_stage") == 2
&& tag.getInt("iterative") == 0
&& !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);
int iterativeTime = GunsTool.getGunIntTag(stack, "IterativeTime", 0);
@ -611,7 +614,8 @@ public class GunEventHandler {
// 二阶段结束
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);
}

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);
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 ammoReload = (int) Math.min(mag, mag * rate);
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());
}
} 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);
}

View file

@ -70,10 +70,13 @@ public abstract class GunItem extends Item {
handleGunPerks(stack);
handleGunAttachment(stack);
if ((gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1)
|| (!gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"))
if ((gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) >
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 -> {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
@ -88,7 +91,8 @@ public abstract class GunItem extends Item {
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, "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));
}
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -94,22 +94,23 @@ public class ReloadMessage {
if (gunItem.isOpenBolt(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);
}
} 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);
}
}
} 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);
}
return;
}
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);
}
}

View file

@ -73,7 +73,7 @@ public class GunsTool {
stack.addTagElement("GunData", data);
});
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) {
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 ammoToAdd = mag - ammo + (extraOne ? 1 : 0);