重写开膛待击和膛内有蛋判定

This commit is contained in:
Atsuihsio 2024-12-30 13:57:17 +08:00
parent ca7c919e43
commit a95d7f19ea
27 changed files with 123 additions and 78 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2024-11-29T19:04:10.4852137 Tags for minecraft:item mod id superbwarfare
// 1.20.1 2024-12-30T13:49:03.1510086 Tags for minecraft:item mod id superbwarfare
cf8d49a8d2872286d1a9c3d4a7e1c2b7690db0b8 data/forge/tags/items/dusts.json
0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/forge/tags/items/dusts/coal_coke.json
295ddf906b7133a0558d03e9a60eea18281fe430 data/forge/tags/items/dusts/iron.json
@ -33,7 +33,6 @@ cedce5ff7bbc95b40cbfced0f03a3da712118049 data/superbwarfare/tags/items/can_apply
cedce5ff7bbc95b40cbfced0f03a3da712118049 data/superbwarfare/tags/items/can_apply_scope.json
29af1d9a8f837510bc039feb578330f1a053543f data/superbwarfare/tags/items/can_apply_stock.json
cedce5ff7bbc95b40cbfced0f03a3da712118049 data/superbwarfare/tags/items/can_custom_gun.json
dff9ff6d6637951191906cb55a210ae5a3ad5cd6 data/superbwarfare/tags/items/extra_one_ammo.json
52598e22974c8da0d2852defe4c9005e1d67744b data/superbwarfare/tags/items/gun.json
62eb408544731ce4cfcd119d8a6cc74731189ac0 data/superbwarfare/tags/items/handgun.json
49fbb8c030fdfafec1f291acc1cdff406c777c7e data/superbwarfare/tags/items/has_shell_effect.json
@ -42,7 +41,6 @@ dae3f86663e841d336efff9d23d8910aa7247be5 data/superbwarfare/tags/items/is_auto_w
b404c6fd99d2ca68c6738f225cb7d68ee443c10a data/superbwarfare/tags/items/machine_gun.json
a53020091752016da6602ee1b8b7e08823614344 data/superbwarfare/tags/items/military_armor.json
1ff5db892183135cbdd9c38a6b8c6e4eb287341e data/superbwarfare/tags/items/normal_gun.json
324ad3d6125d66153f899a424521bc99f2c0dde8 data/superbwarfare/tags/items/open_bolt.json
15328cd564c931cc0a4fc000596240f93a7b29a1 data/superbwarfare/tags/items/revolver.json
aaa533157491a82b8e23b2914deef67c4078cbed data/superbwarfare/tags/items/rifle.json
acd4d19dfadb71a1cec43e9c0f4a38fe8d3cf8cb data/superbwarfare/tags/items/shotgun.json

View file

@ -1,22 +0,0 @@
{
"values": [
"superbwarfare:ak_47",
"superbwarfare:ak_12",
"superbwarfare:svd",
"superbwarfare:mk_14",
"superbwarfare:vector",
"superbwarfare:sks",
"superbwarfare:rpk",
"superbwarfare:hk_416",
"superbwarfare:aa_12",
"superbwarfare:m_4",
"superbwarfare:devotion",
"superbwarfare:ntw_20",
"superbwarfare:m_98b",
"superbwarfare:sentinel",
"superbwarfare:glock_17",
"superbwarfare:glock_18",
"superbwarfare:m_1911",
"superbwarfare:qbz_95"
]
}

View file

@ -1,24 +0,0 @@
{
"values": [
"superbwarfare:abekiri",
"superbwarfare:ak_47",
"superbwarfare:ak_12",
"superbwarfare:svd",
"superbwarfare:m_60",
"superbwarfare:mk_14",
"superbwarfare:vector",
"superbwarfare:sks",
"superbwarfare:rpk",
"superbwarfare:hk_416",
"superbwarfare:aa_12",
"superbwarfare:m_4",
"superbwarfare:devotion",
"superbwarfare:ntw_20",
"superbwarfare:m_98b",
"superbwarfare:sentinel",
"superbwarfare:glock_17",
"superbwarfare:glock_18",
"superbwarfare:m_1911",
"superbwarfare:qbz_95"
]
}

View file

@ -104,10 +104,6 @@ public class ModItemTagProvider extends ItemTagsProvider {
ModItems.QBZ_95.get(), ModItems.MK_14.get(), ModItems.AA_12.get(), ModItems.GLOCK_18.get(), ModItems.VECTOR.get(), ModItems.AA_12.get(), ModItems.MINIGUN.get(),
ModItems.DEVOTION.get(), ModItems.M_60.get(), ModItems.RPK.get());
this.tag(ModTags.Items.EXTRA_ONE_AMMO).add(ModItems.AK_47.get(), ModItems.AK_12.get(), ModItems.SVD.get(), ModItems.MK_14.get(), ModItems.VECTOR.get(),ModItems.SKS.get(),
ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(),ModItems.NTW_20.get(), ModItems.M_98B.get(),
ModItems.SENTINEL.get(), ModItems.GLOCK_17.get(),ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get());
this.tag(ModTags.Items.HAS_SHELL_EFFECT).add(ModItems.AK_47.get(), ModItems.AK_12.get(), ModItems.SVD.get(), ModItems.M_60.get(), ModItems.MK_14.get(), ModItems.VECTOR.get(),
ModItems.SKS.get(), ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(), ModItems.GLOCK_17.get(),
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get());

View file

