Skip to content

Commit 41b20f0

Browse files
[edited] patch mouse lock
[readded] compat with Controllable, only missing input hint
1 parent 7e6043c commit 41b20f0

File tree

7 files changed

+104
-71
lines changed

7 files changed

+104
-71
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ dependencies {
197197

198198
//CONTROLLABLE COMPAT
199199
compileOnly(fg.deobf("curse.maven:controllable-${controllable_version}"))
200+
implementation fg.deobf("curse.maven:framework-${framework_version}")
200201

201202
//JEI
202203
compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-common-api:${jei_version}"))

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ jei_mc_version = 1.20.1
1919
jei_version = 15.2.0.22
2020

2121
controllable_version = 317269:4598985
22+
framework_version = 549225:4718251
2223

2324
cc_tweaked_mc_version = 1.20.1
2425
cc_tweaked_version = 1.105.0
Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.getitemfromblock.create_tweaked_controllers;
22

33
import com.getitemfromblock.create_tweaked_controllers.gui.ModConfigScreen;
4+
import com.getitemfromblock.create_tweaked_controllers.input.MouseCursorHandler;
45
import com.getitemfromblock.create_tweaked_controllers.controller.TweakedLinkedControllerClientHandler;
56

67
import net.minecraft.client.Minecraft;
78
import net.minecraftforge.event.TickEvent.ClientTickEvent;
89
import net.minecraftforge.event.TickEvent.Phase;
10+
import net.minecraftforge.event.TickEvent.RenderTickEvent;
911
import net.minecraftforge.eventbus.api.EventPriority;
1012
import net.minecraftforge.eventbus.api.SubscribeEvent;
1113
import net.minecraftforge.fml.ModContainer;
@@ -19,36 +21,44 @@
1921
public class ModClientEvents
2022
{
2123
@SubscribeEvent(priority = EventPriority.HIGHEST) // We need to catch the inputs as early as possible to cancel them
22-
public static void onTick(ClientTickEvent event)
24+
public static void onTick(ClientTickEvent event)
2325
{
24-
if (!isGameActive())
25-
return;
26+
if (!isGameActive())
27+
return;
2628

27-
//Level world = Minecraft.getInstance().level;
28-
if (event.phase == Phase.START || Minecraft.getInstance().screen != null)
29+
//Level world = Minecraft.getInstance().level;
30+
if (event.phase == Phase.START || Minecraft.getInstance().screen != null)
2931
{
30-
TweakedLinkedControllerClientHandler.tick();
31-
return;
32-
}
32+
TweakedLinkedControllerClientHandler.tick();
33+
return;
34+
}
3335
}
3436

35-
protected static boolean isGameActive()
37+
@SubscribeEvent(priority = EventPriority.NORMAL)
38+
public static void renderTick(RenderTickEvent event) // Cancel player/camera rotation just before rendering
3639
{
37-
return !(Minecraft.getInstance().level == null || Minecraft.getInstance().player == null);
38-
}
40+
if (!isGameActive())
41+
return;
42+
MouseCursorHandler.CancelPlayerTurn();
43+
}
44+
45+
protected static boolean isGameActive()
46+
{
47+
return !(Minecraft.getInstance().level == null || Minecraft.getInstance().player == null);
48+
}
3949

40-
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
41-
public static class ModBusEvents
42-
{
43-
@SubscribeEvent
44-
public static void onLoadComplete(FMLLoadCompleteEvent event)
45-
{
46-
ModContainer container = ModList.get()
47-
.getModContainerById(CreateTweakedControllers.ID)
48-
.orElseThrow(() -> new IllegalStateException("CreateTweakedControllers mod container missing on LoadComplete"));
49-
container.registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class,
50-
() -> new ConfigScreenHandler.ConfigScreenFactory(
51-
(mc, previousScreen) -> new ModConfigScreen(previousScreen)));
52-
}
53-
}
50+
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
51+
public static class ModBusEvents
52+
{
53+
@SubscribeEvent
54+
public static void onLoadComplete(FMLLoadCompleteEvent event)
55+
{
56+
ModContainer container = ModList.get()
57+
.getModContainerById(CreateTweakedControllers.ID)
58+
.orElseThrow(() -> new IllegalStateException("CreateTweakedControllers mod container missing on LoadComplete"));
59+
container.registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class,
60+
() -> new ConfigScreenHandler.ConfigScreenFactory(
61+
(mc, previousScreen) -> new ModConfigScreen(previousScreen)));
62+
}
63+
}
5464
}

src/main/java/com/getitemfromblock/create_tweaked_controllers/ModClientStuff.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.getitemfromblock.create_tweaked_controllers.compat.Controllable.ControllerHandler;
44
import com.getitemfromblock.create_tweaked_controllers.input.MouseCursorHandler;
55

