初步实现真实射速
This commit is contained in:
parent
95e69bd096
commit
9547944d15
14 changed files with 326 additions and 133 deletions
|
@ -115,6 +115,7 @@ public class ModUtils {
|
||||||
addNetworkMessage(ModVariables.SavedDataSyncMessage.class, ModVariables.SavedDataSyncMessage::buffer, ModVariables.SavedDataSyncMessage::new, ModVariables.SavedDataSyncMessage::handler);
|
addNetworkMessage(ModVariables.SavedDataSyncMessage.class, ModVariables.SavedDataSyncMessage::buffer, ModVariables.SavedDataSyncMessage::new, ModVariables.SavedDataSyncMessage::handler);
|
||||||
addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler);
|
addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler);
|
||||||
addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler);
|
addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler);
|
||||||
|
addNetworkMessage(ShootMessage.class, ShootMessage::encode, ShootMessage::decode, ShootMessage::handler);
|
||||||
|
|
||||||
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
|
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
|
||||||
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));
|
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));
|
||||||
|
|
|
@ -7,10 +7,12 @@ import net.mcreator.superbwarfare.init.ModItems;
|
||||||
import net.mcreator.superbwarfare.init.ModMobEffects;
|
import net.mcreator.superbwarfare.init.ModMobEffects;
|
||||||
import net.mcreator.superbwarfare.init.ModTags;
|
import net.mcreator.superbwarfare.init.ModTags;
|
||||||
import net.mcreator.superbwarfare.network.ModVariables;
|
import net.mcreator.superbwarfare.network.ModVariables;
|
||||||
|
import net.mcreator.superbwarfare.network.message.ShootMessage;
|
||||||
import net.minecraft.client.CameraType;
|
import net.minecraft.client.CameraType;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.util.RandomSource;
|
import net.minecraft.util.RandomSource;
|
||||||
|
@ -71,6 +73,8 @@ public class ClientEventHandler {
|
||||||
public static double bowPos = 0;
|
public static double bowPos = 0;
|
||||||
public static double handPos = 0;
|
public static double handPos = 0;
|
||||||
|
|
||||||
|
public static double ClientTimer = 0;
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void handleWeaponTurn(RenderHandEvent event) {
|
public static void handleWeaponTurn(RenderHandEvent event) {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
@ -91,6 +95,43 @@ public class ClientEventHandler {
|
||||||
droneCameraRotY = Mth.clamp(0.25f * yRot, -20, 10);
|
droneCameraRotY = Mth.clamp(0.25f * yRot, -20, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean notInGame() {
|
||||||
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
if (mc.player == null) return true;
|
||||||
|
if (mc.getOverlay() != null) return true;
|
||||||
|
if (mc.screen != null) return true;
|
||||||
|
if (!mc.mouseHandler.isMouseGrabbed()) return true;
|
||||||
|
return !mc.isWindowActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void handleWeaponFire(RenderHandEvent event) {
|
||||||
|
if (notInGame()) return;
|
||||||
|
ClientLevel level = Minecraft.getInstance().level;
|
||||||
|
Player player = Minecraft.getInstance().player;
|
||||||
|
if (player != null && level != null && player.getMainHandItem().is(ModTags.Items.NORMAL_GUN)) {
|
||||||
|
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
|
||||||
|
double customRpm = 0;
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.MARLIN.get() && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS) {
|
||||||
|
customRpm = -40;
|
||||||
|
}
|
||||||
|
|
||||||
|
double rpm = stack.getOrCreateTag().getDouble("rpm") + customRpm;
|
||||||
|
|
||||||
|
ClientTimer = Mth.clamp(ClientTimer - 25 * Minecraft.getInstance().getDeltaFrameTime(), 0, Double.POSITIVE_INFINITY);
|
||||||
|
|
||||||
|
if (ClientTimer == 0 && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS) {
|
||||||
|
ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(0));
|
||||||
|
ClientTimer = 60 / (rpm == 0 ? 600 : rpm) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.displayClientMessage(Component.literal(new java.text.DecimalFormat("####").format(ClientTimer)), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void computeCameraAngles(ViewportEvent.ComputeCameraAngles event) {
|
public static void computeCameraAngles(ViewportEvent.ComputeCameraAngles event) {
|
||||||
ClientLevel level = Minecraft.getInstance().level;
|
ClientLevel level = Minecraft.getInstance().level;
|
||||||
|
@ -315,10 +356,8 @@ public class ClientEventHandler {
|
||||||
double yaw = event.getYaw();
|
double yaw = event.getYaw();
|
||||||
double pitch = event.getPitch();
|
double pitch = event.getPitch();
|
||||||
double roll = event.getRoll();
|
double roll = event.getRoll();
|
||||||
double amplitude;
|
|
||||||
ItemStack stack = entity.getMainHandItem();
|
ItemStack stack = entity.getMainHandItem();
|
||||||
amplitude = 15000 * stack.getOrCreateTag().getDouble("recoil_y")
|
double amplitude = 15000 * stack.getOrCreateTag().getDouble("recoil_y") * stack.getOrCreateTag().getDouble("recoil_x");
|
||||||
* stack.getOrCreateTag().getDouble("recoil_x");
|
|
||||||
|
|
||||||
var capability = entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null);
|
var capability = entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null);
|
||||||
if (capability.orElse(new ModVariables.PlayerVariables()).firing > 0) {
|
if (capability.orElse(new ModVariables.PlayerVariables()).firing > 0) {
|
||||||
|
|
|
@ -13,16 +13,12 @@ import net.mcreator.superbwarfare.perk.Perk;
|
||||||
import net.mcreator.superbwarfare.perk.PerkHelper;
|
import net.mcreator.superbwarfare.perk.PerkHelper;
|
||||||
import net.mcreator.superbwarfare.tools.GunInfo;
|
import net.mcreator.superbwarfare.tools.GunInfo;
|
||||||
import net.mcreator.superbwarfare.tools.GunsTool;
|
import net.mcreator.superbwarfare.tools.GunsTool;
|
||||||
import net.mcreator.superbwarfare.tools.ParticleTool;
|
|
||||||
import net.mcreator.superbwarfare.tools.SoundTool;
|
import net.mcreator.superbwarfare.tools.SoundTool;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
import net.minecraft.world.effect.MobEffectInstance;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
@ -62,118 +58,118 @@ public class GunEventHandler {
|
||||||
private static void handleGunFire(Player player) {
|
private static void handleGunFire(Player player) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
||||||
double mode = stack.getOrCreateTag().getInt("fire_mode");
|
// double mode = stack.getOrCreateTag().getInt("fire_mode");
|
||||||
|
//
|
||||||
int interval = stack.getOrCreateTag().getInt("fire_interval");
|
// int interval = stack.getOrCreateTag().getInt("fire_interval");
|
||||||
|
//
|
||||||
if (!player.getPersistentData().getBoolean("firing") && player.getMainHandItem().getItem() == ModItems.DEVOTION.get()) {
|
// if (!player.getPersistentData().getBoolean("firing") && player.getMainHandItem().getItem() == ModItems.DEVOTION.get()) {
|
||||||
stack.getOrCreateTag().putDouble("fire_increase", 0);
|
// stack.getOrCreateTag().putDouble("fire_increase", 0);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (stack.getOrCreateTag().getInt("ammo") == 0) {
|
// if (stack.getOrCreateTag().getInt("ammo") == 0) {
|
||||||
stack.getOrCreateTag().putInt("burst_fire", 0);
|
// stack.getOrCreateTag().putInt("burst_fire", 0);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if ((player.getPersistentData().getBoolean("firing") || stack.getOrCreateTag().getInt("burst_fire") > 0)
|
// if ((player.getPersistentData().getBoolean("firing") || stack.getOrCreateTag().getInt("burst_fire") > 0)
|
||||||
&& !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
|
// && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
|
||||||
&& !stack.getOrCreateTag().getBoolean("reloading")
|
// && !stack.getOrCreateTag().getBoolean("reloading")
|
||||||
&& !stack.getOrCreateTag().getBoolean("charging")
|
// && !stack.getOrCreateTag().getBoolean("charging")
|
||||||
&& stack.getOrCreateTag().getInt("ammo") > 0
|
// && stack.getOrCreateTag().getInt("ammo") > 0
|
||||||
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
// && !player.getCooldowns().isOnCooldown(stack.getItem())
|
||||||
&& !stack.getOrCreateTag().getBoolean("need_bolt_action")) {
|
// && !stack.getOrCreateTag().getBoolean("need_bolt_action")) {
|
||||||
|
//
|
||||||
playGunSounds(player);
|
// playGunSounds(player);
|
||||||
|
//
|
||||||
if (mode == 0) {
|
// if (mode == 0) {
|
||||||
player.getPersistentData().putBoolean("firing", false);
|
// player.getPersistentData().putBoolean("firing", false);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
int burstCooldown = 0;
|
// int burstCooldown = 0;
|
||||||
if (mode == 1) {
|
// if (mode == 1) {
|
||||||
stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1));
|
// stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1));
|
||||||
burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0;
|
// burstCooldown = 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 {
|
||||||
stack.getOrCreateTag().putDouble("animindex", 1);
|
// stack.getOrCreateTag().putDouble("animindex", 1);
|
||||||
}
|
// }
|
||||||
/*
|
// /*
|
||||||
空仓挂机
|
// 空仓挂机
|
||||||
*/
|
// */
|
||||||
if (stack.getOrCreateTag().getInt("ammo") == 1) {
|
// if (stack.getOrCreateTag().getInt("ammo") == 1) {
|
||||||
stack.getOrCreateTag().putBoolean("HoldOpen", true);
|
// stack.getOrCreateTag().putBoolean("HoldOpen", true);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/*
|
// /*
|
||||||
判断是否为栓动武器(bolt_action_time > 0),并在开火后给一个需要上膛的状态
|
// 判断是否为栓动武器(bolt_action_time > 0),并在开火后给一个需要上膛的状态
|
||||||
*/
|
// */
|
||||||
if (stack.getOrCreateTag().getDouble("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 1) {
|
// if (stack.getOrCreateTag().getDouble("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 1) {
|
||||||
stack.getOrCreateTag().putBoolean("need_bolt_action", true);
|
// stack.getOrCreateTag().putBoolean("need_bolt_action", true);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
|
// stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
|
||||||
stack.getOrCreateTag().putInt("fire_animation", interval);
|
// stack.getOrCreateTag().putInt("fire_animation", interval);
|
||||||
player.getPersistentData().putInt("noRun_time", 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);
|
||||||
|
//
|
||||||
if (stack.getItem() == ModItems.M_60.get()) {
|
// if (stack.getItem() == ModItems.M_60.get()) {
|
||||||
stack.getOrCreateTag().putBoolean("bullet_chain", true);
|
// stack.getOrCreateTag().putBoolean("bullet_chain", true);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (stack.getItem() == ModItems.M_4.get() || player.getMainHandItem().getItem() == ModItems.HK_416.get() || player.getMainHandItem().getItem() == ModItems.QBZ_95.get()) {
|
// if (stack.getItem() == ModItems.M_4.get() || player.getMainHandItem().getItem() == ModItems.HK_416.get() || player.getMainHandItem().getItem() == ModItems.QBZ_95.get()) {
|
||||||
if (stack.getOrCreateTag().getDouble("fire_sequence") == 1) {
|
// if (stack.getOrCreateTag().getDouble("fire_sequence") == 1) {
|
||||||
stack.getOrCreateTag().putDouble("fire_sequence", 0);
|
// stack.getOrCreateTag().putDouble("fire_sequence", 0);
|
||||||
} else {
|
// } else {
|
||||||
stack.getOrCreateTag().putDouble("fire_sequence", 1);
|
// stack.getOrCreateTag().putDouble("fire_sequence", 1);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (stack.getItem() == ModItems.DEVOTION.get()) {
|
// if (stack.getItem() == ModItems.DEVOTION.get()) {
|
||||||
stack.getOrCreateTag().putDouble("fire_increase", stack.getOrCreateTag().getDouble("fire_increase") + 0.334);
|
// stack.getOrCreateTag().putDouble("fire_increase", stack.getOrCreateTag().getDouble("fire_increase") + 0.334);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (stack.getItem() == ModItems.ABEKIRI.get()) {
|
// if (stack.getItem() == ModItems.ABEKIRI.get()) {
|
||||||
stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND));
|
// stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND));
|
||||||
if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) {
|
// if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) {
|
||||||
ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
|
// ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
|
||||||
player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer);
|
// player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (stack.getItem() == ModItems.SENTINEL.get()) {
|
// if (stack.getItem() == ModItems.SENTINEL.get()) {
|
||||||
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
|
// stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
|
||||||
iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false)
|
// iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false)
|
||||||
);
|
// );
|
||||||
stack.getOrCreateTag().putDouble("chamber_rot", 20);
|
// stack.getOrCreateTag().putDouble("chamber_rot", 20);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
int zoomAddCooldown = 0;
|
// int zoomAddCooldown = 0;
|
||||||
if (stack.getItem() == ModItems.MARLIN.get()) {
|
// if (stack.getItem() == ModItems.MARLIN.get()) {
|
||||||
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) {
|
// if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) {
|
||||||
zoomAddCooldown = 5;
|
// zoomAddCooldown = 5;
|
||||||
stack.getOrCreateTag().putDouble("marlin_animation_time", 15);
|
// stack.getOrCreateTag().putDouble("marlin_animation_time", 15);
|
||||||
stack.getOrCreateTag().putBoolean("fastfiring", false);
|
// stack.getOrCreateTag().putBoolean("fastfiring", false);
|
||||||
} else {
|
// } else {
|
||||||
stack.getOrCreateTag().putDouble("marlin_animation_time", 10);
|
// stack.getOrCreateTag().putDouble("marlin_animation_time", 10);
|
||||||
stack.getOrCreateTag().putBoolean("fastfiring", true);
|
// stack.getOrCreateTag().putBoolean("fastfiring", true);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burstCooldown + zoomAddCooldown;
|
// int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burstCooldown + zoomAddCooldown;
|
||||||
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++) {
|
||||||
gunShoot(player);
|
// gunShoot(player);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
stack.getOrCreateTag().putBoolean("shoot", true);
|
// stack.getOrCreateTag().putBoolean("shoot", true);
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/*
|
/*
|
||||||
在开火动画的最后1tick,设置需要拉栓上膛的武器拉栓动画的倒计时为data里的拉栓时间
|
在开火动画的最后1tick,设置需要拉栓上膛的武器拉栓动画的倒计时为data里的拉栓时间
|
||||||
*/
|
*/
|
||||||
|
@ -202,7 +198,7 @@ public class GunEventHandler {
|
||||||
|
|
||||||
var tag = stack.getOrCreateTag();
|
var tag = stack.getOrCreateTag();
|
||||||
|
|
||||||
if ((player.getPersistentData().getBoolean("firing") || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) && !player.isSprinting()) {
|
if ((player.getPersistentData().getBoolean("holdFire") || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) && !player.isSprinting()) {
|
||||||
if (tag.getDouble("minigun_rotation") < 10) {
|
if (tag.getDouble("minigun_rotation") < 10) {
|
||||||
tag.putDouble("minigun_rotation", (tag.getDouble("minigun_rotation") + 1));
|
tag.putDouble("minigun_rotation", (tag.getDouble("minigun_rotation") + 1));
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,8 +72,8 @@ public class FireMessage {
|
||||||
if (type == 0) {
|
if (type == 0) {
|
||||||
handlePlayerShoot(player);
|
handlePlayerShoot(player);
|
||||||
} else if (type == 1) {
|
} else if (type == 1) {
|
||||||
player.getPersistentData().putBoolean("firing", false);
|
player.getPersistentData().putBoolean("holdFire", false);
|
||||||
player.getPersistentData().putDouble("minigun_firing", 0);
|
// player.getPersistentData().putBoolean("firing", false);
|
||||||
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
|
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
|
||||||
capability.bowPullHold = false;
|
capability.bowPullHold = false;
|
||||||
capability.syncPlayerVariables(player);
|
capability.syncPlayerVariables(player);
|
||||||
|
@ -130,10 +130,10 @@ public class FireMessage {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag.getInt("fire_mode") == 1) {
|
if (tag.getInt("fire_mode") == 1) {
|
||||||
player.getPersistentData().putBoolean("firing", false);
|
player.getPersistentData().putBoolean("holdFire", false);
|
||||||
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
|
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
|
||||||
} else {
|
} else {
|
||||||
player.getPersistentData().putBoolean("firing", true);
|
player.getPersistentData().putBoolean("holdFire", true);
|
||||||
}
|
}
|
||||||
if (tag.getDouble("prepare") == 0 && tag.getBoolean("reloading") && tag.getInt("ammo") > 0) {
|
if (tag.getDouble("prepare") == 0 && tag.getBoolean("reloading") && tag.getInt("ammo") > 0) {
|
||||||
tag.putDouble("force_stop", 1);
|
tag.putDouble("force_stop", 1);
|
||||||
|
|
|
@ -0,0 +1,148 @@
|
||||||
|
package net.mcreator.superbwarfare.network.message;
|
||||||
|
|
||||||
|
import net.mcreator.superbwarfare.init.ModItems;
|
||||||
|
import net.mcreator.superbwarfare.init.ModTags;
|
||||||
|
import net.mcreator.superbwarfare.network.ModVariables;
|
||||||
|
import net.mcreator.superbwarfare.tools.ParticleTool;
|
||||||
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import static net.mcreator.superbwarfare.event.GunEventHandler.gunShoot;
|
||||||
|
import static net.mcreator.superbwarfare.event.GunEventHandler.playGunSounds;
|
||||||
|
|
||||||
|
public class ShootMessage {
|
||||||
|
private final int type;
|
||||||
|
|
||||||
|
public ShootMessage(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ShootMessage decode(FriendlyByteBuf buffer) {
|
||||||
|
return new ShootMessage(buffer.readInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void encode(ShootMessage message, FriendlyByteBuf buffer) {
|
||||||
|
buffer.writeInt(message.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handler(ShootMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
NetworkEvent.Context context = contextSupplier.get();
|
||||||
|
context.enqueueWork(() -> {
|
||||||
|
if (context.getSender() != null) {
|
||||||
|
pressAction(context.getSender(), message.type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
context.setPacketHandled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void pressAction(Player player, int type) {
|
||||||
|
Level level = player.level();
|
||||||
|
|
||||||
|
if (!level.isLoaded(player.blockPosition())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
if (stack.is(ModTags.Items.NORMAL_GUN)) {
|
||||||
|
|
||||||
|
double mode = stack.getOrCreateTag().getInt("fire_mode");
|
||||||
|
int interval = stack.getOrCreateTag().getInt("fire_interval");
|
||||||
|
|
||||||
|
if ((player.getPersistentData().getBoolean("holdFire") || stack.getOrCreateTag().getInt("burst_fire") > 0)
|
||||||
|
&& !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
|
||||||
|
&& !stack.getOrCreateTag().getBoolean("reloading")
|
||||||
|
&& !stack.getOrCreateTag().getBoolean("charging")
|
||||||
|
&& stack.getOrCreateTag().getInt("ammo") > 0
|
||||||
|
&& !player.getCooldowns().isOnCooldown(stack.getItem())
|
||||||
|
&& !stack.getOrCreateTag().getBoolean("need_bolt_action")) {
|
||||||
|
|
||||||
|
if (mode == 0) {
|
||||||
|
player.getPersistentData().putBoolean("holdFire", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
int burstCooldown = 0;
|
||||||
|
if (mode == 1) {
|
||||||
|
player.getPersistentData().putBoolean("holdFire", false);
|
||||||
|
stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1));
|
||||||
|
burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getDouble("animindex") == 1) {
|
||||||
|
stack.getOrCreateTag().putDouble("animindex", 0);
|
||||||
|
} else {
|
||||||
|
stack.getOrCreateTag().putDouble("animindex", 1);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
空仓挂机
|
||||||
|
*/
|
||||||
|
if (stack.getOrCreateTag().getInt("ammo") == 1) {
|
||||||
|
stack.getOrCreateTag().putBoolean("HoldOpen", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
判断是否为栓动武器(bolt_action_time > 0),并在开火后给一个需要上膛的状态
|
||||||
|
*/
|
||||||
|
if (stack.getOrCreateTag().getDouble("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 1) {
|
||||||
|
stack.getOrCreateTag().putBoolean("need_bolt_action", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
|
||||||
|
stack.getOrCreateTag().putInt("fire_animation", interval);
|
||||||
|
player.getPersistentData().putInt("noRun_time", interval + 2);
|
||||||
|
stack.getOrCreateTag().putDouble("flash_time", 2);
|
||||||
|
|
||||||
|
stack.getOrCreateTag().putDouble("empty", 1);
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.M_60.get()) {
|
||||||
|
stack.getOrCreateTag().putBoolean("bullet_chain", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.ABEKIRI.get()) {
|
||||||
|
stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND));
|
||||||
|
if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) {
|
||||||
|
ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
|
||||||
|
player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.SENTINEL.get()) {
|
||||||
|
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
|
||||||
|
iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false)
|
||||||
|
);
|
||||||
|
stack.getOrCreateTag().putDouble("chamber_rot", 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.MARLIN.get()) {
|
||||||
|
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) {
|
||||||
|
stack.getOrCreateTag().putDouble("marlin_animation_time", 15);
|
||||||
|
stack.getOrCreateTag().putBoolean("fastfiring", false);
|
||||||
|
} else {
|
||||||
|
stack.getOrCreateTag().putDouble("marlin_animation_time", 10);
|
||||||
|
stack.getOrCreateTag().putBoolean("fastfiring", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int cooldown = burstCooldown;
|
||||||
|
player.getCooldowns().addCooldown(stack.getItem(), cooldown);
|
||||||
|
|
||||||
|
for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {
|
||||||
|
gunShoot(player);
|
||||||
|
}
|
||||||
|
playGunSounds(player);
|
||||||
|
|
||||||
|
stack.getOrCreateTag().putBoolean("shoot", true);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,5 +20,6 @@
|
||||||
"normal_reload_time": 64,
|
"normal_reload_time": 64,
|
||||||
"empty_reload_time": 85,
|
"empty_reload_time": 85,
|
||||||
"BypassesArmor": 0.05,
|
"BypassesArmor": 0.05,
|
||||||
"SoundRadius": 18
|
"SoundRadius": 18,
|
||||||
|
"rpm": 400
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,5 +21,6 @@
|
||||||
"normal_reload_time": 73,
|
"normal_reload_time": 73,
|
||||||
"empty_reload_time": 95,
|
"empty_reload_time": 95,
|
||||||
"BypassesArmor": 0.25,
|
"BypassesArmor": 0.25,
|
||||||
"SoundRadius": 13
|
"SoundRadius": 13,
|
||||||
|
"rpm": 400
|
||||||
}
|
}
|
|
@ -20,5 +20,6 @@
|
||||||
"normal_reload_time": 30,
|
"normal_reload_time": 30,
|
||||||
"empty_reload_time": 35,
|
"empty_reload_time": 35,
|
||||||
"BypassesArmor": 0.15,
|
"BypassesArmor": 0.15,
|
||||||
"SoundRadius": 16
|
"SoundRadius": 16,
|
||||||
|
"rpm": 1200
|
||||||
}
|
}
|
|
@ -20,5 +20,6 @@
|
||||||
"normal_reload_time": 56,
|
"normal_reload_time": 56,
|
||||||
"empty_reload_time": 64,
|
"empty_reload_time": 64,
|
||||||
"BypassesArmor": 0.25,
|
"BypassesArmor": 0.25,
|
||||||
"SoundRadius": 14
|
"SoundRadius": 14,
|
||||||
|
"rpm": 800
|
||||||
}
|
}
|
|
@ -20,5 +20,6 @@
|
||||||
"normal_reload_time": 56,
|
"normal_reload_time": 56,
|
||||||
"empty_reload_time": 64,
|
"empty_reload_time": 64,
|
||||||
"BypassesArmor": 0.25,
|
"BypassesArmor": 0.25,
|
||||||
"SoundRadius": 14
|
"SoundRadius": 14,
|
||||||
|
"rpm": 800
|
||||||
}
|
}
|
|
@ -23,5 +23,6 @@
|
||||||
"iterative_time": 16,
|
"iterative_time": 16,
|
||||||
"finish_time": 12,
|
"finish_time": 12,
|
||||||
"BypassesArmor": 0.05,
|
"BypassesArmor": 0.05,
|
||||||
"SoundRadius": 16
|
"SoundRadius": 16,
|
||||||
|
"rpm": 90
|
||||||
}
|
}
|
|
@ -22,5 +22,6 @@
|
||||||
"iterative_time": 16,
|
"iterative_time": 16,
|
||||||
"finish_time": 19,
|
"finish_time": 19,
|
||||||
"BypassesArmor": 0.3,
|
"BypassesArmor": 0.3,
|
||||||
"SoundRadius": 15
|
"SoundRadius": 15,
|
||||||
|
"rpm": 120
|
||||||
}
|
}
|
|
@ -20,5 +20,6 @@
|
||||||
"normal_reload_time": 58,
|
"normal_reload_time": 58,
|
||||||
"empty_reload_time": 74,
|
"empty_reload_time": 74,
|
||||||
"BypassesArmor": 0.28,
|
"BypassesArmor": 0.28,
|
||||||
"SoundRadius": 13
|
"SoundRadius": 13,
|
||||||
|
"rpm": 750
|
||||||
}
|
}
|
|
@ -20,5 +20,6 @@
|
||||||
"normal_reload_time": 46,
|
"normal_reload_time": 46,
|
||||||
"empty_reload_time": 64,
|
"empty_reload_time": 64,
|
||||||
"BypassesArmor": 0.15,
|
"BypassesArmor": 0.15,
|
||||||
"SoundRadius": 4
|
"SoundRadius": 4,
|
||||||
|
"rpm": 1100
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue