Skip to content

Commit

Permalink
Merge branch 'master' into new-ae2
Browse files Browse the repository at this point in the history
  • Loading branch information
Mari023 committed May 14, 2021
2 parents 30a2cf2 + 1a33b22 commit 72b511c
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 18 deletions.
11 changes: 6 additions & 5 deletions src/main/java/de/mari_023/fabric/ae2wtlib/ae2wtlib.java
Original file line number Diff line number Diff line change
Expand Up @@ -209,10 +209,11 @@ else if(Name.equals("CraftingTerminal.SetMagnetMode")) {
if(!(screenHandler instanceof AEBaseContainer)) return;

final ContainerLocator locator = ((AEBaseContainer) screenHandler).getLocator();
ItemStack item = player.inventory.getStack(locator.getItemIndex());
int slot = locator.getItemIndex();
ItemStack item = player.inventory.getStack(slot);

if(!(item.getItem() instanceof ItemWUT)) return;
WUTHandler.cycle(item);
WUTHandler.cycle(player, slot, item);

WUTHandler.open(player, locator);
}));
Expand All @@ -226,7 +227,7 @@ else if(Name.equals("CraftingTerminal.SetMagnetMode")) {
ItemStack terminal = player.inventory.getStack(i);
if(terminal.getItem() instanceof ItemWCT || (terminal.getItem() instanceof ItemWUT && WUTHandler.hasTerminal(terminal, "crafting"))) {
slot = i;
WUTHandler.setCurrentTerminal(terminal, "crafting");
WUTHandler.setCurrentTerminal(player, slot, terminal, "crafting");
break;
}
}
Expand All @@ -243,7 +244,7 @@ else if(Name.equals("CraftingTerminal.SetMagnetMode")) {
ItemStack terminal = inv.getStack(i);
if(terminal.getItem() instanceof ItemWPT || (terminal.getItem() instanceof ItemWUT && WUTHandler.hasTerminal(terminal, "pattern"))) {
slot = i;
WUTHandler.setCurrentTerminal(terminal, "pattern");
WUTHandler.setCurrentTerminal(player, slot, terminal, "pattern");
break;
}
}
Expand All @@ -261,7 +262,7 @@ else if(Name.equals("CraftingTerminal.SetMagnetMode")) {
ItemStack terminal = inv.getStack(i);
if(terminal.getItem() instanceof ItemWIT || (terminal.getItem() instanceof ItemWUT && WUTHandler.hasTerminal(terminal, "interface"))) {
slot = i;
WUTHandler.setCurrentTerminal(terminal, "interface");
WUTHandler.setCurrentTerminal(player, slot, terminal, "interface");
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,15 @@ public void onInitializeClient() {
buf.release();
});
});
ClientPlayNetworking.registerGlobalReceiver(new Identifier("ae2wtlib", "update_wut"), (client, handler, buf, responseSender) -> {
buf.retain();
client.execute(() -> {
if(client.player == null) return;
int slot = buf.readInt();
client.player.inventory.getStack(slot).setTag(buf.readCompoundTag());
buf.release();
});
});
registerKeybindings();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,16 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(MEMonitorableScreen.class)
@Environment(EnvType.CLIENT)
@Mixin(value = MEMonitorableScreen.class, remap = false)
public class MeMonitorableScreenWireless {

@Environment(EnvType.CLIENT)
@Inject(method = "showCraftingStatus", at = @At(value = "INVOKE"), cancellable = true, remap = false)
@Inject(method = "showCraftingStatus()V", at = @At(value = "INVOKE"), cancellable = true)
private void showWirelessCraftingStatus(CallbackInfo ci) {
if(!((Object) this instanceof WCTScreen) && !((Object) this instanceof WPTScreen)) return;
PacketByteBuf buf = PacketByteBufs.create();
buf.writeIdentifier(Registry.SCREEN_HANDLER.getId(WirelessCraftingStatusContainer.TYPE));
ClientPlayNetworking.send(new Identifier("ae2wtlib", "switch_gui"), buf);
try {
ci.cancel();
} catch(Exception ignored) {}
ci.cancel();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import de.mari_023.fabric.ae2wtlib.wct.WCTGuiObject;
import de.mari_023.fabric.ae2wtlib.wit.WITGuiObject;
import de.mari_023.fabric.ae2wtlib.wpt.WPTGuiObject;
import de.mari_023.fabric.ae2wtlib.wut.WUTHandler;
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
Expand Down Expand Up @@ -124,22 +125,22 @@ private I getHostFromLocator(PlayerEntity player, ContainerLocator locator) {
}

private I getHostFromPlayerInventory(PlayerEntity player, ContainerLocator locator) {

ItemStack it = player.inventory.getStack(locator.getItemIndex());

if(it.isEmpty()) {
AELog.debug("Cannot open container for player %s since they no longer hold the item in slot %d", player, locator.hasItemIndex());
return null;
}

String currentTerminal = WUTHandler.getCurrentTerminal(it);
//TODO do something generic, I don't want to hardcode everything
if(interfaceClass.equals(WCTGuiObject.class))
if(interfaceClass.isAssignableFrom(WCTGuiObject.class) && currentTerminal.equals("crafting"))
return interfaceClass.cast(new WCTGuiObject((ItemWT) it.getItem(), it, player, locator.getItemIndex()));

if(interfaceClass.equals(WPTGuiObject.class))
if(interfaceClass.isAssignableFrom(WPTGuiObject.class) && currentTerminal.equals("pattern"))
return interfaceClass.cast(new WPTGuiObject((ItemWT) it.getItem(), it, player, locator.getItemIndex()));

if(interfaceClass.equals(WITGuiObject.class))
if(interfaceClass.isAssignableFrom(WITGuiObject.class) && currentTerminal.equals("interface"))
return interfaceClass.cast(new WITGuiObject((ItemWT) it.getItem(), it, player, locator.getItemIndex()));
return null;
}
Expand Down
17 changes: 15 additions & 2 deletions src/main/java/de/mari_023/fabric/ae2wtlib/wut/WUTHandler.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package de.mari_023.fabric.ae2wtlib.wut;

import appeng.container.ContainerLocator;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText;
import net.minecraft.util.Identifier;

import java.util.ArrayList;
import java.util.HashMap;
Expand All @@ -25,10 +30,14 @@ public static String getCurrentTerminal(ItemStack wirelessUniversalTerminal) {
return currentTerminal;
}

public static void setCurrentTerminal(ItemStack itemStack, String terminal) {
public static void setCurrentTerminal(PlayerEntity playerEntity, int slot, ItemStack itemStack, String terminal) {
if(hasTerminal(itemStack, terminal)) {
assert itemStack.getTag() != null;
itemStack.getTag().putString("currentTerminal", terminal);
PacketByteBuf buf = PacketByteBufs.create();
buf.writeInt(slot);
buf.writeCompoundTag(itemStack.getTag());
ServerPlayNetworking.send((ServerPlayerEntity) playerEntity, new Identifier("ae2wtlib", "update_wut"), buf);
}
}

Expand All @@ -38,7 +47,7 @@ public static boolean hasTerminal(ItemStack itemStack, String terminal) {
return itemStack.getTag().getBoolean(terminal);
}

public static void cycle(ItemStack itemStack) {
public static void cycle(PlayerEntity playerEntity, int slot, ItemStack itemStack) {
if(itemStack.getTag() == null) return;
String nextTerminal = getCurrentTerminal(itemStack);
do {
Expand All @@ -47,6 +56,10 @@ public static void cycle(ItemStack itemStack) {
nextTerminal = terminalNames.get(i);
} while(!itemStack.getTag().getBoolean(nextTerminal));
itemStack.getTag().putString("currentTerminal", nextTerminal);
PacketByteBuf buf = PacketByteBufs.create();
buf.writeInt(slot);
buf.writeCompoundTag(itemStack.getTag());
ServerPlayNetworking.send((ServerPlayerEntity) playerEntity, new Identifier("ae2wtlib", "update_wut"), buf);
}

public static void open(final PlayerEntity player, final ContainerLocator locator) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/ae2wtlib.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
"CfgValuePacket",
"InvActionPacket",
"MEInvUpdatePacket",
"MeMonitorableScreenWireless",
"PlayerInventoryInsertStack",
"Restock",
"ScreenHandlerMixin",
"SlotMixin"
],
"client": [
"MeMonitorableScreenWireless",
"MineMenuMixin",
"MineMenuTerminalHandler"
],
Expand Down

0 comments on commit 72b511c

Please sign in to comment.