Skip to content

Commit ecfd6a7

Browse files
committed
允许通过合成计划GUI追溯物品所使用的样板所在的接口
1 parent 07901a5 commit ecfd6a7

19 files changed

+541
-81
lines changed

gradle/scripts/dependencies.gradle

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,33 @@ dependencies {
3434
// Include OSXNarratorBlocker by default for the dev env, for M1+ Macs
3535
runtimeOnly 'com.cleanroommc:osxnarratorblocker:1.0'
3636

37+
implementation("io.github.chaosunity.forgelin:Forgelin-Continuous:2.2.20.0")
38+
3739
compileOnly("CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.+")
3840
compileOnly(rfg.deobf("curse.maven:RedstoneFlux-270789:2920436"))
3941
runtimeOnly(rfg.deobf("curse.maven:Cucumber-1.12.2-1.1.3-272335:2645867"))
4042
compileOnly(rfg.deobf("curse.maven:CodeChickenLib-1.12.2-3.2.4.1-universal-242818:2779848"))
41-
compileOnly(rfg.deobf("curse.maven:ae2-extended-life-570458:6302098"))
42-
compileOnly(rfg.deobf("curse.maven:ae2fluidcraft-rework-unofficial-1404390:7336029"))
43+
implementation(rfg.deobf("curse.maven:ae2-extended-life-570458:6302098"))
44+
implementation(rfg.deobf("curse.maven:ae2fluidcraft-rework-unofficial-1404390:7403081"))
4345
compileOnly(rfg.deobf("curse.maven:ae2-fluid-crafting-rework-623955:5504001"))
4446
compileOnly(rfg.deobf("curse.maven:baubles-227083:2518667"))
4547
compileOnly(rfg.deobf("curse.maven:not-enough-energistics-515565:5234732"))
46-
compileOnly(rfg.deobf("curse.maven:extended-crafting-nomifactory-edition-398267:5778512"))
48+
implementation(rfg.deobf("curse.maven:extended-crafting-nomifactory-edition-398267:5778512"))
4749
compileOnly(rfg.deobf("curse.maven:libnine-322344:3509087"))
4850
compileOnly(rfg.deobf("curse.maven:lazy-ae2-322347:3254160"))
4951
compileOnly(rfg.deobf("curse.maven:modularmachinery-community-edition-817377:7306619"))
50-
compileOnly(rfg.deobf("curse.maven:extended-crafting-terminals-for-applied-1157825:6895322"))
52+
implementation(rfg.deobf("curse.maven:extended-crafting-terminals-for-applied-1157825:6895322"))
5153
compileOnly(rfg.deobf("curse.maven:cofh-core-69162:2920433"))
5254
compileOnly(rfg.deobf("curse.maven:cofh-world-271384:2920434"))
5355
compileOnly(rfg.deobf("curse.maven:thermal-foundation-222880:2926428"))
5456
compileOnly(rfg.deobf("curse.maven:thermal-expansion-69163:2926431"))
5557
compileOnly(rfg.deobf("curse.maven:industrialcraft-2-242638:3078604"))
5658
compileOnly(rfg.deobf("curse.maven:mekanism-ce-399904:5351260"))
5759
compileOnly(rfg.deobf("curse.maven:mekeng-1027681:5775101"))
58-
compileOnly(rfg.deobf("curse.maven:had-enough-items-557549:7340288"))
60+
implementation(rfg.deobf("curse.maven:had-enough-items-557549:7340288"))
5961
compileOnly(rfg.deobf("curse.maven:thaumic-223628:2629023"))
6062
compileOnly(rfg.deobf("curse.maven:thaumic-energistics-extended-life-849094:6321322"))
61-
compileOnly(rfg.deobf("curse.maven:nae2-884359:5380800"))
63+
implementation(rfg.deobf("curse.maven:nae2-884359:5380800"))
6264
compileOnly(rfg.deobf('curse.maven:ftb-library-237167:2985811'))
6365
compileOnly(rfg.deobf('curse.maven:ftb-utilities-237102:3157548'))
6466
compileOnly(rfg.deobf("curse.maven:botania-225643:3330934"))

src/main/java/com/circulation/random_complement/client/ClientProxy.java

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.circulation.random_complement.client;
22

3+
import com.circulation.random_complement.RandomComplement;
4+
import com.circulation.random_complement.client.handler.GuiMouseHelper;
5+
import com.circulation.random_complement.client.handler.HighlighterHandler;
36
import com.circulation.random_complement.client.handler.ItemTooltipHandler;
47
import com.circulation.random_complement.client.handler.RCInputHandler;
58
import com.circulation.random_complement.client.handler.RCJEIInputHandler;
@@ -9,23 +12,26 @@
912
import com.circulation.random_complement.mixin.jei.AccessorInputHandler;
1013
import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
1114
import it.unimi.dsi.fastutil.objects.ReferenceList;
15+
import lombok.val;
1216
import mezz.jei.Internal;
17+
import mezz.jei.gui.ghost.GhostIngredientDrag;
1318
import net.minecraft.client.Minecraft;
1419
import net.minecraft.item.ItemStack;
15-
import net.minecraftforge.client.event.ModelRegistryEvent;
1620
import net.minecraftforge.common.MinecraftForge;
1721
import net.minecraftforge.fml.common.Loader;
1822
import net.minecraftforge.fml.common.Mod;
1923
import net.minecraftforge.fml.common.Optional;
20-
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
2124
import net.minecraftforge.fml.relauncher.Side;
2225

23-
@Mod.EventBusSubscriber(Side.CLIENT)
26+
@Mod.EventBusSubscriber(value = Side.CLIENT, modid = RandomComplement.MOD_ID)
2427
public class ClientProxy extends CommonProxy {
2528
public static final String categoryJEI = "RandomComplement(JEI)";
29+
public static final String categoryAE2 = "RandomComplement(AE2)";
2630

2731
public static ItemStack getMouseItem() {
28-
var i = Minecraft.getMinecraft().player.inventory.getItemStack();
32+
val player = Minecraft.getMinecraft().player;
33+
if (player == null) return ItemStack.EMPTY;
34+
val i = player.inventory.getItemStack();
2935
if (!i.isEmpty()) return i;
3036

3137
if (Loader.isModLoaded("jei")) return getJEIMouseItem();
@@ -35,7 +41,10 @@ public static ItemStack getMouseItem() {
3541

3642
@Optional.Method(modid = "jei")
3743
public static ItemStack getJEIMouseItem() {
38-
var ii = ((AccessorGhostIngredientDragManager) ((AccessorInputHandler) Internal.getInputHandler()).getGhostIngredientDragManager()).getGhostIngredientDrag();
44+
GhostIngredientDrag<?> ii = null;
45+
if (Internal.getInputHandler() != null) {
46+
ii = ((AccessorGhostIngredientDragManager) ((AccessorInputHandler) Internal.getInputHandler()).getGhostIngredientDragManager()).getGhostIngredientDrag();
47+
}
3948
if (ii != null && ii.getIngredient() instanceof ItemStack stack) return stack;
4049
return ItemStack.EMPTY;
4150
}
@@ -48,7 +57,22 @@ public void construction() {
4857
@Override
4958
public void preInit() {
5059
super.preInit();
51-
MinecraftForge.EVENT_BUS.register(new ItemTooltipHandler());
60+
}
61+
62+
@Override
63+
public void init() {
64+
super.init();
65+
if (Functions.modLoaded("appliedenergistics2")) {
66+
KeyBindings.init();
67+
}
68+
}
69+
70+
@Override
71+
public void postInit() {
72+
super.postInit();
73+
MinecraftForge.EVENT_BUS.register(GuiMouseHelper.INSTANCE);
74+
MinecraftForge.EVENT_BUS.register(ItemTooltipHandler.INSTANCE);
75+
MinecraftForge.EVENT_BUS.register(HighlighterHandler.INSTANCE);
5276
if (Loader.isModLoaded("appliedenergistics2")) {
5377
MinecraftForge.EVENT_BUS.register(RCInputHandler.INSTANCE);
5478
}
@@ -73,30 +97,12 @@ public void preInit() {
7397
MinecraftForge.EVENT_BUS.register(RCJEIInputHandler.INSTANCE);
7498
}
7599
}
76-
}
77-
78-
@Override
79-
public void init() {
80-
super.init();
81-
if (Functions.modLoaded("appliedenergistics2")) {
82-
KeyBindings.init();
83-
}
84-
}
85-
86-
@Override
87-
public void postInit() {
88-
super.postInit();
89100
RegItemTooltip.regAll();
90101
}
91102

92-
@SubscribeEvent
93-
public void onRegisterModels(ModelRegistryEvent event) {
94-
95-
}
96-
97103
@Override
98104
@Optional.Method(modid = "jei")
99105
public boolean isMouseHasItem() {
100-
return !Minecraft.getMinecraft().player.inventory.getItemStack().isEmpty() || ((AccessorGhostIngredientDragManager) ((AccessorInputHandler) Internal.getInputHandler()).getGhostIngredientDragManager()).getGhostIngredientDrag() != null;
106+
return !getMouseItem().isEmpty();
101107
}
102108
}
Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.circulation.random_complement.client;
22

3-
import com.circulation.random_complement.common.util.Functions;
43
import lombok.Getter;
5-
import lombok.val;
64
import net.minecraft.client.resources.I18n;
75
import net.minecraft.client.settings.KeyBinding;
86
import net.minecraftforge.client.settings.KeyConflictContext;
@@ -11,18 +9,16 @@
119
import net.minecraftforge.fml.relauncher.Side;
1210
import net.minecraftforge.fml.relauncher.SideOnly;
1311

14-
import java.util.List;
15-
1612
@SideOnly(Side.CLIENT)
1713
public enum KeyBindings {
1814
RetrieveItem(new KeyBinding("key.retrieve_item.desc", KeyConflictContext.GUI, KeyModifier.CONTROL, -98, ClientProxy.categoryJEI), true),
19-
StartCraft(new KeyBinding("key.start_craft.desc", KeyConflictContext.GUI, KeyModifier.ALT, -98, ClientProxy.categoryJEI), true);
15+
StartCraft(new KeyBinding("key.start_craft.desc", KeyConflictContext.GUI, KeyModifier.ALT, -98, ClientProxy.categoryJEI), true),
16+
QueryInterface(new KeyBinding("key.query_interface.desc", KeyConflictContext.GUI, KeyModifier.SHIFT, -100, ClientProxy.categoryAE2), true);
2017

2118
@Getter
2219
private final KeyBinding keyBinding;
2320
@Getter
2421
private final boolean needItem;
25-
@Getter
2622
private final String tooltip;
2723

2824
KeyBindings(KeyBinding keyBinding, boolean needItem) {
@@ -35,15 +31,6 @@ public static KeyBindings getKeyFromID(int id) {
3531
return KeyBindings.values()[id];
3632
}
3733

38-
public static List<String> getTooltipList() {
39-
val outs = new String[values().length];
40-
for (int i = 0; i < values().length; i++) {
41-
val key = values()[i].keyBinding;
42-
outs[i] = I18n.format(values()[i].tooltip, key.getKeyModifier().getLocalizedComboName(key.getKeyCode()));
43-
}
44-
return Functions.asList(outs);
45-
}
46-
4734
public static void init() {
4835
for (KeyBindings k : KeyBindings.values()) {
4936
ClientRegistry.registerKeyBinding(k.keyBinding);
@@ -53,4 +40,8 @@ public static void init() {
5340
public int getID() {
5441
return this.ordinal();
5542
}
43+
44+
public String getTooltip() {
45+
return I18n.format(this.tooltip, this.keyBinding.getKeyModifier().getLocalizedComboName(this.keyBinding.getKeyCode()));
46+
}
5647
}

src/main/java/com/circulation/random_complement/client/RCGuiScrollbar.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import appeng.client.gui.AEBaseGui;
44
import appeng.client.gui.widgets.GuiScrollbar;
5-
import com.circulation.random_complement.client.handler.RCInputHandler;
5+
import com.circulation.random_complement.client.handler.GuiMouseHelper;
66
import lombok.Getter;
77
import lombok.Setter;
88
import net.minecraft.client.Minecraft;
@@ -82,7 +82,7 @@ public void click(AEBaseGui aeBaseGui, int x, int y) {
8282

8383
public void wheel(int delta) {
8484
if (visible) {
85-
if (rectangle.contains(RCInputHandler.getMouseX() - ((AEBaseGui) Minecraft.getMinecraft().currentScreen).getGuiLeft(), RCInputHandler.getMouseY() - ((AEBaseGui) Minecraft.getMinecraft().currentScreen).getGuiTop())) {
85+
if (rectangle.contains(GuiMouseHelper.getMouseX() - ((AEBaseGui) Minecraft.getMinecraft().currentScreen).getGuiLeft(), GuiMouseHelper.getMouseY() - ((AEBaseGui) Minecraft.getMinecraft().currentScreen).getGuiTop())) {
8686
int old = getCurrentScroll();
8787
super.wheel(delta);
8888
if (old != getCurrentScroll() && rcScrollbarGui != null) {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.circulation.random_complement.client.handler;
2+
3+
import lombok.Getter;
4+
import net.minecraft.client.Minecraft;
5+
import net.minecraft.client.gui.ScaledResolution;
6+
import net.minecraftforge.client.event.GuiScreenEvent;
7+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
8+
import net.minecraftforge.fml.relauncher.Side;
9+
import net.minecraftforge.fml.relauncher.SideOnly;
10+
import org.lwjgl.input.Mouse;
11+
12+
@SideOnly(Side.CLIENT)
13+
public class GuiMouseHelper {
14+
15+
public static final GuiMouseHelper INSTANCE = new GuiMouseHelper();
16+
private static final Minecraft mc = Minecraft.getMinecraft();
17+
@Getter
18+
private static ScaledResolution resolution;
19+
20+
private GuiMouseHelper() {
21+
}
22+
23+
public static int getMouseX() {
24+
int i = resolution.getScaledWidth();
25+
return Mouse.getX() * i / mc.displayWidth;
26+
}
27+
28+
public static int getMouseY() {
29+
int j = resolution.getScaledHeight();
30+
return j - Mouse.getY() * j / mc.displayHeight - 1;
31+
}
32+
33+
@SubscribeEvent
34+
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
35+
resolution = new ScaledResolution(mc);
36+
}
37+
38+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.circulation.random_complement.client.handler;
2+
3+
import net.minecraft.client.Minecraft;
4+
import net.minecraft.client.entity.EntityPlayerSP;
5+
import net.minecraft.client.renderer.BufferBuilder;
6+
import net.minecraft.client.renderer.GlStateManager;
7+
import net.minecraft.client.renderer.Tessellator;
8+
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
9+
import net.minecraft.util.math.BlockPos;
10+
import net.minecraftforge.client.event.RenderWorldLastEvent;
11+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
12+
import net.minecraftforge.fml.relauncher.Side;
13+
import net.minecraftforge.fml.relauncher.SideOnly;
14+
import org.lwjgl.opengl.GL11;
15+
16+
import static appeng.helpers.HighlighterHandler.renderHighLightedBlocksOutline;
17+
18+
@SideOnly(Side.CLIENT)
19+
public class HighlighterHandler {
20+
21+
public static final HighlighterHandler INSTANCE = new HighlighterHandler();
22+
private BlockPos[] hilightedBlock;
23+
private long expireHilight;
24+
private int dimension;
25+
26+
private HighlighterHandler() {
27+
}
28+
29+
public void hilightBlock(BlockPos[] c, long expireHilight, int dimension) {
30+
this.hilightedBlock = c;
31+
this.expireHilight = expireHilight;
32+
this.dimension = dimension;
33+
}
34+
35+
@SubscribeEvent
36+
public void renderWorldLastEvent(RenderWorldLastEvent event) {
37+
if (hilightedBlock == null) {
38+
return;
39+
}
40+
Minecraft mc = Minecraft.getMinecraft();
41+
int dimension = mc.world.provider.getDimension();
42+
long time = System.currentTimeMillis();
43+
44+
if (time > expireHilight || dimension != this.dimension) {
45+
hilightBlock(null, -1, this.dimension);
46+
return;
47+
}
48+
49+
if (((time / 500) & 1) == 0) {
50+
return;
51+
}
52+
53+
EntityPlayerSP p = mc.player;
54+
double doubleX = p.lastTickPosX + (p.posX - p.lastTickPosX) * event.getPartialTicks();
55+
double doubleY = p.lastTickPosY + (p.posY - p.lastTickPosY) * event.getPartialTicks();
56+
double doubleZ = p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * event.getPartialTicks();
57+
58+
GlStateManager.pushMatrix();
59+
GlStateManager.color(1.0f, 0, 0);
60+
GlStateManager.glLineWidth(3);
61+
GlStateManager.translate(-doubleX, -doubleY, -doubleZ);
62+
63+
GlStateManager.disableDepth();
64+
GlStateManager.disableTexture2D();
65+
66+
Tessellator tessellator = Tessellator.getInstance();
67+
BufferBuilder buffer = tessellator.getBuffer();
68+
69+
buffer.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR);
70+
71+
//noinspection ForLoopReplaceableByForEach
72+
for (var i = 0; i < hilightedBlock.length; i++) {
73+
var pos = hilightedBlock[i];
74+
if (pos == null) return;
75+
float mx = pos.getX();
76+
float my = pos.getY();
77+
float mz = pos.getZ();
78+
renderHighLightedBlocksOutline(buffer, mx, my, mz, 1.0f, 0.0f, 0.0f, 1.0f);
79+
}
80+
81+
tessellator.draw();
82+
83+
GlStateManager.enableTexture2D();
84+
GlStateManager.enableDepth();
85+
GlStateManager.popMatrix();
86+
}
87+
}

0 commit comments

Comments
 (0)