重构换弹功能

This commit is contained in:
17146 2024-09-29 01:26:02 +08:00
parent 74857554e2
commit 1c0dd5f938
10 changed files with 29 additions and 57 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2024-09-26T10:52:55.796428 Tags for minecraft:item mod id superbwarfare // 1.20.1 2024-09-29T01:21:56.4028996 Tags for minecraft:item mod id superbwarfare
cf8d49a8d2872286d1a9c3d4a7e1c2b7690db0b8 data/forge/tags/items/dusts.json cf8d49a8d2872286d1a9c3d4a7e1c2b7690db0b8 data/forge/tags/items/dusts.json
0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/forge/tags/items/dusts/coal_coke.json 0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/forge/tags/items/dusts/coal_coke.json
295ddf906b7133a0558d03e9a60eea18281fe430 data/forge/tags/items/dusts/iron.json 295ddf906b7133a0558d03e9a60eea18281fe430 data/forge/tags/items/dusts/iron.json
@ -26,6 +26,7 @@ af6fd64b4a685c353f243763db268f7b2304c009 data/forge/tags/items/storage_blocks/le
30d1daa7590f7364b5bc2dc777a00caf2f5eecb0 data/forge/tags/items/storage_blocks/silver.json 30d1daa7590f7364b5bc2dc777a00caf2f5eecb0 data/forge/tags/items/storage_blocks/silver.json
3743c2790deca7e779d3e4b82f092de39b446988 data/forge/tags/items/storage_blocks/steel.json 3743c2790deca7e779d3e4b82f092de39b446988 data/forge/tags/items/storage_blocks/steel.json
144e54d908121dee498b2ebba3b24b09fd6f18d9 data/forge/tags/items/storage_blocks/tungsten.json 144e54d908121dee498b2ebba3b24b09fd6f18d9 data/forge/tags/items/storage_blocks/tungsten.json
4d4dfd25a2a749e000e1bb742c2f984d4e094e5d data/superbwarfare/tags/items/cannot_reload.json
99a5a3a4bb6b5fb641dcd449937365ea174f3797 data/superbwarfare/tags/items/gun.json 99a5a3a4bb6b5fb641dcd449937365ea174f3797 data/superbwarfare/tags/items/gun.json
62eb408544731ce4cfcd119d8a6cc74731189ac0 data/superbwarfare/tags/items/handgun.json 62eb408544731ce4cfcd119d8a6cc74731189ac0 data/superbwarfare/tags/items/handgun.json
68ec25b0ccd68abbbe2f33ab7097572c2140c9da data/superbwarfare/tags/items/launcher.json 68ec25b0ccd68abbbe2f33ab7097572c2140c9da data/superbwarfare/tags/items/launcher.json

View file

@ -1,3 +1,3 @@
// 1.20.1 2024-09-26T10:48:01.0937773 Tags for minecraft:damage_type mod id superbwarfare // 1.20.1 2024-09-29T01:21:56.4071846 Tags for minecraft:damage_type mod id superbwarfare
839ee2020032c8add1d2d30708b6fa32fd8ae734 data/superbwarfare/tags/damage_type/projectile.json ef5293b64057e0650bbb5976246839665f10a0fb data/superbwarfare/tags/damage_type/projectile.json
85cb0739f1ef55bd7187621db3e912c923ac9269 data/superbwarfare/tags/damage_type/projectile_absolute.json 91f6543d0bd595a1d2b5a74872daed295650ab32 data/superbwarfare/tags/damage_type/projectile_absolute.json

View file

@ -8,6 +8,10 @@
{ {
"id": "tacz:bullet", "id": "tacz:bullet",
"required": false "required": false
},
{
"id": "tacz:bullet_void",
"required": false
} }
] ]
} }

View file

@ -5,6 +5,10 @@
{ {
"id": "tacz:bullet_ignore_armor", "id": "tacz:bullet_ignore_armor",
"required": false "required": false
},
{
"id": "tacz:bullet_void_ignore_armor",
"required": false
} }
] ]
} }

View file

@ -0,0 +1,6 @@
{
"values": [
"superbwarfare:minigun",
"superbwarfare:bocek"
]
}

View file

@ -86,7 +86,12 @@ public class ClickHandler {
} }
if (player.getMainHandItem().is(ModTags.Items.GUN)) { if (player.getMainHandItem().is(ModTags.Items.GUN)) {
event.setCanceled(true); event.setCanceled(true);
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0));
if (stack.is(ModTags.Items.GUN) && !stack.is(ModTags.Items.CANNOT_RELOAD) && stack.getOrCreateTag().getInt("ammo") <= 0) {
ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0));
} else {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0));
}
} }
} }

View file