6-
import net.minecraftforge.common.MinecraftForge;
76
import net.minecraftforge.eventbus.api.IEventBus;
87
import net.minecraftforge.fml.ModList;
98
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@@ -27,7 +26,7 @@ public static void clientInit(final FMLClientSetupEvent event)
2726
if(ModList.get().isLoaded("controllable"))
2827
{
2928
controllableLoaded = true;
30-
MinecraftForge.EVENT_BUS.register(new ControllerHandler());
29+
ControllerHandler.Register();
3130
}
3231
MouseCursorHandler.InitValues();
3332
//OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create: Tweaked Controller's Tweaked Linked Controller", TweakedLinkedControllerClientHandler.OVERLAY);

src/main/java/com/getitemfromblock/create_tweaked_controllers/compat/Controllable/ControllerHandler.java

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,55 +6,65 @@
66
import com.getitemfromblock.create_tweaked_controllers.controller.TweakedLinkedControllerClientHandler;
77

88
import com.mrcrayfish.controllable.event.Value;
9+
import com.mrcrayfish.controllable.event.ControllerEvents.GatherActions;
10+
import com.mrcrayfish.controllable.event.ControllerEvents.Input;
11+
import com.mrcrayfish.controllable.event.ControllerEvents.UpdateCamera;
12+
import com.mrcrayfish.controllable.event.ControllerEvents.UpdateMovement;
913
import com.mrcrayfish.controllable.event.ControllerEvents;
1014
import com.mrcrayfish.controllable.client.Action;
15+
import com.mrcrayfish.controllable.client.ActionVisibility;
1116
import com.mrcrayfish.controllable.client.binding.ButtonBinding;
1217
import com.mrcrayfish.controllable.client.binding.ButtonBindings;
18+
import com.mrcrayfish.controllable.client.input.Controller;
1319

14-
import net.minecraftforge.api.distmarker.Dist;
15-
import net.minecraftforge.api.distmarker.OnlyIn;
16-
import net.minecraftforge.eventbus.api.SubscribeEvent;
17-
18-
@OnlyIn(Dist.CLIENT)
1920
public class ControllerHandler
2021
{
21-
/*
22-
@SubscribeEvent
23-
public void onButtonInput(ControllerEvents.Button event)
22+
private static Input ButtonEvent = new Input()
2423
{
25-
if(event.getState() && event.getButton() != ButtonBindings.USE_ITEM.getButton() && TweakedLinkedControllerClientHandler.MODE != TweakedLinkedControllerClientHandler.Mode.IDLE)
24+
@Override
25+
public boolean handle(Controller arg0, Value<Integer> arg1, int arg2, boolean arg3)
2626
{
27-
event.setCanceled(true);
27+
return (TweakedLinkedControllerClientHandler.MODE != TweakedLinkedControllerClientHandler.Mode.IDLE && arg2 != ButtonBindings.USE_ITEM.getButton());
2828
}
29-
}
29+
};
3030

31-
@SubscribeEvent
32-
public void onMoveEvent(ControllerEvents.UpdateMovement event)
31+
private static UpdateMovement MoveEvent = new UpdateMovement()
3332
{
34-
if(TweakedLinkedControllerClientHandler.MODE == TweakedLinkedControllerClientHandler.Mode.IDLE)
35-
return;
36-
event.setCanceled(true);
37-
}
33+
@Override
34+
public boolean handle()
35+
{
36+
return (TweakedLinkedControllerClientHandler.MODE != TweakedLinkedControllerClientHandler.Mode.IDLE);
37+
}
38+
};
3839

39-
@SubscribeEvent
40-
public void onTurnEvent(ControllerEvents.UpdateCamera event)
40+
private static UpdateCamera CameraEvent = new UpdateCamera()
4141
{
42-
if(TweakedLinkedControllerClientHandler.MODE == TweakedLinkedControllerClientHandler.Mode.IDLE)
43-
return;
44-
45-
event.setCanceled(true);
46-
}
42+
@Override
43+
public boolean handle(Value<Float> arg0, Value<Float> arg1)
44+
{
45+
return (TweakedLinkedControllerClientHandler.MODE != TweakedLinkedControllerClientHandler.Mode.IDLE);
46+
}
47+
};
4748

48-
@SubscribeEvent
49-
public void onAvailableActions(ControllerEvents.GatherActions event)
49+
private static GatherActions GatherEvent = new GatherActions()
5050
{
51-
if(TweakedLinkedControllerClientHandler.MODE == TweakedLinkedControllerClientHandler.Mode.IDLE)
52-
return;
51+
@Override
52+
public void handle(Map<ButtonBinding, Action> actionMap, ActionVisibility arg1)
53+
{
54+
if(TweakedLinkedControllerClientHandler.MODE == TweakedLinkedControllerClientHandler.Mode.IDLE || arg1 == ActionVisibility.NONE)
55+
return;
56+
actionMap.clear();
57+
actionMap.put(ButtonBindings.USE_ITEM, new Action(CreateTweakedControllers.translateDirect("keybind.controller_exit"), Action.Side.LEFT));
58+
CreateTweakedControllers.log("Amogus");
59+
}
60+
};
5361

54-
Map<ButtonBinding, Action> actionMap = event.getActions();
55-
actionMap.remove(ButtonBindings.ATTACK);
56-
actionMap.remove(ButtonBindings.OPEN_INVENTORY);
57-
actionMap.put(ButtonBindings.USE_ITEM, new Action(CreateTweakedControllers.translateDirect("keybind.controller_exit"), Action.Side.LEFT));
62+
public static void Register()
63+
{
64+
ControllerEvents.INPUT.register(ButtonEvent);
65+
ControllerEvents.UPDATE_MOVEMENT.register(MoveEvent);
66+
ControllerEvents.UPDATE_CAMERA.register(CameraEvent);
67+
ControllerEvents.GATHER_ACTIONS.register(GatherEvent);
5868
}
59-
*/
69+
6070
}

