移除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();
if (stack.is(TargetModTags.Items.NORMAL_GUN)) {
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()) {
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().getInt("ammo") > 0
&& !player.getCooldowns().isOnCooldown(stack.getItem())
&& mode != 1
&& stack.getOrCreateTag().getDouble("need_bolt_action") == 0) {
playGunSounds(player);
if (stack.getOrCreateTag().getInt("fire_mode") == 0) {
if (mode == 0) {
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) {
stack.getOrCreateTag().putDouble("animindex", 0);
} else {
@ -145,8 +157,8 @@ public class GunEventHandler {
}
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
stack.getOrCreateTag().putInt("fire_animation", stack.getOrCreateTag().getInt("fire_interval"));
player.getPersistentData().putInt("noRun_time", stack.getOrCreateTag().getInt("fire_interval") + 2);
stack.getOrCreateTag().putInt("fire_animation", interval);
player.getPersistentData().putInt("noRun_time", interval + 2);
stack.getOrCreateTag().putDouble("flash_time", 2);
stack.getOrCreateTag().putDouble("empty", 1);
@ -183,7 +195,7 @@ public class GunEventHandler {
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);
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;
}
@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) {
if (transformType != null && transformType.firstPerson()) {
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.TargetModSounds;
import net.mcreator.target.init.TargetModTags;
import net.minecraft.core.Holder;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
@ -48,21 +49,12 @@ public class FireModeMessage {
}
}
private static void setFireMode(Player player, CompoundTag tag, int mode) {
if (player.getServer() == null) return;
var text = switch (mode) {
case 0 -> "Semi";
case 1 -> "Burst";
case 2 -> "Auto";
default -> "";
};
private static void setFireMode(Player player, CompoundTag tag) {
if (player instanceof ServerPlayer serverPlayer) {
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()));
}
tag.putInt("fire_mode", mode);
tag.putDouble("cg", 10);
}
@ -72,17 +64,56 @@ public class FireModeMessage {
Item item = mainHandItem.getItem();
int fireMode = tag.getInt("fire_mode");
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 (mainHandItem.is(TargetModTags.Items.GUN)) {
if (tag.getInt("fire_mode") == 0) {
if (tag.getDouble("burst") == 1) {
tag.putInt("fire_mode", 1);
setFireMode(player, tag);
return;
}
if (tag.getDouble("auto") == 1) {
tag.putInt("fire_mode", 2);
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) {
tag.putDouble("charging", 1);
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 static void execute(Player player) {
var mainHandItem = player.getMainHandItem();
var tag = mainHandItem.getOrCreateTag();
TaserfireProcedure.execute(player);
M79fireProcedure.execute(player);
RpgFireProcedure.execute(player);
MarlinfireProcedure.execute(player);
M870fireProcedure.execute(player);
VectorFireProcedure.execute(player);
player.getPersistentData().putBoolean("firing", true);
var mainHandItem = player.getMainHandItem();
var tag = mainHandItem.getOrCreateTag();
if (mainHandItem.is(TargetModTags.Items.GUN)) {
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)
&& !(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,
"projectile_amount": 8,
"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,
"projectile_amount": 8,
"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,
"projectile_amount": 1,
"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,
"headshot": 1.5,
"damage": 24,
"weight": 1,
"weight": 1
}

View file

@ -9,8 +9,12 @@
"headshot": 2,
"velocity": 40,
"mag": 55,
"fire_mode": 2,
"projectile_amount": 1,
"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,
"projectile_amount": 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,
"mag": 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,
"fire_interval": 10,
"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,
"projectile_amount": 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,
"velocity": 40,
"mag": 100,
"fire_mode": 2,
"projectile_amount": 1,
"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,
"velocity": 3.75,
"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,
"velocity": 20,
"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,
"fire_interval": 6,
"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,
"velocity": 27,
"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,
"headshot": 2,
"velocity": 40,
"fire_mode": 2,
"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,
"projectile_amount": 1,
"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,
"velocity": 5.75,
"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,
"projectile_amount": 1,
"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,
"fire_interval": 2,
"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,
"projectile_amount": 1,
"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,
"projectile_amount": 1,
"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,
"velocity": 3,
"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,
"projectile_amount": 1,
"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,
"projectile_amount": 1,
"fire_interval": 1,
"weight": 0
"weight": 0,
"fire_mode": 2,
"semi": 1,
"burst": 1,
"auto": 1,
"burst_size": 3
}