Skip to content

Commit be9a84a

Browse files
committed
rewrite how opening animation is handled
1 parent 6519be7 commit be9a84a

File tree

5 files changed

+48
-64
lines changed

5 files changed

+48
-64
lines changed

src/main/java/com/cleanroommc/neverenoughanimations/NEA.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@
1818
import net.minecraftforge.fml.common.Mod;
1919
import net.minecraftforge.fml.common.Mod.EventHandler;
2020
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
21+
import net.minecraftforge.fml.common.eventhandler.EventPriority;
2122
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
2223
import net.minecraftforge.fml.common.gameevent.TickEvent;
2324
import net.minecraftforge.fml.relauncher.FMLLaunchHandler;
24-
import net.minecraftforge.fml.relauncher.Side;
25-
import net.minecraftforge.fml.relauncher.SideOnly;
2625
import org.apache.logging.log4j.LogManager;
2726
import org.apache.logging.log4j.Logger;
2827

@@ -40,7 +39,6 @@ public void preInit(FMLPreInitializationEvent event) {
4039
MinecraftForge.EVENT_BUS.register(this);
4140
}
4241

43-
@SideOnly(Side.CLIENT)
4442
@SubscribeEvent
4543
public void onGuiTick(TickEvent.ClientTickEvent event) {
4644
OpeningAnimation.checkGuiToClose();
@@ -63,10 +61,35 @@ public void onGuiOpen(GuiOpenEvent event) {
6361
ItemMoveAnimation.onGuiOpen(event);
6462
}
6563

66-
@SubscribeEvent
67-
public void onGuiDraw(GuiScreenEvent.DrawScreenEvent.Pre event) {
64+
@SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true)
65+
public void onGuiDrawPre(GuiScreenEvent.DrawScreenEvent.Pre event) {
6866
mouseX = event.getMouseX();
6967
mouseY = event.getMouseY();
68+
if (NEAConfig.moveAnimationTime > 0 && event.getGui() instanceof GuiContainer) {
69+
GlStateManager.pushMatrix();
70+
}
71+
}
72+
73+
@SubscribeEvent(priority = EventPriority.LOWEST)
74+
public void onGuiDrawPost(GuiScreenEvent.DrawScreenEvent.Post event) {
75+
if (NEAConfig.moveAnimationTime > 0 && event.getGui() instanceof GuiContainer container) {
76+
GlStateManager.popMatrix();
77+
OpeningAnimation.getScale(container); // make sure screens don't get stuck in case they don't render the scale
78+
}
79+
}
80+
81+
@SubscribeEvent
82+
public void drawDebugInfo(GuiScreenEvent.BackgroundDrawnEvent event) {
83+
if (event.getGui() instanceof GuiContainer container) {
84+
drawScreenDebug(container, event.getMouseX(), event.getMouseY());
85+
}
86+
}
87+
88+
@SubscribeEvent(priority = EventPriority.LOWEST)
89+
public void onGuiBackgroundDrawn(GuiScreenEvent.BackgroundDrawnEvent event) {
90+
if (NEAConfig.moveAnimationTime > 0 && event.getGui() instanceof GuiContainer container) {
91+
OpeningAnimation.handleScale(container, true);
92+
}
7093
}
7194

7295
public static int getMouseX() {

src/main/java/com/cleanroommc/neverenoughanimations/animations/OpeningAnimation.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.cleanroommc.neverenoughanimations.NEAConfig;
44
import net.minecraft.client.Minecraft;
55
import net.minecraft.client.gui.inventory.GuiContainer;
6+
import net.minecraft.client.renderer.GlStateManager;
67
import net.minecraftforge.client.event.GuiOpenEvent;
78

89
public class OpeningAnimation {
@@ -52,6 +53,18 @@ public static float getScale(GuiContainer container) {
5253
return NEAConfig.openingAnimationCurve.interpolate(min, max, val);
5354
}
5455

56+
public static boolean handleScale(GuiContainer container, boolean translateToPanel) {
57+
float scale = getScale(container);
58+
if (scale == 1 || NEAConfig.moveAnimationTime == 0) return false;
59+
if (translateToPanel) GlStateManager.translate(container.getGuiLeft(), container.getGuiTop(), 0);
60+
GlStateManager.translate(container.getXSize() / 2f, container.getYSize() / 2f, 0);
61+
GlStateManager.scale(scale, scale, 1f);
62+
GlStateManager.translate(-container.getXSize() / 2f, -container.getYSize() / 2f, 0);
63+
if (translateToPanel) GlStateManager.translate(-container.getGuiLeft(), -container.getGuiTop(), 0);
64+
// GlStateManager.color(1f, 1f, 1f, scale);
65+
return true;
66+
}
67+
5568
public static void checkGuiToClose() {
5669
if (shouldCloseLast && lastGui != null) {
5770
Minecraft.getMinecraft().displayGuiScreen(null);

src/main/java/com/cleanroommc/neverenoughanimations/core/mixin/GuiContainerMixin.java

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.cleanroommc.neverenoughanimations.core.mixin;
22

33
import com.cleanroommc.neverenoughanimations.IItemLocation;
4-
import com.cleanroommc.neverenoughanimations.NEA;
54
import com.cleanroommc.neverenoughanimations.NEAConfig;
65
import com.cleanroommc.neverenoughanimations.animations.ItemHoverAnimation;
76
import com.cleanroommc.neverenoughanimations.animations.ItemMoveAnimation;
8-
import com.cleanroommc.neverenoughanimations.animations.OpeningAnimation;
97
import com.llamalad7.mixinextras.sugar.Local;
108
import com.llamalad7.mixinextras.sugar.ref.LocalRef;
119
import net.minecraft.client.gui.GuiScreen;
@@ -14,7 +12,6 @@
1412
import net.minecraft.inventory.Slot;
1513
import net.minecraft.item.ItemStack;
1614
import org.spongepowered.asm.mixin.Mixin;
17-
import org.spongepowered.asm.mixin.Shadow;
1815
import org.spongepowered.asm.mixin.injection.At;
1916
import org.spongepowered.asm.mixin.injection.Inject;
2017
import org.spongepowered.asm.mixin.injection.ModifyArg;
@@ -24,14 +21,6 @@
2421
@Mixin(GuiContainer.class)
2522
public class GuiContainerMixin extends GuiScreen {
2623

27-
@Shadow protected int xSize;
28-
29-
@Shadow protected int ySize;
30-
31-
@Shadow protected int guiLeft;
32-
33-
@Shadow protected int guiTop;
34-
3524
@Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isEmpty()Z", ordinal = 5, shift = At.Shift.BEFORE))
3625
public void injectVirtualStack(Slot slotIn, CallbackInfo ci, @Local(ordinal = 0) LocalRef<ItemStack> itemStack) {
3726
if (NEAConfig.moveAnimationTime > 0) {
@@ -79,28 +68,6 @@ public void drawMovingItems(int mouseX, int mouseY, float partialTicks, Callback
7968
zLevel = 0;
8069
}
8170

82-
@Inject(method = "drawScreen", at = @At(value = "HEAD"))
83-
public void drawOpeningAnimation(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) {
84-
if (NEAConfig.openingAnimationTime > 0) {
85-
float scale = OpeningAnimation.getScale((GuiContainer) (Object) this);
86-
GlStateManager.pushMatrix();
87-
GlStateManager.translate(guiLeft, guiTop, 0);
88-
GlStateManager.translate(xSize / 2f, ySize / 2f, 0);
89-
GlStateManager.scale(scale, scale, 1f);
90-
GlStateManager.translate(-xSize / 2f, -ySize / 2f, 0);
91-
GlStateManager.translate(-guiLeft, -guiTop, 0);
92-
// GlStateManager.color(1f, 1f, 1f, scale);
93-
}
94-
}
95-
96-
@Inject(method = "drawScreen", at = @At("TAIL"))
97-
public void endOpeningAnimation(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) {
98-
if (NEAConfig.openingAnimationTime > 0) {
99-
GlStateManager.popMatrix();
100-
}
101-
NEA.drawScreenDebug((GuiContainer) (Object) this, mouseX, mouseY);
102-
}
103-
10471
@ModifyArg(method = "drawScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/inventory/GuiContainer;drawItemStack(Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", ordinal = 0), index = 0)
10572
public ItemStack injectVirtualCursorStack(ItemStack stack) {
10673
if (NEAConfig.moveAnimationTime > 0) {
Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.cleanroommc.neverenoughanimations.core.mixin.trashslot;
22

3-
import com.cleanroommc.neverenoughanimations.NEAConfig;
43
import com.cleanroommc.neverenoughanimations.animations.OpeningAnimation;
5-
import com.llamalad7.mixinextras.sugar.Share;
6-
import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef;
74
import net.blay09.mods.trashslot.client.ClientProxy;
85
import net.minecraft.client.gui.inventory.GuiContainer;
96
import net.minecraft.client.renderer.GlStateManager;
@@ -18,34 +15,18 @@ public class ClientProxyMixin {
1815

1916
@Inject(method = "onDrawScreen(Lnet/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Pre;)V",
2017
at = @At(value = "INVOKE", target = "Lnet/blay09/mods/trashslot/client/gui/GuiTrashSlot;update(II)V", shift = At.Shift.BEFORE))
21-
public void onDrawScreenPre(GuiScreenEvent.DrawScreenEvent.Pre event, CallbackInfo ci, @Share("didDraw") LocalBooleanRef didDraw) {
22-
if (NEAConfig.openingAnimationTime == 0) return;
23-
GuiContainer container = (GuiContainer) event.getGui();
24-
float scale = OpeningAnimation.getScale(container);
18+
public void onDrawScreenPre(GuiScreenEvent.DrawScreenEvent.Pre event, CallbackInfo ci) {
2519
GlStateManager.pushMatrix();
26-
GlStateManager.translate(container.getGuiLeft(), container.getGuiTop(), 0);
27-
GlStateManager.translate(container.getXSize() / 2f, container.getYSize() / 2f, 0);
28-
GlStateManager.scale(scale, scale, 1f);
29-
GlStateManager.translate(-container.getXSize() / 2f, -container.getYSize() / 2f, 0);
30-
GlStateManager.translate(-container.getGuiLeft(), -container.getGuiTop(), 0);
31-
// GlStateManager.color(1f, 1f, 1f, scale);
32-
didDraw.set(true);
20+
OpeningAnimation.handleScale((GuiContainer) event.getGui(), true);
3321
}
3422

3523
@Inject(method = "onDrawScreen(Lnet/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Pre;)V", at = @At("TAIL"))
36-
public void onDrawScreenPost(GuiScreenEvent.DrawScreenEvent.Pre event, CallbackInfo ci, @Share("didDraw") LocalBooleanRef didDraw) {
37-
if (didDraw.get()) {
38-
GlStateManager.popMatrix();
39-
}
24+
public void onDrawScreenPost(GuiScreenEvent.DrawScreenEvent.Pre event, CallbackInfo ci) {
25+
GlStateManager.popMatrix();
4026
}
4127

4228
@Inject(method = "onBackgroundDrawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/inventory/GuiContainer;drawSlot(Lnet/minecraft/inventory/Slot;)V", shift = At.Shift.BEFORE))
4329
public void onDrawBackground(GuiScreenEvent.BackgroundDrawnEvent event, CallbackInfo ci) {
44-
if (NEAConfig.openingAnimationTime == 0) return;
45-
GuiContainer container = (GuiContainer) event.getGui();
46-
float scale = OpeningAnimation.getScale(container);
47-
GlStateManager.translate(container.getXSize() / 2f, container.getYSize() / 2f, 0);
48-
GlStateManager.scale(scale, scale, 1f);
49-
GlStateManager.translate(-container.getXSize() / 2f, -container.getYSize() / 2f, 0);
30+
OpeningAnimation.handleScale((GuiContainer) event.getGui(), false);
5031
}
5132
}

src/main/resources/mixin.neverenoughanimations.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
"minVersion": "0.8",
66
"compatibilityLevel": "JAVA_8",
77
"client": [
8+
"CreativeSlotMixin",
89
"GuiContainerMixin",
9-
"GuiIngameMixin",
10-
"CreativeSlotMixin"
10+
"GuiIngameMixin"
1111
],
1212
"mixins": [
1313
"ContainerMixin",

0 commit comments

Comments
 (0)