尝试添加鼠标移动输入类
This commit is contained in:
parent
16f42f799e
commit
2195ed52e5
4 changed files with 164 additions and 2 deletions
|
@ -1,5 +1,6 @@
|
|||
package com.atsuishio.superbwarfare;
|
||||
|
||||
import com.atsuishio.superbwarfare.client.MouseMovementHandler;
|
||||
import com.atsuishio.superbwarfare.config.ClientConfig;
|
||||
import com.atsuishio.superbwarfare.config.CommonConfig;
|
||||
import com.atsuishio.superbwarfare.config.ServerConfig;
|
||||
|
@ -21,6 +22,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|||
import net.minecraftforge.fml.ModLoadingContext;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.config.ModConfig;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
import net.minecraftforge.network.NetworkDirection;
|
||||
|
@ -65,6 +67,7 @@ public class ModUtils {
|
|||
ModVillagers.register(bus);
|
||||
|
||||
bus.addListener(this::onCommonSetup);
|
||||
bus.addListener(this::onClientSetup);
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
}
|
||||
|
@ -173,6 +176,10 @@ public class ModUtils {
|
|||
Ingredient.of(Items.GLOWSTONE_DUST), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.STRONG_SHOCK.get())));
|
||||
}
|
||||
|
||||
public void onClientSetup(final FMLClientSetupEvent event) {
|
||||
MouseMovementHandler.init();
|
||||
}
|
||||
|
||||
public static ResourceLocation loc(String path) {
|
||||
return new ResourceLocation(MODID, path);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
package com.atsuishio.superbwarfare.client;
|
||||
|
||||
import com.mojang.blaze3d.Blaze3D;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.MouseHandler;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.world.phys.Vec2;
|
||||
import org.joml.Vector3f;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
/**
|
||||
* Codes from @getItemFromBlock's Create-Tweaked-Controllers
|
||||
*/
|
||||
public class MouseMovementHandler {
|
||||
|
||||
public static Vec2 delta = null;
|
||||
public static Vec2 lastPos = null;
|
||||
public static Vec2 vel = null;
|
||||
private static MouseHandler mouseHandler = null;
|
||||
private static double lastMouseEventTime;
|
||||
private static boolean mouseLockActive = false;
|
||||
private static float deltaT = 0;
|
||||
private static Vector3f savedRot = new Vector3f();
|
||||
|
||||
public static Vec2 getMousePos() {
|
||||
if (mouseHandler.isMouseGrabbed()) {
|
||||
return new Vec2((float) mouseHandler.xpos(), (float) mouseHandler.ypos());
|
||||
} else {
|
||||
double[] x, y;
|
||||
x = new double[1];
|
||||
y = new double[1];
|
||||
GLFW.glfwGetCursorPos(Minecraft.getInstance().getWindow().getWindow(), x, y);
|
||||
return new Vec2((float) x[0], (float) y[0]);
|
||||
}
|
||||
}
|
||||
|
||||
public static void resetCenter() {
|
||||
delta = new Vec2(0, 0);
|
||||
vel = new Vec2(0, 0);
|
||||
lastPos = getMousePos();
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
delta = new Vec2(0, 0);
|
||||
vel = new Vec2(0, 0);
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
mouseHandler = mc.mouseHandler;
|
||||
lastPos = getMousePos();
|
||||
lastMouseEventTime = Blaze3D.getTime();
|
||||
}
|
||||
|
||||
public static void update() {
|
||||
double d0 = Blaze3D.getTime();
|
||||
deltaT = (float) (d0 - lastMouseEventTime);
|
||||
lastMouseEventTime = d0;
|
||||
Vec2 tmp = getMousePos();
|
||||
vel = new Vec2(tmp.x - lastPos.x, tmp.y - lastPos.y);
|
||||
delta = delta.add(vel);
|
||||
vel = vel.scale(1 / deltaT);
|
||||
lastPos = tmp;
|
||||
}
|
||||
|
||||
public static float getX(boolean useVelocity) {
|
||||
if (useVelocity) {
|
||||
return vel.x;
|
||||
} else {
|
||||
return delta.x;
|
||||
}
|
||||
}
|
||||
|
||||
public static float getY(boolean useVelocity) {
|
||||
if (useVelocity) {
|
||||
return vel.y;
|
||||
} else {
|
||||
return delta.y;
|
||||
}
|
||||
}
|
||||
|
||||
public static void activateMouseLock() {
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player == null) return;
|
||||
|
||||
savedRot.x = player.getXRot();
|
||||
savedRot.y = player.getYRot();
|
||||
savedRot.z = 0;
|
||||
mouseLockActive = true;
|
||||
lastPos = getMousePos();
|
||||
lastMouseEventTime = Blaze3D.getTime();
|
||||
}
|
||||
|
||||
public static void deactivateMouseLock() {
|
||||
mouseLockActive = false;
|
||||
}
|
||||
|
||||
public static void cancelPlayerTurn() {
|
||||
if (!mouseLockActive) return;
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player == null) return;
|
||||
player.turn((savedRot.y - player.getYRot()) / 0.15f, (savedRot.x - player.getXRot()) / 0.15f);
|
||||
player.xBob = savedRot.x;
|
||||
player.yBob = savedRot.y;
|
||||
player.xBobO = savedRot.x;
|
||||
player.yBobO = savedRot.y;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package com.atsuishio.superbwarfare.client;
|
||||
|
||||
/**
|
||||
* Codes from @getItemFromBlock's Create-Tweaked-Controllers
|
||||
*/
|
||||
public class MouseMovementInput {
|
||||
|
||||
public boolean useVelocity = false;
|
||||
public boolean isYAxis = false;
|
||||
public float minBound = 0.0f;
|
||||
public float maxBound = 1000.0f;
|
||||
|
||||
public MouseMovementInput(boolean axis, float min, float max, boolean useVel) {
|
||||
this.isYAxis = axis;
|
||||
this.minBound = min;
|
||||
this.maxBound = max;
|
||||
this.useVelocity = useVel;
|
||||
}
|
||||
|
||||
public MouseMovementInput() {
|
||||
}
|
||||
|
||||
public boolean hasOutput() {
|
||||
return getAxisValue() >= 0.5f;
|
||||
}
|
||||
|
||||
public float getAxisValue() {
|
||||
if (isInputInvalid()) return 0;
|
||||
float v = isYAxis ? MouseMovementHandler.getY(useVelocity) : MouseMovementHandler.getX(useVelocity);
|
||||
v = (v - minBound) / (maxBound - minBound);
|
||||
if (v < 0) v = 0;
|
||||
if (v > 1) v = 1;
|
||||
return v;
|
||||
}
|
||||
|
||||
public boolean isInputInvalid() {
|
||||
return minBound == maxBound;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return isYAxis ? 1 : 0;
|
||||
}
|
||||
|
||||
public float getRawInput() {
|
||||
if (isInputInvalid()) return 0;
|
||||
return isYAxis ? MouseMovementHandler.getY(useVelocity) : MouseMovementHandler.getX(useVelocity);
|
||||
}
|
||||
}
|
|
@ -704,7 +704,8 @@ public class ClientEventHandler {
|
|||
if (player == null) return;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.GUN)) return;
|
||||
if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.hidePassenger()) return;
|
||||
if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.hidePassenger())
|
||||
return;
|
||||
|
||||
float pose;
|
||||
float times = 2 * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
|
||||
|
@ -782,7 +783,8 @@ public class ClientEventHandler {
|
|||
}
|
||||
}
|
||||
|
||||
if (player != null && player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand()) return;
|
||||
if (player != null && player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.banHand())
|
||||
return;
|
||||
|
||||
if (level != null && stack.is(ModTags.Items.GUN)) {
|
||||
handleWeaponSway(living);
|
||||
|
|
Loading…
Add table
Reference in a new issue