Skip to content

Commit 7ea0f86

Browse files
authored
Merge pull request #147 from FakeDomi/feature/wireless-terminal-keybind
Add keybind for wireless fluid pattern terminal
2 parents a34269d + a625909 commit 7ea0f86

File tree

9 files changed

+125
-14
lines changed

9 files changed

+125
-14
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ dependencies {
5252
deobfCompile 'curse.maven:gregtech-ce-unofficial-557242:3784798' // gt
5353
deobfCompile 'curse.maven:ae2-extended-life-570458:5028606' //pae2
5454
deobfCompile 'curse.maven:dynamistics-383632:3056455' // dy
55+
deobfCompile 'curse.maven:baubles-227083:2518667' //baubles
5556
compileOnly 'curse.maven:opencomputers-223008:4630537' //oc
5657
compileOnly "curse.maven:mekanism-ce-399904:4804509" //mek-ce
5758
compileOnly "curse.maven:ae-additions-extra-cells-2-fork-493962:3814371" //aeadditions
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.glodblock.github.client;
2+
3+
import com.glodblock.github.FluidCraft;
4+
import com.glodblock.github.network.CPacketUseKeybind;
5+
import net.minecraft.client.settings.KeyBinding;
6+
import net.minecraftforge.client.settings.KeyConflictContext;
7+
import net.minecraftforge.client.settings.KeyModifier;
8+
import net.minecraftforge.common.MinecraftForge;
9+
import net.minecraftforge.fml.client.registry.ClientRegistry;
10+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
11+
import net.minecraftforge.fml.common.gameevent.InputEvent;
12+
13+
public class KeyBindings {
14+
15+
private static final String KEY_CATEGORY = "key.ae2fc.category";
16+
17+
private static final KeyBinding WIRELESS_FLUID_PATTERN_TERMINAL = new KeyBinding("key.ae2fc.open_wireless_fluid_pattern_terminal.desc", KeyConflictContext.UNIVERSAL, KeyModifier.NONE, 0, KEY_CATEGORY);
18+
19+
public static void init() {
20+
ClientRegistry.registerKeyBinding(WIRELESS_FLUID_PATTERN_TERMINAL);
21+
MinecraftForge.EVENT_BUS.register(KeyBindings.class);
22+
}
23+
24+
@SubscribeEvent
25+
public static void onKeyInputEvent(InputEvent.KeyInputEvent event) {
26+
if (WIRELESS_FLUID_PATTERN_TERMINAL.isPressed()) {
27+
FluidCraft.proxy.netHandler.sendToServer(new CPacketUseKeybind());
28+
}
29+
}
30+
31+
}

src/main/java/com/glodblock/github/common/item/ItemWirelessFluidPatternTerminal.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313

1414
public class ItemWirelessFluidPatternTerminal extends ToolWirelessTerminal {
1515

16+
private static final int OFFHAND_SLOT = 40;
17+
1618
@Override
1719
public ActionResult<ItemStack> onItemRightClick(World w, EntityPlayer player, EnumHand hand) {
18-
Util.openWirelessTerminal(player.getHeldItem(hand), hand, w, player, GuiType.WIRELESS_FLUID_PATTERN_TERMINAL);
20+
Util.openWirelessTerminal(player.getHeldItem(hand), hand == EnumHand.MAIN_HAND ? player.inventory.currentItem : OFFHAND_SLOT, false, w, player, GuiType.WIRELESS_FLUID_PATTERN_TERMINAL);
1921
return new ActionResult<>(EnumActionResult.SUCCESS, player.getHeldItem(hand));
2022
}
2123

src/main/java/com/glodblock/github/inventory/GuiType.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import appeng.fluids.helper.IFluidInterfaceHost;
1616
import appeng.helpers.IInterfaceHost;
1717
import appeng.helpers.WirelessTerminalGuiObject;
18+
import baubles.api.BaublesApi;
1819
import com.glodblock.github.client.GuiBurette;
1920
import com.glodblock.github.client.GuiExtendedFluidPatternTerminal;
2021
import com.glodblock.github.client.GuiFCCraftAmount;
@@ -69,6 +70,8 @@
6970
import net.minecraft.util.EnumHand;
7071
import net.minecraft.util.math.BlockPos;
7172
import net.minecraft.world.World;
73+
import net.minecraftforge.fml.common.Loader;
74+
import net.minecraftforge.fml.common.Optional;
7275
import net.minecraftforge.fml.relauncher.Side;
7376
import net.minecraftforge.fml.relauncher.SideOnly;
7477

@@ -431,16 +434,32 @@ private static abstract class ItemGuiFactory<T> extends TileGuiFactory<T> {
431434
@Nullable
432435
@Override
433436
protected T getInventory(TileEntity tile, EntityPlayer player, EnumFacing face, BlockPos pos) {
434-
ItemStack hold = player.getHeldItem(EnumHand.values()[face.ordinal() % 2]);
435-
if (pos.getZ() == Integer.MIN_VALUE && !hold.isEmpty()) {
436-
Object holder = getItemGuiObject(hold, player, player.world, pos.getX(), pos.getY(), pos.getZ());
437+
if (pos.getZ() == Integer.MIN_VALUE) {
438+
ItemStack terminal = ItemStack.EMPTY;
439+
if (pos.getY() == 0) { // main inventory
440+
terminal = player.inventory.getStackInSlot(pos.getX());
441+
} else if (pos.getY() == 1 && Loader.isModLoaded("baubles")) { // baubles inventory
442+
terminal = getStackInBaubleSlot(player, pos.getX());
443+
}
444+
if (terminal == null || terminal.isEmpty()) {
445+
return null;
446+
}
447+
Object holder = getItemGuiObject(terminal, player, player.world, pos.getX(), pos.getY(), pos.getZ());
437448
if (invClass.isInstance(holder)) {
438449
return invClass.cast(holder);
439450
}
440451
}
441452
return null;
442453
}
443454

455+
@Optional.Method(modid = "baubles")
456+
private static ItemStack getStackInBaubleSlot(EntityPlayer player, int slot) {
457+
if (slot >= 0 && slot < BaublesApi.getBaublesHandler(player).getSlots()) {
458+
return BaublesApi.getBaublesHandler(player).getStackInSlot(slot);
459+
}
460+
return null;
461+
}
462+
444463
}
445464

446465
private static abstract class ItemOrPartGuiFactory<T> extends PartGuiFactory<T> {

src/main/java/com/glodblock/github/loader/ChannelLoader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public void run() {
2121
FluidCraft.proxy.netHandler.registerMessage(new CPacketPatternValueSet.Handler(), CPacketPatternValueSet.class, id ++, Side.SERVER);
2222
FluidCraft.proxy.netHandler.registerMessage(new CPacketInventoryAction.Handler(), CPacketInventoryAction.class, id ++, Side.SERVER);
2323
FluidCraft.proxy.netHandler.registerMessage(new SPacketSetItemAmount.Handler(), SPacketSetItemAmount.class, id ++, Side.CLIENT);
24+
FluidCraft.proxy.netHandler.registerMessage(new CPacketUseKeybind.Handler(), CPacketUseKeybind.class, id ++, Side.SERVER);
2425
}
2526

2627
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.glodblock.github.network;
2+
3+
import baubles.api.BaublesApi;
4+
import com.glodblock.github.inventory.GuiType;
5+
import com.glodblock.github.loader.FCItems;
6+
import com.glodblock.github.util.Util;
7+
import io.netty.buffer.ByteBuf;
8+
import net.minecraft.entity.player.EntityPlayer;
9+
import net.minecraft.entity.player.EntityPlayerMP;
10+
import net.minecraft.item.ItemStack;
11+
import net.minecraftforge.fml.common.Loader;
12+
import net.minecraftforge.fml.common.Optional;
13+
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
14+
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
15+
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
16+
17+
public class CPacketUseKeybind implements IMessage {
18+
19+
@Override
20+
public void fromBytes(ByteBuf buf) {
21+
}
22+
23+
@Override
24+
public void toBytes(ByteBuf buf) {
25+
// empty for now, can be changed to allow differentiating keybinds if more are added in the future
26+
}
27+
28+
public static class Handler implements IMessageHandler<CPacketUseKeybind, IMessage> {
29+
30+
@Override
31+
public IMessage onMessage(CPacketUseKeybind message, MessageContext ctx) {
32+
final EntityPlayerMP player = ctx.getServerHandler().player;
33+
player.getServerWorld().addScheduledTask(() -> {
34+
for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
35+
ItemStack stackInSlot = player.inventory.getStackInSlot(i);
36+
if (stackInSlot.getItem() == FCItems.WIRELESS_FLUID_PATTERN_TERMINAL) {
37+
Util.openWirelessTerminal(stackInSlot, i, false, player.world, player, GuiType.WIRELESS_FLUID_PATTERN_TERMINAL);
38+
return;
39+
}
40+
}
41+
if (Loader.isModLoaded("baubles")) {
42+
tryOpenBauble(player);
43+
}
44+
});
45+
return null;
46+
}
47+
48+
@Optional.Method(modid = "baubles")
49+
private static void tryOpenBauble(EntityPlayer player) {
50+
for (int i = 0; i < BaublesApi.getBaublesHandler(player).getSlots(); i++) {
51+
ItemStack stackInSlot = BaublesApi.getBaublesHandler(player).getStackInSlot(i);
52+
if (stackInSlot.getItem() == FCItems.WIRELESS_FLUID_PATTERN_TERMINAL) {
53+
Util.openWirelessTerminal(stackInSlot, i, true, player.world, player, GuiType.WIRELESS_FLUID_PATTERN_TERMINAL);
54+
return;
55+
}
56+
}
57+
}
58+
}
59+
60+
}

src/main/java/com/glodblock/github/proxy/ClientProxy.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.glodblock.github.proxy;
22

33
import appeng.api.util.AEColor;
4+
import com.glodblock.github.client.KeyBindings;
45
import com.glodblock.github.client.model.DenseEncodedPatternModel;
56
import com.glodblock.github.client.render.DropColourHandler;
67
import com.glodblock.github.client.render.RenderIngredientBuffer;
@@ -80,6 +81,7 @@ public void init(FMLInitializationEvent event) {
8081
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(DenseEncodedPatternModel.PATTERN_ITEM_COLOR_HANDLER, FCItems.DENSE_ENCODED_PATTERN);
8182
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(DenseEncodedPatternModel.PATTERN_ITEM_COLOR_HANDLER, FCItems.DENSE_CRAFT_ENCODED_PATTERN);
8283
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(DenseEncodedPatternModel.PATTERN_ITEM_COLOR_HANDLER, FCItems.LARGE_ITEM_ENCODED_PATTERN);
84+
KeyBindings.init();
8385
}
8486

8587
@Override

src/main/java/com/glodblock/github/util/Util.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ public static void decreaseSlot(Slot[] slots, int decrease) {
375375
}
376376
}
377377

378-
public static void openWirelessTerminal(ItemStack item, EnumHand hand, World w, EntityPlayer player, GuiType gui) {
378+
public static void openWirelessTerminal(ItemStack item, int playerInvSlot, boolean isBaubleSlot, World w, EntityPlayer player, GuiType gui) {
379379
IWirelessTermRegistry registry = AEApi.instance().registries().wireless();
380380
if (Platform.isClient()) {
381381
return;
@@ -397,15 +397,7 @@ public static void openWirelessTerminal(ItemStack item, EnumHand hand, World w,
397397
return;
398398
}
399399
if (handler.hasPower(player, 0.5, item)) {
400-
int x, y;
401-
if (player.openContainer instanceof IInventorySlotAware) {
402-
x = ((IInventorySlotAware) player.openContainer).getInventorySlot();
403-
y = ((IInventorySlotAware) player.openContainer).isBaubleSlot() ? 1 : 0;
404-
} else {
405-
x = player.inventory.currentItem;
406-
y = 0;
407-
}
408-
InventoryHandler.openGui(player, w, new BlockPos(x, y, Integer.MIN_VALUE), EnumFacing.values()[hand.ordinal()], gui);
400+
InventoryHandler.openGui(player, w, new BlockPos(playerInvSlot, isBaubleSlot ? 1 : 0, Integer.MIN_VALUE), EnumFacing.DOWN, gui);
409401
} else {
410402
player.sendMessage(PlayerMessages.DeviceNotPowered.get());
411403
}

src/main/resources/assets/ae2fc/lang/en_us.lang

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
itemGroup.ae2fc=AE2 Fluid Crafting
22

3+
key.ae2fc.category=AE2 Fluid Crafting
4+
key.ae2fc.open_wireless_fluid_pattern_terminal.desc=Open Wireless Fluid Pattern Terminal
5+
36
tile.ae2fc:fluid_discretizer.name=ME Fluid Discretizer
47
tile.ae2fc:gas_discretizer.name=ME Gas Discretizer
58
tile.ae2fc:fluid_pattern_encoder.name=Fluid Pattern Encoder

0 commit comments

Comments
 (0)