@ -402,18 +402,24 @@ public class GunEventHandler {
public static void playGunNormalReload(Player player) {
ItemStack stack = player.getMainHandItem();
GunItem gunItem = null;
if (stack.getItem() instanceof GunItem gunItem1) {
gunItem = gunItem1;
}
if (gunItem == null) 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")
+ (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0));
+ (gunItem.bulletInBarrel(stack) ? 1 : 0));
} else {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
GunsTool.reload(player, stack, GunInfo.Type.SHOTGUN, stack.is(ModTags.Items.EXTRA_ONE_AMMO));
GunsTool.reload(player, stack, GunInfo.Type.SHOTGUN, gunItem.bulletInBarrel(stack));
} else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) {
GunsTool.reload(player, stack, GunInfo.Type.SNIPER, true);
} else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) {
GunsTool.reload(player, stack, GunInfo.Type.HANDGUN, true);
} else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) {
GunsTool.reload(player, stack, GunInfo.Type.RIFLE, stack.is(ModTags.Items.EXTRA_ONE_AMMO));
GunsTool.reload(player, stack, GunInfo.Type.RIFLE, gunItem.bulletInBarrel(stack));
}
}
stack.getOrCreateTag().putBoolean("is_normal_reloading", false);

View file

@ -17,7 +17,6 @@ public class ModTags {
public static final TagKey<Item> USE_RIFLE_AMMO = tag("use_rifle_ammo");
public static final TagKey<Item> USE_SHOTGUN_AMMO = tag("use_shotgun_ammo");
public static final TagKey<Item> USE_SNIPER_AMMO = tag("use_sniper_ammo");
public static final TagKey<Item> EXTRA_ONE_AMMO = tag("extra_one_ammo");
public static final TagKey<Item> SMG = tag("smg");
public static final TagKey<Item> HANDGUN = tag("handgun");

View file

@ -55,6 +55,12 @@ public abstract class GunItem extends Item {
return;
}
GunItem gunItem = null;
if (stack.getItem() instanceof GunItem gunItem1) {
gunItem = gunItem1;
}
if (gunItem == null) return;
if (!ItemNBTTool.getBoolean(stack, "init", false)) {
GunsTool.initGun(level, stack, this.getDescriptionId().substring(this.getDescriptionId().lastIndexOf('.') + 1));
GunsTool.generateAndSetUUID(stack);
@ -68,10 +74,10 @@ public abstract class GunItem extends Item {
handleGunPerks(stack);
handleGunAttachment(stack);
if ((stack.is(ModTags.Items.EXTRA_ONE_AMMO) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1)
|| (!stack.is(ModTags.Items.EXTRA_ONE_AMMO) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"))
if ((gunItem.bulletInBarrel(stack) && gunItem.getAmmoCount(stack) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1)
|| (!gunItem.bulletInBarrel(stack) && gunItem.getAmmoCount(stack) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"))
) {
int count = GunsTool.getGunIntTag(stack, "Ammo", 0) - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0);
int count = gunItem.getAmmoCount(stack) - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (gunItem.bulletInBarrel(stack) ? 1 : 0);
entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
@ -86,7 +92,7 @@ public abstract class GunItem extends Item {
capability.syncPlayerVariables(entity);
});
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0));
GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (gunItem.bulletInBarrel(stack) ? 1 : 0));
}
}
}
@ -251,4 +257,8 @@ public abstract class GunItem extends Item {
public boolean isOpenBolt(ItemStack stack) {
return false;
}
public boolean bulletInBarrel(ItemStack stack) {
return false;
}
}

View file

@ -157,4 +157,9 @@ public class Glock17Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -160,4 +160,9 @@ public class Glock18Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -148,4 +148,9 @@ public class M1911Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -144,4 +144,9 @@ public class DevotionItem extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -145,4 +145,9 @@ public class RpkItem extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -209,4 +209,9 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -223,4 +223,9 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -225,4 +225,9 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -224,4 +224,9 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -223,4 +223,9 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -226,4 +226,9 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -158,4 +158,9 @@ public class SksItem extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -177,4 +177,9 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -199,4 +199,9 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -160,4 +160,9 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -161,4 +161,9 @@ public class Ntw20Item extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -243,4 +243,9 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -143,4 +143,9 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem {
public boolean isOpenBolt(ItemStack stack) {
return true;
}
@Override
public boolean bulletInBarrel(ItemStack stack) {
return true;
}
}

View file

@ -96,26 +96,12 @@ public class ReloadMessage {
}
if (canReload || clipLoad) {
int magazine = gunItem.getAmmoCount(stack);
if (gunItem.isOpenBolt(stack)) {
if (stack.is(ModTags.Items.EXTRA_ONE_AMMO)) {
if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag") + 1) {
tag.putBoolean("start_reload", true);
}
} else {
if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) {
tag.putBoolean("start_reload", true);
}
}
} else if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) {
tag.putBoolean("start_reload", true);
}
return;
}
if (canSingleReload) {
if (GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) {
if (gunItem.getAmmoCount(stack) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) {
tag.putBoolean("start_single_reload", true);
}
}

View file

@ -2,6 +2,7 @@ package com.atsuishio.superbwarfare.tools;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.network.ModVariables;
import com.atsuishio.superbwarfare.network.message.GunsDataMessage;
import com.google.gson.stream.JsonReader;
@ -102,9 +103,14 @@ public class GunsTool {
public static void reload(Player player, ItemStack stack, GunInfo.Type type, boolean extraOne) {
CompoundTag tag = stack.getOrCreateTag();
GunItem gunItem = null;
if (stack.getItem() instanceof GunItem gunItem1) {
gunItem = gunItem1;
}
if (gunItem == null) return;
int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag");
int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0);
int ammo = gunItem.getAmmoCount(stack);
int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);
// 空仓换弹的栓动武器应该在换弹后取消待上膛标记