移除vector爆发开火procedure,,添加了射击模式选择的data和通用的射击模式切换的方法

This commit is contained in:
Atsuihsio 2024-05-21 00:09:18 +08:00
parent 9bb6400b55
commit e6f6bd0679
29 changed files with 221 additions and 114 deletions

View file

@ -111,23 +111,35 @@ public class GunEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModTags.Items.NORMAL_GUN)) { if (stack.is(TargetModTags.Items.NORMAL_GUN)) {
double mode = stack.getOrCreateTag().getInt("fire_mode"); double mode = stack.getOrCreateTag().getInt("fire_mode");
int interval = stack.getOrCreateTag().getInt("fire_interval");
if (!player.getPersistentData().getBoolean("firing") && player.getMainHandItem().getItem() == TargetModItems.DEVOTION.get()) { if (!player.getPersistentData().getBoolean("firing") && player.getMainHandItem().getItem() == TargetModItems.DEVOTION.get()) {
stack.getOrCreateTag().putDouble("fire_increase", 0); stack.getOrCreateTag().putDouble("fire_increase", 0);
} }
if (player.getPersistentData().getBoolean("firing") if (stack.getOrCreateTag().getInt("ammo") == 0) {
stack.getOrCreateTag().putInt("burst_fire", 0);
}
if ((player.getPersistentData().getBoolean("firing") || stack.getOrCreateTag().getInt("burst_fire") > 0)
&& !stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("reloading")
&& stack.getOrCreateTag().getInt("ammo") > 0 && stack.getOrCreateTag().getInt("ammo") > 0
&& !player.getCooldowns().isOnCooldown(stack.getItem()) && !player.getCooldowns().isOnCooldown(stack.getItem())
&& mode != 1
&& stack.getOrCreateTag().getDouble("need_bolt_action") == 0) { && stack.getOrCreateTag().getDouble("need_bolt_action") == 0) {
playGunSounds(player); playGunSounds(player);
if (stack.getOrCreateTag().getInt("fire_mode") == 0) { if (mode == 0) {
player.getPersistentData().putBoolean("firing", false); player.getPersistentData().putBoolean("firing", false);
} }
int burst_cooldown = 0;
if (mode == 1) {
stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1));
burst_cooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0;
}
if (stack.getOrCreateTag().getDouble("animindex") == 1) { if (stack.getOrCreateTag().getDouble("animindex") == 1) {
stack.getOrCreateTag().putDouble("animindex", 0); stack.getOrCreateTag().putDouble("animindex", 0);
} else { } else {
@ -145,8 +157,8 @@ public class GunEventHandler {
} }
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
stack.getOrCreateTag().putInt("fire_animation", stack.getOrCreateTag().getInt("fire_interval")); stack.getOrCreateTag().putInt("fire_animation", interval);
player.getPersistentData().putInt("noRun_time", stack.getOrCreateTag().getInt("fire_interval") + 2); player.getPersistentData().putInt("noRun_time", interval + 2);
stack.getOrCreateTag().putDouble("flash_time", 2); stack.getOrCreateTag().putDouble("flash_time", 2);
stack.getOrCreateTag().putDouble("empty", 1); stack.getOrCreateTag().putDouble("empty", 1);
@ -183,7 +195,7 @@ public class GunEventHandler {
stack.getOrCreateTag().putDouble("crot", 20); stack.getOrCreateTag().putDouble("crot", 20);
} }
int cooldown = (int) stack.getOrCreateTag().getDouble("fire_interval") + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase"); int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burst_cooldown;
player.getCooldowns().addCooldown(stack.getItem(), cooldown); player.getCooldowns().addCooldown(stack.getItem(), cooldown);
for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {

View file

@ -84,42 +84,6 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
transformType = type; transformType = type;
} }
@SubscribeEvent
public static void handleBurstFire(TickEvent.PlayerTickEvent event) {
if (event.phase != TickEvent.Phase.END) return;
var player = event.player;
ItemStack mainHandItem = player.getMainHandItem();
CompoundTag tag = mainHandItem.getOrCreateTag();
if (mainHandItem.is(TargetModTags.Items.GUN)) {
if (tag.getInt("fire_mode") == 1) {
player.getPersistentData().putBoolean("firing", false);
}
if (tag.getInt("ammo") == 0) {
tag.putDouble("burst", 0);
}
}
Item item = mainHandItem.getItem();
if (item == TargetModItems.VECTOR.get()
&& !tag.getBoolean("reloading")
&& tag.getInt("ammo") > 0
&& !player.getCooldowns().isOnCooldown(item)
&& tag.getDouble("burst") > 0
) {
player.getCooldowns().addCooldown(item, tag.getDouble("burst") == 1 ? 5 : 1);
tag.putDouble("burst", tag.getDouble("burst") - 1);
tag.putInt("fire_animation", 2);
tag.putInt("ammo", (tag.getInt("ammo") - 1));
GunsTool.spawnBullet(player);
player.level().playSound(null, player.blockPosition(), TargetModSounds.VECTOR_FIRE_1P.get(), SoundSource.PLAYERS, 2, 1);
player.level().playSound(null, player.blockPosition(), TargetModSounds.VECTOR_FIRE_1P.get(), SoundSource.PLAYERS, 4, 1);
player.level().playSound(null, player.blockPosition(), TargetModSounds.VECTOR_FAR.get(), SoundSource.PLAYERS, 6, 1);
player.level().playSound(null, player.blockPosition(), TargetModSounds.VECTOR_VERYFAR.get(), SoundSource.PLAYERS, 12, 1);
}
}
private PlayState procedurePredicate(AnimationState<VectorItem> event) { private PlayState procedurePredicate(AnimationState<VectorItem> event) {
if (transformType != null && transformType.firstPerson()) { if (transformType != null && transformType.firstPerson()) {
if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {

View file

@ -2,6 +2,7 @@ package net.mcreator.target.network.message;
import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.init.TargetModTags;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
@ -48,21 +49,12 @@ public class FireModeMessage {
} }
} }
private static void setFireMode(Player player, CompoundTag tag, int mode) { private static void setFireMode(Player player, CompoundTag tag) {
if (player.getServer() == null) return;
var text = switch (mode) {
case 0 -> "Semi";
case 1 -> "Burst";
case 2 -> "Auto";
default -> "";
};
if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {
serverPlayer.connection.send(new ClientboundSoundPacket(new Holder.Direct<>(TargetModSounds.FIRE_RATE.get()), serverPlayer.connection.send(new ClientboundSoundPacket(new Holder.Direct<>(TargetModSounds.FIRE_RATE.get()),
SoundSource.PLAYERS, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 1f, 1f, serverPlayer.level().random.nextLong())); SoundSource.PLAYERS, serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 1f, 1f, serverPlayer.level().random.nextLong()));
} }
tag.putInt("fire_mode", mode);
tag.putDouble("cg", 10); tag.putDouble("cg", 10);
} }
@ -72,17 +64,56 @@ public class FireModeMessage {
Item item = mainHandItem.getItem(); Item item = mainHandItem.getItem();
int fireMode = tag.getInt("fire_mode"); int fireMode = tag.getInt("fire_mode");
if (item == TargetModItems.AK_47.get() if (mainHandItem.is(TargetModTags.Items.GUN)) {
|| item == TargetModItems.M_4.get() if (tag.getInt("fire_mode") == 0) {
|| item == TargetModItems.AA_12.get() if (tag.getDouble("burst") == 1) {
|| item == TargetModItems.HK_416.get() tag.putInt("fire_mode", 1);
|| item == TargetModItems.RPK.get() setFireMode(player, tag);
|| item == TargetModItems.MK_14.get()) { return;
setFireMode(player, tag, fireMode == 0 ? 2 : 0); }
} if (tag.getDouble("auto") == 1) {
if (item == TargetModItems.VECTOR.get()) { tag.putInt("fire_mode", 2);
setFireMode(player, tag, (fireMode + 1) % 3); setFireMode(player, tag);
return;
}
}
if (tag.getInt("fire_mode") == 1) {
if (tag.getDouble("auto") == 1) {
tag.putInt("fire_mode", 2);
setFireMode(player, tag);
return;
}
if (tag.getDouble("semi") == 1) {
tag.putInt("fire_mode", 0);
setFireMode(player, tag);
return;
}
}
if (tag.getInt("fire_mode") == 2) {
if (tag.getDouble("semi") == 1) {
tag.putInt("fire_mode", 0);
setFireMode(player, tag);
return;
}
if (tag.getDouble("burst") == 1) {
tag.putInt("fire_mode", 1);
setFireMode(player, tag);
return;
}
}
} }
// if (item == TargetModItems.AK_47.get()
// || item == TargetModItems.M_4.get()
// || item == TargetModItems.AA_12.get()
// || item == TargetModItems.HK_416.get()
// || item == TargetModItems.RPK.get()
// || item == TargetModItems.MK_14.get()) {
// setFireMode(player, tag, fireMode == 0 ? 2 : 0);
// }
// if (item == TargetModItems.VECTOR.get()) {
// setFireMode(player, tag, (fireMode + 1) % 3);
// }
if (item == TargetModItems.SENTINEL.get() && !(player.getCooldowns().isOnCooldown(item)) && tag.getDouble("charging") == 0) { if (item == TargetModItems.SENTINEL.get() && !(player.getCooldowns().isOnCooldown(item)) && tag.getDouble("charging") == 0) {
tag.putDouble("charging", 1); tag.putDouble("charging", 1);
tag.putDouble("cid", (Mth.nextDouble(RandomSource.create(), 1, 1919810))); tag.putDouble("cid", (Mth.nextDouble(RandomSource.create(), 1, 1919810)));

View file

@ -10,17 +10,25 @@ import net.minecraft.world.entity.player.Player;
public class PressFireProcedure { public class PressFireProcedure {
public static void execute(Player player) { public static void execute(Player player) {
var mainHandItem = player.getMainHandItem();
var tag = mainHandItem.getOrCreateTag();
TaserfireProcedure.execute(player); TaserfireProcedure.execute(player);
M79fireProcedure.execute(player); M79fireProcedure.execute(player);
RpgFireProcedure.execute(player); RpgFireProcedure.execute(player);
MarlinfireProcedure.execute(player); MarlinfireProcedure.execute(player);
M870fireProcedure.execute(player); M870fireProcedure.execute(player);
VectorFireProcedure.execute(player);
player.getPersistentData().putBoolean("firing", true);
var mainHandItem = player.getMainHandItem(); if (mainHandItem.is(TargetModTags.Items.GUN)) {
var tag = mainHandItem.getOrCreateTag();
if (tag.getInt("fire_mode") == 1) {
player.getPersistentData().putBoolean("firing", false);
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
} else {
player.getPersistentData().putBoolean("firing", true);
}
}
if (mainHandItem.is(TargetModTags.Items.GUN) if (mainHandItem.is(TargetModTags.Items.GUN)
&& !(mainHandItem.getItem() == TargetModItems.BOCEK.get()) && !(mainHandItem.getItem() == TargetModItems.BOCEK.get())

View file

@ -1,20 +0,0 @@
package net.mcreator.target.procedures;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
public class VectorFireProcedure {
public static void execute(Player entity) {
if (entity.isSpectator()) return;
ItemStack mainHandItem = entity.getMainHandItem();
if (mainHandItem.getItem() != TargetModItems.VECTOR.get()) return;
CompoundTag tag = mainHandItem.getOrCreateTag();
if (tag.getInt("fire_mode") == 1 && tag.getDouble("burst") == 0) {
tag.putDouble("burst", 3);
}
}
}

View file

@ -10,5 +10,10 @@
"mag": 25, "mag": 25,
"projectile_amount": 8, "projectile_amount": 8,
"fire_interval": 4, "fire_interval": 4,
"weight": 1 "weight": 1,
"fire_mode": 2,
"semi": 1,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -10,5 +10,10 @@
"mag": 2, "mag": 2,
"projectile_amount": 8, "projectile_amount": 8,
"fire_interval": 2, "fire_interval": 2,
"weight": 0 "weight": 0,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -10,5 +10,11 @@
"mag": 30, "mag": 30,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 2, "fire_interval": 2,
"weight": 1 "weight": 1,
"fire_mode": 2,
"semi": 1,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -6,6 +6,5 @@
"recoil_y": 0.003, "recoil_y": 0.003,
"headshot": 1.5, "headshot": 1.5,
"damage": 24, "damage": 24,
"weight": 1,
"weight": 1 "weight": 1
} }

View file

@ -9,8 +9,12 @@
"headshot": 2, "headshot": 2,
"velocity": 40, "velocity": 40,
"mag": 55, "mag": 55,
"fire_mode": 2,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 5, "fire_interval": 5,
"weight": 1 "weight": 1,
"fire_mode": 2,
"semi": 0,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -10,5 +10,10 @@
"mag": 30, "mag": 30,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 1, "fire_interval": 1,
"weight": 1 "weight": 1,
"fire_mode": 2,
"semi": 1,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -9,5 +9,10 @@
"velocity": 50, "velocity": 50,
"mag": 1, "mag": 1,
"projectile_amount": 1, "projectile_amount": 1,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -12,5 +12,10 @@
"mag": 4, "mag": 4,
"fire_interval": 10, "fire_interval": 10,
"bolt_action_time": 30, "bolt_action_time": 30,
"weight": 2 "weight": 2,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -10,5 +10,10 @@
"mag": 30, "mag": 30,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 1, "fire_interval": 1,
"weight": 1 "weight": 1,
"fire_mode": 2,
"semi": 1,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -9,8 +9,12 @@
"headshot": 2, "headshot": 2,
"velocity": 40, "velocity": 40,
"mag": 100, "mag": 100,
"fire_mode": 2,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 2, "fire_interval": 2,
"weight": 2 "weight": 2,
"fire_mode": 2,
"semi": 0,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -7,5 +7,10 @@
"damage": 40, "damage": 40,
"velocity": 3.75, "velocity": 3.75,
"mag": 1, "mag": 1,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -8,5 +8,10 @@
"headshot": 1.5, "headshot": 1.5,
"velocity": 20, "velocity": 20,
"mag": 8, "mag": 8,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -11,5 +11,10 @@
"mag": 5, "mag": 5,
"fire_interval": 6, "fire_interval": 6,
"bolt_action_time": 18, "bolt_action_time": 18,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -8,5 +8,10 @@
"headshot": 2.5, "headshot": 2.5,
"velocity": 27, "velocity": 27,
"mag": 8, "mag": 8,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -6,7 +6,11 @@
"damage": 8, "damage": 8,
"headshot": 2, "headshot": 2,
"velocity": 40, "velocity": 40,
"fire_mode": 2,
"fire_interval": 1, "fire_interval": 1,
"weight": 2 "weight": 2,
"fire_mode": 2,
"semi": 0,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -11,5 +11,10 @@
"mag": 20, "mag": 20,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 2, "fire_interval": 2,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -7,5 +7,10 @@
"damage": 150, "damage": 150,
"velocity": 5.75, "velocity": 5.75,
"mag": 1, "mag": 1,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -11,5 +11,10 @@
"mag": 75, "mag": 75,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 2, "fire_interval": 2,
"weight": 1 "weight": 1,
"fire_mode": 2,
"semi": 1,
"burst": 0,
"auto": 1,
"burst_size": 1
} }

View file

@ -11,5 +11,10 @@
"velocity": 50, "velocity": 50,
"fire_interval": 2, "fire_interval": 2,
"bolt_action_time": 22, "bolt_action_time": 22,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -10,5 +10,10 @@
"mag": 20, "mag": 20,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 3, "fire_interval": 3,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -10,5 +10,10 @@
"mag": 10, "mag": 10,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 5, "fire_interval": 5,
"weight": 1 "weight": 1,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -7,5 +7,10 @@
"damage": 5, "damage": 5,
"velocity": 3, "velocity": 3,
"mag": 1, "mag": 1,
"weight": 0 "weight": 0,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -10,5 +10,10 @@
"mag": 8, "mag": 8,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 5, "fire_interval": 5,
"weight": 0 "weight": 0,
"fire_mode": 0,
"semi": 1,
"burst": 0,
"auto": 0,
"burst_size": 1
} }

View file

@ -10,5 +10,10 @@
"mag": 33, "mag": 33,
"projectile_amount": 1, "projectile_amount": 1,
"fire_interval": 1, "fire_interval": 1,
"weight": 0 "weight": 0,
"fire_mode": 2,
"semi": 1,
"burst": 1,
"auto": 1,
"burst_size": 3
} }