Skip to content

Commit 9fd1888

Browse files
committed
Fix crash & fix wireless autocrafting monitor side button
1 parent fe48ae9 commit 9fd1888

37 files changed

+480
-153
lines changed

build.gradle.kts

+1-3
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ plugins {
33
id("refinedarchitect.base")
44
}
55

6-
//version = "1.0.0" //TODO: this doesn't work
7-
86
refinedarchitect {
97

108
}
119

1210
subprojects {
1311
group = "com.ultramega.universalgrid"
14-
}
12+
}

common/build.gradle.kts

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,18 @@ repositories {
1212
}
1313
}
1414

15+
val modVersion: String by project
16+
1517
refinedarchitect {
18+
version = modVersion
1619
common()
1720
publishing {
1821
maven = true
1922
}
2023
}
2124

2225
base {
23-
archivesName.set("common")
26+
archivesName.set("universalgrid-common")
2427
}
2528

2629
val refinedstorageVersion: String by project
@@ -29,4 +32,5 @@ val refinedstorageQuartzArsenalVersion: String by project
2932
dependencies {
3033
api("com.refinedmods.refinedstorage:refinedstorage-common:${refinedstorageVersion}")
3134
api("com.refinedmods.refinedstorage:refinedstorage-quartz-arsenal-common:${refinedstorageQuartzArsenalVersion}")
35+
compileOnly("io.github.llamalad7:mixinextras-common:0.4.1")
3236
}

common/src/main/java/com/ultramega/universalgrid/common/AbstractClientModInitializer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.ultramega.universalgrid.common;
22

3-
import com.refinedmods.refinedstorage.common.api.RefinedStorageApi;
4-
53
import com.ultramega.universalgrid.common.registry.Items;
64
import com.ultramega.universalgrid.common.registry.KeyMappings;
75

6+
import com.refinedmods.refinedstorage.common.api.RefinedStorageApi;
7+
88
import net.minecraft.client.KeyMapping;
99
import net.minecraft.client.Minecraft;
1010
import net.minecraft.world.entity.player.Player;

common/src/main/java/com/ultramega/universalgrid/common/AbstractModInitializer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.ultramega.universalgrid.common;
22

3-
import com.refinedmods.refinedstorage.common.content.RegistryCallback;
4-
53
import com.ultramega.universalgrid.common.registry.DataComponents;
64
import com.ultramega.universalgrid.common.wirelessuniversalgrid.WirelessUniversalGridState;
75

6+
import com.refinedmods.refinedstorage.common.content.RegistryCallback;
7+
88
import net.minecraft.core.component.DataComponentType;
99
import net.minecraft.world.item.ItemStack;
1010

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.ultramega.universalgrid.common;
2+
3+
import com.ultramega.universalgrid.common.interfaces.MixinDisabledSlot;
4+
import com.ultramega.universalgrid.common.packet.SetCursorPosStackPacket;
5+
import com.ultramega.universalgrid.common.registry.Items;
6+
7+
import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference;
8+
import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu;
9+
10+
import java.nio.DoubleBuffer;
11+
import javax.annotation.Nullable;
12+
13+
import net.minecraft.client.Minecraft;
14+
import net.minecraft.world.entity.player.Player;
15+
import org.lwjgl.BufferUtils;
16+
import org.lwjgl.glfw.GLFW;
17+
18+
public class ClientUtils {
19+
private ClientUtils() {
20+
}
21+
22+
public static void updateCursorPos(final SlotReference gridSlot) {
23+
final DoubleBuffer x = BufferUtils.createDoubleBuffer(1);
24+
final DoubleBuffer y = BufferUtils.createDoubleBuffer(1);
25+
26+
GLFW.glfwGetCursorPos(Minecraft.getInstance().getWindow().getWindow(), x, y);
27+
28+
com.refinedmods.refinedstorage.common.Platform.INSTANCE.sendPacketToServer(new SetCursorPosStackPacket(
29+
gridSlot,
30+
(int) Math.round(x.get()),
31+
(int) Math.round(y.get()),
32+
true));
33+
}
34+
35+
public static boolean checkForSideButton(final AbstractBaseContainerMenu menu, @Nullable final Player player) {
36+
final SlotReference gridSlot = ((MixinDisabledSlot) menu).universalgrid$getDisabledSlot();
37+
if (gridSlot != null && player != null) {
38+
return gridSlot.resolve(player)
39+
.map(stack -> stack.is(Items.INSTANCE.getWirelessUniversalGrid()) || stack.is(Items.INSTANCE.getCreativeWirelessUniversalGrid()))
40+
.orElse(false);
41+
}
42+
43+
return false;
44+
}
45+
}

