Skip to content

Commit 73a446e

Browse files
committed
- Realize #84, let's call it ME Machinery Pattern Provider for now.
- Fix latest Cleanroom compatibility issue. - Widget code changes.
1 parent 9ee1839 commit 73a446e

File tree

69 files changed

+1809
-304
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+1809
-304
lines changed

build.gradle.kts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,11 @@ dependencies {
192192
compileOnly(rfg.deobf("curse.maven:tinkers-construct-74072:2902483"))
193193
compileOnly(rfg.deobf("curse.maven:mantle-74924:2713386"))
194194
implementation(rfg.deobf("curse.maven:tx-loader-706505:4515357"))
195-
implementation(rfg.deobf("curse.maven:applied-energistics-2-223794:2747063"))
196-
// implementation(rfg.deobf("curse.maven:ae2-extended-life-570458:4961400"))
195+
// implementation(rfg.deobf("curse.maven:applied-energistics-2-223794:2747063"))
196+
implementation(rfg.deobf("curse.maven:ae2-extended-life-570458:5147702"))
197+
implementation(rfg.deobf("curse.maven:ae2-fluid-crafting-rework-623955:5278333"))
197198
// compileOnly(rfg.deobf("curse.maven:gregtech-293327:3266351"))
198-
implementation(rfg.deobf("curse.maven:gregtech-ce-unofficial-557242:4799055"))
199+
compileOnly(rfg.deobf("curse.maven:gregtech-ce-unofficial-557242:4799055"))
199200

200201
// GeckoLib
201202
implementation(rfg.deobf("software.bernie.geckolib:geckolib-forge-1.12.2:3.0.31"))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package yalter.mousetweaks.api;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
/**
9+
* Put this on your GuiScreen to disable Mouse Tweaks.
10+
*/
11+
@Retention(RetentionPolicy.RUNTIME)
12+
@Target(ElementType.TYPE)
13+
public @interface MouseTweaksIgnore {
14+
}
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package github.kasuminova.mmce.client.gui;
2+
3+
import appeng.client.gui.AEBaseGui;
4+
import github.kasuminova.mmce.client.gui.util.MousePos;
5+
import github.kasuminova.mmce.client.gui.widget.base.WidgetController;
6+
import net.minecraft.client.gui.FontRenderer;
7+
import net.minecraft.inventory.Container;
8+
import net.minecraft.inventory.Slot;
9+
import net.minecraft.item.ItemStack;
10+
import net.minecraftforge.fml.client.config.GuiUtils;
11+
import org.lwjgl.input.Mouse;
12+
13+
import javax.annotation.Nonnull;
14+
import java.io.IOException;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
18+
public abstract class AEBaseGuiContainerDynamic extends AEBaseGui {
19+
20+
protected WidgetController widgetController = null;
21+
protected Slot hoveredSlot = null;
22+
23+
public AEBaseGuiContainerDynamic(final Container container) {
24+
super(container);
25+
}
26+
27+
@Override
28+
public void updateScreen() {
29+
super.updateScreen();
30+
widgetController.update();
31+
}
32+
33+
@Override
34+
public void initGui() {
35+
super.initGui();
36+
widgetController.getGui()
37+
.setGuiLeft(guiLeft)
38+
.setGuiTop(guiTop)
39+
.setXSize(width)
40+
.setYSize(height);
41+
widgetController.init();
42+
}
43+
44+
@Override
45+
public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
46+
widgetController.postRender(new MousePos(mouseX, mouseY), false);
47+
}
48+
49+
@Override
50+
public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
51+
widgetController.render(new MousePos(mouseX, mouseY), true);
52+
}
53+
54+
@Override
55+
protected void renderHoveredToolTip(final int mouseX, final int mouseY) {
56+
updateHoveredSlot(mouseX, mouseY);
57+
58+
ItemStack stackInSlot = hoveredSlot == null ? ItemStack.EMPTY : hoveredSlot.getStack();
59+
List<String> hoverTooltips = widgetController.getHoverTooltips(new MousePos(mouseX, mouseY));
60+
if (stackInSlot.isEmpty() && hoverTooltips.isEmpty()) {
61+
return;
62+
}
63+
List<String> itemTooltip = stackInSlot.isEmpty() ? new ArrayList<>() : this.getItemToolTip(stackInSlot);
64+
itemTooltip.addAll(hoverTooltips);
65+
66+
FontRenderer font = stackInSlot.getItem().getFontRenderer(stackInSlot);
67+
GuiUtils.preItemToolTip(stackInSlot);
68+
this.drawHoveringText(itemTooltip, mouseX, mouseY, (font == null ? fontRenderer : font));
69+
GuiUtils.postItemToolTip();
70+
}
71+
72+
@Override
73+
public void handleMouseInput() throws IOException {
74+
final int mouseX = Mouse.getEventX() * this.width / this.mc.displayWidth;
75+
final int mouseY = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1;
76+
if (widgetController.onMouseInput(new MousePos(mouseX, mouseY))) {
77+
return;
78+
}
79+
super.handleMouseInput();
80+
}
81+
82+
@Override
83+
protected void mouseClicked(final int mouseX, final int mouseY, final int mouseButton) throws IOException {
84+
if (widgetController.onMouseClicked(new MousePos(mouseX, mouseY), mouseButton)) {
85+
return;
86+
}
87+
super.mouseClicked(mouseX, mouseY, mouseButton);
88+
}
89+
90+
@Override
91+
protected void mouseReleased(final int mouseX, final int mouseY, final int state) {
92+
if (widgetController.onMouseReleased(new MousePos(mouseX, mouseY))) {
93+
return;
94+
}
95+
super.mouseReleased(mouseX, mouseY, state);
96+
}
97+
98+
@Override
99+
protected void keyTyped(final char typedChar, final int keyCode) throws IOException {
100+
if (widgetController.onKeyTyped(typedChar, keyCode)) {
101+
return;
102+
}
103+
super.keyTyped(typedChar, keyCode);
104+
}
105+
106+
@Override
107+
public void drawHoveringText(@Nonnull final List<String> textLines, final int x, final int y) {
108+
super.drawHoveringText(textLines, x, y);
109+
}
110+
111+
protected void updateHoveredSlot(final int mouseX, final int mouseY) {
112+
hoveredSlot = this.inventorySlots.inventorySlots.stream()
113+
.filter(slot -> this.isMouseOverSlot(slot, mouseX, mouseY) && slot.isEnabled())
114+
.findFirst()
115+
.orElse(null);
116+
}
117+
118+
protected boolean isMouseOverSlot(Slot slotIn, int mouseX, int mouseY) {
119+
return this.isPointInRegion(slotIn.xPos, slotIn.yPos, 16, 16, mouseX, mouseY);
120+
}
121+
122+
}

