Skip to content

Commit e639e02

Browse files
Circulate2330xC4DE
andauthored
Fix Wireless Terminals hotkey (#13)
* Fix Wireless Terminals hotkey - Now they can be correctly opened, not just when the Wireless Terminals are held in hand. - Now they can also function properly when in the Baubles. * Update zh_cn.lang --------- Co-authored-by: 0xC4DE <0xc4de@0xc4de.dev>
1 parent 365221f commit e639e02

File tree

7 files changed

+108
-130
lines changed

7 files changed

+108
-130
lines changed

src/main/java/com/_0xc4de/ae2exttable/client/KeyBindings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public enum KeyBindings {
1313
elite(new KeyBinding("key.open_elite_extended_wireless_crafting_terminal", KeyConflictContext.UNIVERSAL, KeyModifier.NONE, Keyboard.KEY_NONE, KEY_CATEGORY)),
1414
ultimate(new KeyBinding("key.open_ultimate_extended_wireless_crafting_terminal", KeyConflictContext.UNIVERSAL, KeyModifier.NONE, Keyboard.KEY_NONE, KEY_CATEGORY));
1515

16-
private KeyBinding binding;
16+
private final KeyBinding binding;
1717

1818
KeyBindings(KeyBinding keyBinding) {
1919
this.binding = keyBinding;

src/main/java/com/_0xc4de/ae2exttable/client/container/ContainerSharedWirelessTerminals.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import appeng.util.inv.IAEAppEngInventory;
1414
import appeng.util.inv.WrapperInvItemHandler;
1515
import baubles.api.BaublesApi;
16-
import com._0xc4de.ae2exttable.client.gui.AE2ExtendedGUIs;
1716
import com._0xc4de.ae2exttable.client.gui.ExtendedCraftingGUIConstants;
1817
import com._0xc4de.ae2exttable.client.gui.WirelessTerminalGuiObjectTwo;
1918
import net.minecraft.entity.player.EntityPlayer;
@@ -52,8 +51,8 @@ public ContainerSharedWirelessTerminals(
5251

5352
if (guiItemObject != null) {
5453
final int slotIndex =
55-
((IInventorySlotAware) guiItemObject).getInventorySlot();
56-
if (!((IInventorySlotAware) guiItemObject).isBaubleSlot()) {
54+
guiItemObject.getInventorySlot();
55+
if (!guiItemObject.isBaubleSlot()) {
5756
this.lockPlayerInventorySlot(slotIndex);
5857
}
5958
this.slot = slotIndex;

src/main/java/com/_0xc4de/ae2exttable/client/gui/PartGuiHandler.java

Lines changed: 53 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,14 @@
99
import appeng.api.features.ILocatable;
1010
import appeng.api.features.IWirelessTermHandler;
1111
import appeng.api.features.IWirelessTermRegistry;
12-
import appeng.api.networking.IGrid;
13-
import appeng.api.networking.storage.IStorageGrid;
1412
import appeng.api.parts.IPart;
1513
import appeng.api.parts.IPartHost;
16-
import appeng.api.storage.IMEMonitor;
1714
import appeng.api.storage.ITerminalHost;
18-
import appeng.api.storage.channels.IItemStorageChannel;
19-
import appeng.api.storage.data.IAEItemStack;
2015
import appeng.api.util.AEPartLocation;
2116
import appeng.container.AEBaseContainer;
2217
import appeng.container.ContainerOpenContext;
2318
import appeng.core.localization.PlayerMessages;
2419
import appeng.me.GridAccessException;
25-
import appeng.tile.misc.TileSecurityStation;
2620
import appeng.util.Platform;
2721
import baubles.api.BaublesApi;
2822
import com._0xc4de.ae2exttable.AE2ExtendedCraftingTable;
@@ -52,6 +46,8 @@
5246
import net.minecraft.util.EnumFacing;
5347
import net.minecraft.util.math.BlockPos;
5448
import net.minecraft.world.World;
49+
import net.minecraftforge.fml.common.Loader;
50+
import net.minecraftforge.fml.common.Optional;
5551
import net.minecraftforge.fml.common.network.IGuiHandler;
5652
import org.jetbrains.annotations.Nullable;
5753

@@ -90,13 +86,8 @@ public static void openWirelessTerminalGui(ItemStack item, int invSlot,
9086
return;
9187
}
9288
final long parsedKey = Long.parseLong(unparsedKey);
93-
final ILocatable
94-
securityStation =
89+
final ILocatable securityStation =
9590
AEApi.instance().registries().locatable().getLocatableBy(parsedKey);
96-
TileSecurityStation security_station = (TileSecurityStation) securityStation;
97-
IGrid grid = security_station.getProxy().getGrid();
98-
IStorageGrid inv = grid.getCache(IStorageGrid.class);
99-
final IMEMonitor<IAEItemStack> storage = inv.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class));
10091
if (securityStation == null) {
10192
player.sendMessage(PlayerMessages.StationCanNotBeLocated.get());
10293
return;
@@ -140,8 +131,7 @@ public static IPart getPartFromWorld(World world, BlockPos pos,
140131
private Object updateGui(final Object newContainer, final World w,
141132
final int x, final int y, final int z,
142133
final AEPartLocation side, final Object myItem) {
143-
if (newContainer instanceof AEBaseContainer) {
144-
final AEBaseContainer bc = (AEBaseContainer) newContainer;
134+
if (newContainer instanceof AEBaseContainer bc) {
145135
bc.setOpenContext(new ContainerOpenContext(myItem));
146136
bc.getOpenContext().setWorld(w);
147137
bc.getOpenContext().setX(x);
@@ -163,21 +153,17 @@ private Object updateGui(final Object newContainer, final World w,
163153

164154
if (guiIsWirelessTerminal(guiID)) { // idk is item
165155
ItemStack termItem = getWirelessTermItem(usingItemOnTile, player, world, guiID, side, x, y, z);
166-
final Object item =
167-
this.getGuiObject(guiID, termItem, player, world, x, y, z, side);
156+
final Object item = this.getGuiObject(guiID, termItem, player, world, x, y, z, side);
168157
return this.updateGui(item, world, x, y, z, side, termItem);
169158
} else {
170-
171159
final TileEntity TE = world.getTileEntity(new BlockPos(x, y, z));
172160

173161
if (TE instanceof IPartHost) {
174162
final IPart part = ((IPartHost) TE).getPart(side);
175163
if (part == null) {
176164
return null;
177165
}
178-
Object gui =
179-
this.getGuiObject(guiID, ItemStack.EMPTY, player, world, x, y, z,
180-
side);
166+
Object gui = this.getGuiObject(guiID, ItemStack.EMPTY, player, world, x, y, z, side);
181167
return this.updateGui(gui, world, x, y, z, side, part);
182168
}
183169
}
@@ -193,8 +179,7 @@ private Object getGuiObject(final AE2ExtendedGUIs guiID,
193179
final int z, final AEPartLocation side) {
194180

195181
if (myItem.isEmpty()) {
196-
IPart part =
197-
PartGuiHandler.getPartFromWorld(world, new BlockPos(x, y, z), side);
182+
IPart part = PartGuiHandler.getPartFromWorld(world, new BlockPos(x, y, z), side);
198183

199184
return switch (guiID) {
200185
case BASIC_CRAFTING_TERMINAL -> new ContainerBasicCraftingTerminal(player.inventory,
@@ -214,19 +199,15 @@ private Object getGuiObject(final AE2ExtendedGUIs guiID,
214199
AEApi.instance().registries().wireless()
215200
.getWirelessTerminalHandler(myItem);
216201

217-
wireless =
218-
new WirelessTerminalGuiObjectTwo(handler, myItem, player, world, x,
219-
y, z);
202+
wireless = new WirelessTerminalGuiObjectTwo(handler, myItem, player, world, x, y, z);
220203
}
221204

222205
return switch (guiID) {
223206
// Start wireless stuffs here
224207
case WIRELESS_BASIC_CRAFTING_TERMINAL -> new ContainerBasicWirelessTerminal(player.inventory, wireless);
225-
case WIRELESS_ADVANCED_CRAFTING_TERMINAL ->
226-
new ContainerAdvancedWirelessTerminal(player.inventory, wireless);
208+
case WIRELESS_ADVANCED_CRAFTING_TERMINAL -> new ContainerAdvancedWirelessTerminal(player.inventory, wireless);
227209
case WIRELESS_ELITE_CRAFTING_TERMINAL -> new ContainerEliteWirelessTerminal(player.inventory, wireless);
228-
case WIRELESS_ULTIMATE_CRAFTING_TERMINAL ->
229-
new ContainerUltimateWirelessTerminal(player.inventory, wireless);
210+
case WIRELESS_ULTIMATE_CRAFTING_TERMINAL -> new ContainerUltimateWirelessTerminal(player.inventory, wireless);
230211
default -> null;
231212
};
232213
}
@@ -238,66 +219,62 @@ private Object getGuiObject(final AE2ExtendedGUIs guiID,
238219
int z) {
239220
AE2ExtendedGUIs guiID = PartGuiHandler.getGUIFromOrdinal(ID);
240221
AEPartLocation side = PartGuiHandler.getSideFromOrdinal(ID);
241-
IPart part =
242-
PartGuiHandler.getPartFromWorld(world, new BlockPos(x, y, z), side);
243222
final boolean usingItemOnTile = ((ID >> 3) & 1) == 1;
244223

245224
WirelessTerminalGuiObjectTwo gui = null;
225+
ITerminalHost part = null;
246226
if (guiIsWirelessTerminal(guiID)) {
247227
ItemStack termItem = getWirelessTermItem(usingItemOnTile, player, world, guiID, side, x, y, z);
248228
final IWirelessTermHandler handler =
249229
AEApi.instance().registries().wireless()
250230
.getWirelessTerminalHandler(termItem);
251-
gui = new WirelessTerminalGuiObjectTwo(
252-
handler, player.inventory.getCurrentItem(), player, world, x, y, z);
253-
}
254231

255-
switch (guiID) {
256-
case BASIC_CRAFTING_TERMINAL:
257-
GuiBasicCraftingTerminal term =
258-
new GuiBasicCraftingTerminal(player.inventory, (ITerminalHost) part,
259-
new ContainerBasicCraftingTerminal(player.inventory,
260-
(PartBasicCraftingTerminal) part));
261-
return term;
262-
case ADVANCED_CRAFTING_TERMINAL:
263-
return new GuiAdvancedCraftingTerminal(player.inventory,
264-
(ITerminalHost) part,
265-
new ContainerAdvancedCraftingTerminal(player.inventory,
266-
(PartAdvancedCraftingTerminal) part));
267-
case ELITE_CRAFTING_TERMINAL:
268-
return new GuiEliteCraftingTerminal(player.inventory,
269-
(ITerminalHost) part,
270-
new ContainerEliteCraftingTerminal(player.inventory,
271-
(PartEliteCraftingTerminal) part));
272-
case ULTIMATE_CRAFTING_TERMINAL:
273-
return new GuiUltimateCraftingTerminal(player.inventory,
274-
(ITerminalHost) part,
275-
new ContainerUltimateCraftingTerminal(player.inventory,
276-
(PartUltimateCraftingTerminal) part));
232+
ItemStack terminal = ItemStack.EMPTY;
233+
if (y == 0) {
234+
terminal = player.inventory.getStackInSlot(x);
235+
} else if (y == 1 && Loader.isModLoaded("baubles")) {
236+
terminal = getStackInBaubleSlot(player, x);
237+
}
277238

278-
case WIRELESS_BASIC_CRAFTING_TERMINAL:
279-
// TODO: Fix for baubles, I guess?
280-
return new GuiWirelessBasicCraftingTerm(player.inventory, gui,
281-
new ContainerBasicWirelessTerminal(
282-
player.inventory, gui));
239+
if (terminal.isEmpty())return null;
283240

284-
case WIRELESS_ADVANCED_CRAFTING_TERMINAL:
285-
return new GuiWirelessAdvancedCraftingTerm(player.inventory, gui,
286-
new ContainerAdvancedWirelessTerminal(
287-
player.inventory, gui));
241+
gui = new WirelessTerminalGuiObjectTwo(handler, terminal, player, world, x, y, z);
242+
} else {
243+
part = (ITerminalHost)PartGuiHandler.getPartFromWorld(world, new BlockPos(x, y, z), side);
244+
}
288245

289-
case WIRELESS_ELITE_CRAFTING_TERMINAL:
290-
return new GuiWirelessEliteCraftingTerm(player.inventory, gui,
291-
new ContainerEliteWirelessTerminal(
292-
player.inventory, gui));
246+
return switch (guiID) {
247+
case BASIC_CRAFTING_TERMINAL -> new GuiBasicCraftingTerminal(player.inventory, part,
248+
new ContainerBasicCraftingTerminal(
249+
player.inventory, part));
250+
case ADVANCED_CRAFTING_TERMINAL -> new GuiAdvancedCraftingTerminal(player.inventory, part,
251+
new ContainerAdvancedCraftingTerminal(
252+
player.inventory, part));
253+
case ELITE_CRAFTING_TERMINAL -> new GuiEliteCraftingTerminal(player.inventory, part,
254+
new ContainerEliteCraftingTerminal(
255+
player.inventory, part));
256+
case ULTIMATE_CRAFTING_TERMINAL -> new GuiUltimateCraftingTerminal(player.inventory, part,
257+
new ContainerUltimateCraftingTerminal(
258+
player.inventory, part));
259+
case WIRELESS_BASIC_CRAFTING_TERMINAL ->
260+
new GuiWirelessBasicCraftingTerm(player.inventory, gui,
261+
new ContainerBasicWirelessTerminal(
262+
player.inventory, gui));
263+
case WIRELESS_ADVANCED_CRAFTING_TERMINAL -> new GuiWirelessAdvancedCraftingTerm(player.inventory, gui,
264+
new ContainerAdvancedWirelessTerminal(player.inventory, gui));
265+
case WIRELESS_ELITE_CRAFTING_TERMINAL -> new GuiWirelessEliteCraftingTerm(player.inventory, gui,
266+
new ContainerEliteWirelessTerminal(
267+
player.inventory, gui));
268+
case WIRELESS_ULTIMATE_CRAFTING_TERMINAL -> new GuiWirelessUltimateCraftingTerm(player.inventory, gui,
269+
new ContainerUltimateWirelessTerminal(
270+
player.inventory, gui));
271+
default -> null;
272+
};
273+
}
293274

294-
case WIRELESS_ULTIMATE_CRAFTING_TERMINAL:
295-
return new GuiWirelessUltimateCraftingTerm(player.inventory, gui,
296-
new ContainerUltimateWirelessTerminal(
297-
player.inventory, gui));
298-
default:
299-
return null;
300-
}
275+
@Optional.Method(modid = "baubles")
276+
private ItemStack getStackInBaubleSlot(EntityPlayer player,int slot){
277+
return slot >= 0 && slot < BaublesApi.getBaublesHandler(player).getSlots() ? BaublesApi.getBaublesHandler(player).getStackInSlot(slot) : ItemStack.EMPTY;
301278
}
302279

303280
private ItemStack getWirelessTermItem(boolean usingItemOnTile, EntityPlayer player, World world, AE2ExtendedGUIs guiID, AEPartLocation side, int x, int y, int z) {
@@ -314,8 +291,6 @@ private ItemStack getWirelessTermItem(boolean usingItemOnTile, EntityPlayer play
314291
return termItem;
315292
}
316293

317-
;
318-
319294
public static boolean guiIsWirelessTerminal(AE2ExtendedGUIs gui) {
320295
return gui.ordinal() > 4;
321296
}
Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,71 @@
11
package com._0xc4de.ae2exttable.network.packets;
22

3-
import appeng.api.networking.security.IActionHost;
4-
import appeng.container.AEBaseContainer;
5-
import appeng.container.ContainerOpenContext;
6-
import appeng.container.interfaces.IInventorySlotAware;
73
import appeng.core.sync.network.INetworkInfo;
84
import appeng.me.GridAccessException;
95
import appeng.util.Platform;
106
import baubles.api.BaublesApi;
117
import com._0xc4de.ae2exttable.client.gui.AE2ExtendedGUIs;
128
import com._0xc4de.ae2exttable.client.gui.PartGuiHandler;
13-
import com._0xc4de.ae2exttable.items.ItemRegistry;
9+
import com._0xc4de.ae2exttable.interfaces.ITerminalGui;
1410
import com._0xc4de.ae2exttable.network.ExtendedTerminalPacket;
1511
import com._0xc4de.ae2exttable.network.PacketHandler;
1612
import io.netty.buffer.ByteBuf;
1713
import io.netty.buffer.Unpooled;
1814
import net.minecraft.entity.player.EntityPlayer;
1915
import net.minecraft.item.ItemStack;
2016
import net.minecraft.util.NonNullList;
21-
17+
import net.minecraftforge.fml.common.Optional;
2218

2319
public class PacketOpenWirelessGui extends ExtendedTerminalPacket {
2420

25-
private final AE2ExtendedGUIs gui;
21+
private final AE2ExtendedGUIs gui;
2622

27-
public PacketOpenWirelessGui(final ByteBuf stream) {
28-
this.gui = AE2ExtendedGUIs.values()[stream.readInt()];
29-
}
23+
public PacketOpenWirelessGui(final ByteBuf stream) {
24+
this.gui = AE2ExtendedGUIs.values()[stream.readInt()];
25+
}
3026

31-
public PacketOpenWirelessGui(final AE2ExtendedGUIs gui) {
32-
this.gui = gui;
33-
final ByteBuf data = Unpooled.buffer();
34-
data.writeInt(this.getGuiPacketID());
35-
data.writeInt(gui.ordinal());
27+
public PacketOpenWirelessGui(final AE2ExtendedGUIs gui) {
28+
this.gui = gui;
29+
final ByteBuf data = Unpooled.buffer();
30+
data.writeInt(this.getGuiPacketID());
31+
data.writeInt(gui.ordinal());
3632

37-
this.configureWrite(data);
38-
}
33+
this.configureWrite(data);
34+
}
3935

40-
public int getGuiPacketID() {
41-
return PacketHandler.PacketTypes.getID(this.getClass()).ordinal();
42-
}
36+
public int getGuiPacketID() {
37+
return PacketHandler.PacketTypes.getID(this.getClass()).ordinal();
38+
}
4339

44-
@Override
45-
public void serverPacketData(final INetworkInfo manager,
46-
final ExtendedTerminalPacket packet,
47-
final EntityPlayer player) throws GridAccessException {
40+
@Override
41+
public void serverPacketData(final INetworkInfo manager,
42+
final ExtendedTerminalPacket packet,
43+
final EntityPlayer player) throws GridAccessException {
4844
NonNullList<ItemStack> inventory = player.inventory.mainInventory;
49-
ItemStack guiItem = new ItemStack(ItemRegistry.partByGuiType(this.gui));
5045
for (int i = 0; i < inventory.size(); i++) {
5146
ItemStack is = inventory.get(i);
52-
if (Platform.itemComparisons().isEqualItemType(is, guiItem)) {
47+
if (is.getItem() instanceof ITerminalGui wt && wt.getGuiType() == this.gui) {
5348
openGui(is, i, player, false);
5449
return;
5550
}
5651
}
5752
if (Platform.isModLoaded("baubles")) {
58-
for (int i = 0; i< BaublesApi.getBaublesHandler(player).getSlots(); i++) {
59-
ItemStack is = BaublesApi.getBaublesHandler(player).getStackInSlot(i);
60-
if (Platform.itemComparisons().isEqualItemType(is, guiItem)) {
61-
openGui(is, i, player, true);
62-
return;
63-
}
53+
tryOpenBauble(player);
54+
}
55+
}
56+
57+
@Optional.Method(modid = "baubles")
58+
private void tryOpenBauble(EntityPlayer player) throws GridAccessException {
59+
for (int i = 0; i < BaublesApi.getBaublesHandler(player).getSlots(); i++) {
60+
ItemStack is = BaublesApi.getBaublesHandler(player).getStackInSlot(i);
61+
if (is.getItem() instanceof ITerminalGui wt && wt.getGuiType() == this.gui) {
62+
openGui(is, i, player, true);
63+
return;
6464
}
6565
}
6666
}
6767

6868
private void openGui(ItemStack itemStack, int slotIndex, EntityPlayer player, boolean isBauble) throws GridAccessException {
6969
PartGuiHandler.openWirelessTerminalGui(itemStack, slotIndex, isBauble, player.world, player, this.gui);
7070
}
71-
}
71+
}

0 commit comments

Comments
 (0)