取消持木仓时的右键交互。添加灵敏度按键绑定和开启右键交互的按键
This commit is contained in:
parent
1bdbc84e64
commit
359d79e92a
7 changed files with 105 additions and 40 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断玩家是否趴下
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "电击药水",
|
||||
|
|
Loading…
Add table
Reference in a new issue