src/main/java/github/kasuminova/mmce/client/gui/GuiContainerDynamic.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import hellfirepvp.modularmachinery.client.gui.GuiContainerBase;
66
import hellfirepvp.modularmachinery.common.container.ContainerBase;
77
import net.minecraft.client.gui.FontRenderer;
8+
import net.minecraft.inventory.Container;
89
import net.minecraft.inventory.Slot;
910
import net.minecraft.item.ItemStack;
1011
import net.minecraftforge.fml.client.config.GuiUtils;
@@ -15,11 +16,15 @@
1516
import java.util.ArrayList;
1617
import java.util.List;
1718

18-
public abstract class GuiContainerDynamic<T extends ContainerBase<?>> extends GuiContainerBase<T> {
19+
public abstract class GuiContainerDynamic<T extends Container> extends GuiContainerBase<T> {
1920

2021
protected WidgetController widgetController = null;
2122
protected Slot hoveredSlot = null;
2223

24+
public GuiContainerDynamic(final ContainerBase<?> container) {
25+
super((T) container);
26+
}
27+
2328
public GuiContainerDynamic(final T container) {
2429
super(container);
2530
}

src/main/java/github/kasuminova/mmce/client/gui/GuiMEFluidInputBus.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import net.minecraft.client.resources.I18n;
1515
import net.minecraft.entity.player.EntityPlayer;
1616
import net.minecraft.util.ResourceLocation;
17+
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
18+
19+
import java.util.List;
1720

1821
public class GuiMEFluidInputBus extends GuiUpgradeable {
1922
private static final ResourceLocation TEXTURES_INPUT_BUS = new ResourceLocation(ModularMachinery.MODID, "textures/gui/mefluidinputbus.png");
@@ -39,11 +42,13 @@ public void initGui() {
3942

4043
// AE2 Unofficial Extended Life Check
4144
if (Mods.AE2EL.isPresent()) {
42-
this.guiSlots.add(GuiCustomSlot.class.cast(guiTank));
45+
this.guiSlots.add(guiTank);
4346
} else {
44-
guiTank.x += getGuiLeft();
45-
guiTank.y += getGuiTop();
46-
this.buttonList.add(guiTank);
47+
// Default AE2
48+
ObfuscationReflectionHelper.setPrivateValue(GuiCustomSlot.class, guiTank, getGuiLeft(), "x");
49+
ObfuscationReflectionHelper.setPrivateValue(GuiCustomSlot.class, guiTank, getGuiTop(), "y");
50+
List<Object> buttonList = (List) this.buttonList;
51+
buttonList.add(guiTank);
4752
}
4853

4954
this.guiSlots.add(new GuiFluidSlot(configFluids, i, i, 8 + 18 * i, 35));

src/main/java/github/kasuminova/mmce/client/gui/GuiMEFluidOutputBus.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import net.minecraft.client.resources.I18n;
1313
import net.minecraft.entity.player.EntityPlayer;
1414
import net.minecraft.util.ResourceLocation;
15+
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
16+
17+
import java.util.List;
1518

1619
public class GuiMEFluidOutputBus extends GuiUpgradeable {
1720
private static final ResourceLocation TEXTURES_OUTPUT_BUS = new ResourceLocation(ModularMachinery.MODID, "textures/gui/mefluidoutputbus.png");
@@ -36,11 +39,13 @@ public void initGui() {
3639

3740
// AE2 Unofficial Extended Life Check
3841
if (Mods.AE2EL.isPresent()) {
39-
this.guiSlots.add(GuiCustomSlot.class.cast(guiTank));
42+
this.guiSlots.add(guiTank);
4043
} else {
41-
guiTank.x += getGuiLeft();
42-
guiTank.y += getGuiTop();
43-
this.buttonList.add(guiTank);
44+
// Default AE2
45+
ObfuscationReflectionHelper.setPrivateValue(GuiCustomSlot.class, guiTank, getGuiLeft(), "x");
46+
ObfuscationReflectionHelper.setPrivateValue(GuiCustomSlot.class, guiTank, getGuiTop(), "y");
47+
List<Object> buttonList = (List) this.buttonList;
48+
buttonList.add(guiTank);
4449
}
4550
}
4651
}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
package github.kasuminova.mmce.client.gui;
2+
3+
import github.kasuminova.mmce.client.gui.widget.Button4State;
4+
import github.kasuminova.mmce.client.gui.widget.Button5State;
5+
import github.kasuminova.mmce.client.gui.widget.MultiLineLabel;
6+
import github.kasuminova.mmce.client.gui.widget.base.WidgetController;
7+
import github.kasuminova.mmce.client.gui.widget.base.WidgetGui;
8+
import github.kasuminova.mmce.client.gui.widget.container.Row;
9+
import github.kasuminova.mmce.client.gui.widget.impl.patternprovider.PatternProviderIngredientList;
10+
import github.kasuminova.mmce.common.container.ContainerMEPatternProvider;
11+
import github.kasuminova.mmce.common.network.PktMEPatternProviderAction;
12+
import github.kasuminova.mmce.common.tile.MEPatternProvider;
13+
import github.kasuminova.mmce.common.util.InfItemFluidHandler;
14+
import hellfirepvp.modularmachinery.ModularMachinery;
15+
import net.minecraft.client.renderer.GlStateManager;
16+
import net.minecraft.client.resources.I18n;
17+
import net.minecraft.entity.player.EntityPlayer;
18+
import net.minecraft.util.ResourceLocation;
19+
20+
import java.util.ArrayList;
21+
import java.util.Collections;
22+
import java.util.List;
23+
24+
public class GuiMEPatternProvider extends AEBaseGuiContainerDynamic {
25+
26+
public static final ResourceLocation GUI_TEXTURE =
27+
new ResourceLocation(ModularMachinery.MODID, "textures/gui/mepatternprovider.png");
28+
29+
protected final MEPatternProvider owner;
30+
31+
protected final PatternProviderIngredientList stackList = new PatternProviderIngredientList();
32+
protected final Button5State toggleBlockingMode = new Button5State();
33+
34+
public GuiMEPatternProvider(final MEPatternProvider owner, final EntityPlayer player) {
35+
super(new ContainerMEPatternProvider(owner, player));
36+
this.owner = owner;
37+
this.xSize = 256;
38+
this.ySize = 196;
39+
this.guiLeft = (this.width - this.xSize) / 2;
40+
this.guiTop = (this.height - this.ySize) / 2;
41+
42+
this.widgetController = new WidgetController(WidgetGui.of(this, this.xSize, this.ySize, guiLeft, guiTop));
43+
44+
// Titles...
45+
this.widgetController.addWidget(
46+
new MultiLineLabel(Collections.singletonList(I18n.format("gui.mepatternprovider.title")))
47+
.setAutoWrap(false)
48+
.setMargin(0)
49+
.setAbsXY(7, 11)
50+
);
51+
this.widgetController.addWidget(
52+
new MultiLineLabel(Collections.singletonList(I18n.format("gui.mepatternprovider.cached")))
53+
.setAutoWrap(false)
54+
.setMargin(0)
55+
.setAbsXY(180, 11)
56+
);
57+
this.widgetController.addWidget(
58+
new MultiLineLabel(Collections.singletonList(I18n.format("gui.mepatternprovider.inventory")))
59+
.setAutoWrap(false)
60+
.setMargin(0)
61+
.setAbsXY(7, 101)
62+
);
63+
64+
// Init StackList...
65+
stackList.setMaxStackPerRow(3);
66+
stackList.setWidthHeight(69, 162);
67+
stackList.setAbsXY(180, 27);
68+
69+
// Init ReturnItems...
70+
Button4State returnItems = new Button4State();
71+
returnItems
72+
.setMouseDownTextureXY(176 + 18 + 18, 214)
73+
.setHoveredTextureXY(176 + 18, 214)
74+
.setTextureXY(176, 214)
75+
.setTextureLocation(GuiMEPatternProvider.GUI_TEXTURE)
76+
.setTooltipFunction((btn) -> {
77+
List<String> tooltips = new ArrayList<>();
78+
tooltips.add(I18n.format("gui.mepatternprovider.return_items"));
79+
tooltips.add(I18n.format("gui.mepatternprovider.return_items.desc"));
80+
return tooltips;
81+
})
82+
.setOnClickedListener((btn) -> ModularMachinery.NET_CHANNEL.sendToServer(new PktMEPatternProviderAction(PktMEPatternProviderAction.Action.RETURN_ITEMS)))
83+
.setWidthHeight(16, 16);
84+
85+
// Init ToggleBlockingMode...
86+
toggleBlockingMode
87+
.setClickedTextureXY(176 + 18 + 18 + 18, 196)
88+
.setMouseDownTextureXY(176 + 18 + 18, 196)
89+
.setHoveredTextureXY(176 + 18, 196)
90+
.setTextureXY(176, 196)
91+
.setTextureLocation(GuiMEPatternProvider.GUI_TEXTURE)
92+
.setTooltipFunction((btn) -> {
93+
List<String> tooltips = new ArrayList<>();
94+
if (toggleBlockingMode.isClicked()) {
95+
tooltips.add(I18n.format("gui.mepatternprovider.blocking_mode.disable"));
96+
tooltips.add(I18n.format("gui.mepatternprovider.blocking_mode.enabled.desc"));
97+
} else {
98+
tooltips.add(I18n.format("gui.mepatternprovider.blocking_mode.enable"));
99+
tooltips.add(I18n.format("gui.mepatternprovider.blocking_mode.disabled.desc"));
100+
}
101+
return tooltips;
102+
})
103+
.setOnClickedListener((btn) -> {
104+
if (toggleBlockingMode.isClicked()) {
105+
ModularMachinery.NET_CHANNEL.sendToServer(new PktMEPatternProviderAction(PktMEPatternProviderAction.Action.ENABLE_BLOCKING_MODE));
106+
} else {
107+
ModularMachinery.NET_CHANNEL.sendToServer(new PktMEPatternProviderAction(PktMEPatternProviderAction.Action.DISABLE_BLOCKING_MODE));
108+
}
109+
})
110+
.setWidthHeight(16, 16);
111+
112+
// Init Widget Containers...
113+
Row buttons = new Row();
114+
buttons.addWidgets(returnItems.setMarginRight(2), toggleBlockingMode).setAbsXY(215, 7);
115+
116+
this.widgetController.addWidget(stackList);
117+
this.widgetController.addWidget(buttons);
118+
119+
// Update state...
120+
updateGUIState();
121+
}
122+
123+
@Override
124+
public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
125+
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
126+
this.mc.getTextureManager().bindTexture(GUI_TEXTURE);
127+
this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
128+
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
129+
130+
super.drawBG(offsetX, offsetY, mouseX, mouseY);
131+
}
132+
133+
public MEPatternProvider getOwner() {
134+
return owner;
135+
}
136+
137+
public void updateGUIState() {
138+
InfItemFluidHandler infHandler = owner.getInfHandler();
139+
stackList.setStackList(infHandler.getItemStackList(), infHandler.getFluidStackList());
140+
toggleBlockingMode.setClicked(owner.isBlockingMode());
141+
}
142+
143+
}

src/main/java/github/kasuminova/mmce/client/gui/widget/Button.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ public boolean onMouseClick(final MousePos mousePos, final RenderPos renderPos,
6868
// Tooltips
6969

7070
@Override
71-
public List<String> getHoverTooltips(final MousePos mousePos) {
71+
public List<String> getHoverTooltips(final WidgetGui widgetGui, final MousePos mousePos) {
7272
if (available && tooltipFunction != null) {
7373
return tooltipFunction.apply(this);
7474
}
75-
return super.getHoverTooltips(mousePos);
75+
return super.getHoverTooltips(widgetGui, mousePos);
7676
}
7777

7878
// Getter Setter

0 commit comments

Comments
 (0)