设置开火键的键位

This commit is contained in:
Atsuihsio 2024-11-22 14:03:25 +08:00
parent f8d4460cdc
commit f73d7b86f9
7 changed files with 92 additions and 56 deletions

View file

@ -55,10 +55,8 @@ public class ClickHandler {
if (player == null) return;
int button = event.getButton();
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1));
ClientEventHandler.holdFire = false;
ClientEventHandler.customRpm = 0;
if (button == ModKeyMappings.FIRE.getKey().getValue()) {
handleWeaponFireRelease();
}
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
@ -82,48 +80,17 @@ public class ClickHandler {
int button = event.getButton();
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
if (player.getMainHandItem().is(ModTags.Items.GUN)
|| stack.is(ModItems.MONITOR.get())
|| player.hasEffect(ModMobEffects.SHOCK.get())
|| (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem)) {
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
event.setCanceled(true);
return;
}
if (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) {
ModUtils.PACKET_HANDLER.sendToServer(new SetFiringParametersMessage(0));
}
if (stack.is(ModItems.MONITOR.get())) {
event.setCanceled(true);
ModUtils.PACKET_HANDLER.sendToServer(new DroneFireMessage(0));
}
if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem) {
event.setCanceled(true);
ModUtils.PACKET_HANDLER.sendToServer(new VehicleFireMessage(0));
return;
}
if (player.getMainHandItem().is(ModTags.Items.GUN)) {
event.setCanceled(true);
}
if (stack.is(ModTags.Items.GUN) && (!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
&& !stack.getOrCreateTag().getBoolean("reloading")
&& !stack.getOrCreateTag().getBoolean("charging")
&& !stack.getOrCreateTag().getBoolean("need_bolt_action"))
&& cantFireTime == 0
&& drawTime < 0.01
&& !notInGame()) {
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
}
if (stack.is(ModTags.Items.GUN) && !stack.is(ModTags.Items.CANNOT_RELOAD) && stack.getOrCreateTag().getInt("ammo") <= 0) {
if (ReloadConfig.LEFT_CLICK_RELOAD.get()) {
ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0));
}
} else {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0));
ClientEventHandler.holdFire = true;
if (GunsTool.getGunIntTag(stack, "FireMode") == 1 && ClientEventHandler.burstFireSize == 0) {
ClientEventHandler.burstFireSize = (int) stack.getOrCreateTag().getDouble("burst_size");
}
}
}
if (button == ModKeyMappings.FIRE.getKey().getValue()) {
handleWeaponFirePress(player, stack);
}
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
@ -233,7 +200,65 @@ public class ClickHandler {
if (key == ModKeyMappings.SENSITIVITY_REDUCE.getKey().getValue()) {
ModUtils.PACKET_HANDLER.sendToServer(new SensitivityMessage(false));
}
if (key == ModKeyMappings.FIRE.getKey().getValue()) {
handleWeaponFirePress(player, stack);
}
}
if (event.getAction() == GLFW.GLFW_RELEASE) {
handleWeaponFireRelease();
}
}
public static void handleWeaponFirePress (Player player, ItemStack stack) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
return;
}
if (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) {
ModUtils.PACKET_HANDLER.sendToServer(new SetFiringParametersMessage(0));
}
if (stack.is(ModItems.MONITOR.get())) {
ModUtils.PACKET_HANDLER.sendToServer(new DroneFireMessage(0));
}
if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem) {
ModUtils.PACKET_HANDLER.sendToServer(new VehicleFireMessage(0));
return;
}
if (player.getMainHandItem().is(ModTags.Items.GUN)) {
if (stack.is(ModTags.Items.GUN) && (!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
&& !stack.getOrCreateTag().getBoolean("reloading")
&& !stack.getOrCreateTag().getBoolean("charging")
&& !stack.getOrCreateTag().getBoolean("need_bolt_action"))
&& cantFireTime == 0
&& drawTime < 0.01
&& !notInGame()) {
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
}
if (stack.is(ModTags.Items.GUN) && !stack.is(ModTags.Items.CANNOT_RELOAD) && stack.getOrCreateTag().getInt("ammo") <= 0) {
if (ReloadConfig.LEFT_CLICK_RELOAD.get()) {
ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0));
}
} else {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0));
ClientEventHandler.holdFire = true;
if (GunsTool.getGunIntTag(stack, "FireMode") == 1 && ClientEventHandler.burstFireSize == 0) {
ClientEventHandler.burstFireSize = (int) stack.getOrCreateTag().getDouble("burst_size");
}
}
}
}
public static void handleWeaponFireRelease () {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1));
ClientEventHandler.holdFire = false;
ClientEventHandler.customRpm = 0;
}
private static void editModelShake() {

View file

@ -18,7 +18,6 @@ import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
@ -27,7 +26,6 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BellBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PacketDistributor;
@ -82,14 +80,12 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti
if (state.getBlock() instanceof BellBlock bell) {
bell.attemptToRing(this.level(), resultPos, blockResult.getDirection());
}
ProjectileTool.causeCustomExplode(this, 135f, 6.75f, 1.5f);
if (this.tickCount > 2) {
ProjectileTool.causeCustomExplode(this, 135f, 6.75f, 1.5f);
}
break;
case ENTITY:
EntityHitResult entityResult = (EntityHitResult) result;
Entity entity = entityResult.getEntity();
if (entity == this.getOwner()) return;
if (this.getOwner() instanceof LivingEntity living) {
if (!living.level().isClientSide() && living instanceof ServerPlayer player) {
living.level().playSound(null, living.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1);
@ -97,7 +93,9 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5));
}
}
ProjectileTool.causeCustomExplode(this, 150f, 4.75f, 2f);
if (this.tickCount > 2) {
ProjectileTool.causeCustomExplode(this, 150f, 4.75f, 2f);
}
break;
default:
break;

View file

@ -243,7 +243,7 @@ public class ClientEventHandler {
double spread = stack.is(ModTags.Items.SHOTGUN) || stack.is(ModItems.MINIGUN.get()) ? 1.2 * zoomSpread * (basicDev + 0.2 * (walk + sprint + crouching + prone + jump + ride) + fireSpread) : zoomSpread * (0.7 * basicDev + walk + sprint + crouching + prone + jump + ride + 0.8 * fireSpread);
gunSpread = Mth.lerp(0.07 * times, gunSpread, spread);
gunSpread = Mth.lerp(0.14 * times, gunSpread, spread);
// 开火部分

View file

@ -79,6 +79,8 @@ public class ModKeyMappings {
public static final KeyMapping EDIT_GRIP = new KeyMapping("key.superbwarfare.edit_grip", KeyConflictContext.IN_GAME,
KeyModifier.SHIFT, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_DOWN, "key.categories.superbwarfare");
public static final KeyMapping FIRE = new KeyMapping("key.superbwarfare.fire", InputConstants.Type.MOUSE, GLFW.GLFW_MOUSE_BUTTON_LEFT, "key.categories.superbwarfare");
@SubscribeEvent
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
event.register(RELOAD);
@ -94,6 +96,7 @@ public class ModKeyMappings {
event.register(EDIT_MAGAZINE);
event.register(EDIT_STOCK);
event.register(EDIT_GRIP);
event.register(FIRE);
}
@Mod.EventBusSubscriber(value = Dist.CLIENT)

View file

@ -28,6 +28,7 @@ import java.text.DecimalFormat;
import java.util.List;
public class Monitor extends Item {
private static CameraType lastCameraType;
public static final String LINKED = "Linked";
public static final String LINKED_DRONE = "LinkedDrone";
@ -67,11 +68,14 @@ public class Monitor extends Item {
if (stack.getOrCreateTag().getBoolean("Using")) {
stack.getOrCreateTag().putBoolean("Using", false);
if (world.isClientSide) {
Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON);
if (lastCameraType != null) {
Minecraft.getInstance().options.setCameraType(lastCameraType);
}
}
} else {
stack.getOrCreateTag().putBoolean("Using", true);
if (world.isClientSide) {
lastCameraType = Minecraft.getInstance().options.getCameraType();
Minecraft.getInstance().options.setCameraType(CameraType.THIRD_PERSON_BACK);
}
}
@ -120,7 +124,9 @@ public class Monitor extends Item {
if (itemstack.getOrCreateTag().getBoolean("Using")) {
itemstack.getOrCreateTag().putBoolean("Using", false);
if (entity.level().isClientSide) {
Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON);
if (lastCameraType != null) {
Minecraft.getInstance().options.setCameraType(lastCameraType);
}
}
}
this.resetDroneData(drone);
@ -128,7 +134,9 @@ public class Monitor extends Item {
if (itemstack.getOrCreateTag().getBoolean("Using")) {
itemstack.getOrCreateTag().putBoolean("Using", false);
if (entity.level().isClientSide) {
Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON);
if (lastCameraType != null) {
Minecraft.getInstance().options.setCameraType(lastCameraType);
}
}
}
}

View file

@ -333,6 +333,7 @@
"entity.superbwarfare.drone": "Drone",
"key.categories.superbwarfare": "Superb Warfare",
"key.superbwarfare.fire": "Fire",
"key.superbwarfare.reload": "Reload",
"key.superbwarfare.fire_mode": "Fire Mode",
"key.superbwarfare.sensitivity_increase": "Increase Sensitivity",

View file

@ -333,6 +333,7 @@
"entity.superbwarfare.drone": "无人机",
"key.categories.superbwarfare": "卓越前线",
"key.superbwarfare.fire": "开火",
"key.superbwarfare.reload": "装填子弹",
"key.superbwarfare.fire_mode": "开火模式",
"key.superbwarfare.sensitivity_increase": "增加灵敏度",