src/main/java/com/getitemfromblock/create_tweaked_controllers/input/MouseCursorHandler.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.getitemfromblock.create_tweaked_controllers.input;
22

3+
import org.joml.Vector2f;
34
import org.lwjgl.glfw.GLFW;
45

56
import com.mojang.blaze3d.Blaze3D;
67

78
import net.minecraft.client.Minecraft;
89
import net.minecraft.client.MouseHandler;
9-
import net.minecraft.client.Options;
10+
import net.minecraft.client.player.LocalPlayer;
1011
import net.minecraft.world.phys.Vec2;
1112

1213
public class MouseCursorHandler
@@ -15,10 +16,10 @@ public class MouseCursorHandler
1516
public static Vec2 lastPos = null;
1617
public static Vec2 vel = null;
1718
private static MouseHandler m = null;
18-
private static Options o = null;
1919
private static double lastMouseEventTime;
20+
private static boolean mouseLockActive = false;
2021
private static float deltaT = 0;
21-
private static double sensitivity = 0.5;
22+
private static Vector2f savedRot = new Vector2f();
2223

2324
public static Vec2 GetMousePos()
2425
{
@@ -49,7 +50,6 @@ public static void InitValues()
4950
vel = new Vec2(0, 0);
5051
Minecraft mc = Minecraft.getInstance();
5152
m = mc.mouseHandler;
52-
o = mc.options;
5353
lastPos = GetMousePos();
5454
lastMouseEventTime = Blaze3D.getTime();
5555
}
@@ -90,19 +90,31 @@ public static float GetY(boolean useVelocity)
9090
}
9191
}
9292

93+
// The trick of setting the mouse sensitivity to -1/3 does not work anymore...
9394
public static void ActivateMouseLock()
9495
{
95-
if (o.sensitivity().get() != -1/3.0)
96-
{
97-
sensitivity = o.sensitivity().get();
98-
}
99-
o.sensitivity().set(1/3.0);
96+
LocalPlayer player = Minecraft.getInstance().player;
97+
savedRot.x = player.getXRot();
98+
savedRot.y = player.getYRot();
99+
mouseLockActive = true;
100100
lastPos = GetMousePos();
101101
lastMouseEventTime = Blaze3D.getTime();
102102
}
103103

104104
public static void DeactivateMouseLock()
105105
{
106-
o.sensitivity().set(sensitivity);
106+
mouseLockActive = false;
107+
}
108+
109+
public static void CancelPlayerTurn()
110+
{
111+
if (!mouseLockActive) return;
112+
LocalPlayer player = Minecraft.getInstance().player;
113+
if (player == null) return;
114+
player.turn((savedRot.y - player.getYRot()) / 0.15f, (savedRot.x - player.getXRot()) / 0.15f);
115+
player.xBob = savedRot.x;
116+
player.yBob = savedRot.y;
117+
player.xBobO = savedRot.x;
118+
player.yBobO = savedRot.y;
107119
}
108120
}

src/main/java/com/getitemfromblock/create_tweaked_controllers/item/TweakedLinkedControllerItemRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ protected static void renderJoystick(PartialItemModelRenderer renderer, PoseStac
337337
Vector3f ax = new Vector3f(-x, 0, -y);
338338
double angle = x * x + y * y;
339339
angle = Math.min(Math.sqrt(angle), 1.0) * 0.6f;
340-
if (ax.lengthSquared() < 0.1f)
340+
if (ax.lengthSquared() < 0.001f)
341341
{
342342
ax = new Vector3f(-1,0,-1).normalize();
343343
angle = 0;

0 commit comments

Comments
 (0)