优化NBT#CustomMagazine
This commit is contained in:
parent
e2252e4ff8
commit
4830dc1366
13 changed files with 35 additions and 25 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue