取消持木仓时的右键交互。添加灵敏度按键绑定和开启右键交互的按键
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 com.mojang.blaze3d.platform.InputConstants;
|
||||||
import net.mcreator.target.TargetMod;
|
import net.mcreator.target.TargetMod;
|
||||||
|
import net.mcreator.target.init.TargetModKeyMappings;
|
||||||
import net.mcreator.target.init.TargetModMobEffects;
|
import net.mcreator.target.init.TargetModMobEffects;
|
||||||
import net.mcreator.target.init.TargetModTags;
|
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.FireMessage;
|
||||||
import net.mcreator.target.network.message.SensitivityMessage;
|
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.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.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
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.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.event.InputEvent;
|
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.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
@ -27,7 +43,7 @@ public class ClickHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onKeyReleased(InputEvent.MouseButton.Pre event) {
|
public static void onButtonReleased(InputEvent.MouseButton.Pre event) {
|
||||||
if (notInGame()) return;
|
if (notInGame()) return;
|
||||||
if (event.getAction() != InputConstants.RELEASE) return;
|
if (event.getAction() != InputConstants.RELEASE) return;
|
||||||
|
|
||||||
|
@ -38,10 +54,18 @@ public class ClickHandler {
|
||||||
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
|
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
|
||||||
TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(1));
|
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
|
@SubscribeEvent
|
||||||
public static void onKeyPressed(InputEvent.MouseButton.Pre event) {
|
public static void onButtonPressed(InputEvent.MouseButton.Pre event) {
|
||||||
if (notInGame()) return;
|
if (notInGame()) return;
|
||||||
if (event.getAction() != InputConstants.PRESS) return;
|
if (event.getAction() != InputConstants.PRESS) return;
|
||||||
|
|
||||||
|
@ -65,6 +89,12 @@ public class ClickHandler {
|
||||||
if (Minecraft.getInstance().player.hasEffect(TargetModMobEffects.SHOCK.get())) {
|
if (Minecraft.getInstance().player.hasEffect(TargetModMobEffects.SHOCK.get())) {
|
||||||
event.setCanceled(true);
|
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) {
|
if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE) {
|
||||||
|
@ -100,25 +130,10 @@ public class ClickHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onSensitivityKeyPressed(InputEvent.Key event) {
|
public static void onKeyPressed(InputEvent.Key event) {
|
||||||
Player player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
int button = event.getKey();
|
|
||||||
|
|
||||||
if (notInGame()) return;
|
if (notInGame()) return;
|
||||||
if (event.getAction() != InputConstants.PRESS) return;
|
if (event.getAction() != InputConstants.PRESS) return;
|
||||||
setKeyState(event.getKey(), 1);
|
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
|
@SubscribeEvent
|
||||||
|
|
|
@ -9,7 +9,6 @@ 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.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.util.RandomSource;
|
import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.entity.Entity;
|
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.init.TargetModTags;
|
||||||
import net.mcreator.target.network.TargetModVariables;
|
import net.mcreator.target.network.TargetModVariables;
|
||||||
import net.mcreator.target.tools.SoundTool;
|
import net.mcreator.target.tools.SoundTool;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
@ -25,6 +26,14 @@ import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber
|
@Mod.EventBusSubscriber
|
||||||
public class PlayerEventHandler {
|
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
|
@SubscribeEvent
|
||||||
public static void onPlayerRespawned(PlayerEvent.PlayerRespawnEvent event) {
|
public static void onPlayerRespawned(PlayerEvent.PlayerRespawnEvent event) {
|
||||||
|
@ -54,6 +63,7 @@ public class PlayerEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.phase == TickEvent.Phase.END) {
|
if (event.phase == TickEvent.Phase.END) {
|
||||||
|
handlePlayerCancelZoom(player);
|
||||||
handlePlayerProne(player);
|
handlePlayerProne(player);
|
||||||
handlePlayerSprint(player);
|
handlePlayerSprint(player);
|
||||||
handleWeaponLevel(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;
|
package net.mcreator.target.init;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.InputConstants;
|
|
||||||
import net.mcreator.target.TargetMod;
|
import net.mcreator.target.TargetMod;
|
||||||
import net.mcreator.target.network.message.DoubleJumpMessage;
|
import net.mcreator.target.network.message.DoubleJumpMessage;
|
||||||
import net.mcreator.target.network.message.FireModeMessage;
|
import net.mcreator.target.network.message.FireModeMessage;
|
||||||
import net.mcreator.target.network.message.ReloadMessage;
|
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.KeyMapping;
|
||||||
import net.minecraft.client.Minecraft;
|
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.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
|
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
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;
|
private boolean isDownOld = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDown(boolean isDown) {
|
public void setDown(boolean isDown) {
|
||||||
super.setDown(isDown);
|
super.setDown(isDown);
|
||||||
if (isDownOld != isDown && isDown && Minecraft.getInstance().player != null) {
|
if (isDownOld != isDown && isDown) {
|
||||||
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(0, 0));
|
TargetMod.PACKET_HANDLER.sendToServer(new SensitivityMessage(true));
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
isDownOld = isDown;
|
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
|
@SubscribeEvent
|
||||||
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
|
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
|
||||||
event.register(RELOAD);
|
event.register(RELOAD);
|
||||||
event.register(DOUBLE_JUMP);
|
event.register(DOUBLE_JUMP);
|
||||||
event.register(FIRE_MODE);
|
event.register(FIRE_MODE);
|
||||||
event.register(ZOOM);
|
event.register(SENSITIVITY_INCREASE);
|
||||||
|
event.register(SENSITIVITY_REDUCE);
|
||||||
|
event.register(INTERACT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mod.EventBusSubscriber({Dist.CLIENT})
|
@Mod.EventBusSubscriber({Dist.CLIENT})
|
||||||
|
@ -98,7 +121,9 @@ public class TargetModKeyMappings {
|
||||||
RELOAD.consumeClick();
|
RELOAD.consumeClick();
|
||||||
DOUBLE_JUMP.consumeClick();
|
DOUBLE_JUMP.consumeClick();
|
||||||
FIRE_MODE.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 {
|
public class ZoomMessage {
|
||||||
private final int type;
|
private final int type;
|
||||||
private final int pressedMs;
|
|
||||||
|
|
||||||
public ZoomMessage(int type, int pressedMs) {
|
public ZoomMessage(int type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.pressedMs = pressedMs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ZoomMessage(FriendlyByteBuf buffer) {
|
public ZoomMessage(FriendlyByteBuf buffer) {
|
||||||
this.type = buffer.readInt();
|
this.type = buffer.readInt();
|
||||||
this.pressedMs = buffer.readInt();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void buffer(ZoomMessage message, FriendlyByteBuf buffer) {
|
public static void buffer(ZoomMessage message, FriendlyByteBuf buffer) {
|
||||||
buffer.writeInt(message.type);
|
buffer.writeInt(message.type);
|
||||||
buffer.writeInt(message.pressedMs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void handler(ZoomMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
public static void handler(ZoomMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
|
|
@ -190,7 +190,9 @@
|
||||||
"key.target.reload": "Reload",
|
"key.target.reload": "Reload",
|
||||||
"key.target.double_jump": "Double Jump",
|
"key.target.double_jump": "Double Jump",
|
||||||
"key.target.fire_mode": "Fire Mode",
|
"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",
|
"effect.target.shock": "Shock",
|
||||||
"item.minecraft.potion.effect.target_shock": "Potion of Shock",
|
"item.minecraft.potion.effect.target_shock": "Potion of Shock",
|
||||||
|
|
|
@ -190,7 +190,9 @@
|
||||||
"key.target.reload": "装填子弹",
|
"key.target.reload": "装填子弹",
|
||||||
"key.target.double_jump": "二段跳",
|
"key.target.double_jump": "二段跳",
|
||||||
"key.target.fire_mode": "开火模式",
|
"key.target.fire_mode": "开火模式",
|
||||||
"key.target.zoom": "缩放",
|
"key.target.sensitivity_increase": "增加灵敏度",
|
||||||
|
"key.target.sensitivity_reduce": "减少灵敏度",
|
||||||
|
"key.target.interact": "持枪时按住后可右键交互",
|
||||||
|
|
||||||
"effect.target.shock": "电击",
|
"effect.target.shock": "电击",
|
||||||
"item.minecraft.potion.effect.target_shock": "电击药水",
|
"item.minecraft.potion.effect.target_shock": "电击药水",
|
||||||
|
|
Loading…
Add table
Reference in a new issue