common/src/main/java/com/ultramega/universalgrid/common/Platform.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public static Config getConfig() {
2525
return requireNonNull(configProvider, "Config isn't loaded yet").get();
2626
}
2727

28-
public static void setWirelessUniversalGridState(ItemStack stack, int cursorX, int cursorY, boolean applyCursorPos) {
28+
public static void setWirelessUniversalGridState(final ItemStack stack, final int cursorX, final int cursorY, final boolean applyCursorPos) {
2929
stack.set(
3030
DataComponents.INSTANCE.getWirelessUniversalGridState(),
3131
new WirelessUniversalGridState(cursorX, cursorY, applyCursorPos)

common/src/main/java/com/ultramega/universalgrid/common/gui/GridTypeSideButtonWidget.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package com.ultramega.universalgrid.common.gui;
22

3+
import com.ultramega.universalgrid.common.gui.view.GridTypes;
4+
import com.ultramega.universalgrid.common.interfaces.MixinGridType;
5+
36
import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu;
47
import com.refinedmods.refinedstorage.common.support.widget.AbstractSideButtonWidget;
58
import com.refinedmods.refinedstorage.common.util.IdentifierUtil;
69
import com.refinedmods.refinedstorage.quartzarsenal.common.QuartzArsenalIdentifierUtil;
710

8-
import com.ultramega.universalgrid.common.gui.view.GridTypes;
9-
import com.ultramega.universalgrid.common.interfaces.MixinGridType;
10-
1111
import java.util.List;
1212

1313
import net.minecraft.ChatFormatting;
14+
import net.minecraft.client.Minecraft;
1415
import net.minecraft.network.chat.MutableComponent;
1516
import net.minecraft.resources.ResourceLocation;
1617

@@ -40,7 +41,8 @@ public GridTypeSideButtonWidget(final AbstractBaseContainerMenu menu) {
4041
}
4142

4243
private static OnPress createPressAction(final AbstractBaseContainerMenu menu) {
43-
return btn -> ((MixinGridType) menu).universalgrid$setGridType(toggle(((MixinGridType) menu).universalgrid$getGridType()));
44+
return btn -> ((MixinGridType) menu).universalgrid$setGridType(toggle(((MixinGridType) menu).universalgrid$getGridType()),
45+
Minecraft.getInstance().player);
4446
}
4547

4648
private static GridTypes toggle(final GridTypes gridType) {

common/src/main/java/com/ultramega/universalgrid/common/interfaces/MixinDisabledSlot.java

+2
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@
77
public interface MixinDisabledSlot {
88
@Nullable
99
SlotReference universalgrid$getDisabledSlot();
10+
11+
void universalgrid$setDisabledSlot(SlotReference disabledSlot);
1012
}

common/src/main/java/com/ultramega/universalgrid/common/interfaces/MixinGridType.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
import com.ultramega.universalgrid.common.gui.view.GridTypes;
44

5+
import javax.annotation.Nullable;
6+
7+
import net.minecraft.world.entity.player.Player;
8+
59
public interface MixinGridType {
610
GridTypes universalgrid$getGridType();
711

8-
void universalgrid$setGridType(final GridTypes gridType);
12+
void universalgrid$setGridType(GridTypes gridType, @Nullable Player player);
913
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.ultramega.universalgrid.common.interfaces;
2+
3+
import net.minecraft.world.entity.player.Player;
4+
5+
public interface MixinPlayer {
6+
Player universalgrid$getPlayer();
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.ultramega.universalgrid.common.interfaces;
2+
3+
public interface MixinSideButton {
4+
void universalgrid$checkForSideButton();
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.ultramega.universalgrid.common.interfaces;
2+
3+
public interface MixinUpdateSlot {
4+
void universalgrid$sendUpdate();
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.ultramega.universalgrid.common.mixin;
2+
3+
import com.ultramega.universalgrid.common.interfaces.MixinPlayer;
4+
5+
import com.refinedmods.refinedstorage.common.autocrafting.monitor.AbstractAutocraftingMonitorContainerMenu;
6+
7+
import net.minecraft.world.entity.player.Player;
8+
import org.spongepowered.asm.mixin.Final;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Shadow;
11+
12+
@Mixin(AbstractAutocraftingMonitorContainerMenu.class)
13+
public class MixinAbstractAutocraftingMonitorContainerMenu implements MixinPlayer {
14+
@Final
15+
@Shadow
16+
private Player player;
17+
18+
@Override
19+
public Player universalgrid$getPlayer() {
20+
return player;
21+
}
22+
}

common/src/main/java/com/ultramega/universalgrid/common/mixin/MixinAbstractBaseContainerMenu.java

+26-28
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,46 @@
11
package com.ultramega.universalgrid.common.mixin;
22

3-
import com.refinedmods.refinedstorage.common.api.RefinedStorageApi;
4-
import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference;
5-
import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu;
6-
3+
import com.ultramega.universalgrid.common.ClientUtils;
74
import com.ultramega.universalgrid.common.Platform;
85
import com.ultramega.universalgrid.common.gui.view.GridTypes;
96
import com.ultramega.universalgrid.common.interfaces.MixinDisabledSlot;
107
import com.ultramega.universalgrid.common.interfaces.MixinGridType;
11-
import com.ultramega.universalgrid.common.packet.SetCursorPacketOntoStackPacket;
128
import com.ultramega.universalgrid.common.registry.Items;
139

14-
import java.nio.DoubleBuffer;
10+
import com.refinedmods.refinedstorage.common.api.RefinedStorageApi;
11+
import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference;
12+
import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu;
13+
1514
import javax.annotation.Nullable;
1615

17-
import net.minecraft.client.Minecraft;
1816
import net.minecraft.world.entity.player.Player;
19-
import org.lwjgl.BufferUtils;
20-
import org.lwjgl.glfw.GLFW;
17+
import net.minecraft.world.inventory.AbstractContainerMenu;
18+
import net.minecraft.world.inventory.MenuType;
2119
import org.spongepowered.asm.mixin.Mixin;
2220
import org.spongepowered.asm.mixin.Shadow;
2321
import org.spongepowered.asm.mixin.Unique;
2422

2523
@Mixin(AbstractBaseContainerMenu.class)
26-
public class MixinAbstractBaseContainerMenu implements MixinDisabledSlot, MixinGridType {
27-
@Shadow @Nullable protected SlotReference disabledSlot;
24+
public abstract class MixinAbstractBaseContainerMenu extends AbstractContainerMenu implements MixinDisabledSlot, MixinGridType {
25+
@Shadow
26+
@Nullable
27+
protected SlotReference disabledSlot;
28+
29+
protected MixinAbstractBaseContainerMenu(@Nullable final MenuType<?> menuType, final int containerId) {
30+
super(menuType, containerId);
31+
}
2832

2933
@Unique
3034
@Override
3135
public @Nullable SlotReference universalgrid$getDisabledSlot() {
3236
return this.disabledSlot;
3337
}
3438

39+
@Override
40+
public void universalgrid$setDisabledSlot(final SlotReference disabledSlot) {
41+
this.disabledSlot = disabledSlot;
42+
}
43+
3544
@Unique
3645
@Override
3746
public GridTypes universalgrid$getGridType() {
@@ -40,27 +49,16 @@ public class MixinAbstractBaseContainerMenu implements MixinDisabledSlot, MixinG
4049

4150
@Unique
4251
@Override
43-
public void universalgrid$setGridType(final GridTypes gridType) {
52+
public void universalgrid$setGridType(final GridTypes gridType, @Nullable final Player player) {
4453
Platform.getConfig().getWirelessUniversalGrid().setGridType(gridType);
4554

46-
Player player = Minecraft.getInstance().player;
47-
4855
// Save cursor position
49-
SlotReference gridSlot = this.universalgrid$getDisabledSlot();
50-
if (gridSlot != null) {
51-
DoubleBuffer x = BufferUtils.createDoubleBuffer(1);
52-
DoubleBuffer y = BufferUtils.createDoubleBuffer(1);
53-
54-
GLFW.glfwGetCursorPos(Minecraft.getInstance().getWindow().getWindow(), x, y);
55-
56-
com.refinedmods.refinedstorage.common.Platform.INSTANCE.sendPacketToServer(new SetCursorPacketOntoStackPacket(
57-
gridSlot,
58-
(int) Math.round(x.get()),
59-
(int) Math.round(y.get()),
60-
true));
61-
}
56+
final SlotReference gridSlot = this.universalgrid$getDisabledSlot();
57+
if (player != null && gridSlot != null) {
58+
if (player.level().isClientSide()) {
59+
ClientUtils.updateCursorPos(gridSlot);
60+
}
6261

63-
if (player != null) {
6462
// Re-open screen with new grid type (the old screen/container will automatically be closed)
6563
RefinedStorageApi.INSTANCE.useSlotReferencedItem(
6664
player,
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package com.ultramega.universalgrid.common.mixin;
22

3-
import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference;
4-
import com.refinedmods.refinedstorage.common.grid.AbstractGridContainerMenu;
3+
import com.ultramega.universalgrid.common.ClientUtils;
4+
import com.ultramega.universalgrid.common.gui.GridTypeSideButtonWidget;
5+
56
import com.refinedmods.refinedstorage.common.grid.screen.AbstractGridScreen;
67
import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu;
78
import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen;
89
import com.refinedmods.refinedstorage.common.support.widget.TextMarquee;
910

10-
import com.ultramega.universalgrid.common.gui.GridTypeSideButtonWidget;
11-
import com.ultramega.universalgrid.common.interfaces.MixinDisabledSlot;
12-
import com.ultramega.universalgrid.common.registry.Items;
13-
1411
import net.minecraft.world.entity.player.Inventory;
1512
import org.spongepowered.asm.mixin.Mixin;
1613

@@ -26,13 +23,9 @@ protected MixinAbstractGridScreen(final AbstractBaseContainerMenu menu,
2623
protected void init() {
2724
super.init();
2825

29-
SlotReference gridSlot = ((MixinDisabledSlot)getMenu()).universalgrid$getDisabledSlot();
30-
if (gridSlot != null) {
31-
gridSlot.resolve(minecraft.player).ifPresent(stack -> {
32-
if (stack.is(Items.INSTANCE.getWirelessUniversalGrid()) || stack.is(Items.INSTANCE.getCreativeWirelessUniversalGrid())) {
33-
this.addSideButton(new GridTypeSideButtonWidget((AbstractGridContainerMenu) this.getMenu()));
34-
}
35-
});
26+
final AbstractBaseContainerMenu containerMenu = (AbstractBaseContainerMenu) this.getMenu();
27+
if (ClientUtils.checkForSideButton(containerMenu, minecraft.player)) {
28+
this.addSideButton(new GridTypeSideButtonWidget(containerMenu));
3629
}
3730
}
3831
}

0 commit comments

Comments
 (0)