Skip to content

Commit d60f955

Browse files
committed
Special action key
1 parent 4b3a4ef commit d60f955

File tree

3 files changed

+68
-6
lines changed

3 files changed

+68
-6
lines changed

src/main/java/net/earthcomputer/clientcommands/ClientCommandsMod.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,9 @@ public boolean checkConnect(Map<String, String> mods, Side otherSide) {
4141

4242
@EventHandler
4343
public void init(FMLInitializationEvent event) {
44-
initTempRules();
4544
registerCommands();
4645
registerEventStuff();
47-
}
48-
49-
private void initTempRules() {
50-
51-
EventManager.addDisconnectListener(e -> TempRules.resetToDefault());
46+
SpecialActionKey.registerKeyBinding();
5247
}
5348

5449
private void registerCommands() {
@@ -73,6 +68,7 @@ private void registerEventStuff() {
7368
EnchantmentCracker.registerEvents();
7469
ToolDamageManager.registerEvents();
7570
TempRulesImpl.registerEvents();
71+
SpecialActionKey.registerEvents();
7672

7773
EventManager.addDisconnectListener(e -> TempRules.resetToDefault());
7874

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package net.earthcomputer.clientcommands;
2+
3+
import org.lwjgl.input.Keyboard;
4+
5+
import net.minecraft.client.Minecraft;
6+
import net.minecraft.client.entity.EntityPlayerSP;
7+
import net.minecraft.client.settings.KeyBinding;
8+
import net.minecraft.network.Packet;
9+
import net.minecraft.network.play.client.CPacketPlayer;
10+
import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock;
11+
import net.minecraft.util.math.MathHelper;
12+
import net.minecraftforge.client.settings.IKeyConflictContext;
13+
import net.minecraftforge.client.settings.KeyConflictContext;
14+
import net.minecraftforge.fml.client.registry.ClientRegistry;
15+
16+
public class SpecialActionKey {
17+
18+
private SpecialActionKey() {
19+
}
20+
21+
private static final KeyBinding KEY_BINDING = new KeyBinding("key.specialAction", new IKeyConflictContext() {
22+
@Override
23+
public boolean isActive() {
24+
return KeyConflictContext.IN_GAME.isActive();
25+
}
26+
27+
@Override
28+
public boolean conflicts(IKeyConflictContext other) {
29+
return false;
30+
}
31+
}, Keyboard.KEY_LMENU, "key.categories.misc");
32+
33+
private static boolean isSpecialActionKeyPressed() {
34+
return Keyboard.isKeyDown(KEY_BINDING.getKeyCode());
35+
}
36+
37+
public static void registerKeyBinding() {
38+
ClientRegistry.registerKeyBinding(KEY_BINDING);
39+
}
40+
41+
public static void registerEvents() {
42+
EventManager.addOutboundPacketPreListener(e -> {
43+
Packet<?> packet = e.getPacket();
44+
if (packet instanceof CPacketPlayerTryUseItemOnBlock) {
45+
if (isSpecialActionKeyPressed()) {
46+
EntityPlayerSP player = Minecraft.getMinecraft().player;
47+
Minecraft.getMinecraft().getConnection().sendPacket(new CPacketPlayer.Rotation(
48+
MathHelper.wrapDegrees(player.rotationYaw + 180), -player.rotationPitch, player.onGround));
49+
}
50+
}
51+
});
52+
EventManager.addOutboundPacketPostListener(e -> {
53+
Packet<?> packet = e.getPacket();
54+
if (packet instanceof CPacketPlayerTryUseItemOnBlock) {
55+
if (isSpecialActionKeyPressed()) {
56+
EntityPlayerSP player = Minecraft.getMinecraft().player;
57+
Minecraft.getMinecraft().getConnection().sendPacket(
58+
new CPacketPlayer.Rotation(player.rotationYaw, player.rotationPitch, player.onGround));
59+
}
60+
}
61+
});
62+
}
63+
64+
}

src/main/resources/assets/clientcommands/lang/en_us.lang

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,5 @@ commands.ctemprule.get.usage=/ctemprule get <rule>
151151
commands.ctemprule.reset.success=TempRule %s has been reset to %s
152152
commands.ctemprule.reset.usage=/ctemprule reset <rule>
153153
commands.ctemprule.usage=/ctemprule <get|set|reset|list> ...
154+
155+
key.specialAction=Special Action

0 commit comments

Comments
 (0)