@ -78,14 +78,15 @@ public class ModItemTagProvider extends ItemTagsProvider {
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get()); ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get());
this.tag(ModTags.Items.OPEN_BOLT).add(ModItems.ABEKIRI.get(), ModItems.AK_47.get(), ModItems.SVD.get(), ModItems.M_60.get(), ModItems.MK_14.get(), ModItems.VECTOR.get(), this.tag(ModTags.Items.OPEN_BOLT).add(ModItems.ABEKIRI.get(), ModItems.AK_47.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.NTW_20.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()); 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.USE_HANDGUN_AMMO).add(ModItems.TRACHELIUM.get(), ModItems.GLOCK_17.get(), ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.VECTOR.get()); this.tag(ModTags.Items.USE_HANDGUN_AMMO).add(ModItems.TRACHELIUM.get(), ModItems.GLOCK_17.get(), ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.VECTOR.get());
this.tag(ModTags.Items.USE_RIFLE_AMMO).add(ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.SKS.get(),ModItems.MINIGUN.get(),ModItems.DEVOTION.get(),ModItems.M_60.get(), this.tag(ModTags.Items.USE_RIFLE_AMMO).add(ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.SKS.get(), ModItems.MINIGUN.get(), ModItems.DEVOTION.get(), ModItems.M_60.get(),
ModItems.MK_14.get(), ModItems.MARLIN.get(), ModItems.AK_47.get(), ModItems.QBZ_95.get(), ModItems.RPK.get()); ModItems.MK_14.get(), ModItems.MARLIN.get(), ModItems.AK_47.get(), ModItems.QBZ_95.get(), ModItems.RPK.get());
this.tag(ModTags.Items.USE_SHOTGUN_AMMO).add(ModItems.ABEKIRI.get(), ModItems.M_870.get(), ModItems.AA_12.get()); this.tag(ModTags.Items.USE_SHOTGUN_AMMO).add(ModItems.ABEKIRI.get(), ModItems.M_870.get(), ModItems.AA_12.get());
this.tag(ModTags.Items.USE_SNIPER_AMMO).add(ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.SENTINEL.get(), this.tag(ModTags.Items.USE_SNIPER_AMMO).add(ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.SENTINEL.get(),
ModItems.SVD.get(), ModItems.M_98B.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get()); ModItems.SVD.get(), ModItems.M_98B.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get());
this.tag(ModTags.Items.LAUNCHER).add(ModItems.M_79.get(), ModItems.RPG.get(), ModItems.JAVELIN.get()); this.tag(ModTags.Items.LAUNCHER).add(ModItems.M_79.get(), ModItems.RPG.get(), ModItems.JAVELIN.get());
this.tag(ModTags.Items.CANNOT_RELOAD).add(ModItems.MINIGUN.get(), ModItems.BOCEK.get());
} }
private static TagKey<Item> forgeTag(String name) { private static TagKey<Item> forgeTag(String name) {

View file

@ -88,7 +88,6 @@ public class PlayerEventHandler {
if (event.phase == TickEvent.Phase.END) { if (event.phase == TickEvent.Phase.END) {
if (stack.is(ModTags.Items.GUN)) { if (stack.is(ModTags.Items.GUN)) {
handleWeaponAutoReload(player);
handleWeaponSway(player); handleWeaponSway(player);
handlePlayerSprint(player); handlePlayerSprint(player);
handleWeaponLevel(player); handleWeaponLevel(player);
@ -116,54 +115,6 @@ public class PlayerEventHandler {
&& !level.getBlockState(BlockPos.containing(player.getX() + 0.7 * player.getLookAngle().x, player.getY() + 1.5, player.getZ() + 0.7 * player.getLookAngle().z)).canOcclude(); && !level.getBlockState(BlockPos.containing(player.getX() + 0.7 * player.getLookAngle().x, player.getY() + 1.5, player.getZ() + 0.7 * player.getLookAngle().z)).canOcclude();
} }
private static void handleWeaponAutoReload(Player player) {
if (player.level().isClientSide) {
ItemStack stack = player.getMainHandItem();
var capability = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables());
if (!player.isSpectator()
&& stack.is(ModTags.Items.GUN)
&& !stack.getOrCreateTag().getBoolean("sentinel_is_charging")
&& !(player.getCooldowns().isOnCooldown(stack.getItem()))
&& stack.getOrCreateTag().getInt("draw_time") > 35
&& stack.getOrCreateTag().getInt("gun_reloading_time") == 0
&& stack.getOrCreateTag().getInt("ammo") == 0
) {
CompoundTag tag = stack.getOrCreateTag();
// 检查备弹
int count = 0;
for (var inv : player.getInventory().items) {
if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) {
count++;
}
}
if (count == 0) {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) {
return;
} else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) {
return;
} else if ((stack.is(ModTags.Items.USE_HANDGUN_AMMO) || stack.is(ModTags.Items.SMG)) && capability.handgunAmmo == 0) {
return;
} else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) {
return;
} else if (stack.getItem() == ModItems.TASER.get() && tag.getInt("max_ammo") == 0) {
return;
} else if (stack.getItem() == ModItems.M_79.get() && tag.getInt("max_ammo") == 0) {
return;
} else if (stack.getItem() == ModItems.RPG.get() && tag.getInt("max_ammo") == 0) {
return;
} else if (stack.getItem() == ModItems.JAVELIN.get() && tag.getInt("max_ammo") == 0) {
return;
}
}
ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0));
}
}
}
private static void handleWeaponSway(Player player) { private static void handleWeaponSway(Player player) {
if (player.getMainHandItem().is(ModTags.Items.GUN)) { if (player.getMainHandItem().is(ModTags.Items.GUN)) {
float pose; float pose;

View file

@ -28,6 +28,7 @@ public class ModTags {
public static final TagKey<Item> NORMAL_GUN = tag("normal_gun"); public static final TagKey<Item> NORMAL_GUN = tag("normal_gun");
public static final TagKey<Item> OPEN_BOLT = tag("open_bolt"); public static final TagKey<Item> OPEN_BOLT = tag("open_bolt");
public static final TagKey<Item> CANNOT_RELOAD = tag("cannot_reload");
private static TagKey<Item> tag(String name) { private static TagKey<Item> tag(String name) {
return ItemTags.create(new ResourceLocation(ModUtils.MODID, name)); return ItemTags.create(new ResourceLocation(ModUtils.MODID, name));

View file

@ -61,7 +61,6 @@ public class ReloadMessage {
boolean clipLoad = tag.getInt("ammo") == 0 && tag.getDouble("clipLoad") == 1; boolean clipLoad = tag.getInt("ammo") == 0 && tag.getDouble("clipLoad") == 1;
// 检查备弹 // 检查备弹
int count = 0; int count = 0;
for (var inv : player.getInventory().items) { for (var inv : player.getInventory().items) {
if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) { if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) {