重构换弹功能
This commit is contained in:
parent
74857554e2
commit
1c0dd5f938
10 changed files with 29 additions and 57 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
{
|
{
|
||||||
"id": "tacz:bullet",
|
"id": "tacz:bullet",
|
||||||
"required": false
|
"required": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tacz:bullet_void",
|
||||||
|
"required": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"values": [
|
||||||
|
"superbwarfare:minigun",
|
||||||
|
"superbwarfare:bocek"
|
||||||
|
]
|
||||||
|
}
|
|
@ -86,9 +86,14 @@ public class ClickHandler {
|
||||||
}
|
}
|
||||||
if (player.getMainHandItem().is(ModTags.Items.GUN)) {
|
if (player.getMainHandItem().is(ModTags.Items.GUN)) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
|
|
||||||
|
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));
|
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
|
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
||||||
|
|
|
@ -86,6 +86,7 @@ public class ModItemTagProvider extends ItemTagsProvider {
|
||||||
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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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())) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue