取消持木仓时的右键交互。添加灵敏度按键绑定和开启右键交互的按键

This commit is contained in:
Atsuihsio 2024-06-15 16:44:22 +08:00
parent 1bdbc84e64
commit 359d79e92a
7 changed files with 105 additions and 40 deletions

View file

@ -2,15 +2,31 @@ package net.mcreator.target.client;
import com.mojang.blaze3d.platform.InputConstants;
import net.mcreator.target.TargetMod;
import net.mcreator.target.init.TargetModKeyMappings;
import net.mcreator.target.init.TargetModMobEffects;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.item.gun.GunItem;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.network.message.FireMessage;
import net.mcreator.target.network.message.SensitivityMessage;
import net.mcreator.target.network.message.ZoomMessage;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
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.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.client.settings.KeyConflictContext;
import net.minecraftforge.client.settings.KeyModifier;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import org.lwjgl.glfw.GLFW;
@ -27,7 +43,7 @@ public class ClickHandler {
}
@SubscribeEvent
public static void onKeyReleased(InputEvent.MouseButton.Pre event) {
public static void onButtonReleased(InputEvent.MouseButton.Pre event) {
if (notInGame()) return;
if (event.getAction() != InputConstants.RELEASE) return;
@ -38,10 +54,18 @@ public class ClickHandler {
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(1));
}
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
if (Minecraft.getInstance().player.hasEffect(TargetModMobEffects.SHOCK.get())) {
event.setCanceled(true);
}
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(1));
}
}
}
@SubscribeEvent
public static void onKeyPressed(InputEvent.MouseButton.Pre event) {
public static void onButtonPressed(InputEvent.MouseButton.Pre event) {
if (notInGame()) return;
if (event.getAction() != InputConstants.PRESS) return;
@ -65,6 +89,12 @@ public class ClickHandler {
if (Minecraft.getInstance().player.hasEffect(TargetModMobEffects.SHOCK.get())) {
event.setCanceled(true);
}
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
if (!TargetModKeyMappings.INTERACT.isDown()) {
event.setCanceled(true);
}
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(0));
}
}
if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE) {
@ -100,25 +130,10 @@ public class ClickHandler {
}
@SubscribeEvent
public static void onSensitivityKeyPressed(InputEvent.Key event) {
Player player = Minecraft.getInstance().player;
if (player == null) return;
ItemStack stack = player.getMainHandItem();
int button = event.getKey();
public static void onKeyPressed(InputEvent.Key event) {
if (notInGame()) return;
if (event.getAction() != InputConstants.PRESS) return;
setKeyState(event.getKey(), 1);
if (stack.is(TargetModTags.Items.GUN)){
if (button == GLFW.GLFW_KEY_PAGE_UP) {
TargetMod.PACKET_HANDLER.sendToServer(new SensitivityMessage(true));
}
if (button == GLFW.GLFW_KEY_PAGE_DOWN) {
TargetMod.PACKET_HANDLER.sendToServer(new SensitivityMessage(false));
}
}
}
@SubscribeEvent

View file

@ -9,7 +9,6 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.Entity;

View file

@ -6,6 +6,7 @@ import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
@ -25,6 +26,14 @@ import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber
public class PlayerEventHandler {
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 onPlayerRespawned(PlayerEvent.PlayerRespawnEvent event) {
@ -54,6 +63,7 @@ public class PlayerEventHandler {
}
if (event.phase == TickEvent.Phase.END) {
handlePlayerCancelZoom(player);
handlePlayerProne(player);
handlePlayerSprint(player);
handleWeaponLevel(player);
@ -68,6 +78,22 @@ public class PlayerEventHandler {
}
}
/**
* 玩家不在游戏内时取消瞄准
*/
private static void handlePlayerCancelZoom(Player player) {
if (notInGame()) {
player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.zoom = false;
capability.syncPlayerVariables(player);
});
player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.zooming = false;
capability.syncPlayerVariables(player);
});
player.getPersistentData().putDouble("zoom_animation_time", 0);
}
}
/**
* 判断玩家是否趴下

View file

@ -1,13 +1,17 @@
package net.mcreator.target.init;
import com.mojang.blaze3d.platform.InputConstants;
import net.mcreator.target.TargetMod;
import net.mcreator.target.network.message.DoubleJumpMessage;
import net.mcreator.target.network.message.FireModeMessage;
import net.mcreator.target.network.message.ReloadMessage;
import net.mcreator.target.network.message.ZoomMessage;
import net.mcreator.target.network.message.SensitivityMessage;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.Input;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.event.TickEvent;
@ -61,33 +65,52 @@ public class TargetModKeyMappings {
}
};
public static final KeyMapping ZOOM = new KeyMapping("key.target.zoom", InputConstants.Type.MOUSE, GLFW.GLFW_MOUSE_BUTTON_RIGHT, "key.categories.target") {
public static final KeyMapping SENSITIVITY_INCREASE = new KeyMapping("key.target.sensitivity_increase", GLFW.GLFW_KEY_PAGE_UP, "key.categories.target") {
private boolean isDownOld = false;
@Override
public void setDown(boolean isDown) {
super.setDown(isDown);
if (isDownOld != isDown && isDown && Minecraft.getInstance().player != null) {
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(0, 0));
ZoomMessage.pressAction(Minecraft.getInstance().player, 0);
ZOOM_LAST_PRESS = System.currentTimeMillis();
} else if (isDownOld != isDown && Minecraft.getInstance().player != null) {
int dt = (int) (System.currentTimeMillis() - ZOOM_LAST_PRESS);
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(1, dt));
ZoomMessage.pressAction(Minecraft.getInstance().player, 1);
if (isDownOld != isDown && isDown) {
TargetMod.PACKET_HANDLER.sendToServer(new SensitivityMessage(true));
}
isDownOld = isDown;
}
};
private static long ZOOM_LAST_PRESS = 0;
public static final KeyMapping SENSITIVITY_REDUCE = new KeyMapping("key.target.sensitivity_reduce", GLFW.GLFW_KEY_PAGE_DOWN, "key.categories.target") {
private boolean isDownOld = false;
@Override
public void setDown(boolean isDown) {
super.setDown(isDown);
if (isDownOld != isDown && isDown) {
TargetMod.PACKET_HANDLER.sendToServer(new SensitivityMessage(false));
}
isDownOld = isDown;
}
};
public static final KeyMapping INTERACT = new KeyMapping("key.target.interact", GLFW.GLFW_KEY_X, "key.categories.target") {
private boolean isDownOld = false;
@Override
public void setDown(boolean isDown) {
super.setDown(isDown);
if (isDownOld != isDown && isDown) {
}
isDownOld = isDown;
}
};
@SubscribeEvent
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
event.register(RELOAD);
event.register(DOUBLE_JUMP);
event.register(FIRE_MODE);
event.register(ZOOM);
event.register(SENSITIVITY_INCREASE);
event.register(SENSITIVITY_REDUCE);
event.register(INTERACT);
}
@Mod.EventBusSubscriber({Dist.CLIENT})
@ -98,7 +121,9 @@ public class TargetModKeyMappings {
RELOAD.consumeClick();
DOUBLE_JUMP.consumeClick();
FIRE_MODE.consumeClick();
ZOOM.consumeClick();
SENSITIVITY_INCREASE.consumeClick();
SENSITIVITY_REDUCE.consumeClick();
INTERACT.consumeClick();
}
}
}

View file

@ -10,21 +10,17 @@ import java.util.function.Supplier;
public class ZoomMessage {
private final int type;
private final int pressedMs;
public ZoomMessage(int type, int pressedMs) {
public ZoomMessage(int type) {
this.type = type;
this.pressedMs = pressedMs;
}
public ZoomMessage(FriendlyByteBuf buffer) {
this.type = buffer.readInt();
this.pressedMs = buffer.readInt();
}
public static void buffer(ZoomMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type);
buffer.writeInt(message.pressedMs);
}
public static void handler(ZoomMessage message, Supplier<NetworkEvent.Context> contextSupplier) {

View file

@ -190,7 +190,9 @@
"key.target.reload": "Reload",
"key.target.double_jump": "Double Jump",
"key.target.fire_mode": "Fire Mode",
"key.target.zoom": "Zoom",
"key.target.sensitivity_increase": "Increase Sensitivity",
"key.target.sensitivity_reduce": "Reduce Sensitivity",
"key.target.interact": "Can RightClick Interact While Hold",
"effect.target.shock": "Shock",
"item.minecraft.potion.effect.target_shock": "Potion of Shock",

View file

@ -190,7 +190,9 @@
"key.target.reload": "装填子弹",
"key.target.double_jump": "二段跳",
"key.target.fire_mode": "开火模式",
"key.target.zoom": "缩放",
"key.target.sensitivity_increase": "增加灵敏度",
"key.target.sensitivity_reduce": "减少灵敏度",
"key.target.interact": "持枪时按住后可右键交互",
"effect.target.shock": "电击",
"item.minecraft.potion.effect.target_shock": "电击药水",