Skip to content
This repository was archived by the owner on Feb 19, 2019. It is now read-only.

Commit 2924358

Browse files
author
LeafHacker
committed
Accessor interfaces can't also contain ducks
A design limitation in mixin means that if you want to use @mixin interfaces, they can **only** contain @Accessor and @invoker public members. If you want to use ordinary "duck" wrappers, you have to put your accessors in the main mixin class. :-(
1 parent 433c8dc commit 2924358

File tree

3 files changed

+43
-25
lines changed

3 files changed

+43
-25
lines changed

src/main/java/me/zero/client/load/mixin/MixinMinecraft.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@
2828
import net.minecraft.client.Minecraft;
2929
import net.minecraft.client.gui.GuiScreen;
3030
import net.minecraft.client.multiplayer.WorldClient;
31+
import net.minecraft.util.Session;
32+
import net.minecraft.util.Timer;
3133
import org.spongepowered.asm.mixin.Mixin;
34+
import org.spongepowered.asm.mixin.gen.Accessor;
35+
import org.spongepowered.asm.mixin.gen.Invoker;
3236
import org.spongepowered.asm.mixin.injection.At;
3337
import org.spongepowered.asm.mixin.injection.Inject;
3438
import org.spongepowered.asm.mixin.injection.ModifyVariable;
@@ -48,6 +52,25 @@
4852
@Mixin(Minecraft.class)
4953
public abstract class MixinMinecraft implements IMinecraft {
5054

55+
@Accessor @Override public abstract Timer getTimer();
56+
@Accessor @Override public abstract void setSession(Session session);
57+
@Accessor @Override public abstract void setRightClickDelayTimer(int delay);
58+
59+
@Invoker("clickMouse") @Override public abstract void leftClickMouse();
60+
@Invoker("rightClickMouse") @Override public abstract void rightClickMouse();
61+
@Invoker("middleClickMouse") @Override public abstract void middleClickMouse();
62+
63+
@Override
64+
public void clickMouse(ClickEvent.MouseButton button) {
65+
// IF statements are required because Mixin doesn't support SWITCH
66+
if (button == LEFT)
67+
leftClickMouse();
68+
if (button == RIGHT)
69+
rightClickMouse();
70+
if (button == MIDDLE)
71+
middleClickMouse();
72+
}
73+
5174
@Inject(method = "runTick", at = @At("HEAD"))
5275
public void onTick(CallbackInfo ci) {
5376
ClientAPI.EVENT_BUS.post(new TickEvent());
@@ -139,15 +162,4 @@ public void shutdown(CallbackInfo ci) {
139162
if (event.isCancelled())
140163
ci.cancel();
141164
}
142-
143-
@Override
144-
public void clickMouse(ClickEvent.MouseButton button) {
145-
// IF statements are required because Mixin doesn't support SWITCH
146-
if (button == LEFT)
147-
leftClickMouse();
148-
if (button == RIGHT)
149-
rightClickMouse();
150-
if (button == MIDDLE)
151-
middleClickMouse();
152-
}
153165
}

src/main/java/me/zero/client/load/mixin/wrapper/IMinecraft.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,47 +17,54 @@
1717
package me.zero.client.load.mixin.wrapper;
1818

1919
import me.zero.client.api.event.defaults.ClickEvent;
20-
import net.minecraft.client.Minecraft;
2120
import net.minecraft.util.Session;
2221
import net.minecraft.util.Timer;
23-
import org.spongepowered.asm.mixin.Mixin;
24-
import org.spongepowered.asm.mixin.gen.Accessor;
25-
import org.spongepowered.asm.mixin.gen.Invoker;
2622

2723
/**
2824
* @author Brady
2925
* @since 2/20/2017 12:00 PM
3026
*/
31-
@Mixin(Minecraft.class)
3227
public interface IMinecraft {
3328

3429
/**
3530
* @return Returns the Game's Timer
3631
*/
37-
@Accessor Timer getTimer();
32+
Timer getTimer();
3833

3934
/**
4035
* Sets the game's session
4136
*
4237
* @param session The new Session
4338
*/
44-
@Accessor void setSession(Session session);
39+
void setSession(Session session);
4540

4641
/**
4742
* Sets the right click delay timer
4843
*
4944
* @param delay The new right click delay
5045
*/
51-
@Accessor void setRightClickDelayTimer(int delay);
52-
53-
@Invoker("clickMouse") void leftClickMouse();
54-
@Invoker("rightClickMouse") void rightClickMouse();
55-
@Invoker("middleClickMouse") void middleClickMouse();
46+
void setRightClickDelayTimer(int delay);
5647

5748
/**
5849
* Clicks a mouse button
5950
*
60-
* @param button The button
51+
* @param button The button to click (LEFT, MIDDLE, RIGHT)
6152
*/
6253
void clickMouse(ClickEvent.MouseButton button);
54+
55+
/**
56+
* Click the left mouse button
57+
*/
58+
void leftClickMouse();
59+
60+
/**
61+
* Click the right mouse button
62+
*/
63+
void rightClickMouse();
64+
65+
/**
66+
* Click the middle mouse button
67+
*/
68+
void middleClickMouse();
69+
6370
}

src/main/resources/mixins.wrapper.capi.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
"IGameType",
1010
"IItemRenderer",
1111
"IKeyBinding",
12-
"IMinecraft",
1312
"IPlayerControllerMP",
1413
"IRenderManager",
1514
"IShaderGroup",

0 commit comments

Comments
 (0)