优化按键处理实现

This commit is contained in:
Light_Quanta 2024-05-16 01:11:39 +08:00
parent d6da3afd7c
commit c08a164e11
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
3 changed files with 41 additions and 100 deletions

View file

@ -2,13 +2,10 @@ 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.TargetModTags;
import net.mcreator.target.network.FireMessage; import net.mcreator.target.network.FireMessage;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
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.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -17,124 +14,68 @@ import org.lwjgl.glfw.GLFW;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ClickHandler { public class ClickHandler {
private static boolean isInGame() { private static boolean notInGame() {
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
if (mc.player == null) if (mc.player == null) return true;
return false; if (mc.getOverlay() != null) return true;
if (mc.getOverlay() != null) if (mc.screen != null) return true;
return false; if (!mc.mouseHandler.isMouseGrabbed()) return true;
if (mc.screen != null) return !mc.isWindowActive();
return false;
if (!mc.mouseHandler.isMouseGrabbed())
return false;
return mc.isWindowActive();
} }
@SubscribeEvent @SubscribeEvent
public static void onKeyReleased(InputEvent.MouseButton.Pre event) { public static void onKeyReleased(InputEvent.MouseButton.Pre event) {
if (!isInGame()) { if (notInGame()) return;
return; if (event.getAction() != InputConstants.RELEASE) return;
}
if (event.getAction() != InputConstants.RELEASE) { Player player = Minecraft.getInstance().player;
return; if (player == null) return;
}
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (player == null) {
return;
}
int button = event.getButton(); int button = event.getButton();
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));
} }
} }
@SubscribeEvent @SubscribeEvent
public static void onKeyPressed(InputEvent.MouseButton.Pre event) { public static void onKeyPressed(InputEvent.MouseButton.Pre event) {
if (!isInGame()) { if (notInGame()) return;
return; if (event.getAction() != InputConstants.PRESS) return;
}
if (event.getAction() != InputConstants.PRESS) { Player player = Minecraft.getInstance().player;
return; if (player == null) return;
}
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (player == null) {
return;
}
ItemStack heldItem = player.getMainHandItem();
int button = event.getButton(); int button = event.getButton();
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT && player.getMainHandItem().is(TargetModTags.Items.GUN)) {
if ((player.getMainHandItem()).is(ItemTags.create(new ResourceLocation("target:gun")))) { event.setCanceled(true);
event.setCanceled(true); TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(0));
TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(0)); }
} }
private static void setKeyState(int key, int state) {
Player player = Minecraft.getInstance().player;
if (player == null) return;
var data = player.getPersistentData();
switch (key) {
case GLFW.GLFW_KEY_D -> data.putDouble("move_left", state);
case GLFW.GLFW_KEY_A -> data.putDouble("move_right", state);
case GLFW.GLFW_KEY_W -> data.putDouble("move_forward", state);
case GLFW.GLFW_KEY_S -> data.putDouble("move_backward", state);
} }
} }
@SubscribeEvent @SubscribeEvent
public static void onKeyPressed(InputEvent.Key event) { public static void onKeyPressed(InputEvent.Key event) {
if (!isInGame()) { if (notInGame()) return;
return; if (event.getAction() != InputConstants.PRESS) return;
} setKeyState(event.getKey(), 1);
if (event.getAction() != InputConstants.PRESS) {
return;
}
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
int button = event.getKey();
CompoundTag persistentData = player.getPersistentData();
if (button == GLFW.GLFW_KEY_D) {
persistentData.putDouble("mover", 1);
}
if (button == GLFW.GLFW_KEY_A) {
persistentData.putDouble("movel", 1);
}
if (button == GLFW.GLFW_KEY_W) {
persistentData.putDouble("qian", 1);
}
if (button == GLFW.GLFW_KEY_W) {
persistentData.putDouble("tui", 1);
}
} }
@SubscribeEvent @SubscribeEvent
public static void onKeyReleased(InputEvent.Key event) { public static void onKeyReleased(InputEvent.Key event) {
if (!isInGame()) { if (notInGame()) return;
return; if (event.getAction() != InputConstants.RELEASE) return;
} setKeyState(event.getKey(), 0);
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (event.getAction() != InputConstants.RELEASE) {
return;
}
int button = event.getKey();
CompoundTag persistentData = player.getPersistentData();
if (button == GLFW.GLFW_KEY_D) {
persistentData.putDouble("mover", 0);
}
if (button == GLFW.GLFW_KEY_A) {
persistentData.putDouble("movel", 0);
}
if (button == GLFW.GLFW_KEY_W) {
persistentData.putDouble("qian", 0);
}
if (button == GLFW.GLFW_KEY_W) {
persistentData.putDouble("tui", 0);
}
} }
} }

View file

@ -47,11 +47,11 @@ public class ClientEventHandler {
entity.getPersistentData().putDouble("move", ((entity.getPersistentData().getDouble("move") - 1 * times * Math.pow(entity.getPersistentData().getDouble("move"), 2) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))) entity.getPersistentData().putDouble("move", ((entity.getPersistentData().getDouble("move") - 1 * times * Math.pow(entity.getPersistentData().getDouble("move"), 2) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime")))
* (1 - 1 * entity.getPersistentData().getDouble("zoomtime")))); * (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))));
} }
if (entity.getPersistentData().getDouble("movel") == 1) { if (entity.getPersistentData().getDouble("move_right") == 1) {
entity.getPersistentData().putDouble("move", entity.getPersistentData().putDouble("move",
((entity.getPersistentData().getDouble("move") + Math.pow(Math.abs(entity.getPersistentData().getDouble("move")) + 0.05, 2) * 0.2 * times * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime"))) ((entity.getPersistentData().getDouble("move") + Math.pow(Math.abs(entity.getPersistentData().getDouble("move")) + 0.05, 2) * 0.2 * times * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime")))
* (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime")))); * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime"))));
} else if (entity.getPersistentData().getDouble("mover") == 1) { } else if (entity.getPersistentData().getDouble("move_left") == 1) {
entity.getPersistentData().putDouble("move", entity.getPersistentData().putDouble("move",
((entity.getPersistentData().getDouble("move") - Math.pow(Math.abs(entity.getPersistentData().getDouble("move")) + 0.05, 2) * 0.2 * times * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime"))) ((entity.getPersistentData().getDouble("move") - Math.pow(Math.abs(entity.getPersistentData().getDouble("move")) + 0.05, 2) * 0.2 * times * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime")))
* (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime")))); * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime"))));

View file

@ -64,8 +64,8 @@ public class GunEventHandler {
double ride = player.isPassenger() ? (-0.5) * basic : 0; double ride = player.isPassenger() ? (-0.5) * basic : 0;
double walk; double walk;
if (player.getPersistentData().getDouble("qian") == 1 || player.getPersistentData().getDouble("tui") == 1 || if (player.getPersistentData().getDouble("move_forward") == 1 || player.getPersistentData().getDouble("move_backward") == 1 ||
player.getPersistentData().getDouble("mover") == 1 || player.getPersistentData().getDouble("movel") == 1) { player.getPersistentData().getDouble("move_left") == 1 || player.getPersistentData().getDouble("move_right") == 1) {
walk = 0.2 * basic; walk = 0.2 * basic;
} else { } else {
walk = 0; walk = 0;