Skip to content

Commit d2aed4e

Browse files
committed
小重构
1 parent 0b70418 commit d2aed4e

File tree

9 files changed

+219
-169
lines changed

9 files changed

+219
-169
lines changed

src/main/java/me/aleksilassila/litematica/printer/mixin/MixinClientPlayNetworkHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.spongepowered.asm.mixin.injection.Inject;
1212
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1313

14-
import static me.aleksilassila.litematica.printer.printer.Printer.isOpenHandler;
14+
import static me.aleksilassila.litematica.printer.printer.zxy.inventory.InventoryUtils.*;
1515
import static me.aleksilassila.litematica.printer.printer.zxy.inventory.SwitchItem.reSwitchItem;
1616
import static me.aleksilassila.litematica.printer.printer.zxy.Utils.ZxyUtils.*;
1717

@@ -22,7 +22,7 @@ public abstract class MixinClientPlayNetworkHandler {
2222
public void onInventory(InventoryS2CPacket packet, CallbackInfo ci){
2323
MinecraftClient mc = MinecraftClient.getInstance();
2424
if(isOpenHandler){
25-
Printer.getPrinter().switchInv();
25+
switchInv();
2626
}
2727
if(reSwitchItem != null ){
2828
SwitchItem.reSwitchItem();

src/main/java/me/aleksilassila/litematica/printer/mixin/masa/MixinInventoryUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
import org.spongepowered.asm.mixin.injection.Inject;
1414
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1515

16-
import static me.aleksilassila.litematica.printer.printer.Printer.remoteItem;
16+
import static me.aleksilassila.litematica.printer.printer.zxy.inventory.InventoryUtils.*;
17+
1718

1819
@Mixin(InventoryUtils.class)
1920
public class MixinInventoryUtils {
@@ -22,7 +23,7 @@ private static void schematicWorldPickBlock(ItemStack stack, BlockPos pos, World
2223
// System.out.println(cir.getReturnValue().booleanValue());
2324
if (mc.player != null && !ItemStack.areItemsAndComponentsEqual(mc.player.getMainHandStack(),stack) && (LitematicaMixinMod.INVENTORY.getBooleanValue() || LitematicaMixinMod.QUICKSHULKER.getBooleanValue())) {
2425
remoteItem.add(stack.getItem());
25-
Printer.getPrinter().switchItem();
26+
switchItem();
2627
}
2728
}
2829
}

src/main/java/me/aleksilassila/litematica/printer/mixin/openinv/MixinMinecraftClient.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static me.aleksilassila.litematica.printer.LitematicaMixinMod.INVENTORY;
3131
import static me.aleksilassila.litematica.printer.LitematicaMixinMod.QUICKSHULKER;
3232
import static me.aleksilassila.litematica.printer.printer.zxy.Utils.Statistics.closeScreen;
33+
import static me.aleksilassila.litematica.printer.printer.zxy.inventory.InventoryUtils.*;
3334

3435
@Environment(EnvType.CLIENT)
3536
@Mixin({MinecraftClient.class})
@@ -59,8 +60,8 @@ public void setScreen(@Nullable Screen screen, CallbackInfo ci) {
5960
//$$ Item item = world.getBlockState(pos).getBlock().asItem();
6061
//$$ if (player.playerScreenHandler.slots.stream().noneMatch(slot -> slot.getStack().getItem().equals(item)) &&
6162
//$$ !player.getAbilities().creativeMode && (INVENTORY.getBooleanValue() || QUICKSHULKER.getBooleanValue())) {
62-
//$$ Printer.remoteItem.add(item);
63-
//$$ Printer.getPrinter().switchItem();
63+
//$$ remoteItem.add(item);
64+
//$$ switchItem();
6465
//$$ return;
6566
//$$ }
6667
//$$ original.call(instance, pos, b);
@@ -71,8 +72,8 @@ private int doItemPick(PlayerInventory instance, ItemStack stack, Operation<Inte
7172
int slotWithStack = original.call(instance, stack);
7273
if(!player.getAbilities().creativeMode && (INVENTORY.getBooleanValue() || QUICKSHULKER.getBooleanValue()) && slotWithStack == -1){
7374
Item item = stack.getItem();
74-
Printer.remoteItem.add(item);
75-
Printer.getPrinter().switchItem();
75+
remoteItem.add(item);
76+
switchItem();
7677
return -1;
7778
}
7879
return slotWithStack;

src/main/java/me/aleksilassila/litematica/printer/printer/PlacementGuide.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ else if (state == State.MISSING_BLOCK &&
323323
boolean canCreatePortal = net.minecraft.world.dimension.NetherPortal.getNewPortal(world, pos, Direction.Axis.X).isPresent();
324324
if (canCreatePortal && createPortalTick == 1) {
325325
createPortalTick = 0;
326-
return new Action().setItems(Items.FLINT_AND_STEEL,Items.FIRE_CHARGE);
326+
return new Action().setItems(Items.FLINT_AND_STEEL,Items.FIRE_CHARGE).setRequiresSupport();
327327
}
328328
break;
329329
}

src/main/java/me/aleksilassila/litematica/printer/printer/Printer.java

Lines changed: 3 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
import static me.aleksilassila.litematica.printer.printer.zxy.Utils.Filters.equalsBlockName;
6666
import static me.aleksilassila.litematica.printer.printer.zxy.Utils.Filters.equalsItemName;
6767
import static me.aleksilassila.litematica.printer.printer.zxy.Utils.Statistics.*;
68-
import static me.aleksilassila.litematica.printer.printer.zxy.inventory.OpenInventoryPacket.openIng;
68+
import static me.aleksilassila.litematica.printer.printer.zxy.inventory.InventoryUtils.*;
6969
import static me.aleksilassila.litematica.printer.printer.zxy.Utils.ZxyUtils.*;
7070
import org.slf4j.Logger;
7171
import org.slf4j.LoggerFactory;
@@ -547,66 +547,12 @@ public boolean verify() {
547547
boolean isFacing = false;
548548
Item[] item2 = null;
549549
List<String> fluidBlocklist;
550-
public static HashSet<Item> remoteItem = new HashSet<>();
550+
551551
public static HashSet<Item> fluidList = new HashSet<>();
552552
static Map<BlockPos,Integer> skipPosMap = new HashMap<>();
553553
public static boolean printerMemorySync = false;
554554

555-
public boolean switchItem() {
556-
if (!remoteItem.isEmpty() && !isOpenHandler && !openIng && OpenInventoryPacket.key == null) {
557-
ClientPlayerEntity player = client.player;
558-
ScreenHandler sc = player.currentScreenHandler;
559-
if (!player.currentScreenHandler.equals(player.playerScreenHandler)) return false;
560-
//排除合成栏 装备栏 副手
561-
if (PRINT_CHECK.getBooleanValue() && sc.slots.stream().skip(9).limit(sc.slots.size() - 10).noneMatch(slot -> slot.getStack().isEmpty())
562-
&& (LitematicaMixinMod.QUICKSHULKER.getBooleanValue() || LitematicaMixinMod.INVENTORY.getBooleanValue())) {
563-
SwitchItem.checkItems();
564-
return true;
565-
}
566-
if (LitematicaMixinMod.QUICKSHULKER.getBooleanValue() && openShulker(remoteItem)) {
567-
return true;
568-
} else if (LitematicaMixinMod.INVENTORY.getBooleanValue()) {
569-
for (Item item : remoteItem) {
570-
//#if MC >= 12001
571-
//#if MC > 12004
572-
MemoryUtils.currentMemoryKey = client.world.getRegistryKey().getValue();
573-
//#else
574-
//$$ MemoryUtils.currentMemoryKey = client.world.getDimensionKey().getValue();
575-
//#endif
576-
MemoryUtils.itemStack = new ItemStack(item);
577-
if (SearchItem.search(true)) {
578-
closeScreen++;
579-
isOpenHandler = true;
580-
printerMemorySync = true;
581-
return true;
582-
}
583-
//#else
584-
//$$
585-
//$$ MemoryDatabase database = MemoryDatabase.getCurrent();
586-
//$$ if (database != null) {
587-
//$$ for (Identifier dimension : database.getDimensions()) {
588-
//$$ for (Memory memory : database.findItems(item.getDefaultStack(), dimension)) {
589-
//$$ MemoryUtils.setLatestPos(memory.getPosition());
590-
//#if MC < 11904
591-
//$$ OpenInventoryPacket.sendOpenInventory(memory.getPosition(), RegistryKey.of(Registry.WORLD_KEY, dimension));
592-
//#else
593-
//$$ OpenInventoryPacket.sendOpenInventory(memory.getPosition(), RegistryKey.of(RegistryKeys.WORLD, dimension));
594-
//#endif
595-
//$$ if(closeScreen == 0)closeScreen++;
596-
//$$ syncPrinterInventory = true;
597-
//$$ isOpenHandler = true;
598-
//$$ return true;
599-
//$$ }
600-
//$$ }
601-
//$$ }
602-
//#endif
603-
}
604-
remoteItem = new HashSet<>();
605-
isOpenHandler = false;
606-
}
607-
}
608-
return false;
609-
}
555+
610556
long startTime;
611557
public static BlockPos easyPos = null;
612558
public void myTick(){
@@ -878,106 +824,7 @@ private void sendPlacementPreparation(ClientPlayerEntity player, Item[] required
878824
sendLook(player, lookDir);
879825
}
880826

881-
public static boolean isOpenHandler = false;
882-
883-
public void switchInv() {
884-
// if(true) return;
885-
886-
ClientPlayerEntity player = MinecraftClient.getInstance().player;
887-
ScreenHandler sc = player.currentScreenHandler;
888-
if (sc.equals(player.playerScreenHandler)) {
889-
return;
890-
}
891-
DefaultedList<Slot> slots = sc.slots;
892-
for (Item item : remoteItem) {
893-
for (int y = 0; y < slots.get(0).inventory.size(); y++) {
894-
if (slots.get(y).getStack().getItem().equals(item)) {
895-
896-
String[] str = Configs.Generic.PICK_BLOCKABLE_SLOTS.getStringValue().split(",");
897-
if (str.length == 0) return;
898-
for (String s : str) {
899-
if (s == null) break;
900-
try {
901-
int c = Integer.parseInt(s) - 1;
902-
if (Registries.ITEM.getId(player.getInventory().getStack(c).getItem()).toString().contains("shulker_box") &&
903-
LitematicaMixinMod.QUICKSHULKER.getBooleanValue()) {
904-
MinecraftClient.getInstance().inGameHud.setOverlayMessage(Text.of("濳影盒占用了预选栏"), false);
905-
continue;
906-
}
907-
908-
if (OpenInventoryPacket.key != null) {
909-
SwitchItem.newItem(slots.get(y).getStack(), OpenInventoryPacket.pos, OpenInventoryPacket.key, y, -1);
910-
} else SwitchItem.newItem(slots.get(y).getStack(), null, null, y, shulkerBoxSlot);
911-
int a = Litematica_InventoryUtilsMixin.getEmptyPickBlockableHotbarSlot(player.getInventory()) == -1 ?
912-
Litematica_InventoryUtilsMixin.getPickBlockTargetSlot(player) :
913-
Litematica_InventoryUtilsMixin.getEmptyPickBlockableHotbarSlot(player.getInventory());
914-
c = a == -1 ? c : a;
915-
ZxyUtils.switchPlayerInvToHotbarAir(c);
916-
fi.dy.masa.malilib.util.InventoryUtils.swapSlots(sc, y, c);
917-
player.getInventory().selectedSlot = c;
918-
player.closeHandledScreen();
919-
if (shulkerBoxSlot != -1) {
920-
client.interactionManager.clickSlot(sc.syncId, shulkerBoxSlot, 0, SlotActionType.PICKUP, client.player);
921-
client.interactionManager.clickSlot(sc.syncId, shulkerBoxSlot, 0, SlotActionType.PICKUP, client.player);
922-
}
923-
shulkerBoxSlot = -1;
924-
isOpenHandler = false;
925-
remoteItem = new HashSet<>();
926-
return;
927-
} catch (Exception e) {
928-
System.out.println("切换物品异常");
929-
}
930-
}
931-
}
932-
}
933-
}
934-
shulkerBoxSlot = -1;
935-
remoteItem = new HashSet<>();
936-
isOpenHandler = false;
937-
ScreenHandler sc2 = player.currentScreenHandler;
938-
if (!sc2.equals(player.playerScreenHandler)) {
939-
player.closeHandledScreen();
940-
}
941-
}
942-
943-
static int shulkerBoxSlot = -1;
944-
private static Method method;
945-
946-
static {
947-
try {
948-
method = Class.forName("net.kyrptonaught.quickshulker.client.ClientUtil").getDeclaredMethod("CheckAndSend", ItemStack.class, int.class);
949-
} catch (Exception ignored) {
950-
method = null;
951-
}
952-
}
953827

954-
boolean openShulker(HashSet<Item> items) {
955-
for (Item item : items) {
956-
ScreenHandler sc = MinecraftClient.getInstance().player.playerScreenHandler;
957-
for (int i = 9; i < sc.slots.size(); i++) {
958-
ItemStack stack = sc.slots.get(i).getStack();
959-
String itemid = Registries.ITEM.getId(stack.getItem()).toString();
960-
if (itemid.contains("shulker_box") && stack.getCount() == 1) {
961-
DefaultedList<ItemStack> items1 = fi.dy.masa.malilib.util.InventoryUtils.getStoredItems(stack, -1);
962-
if (items1.stream().anyMatch(s1 -> s1.getItem().equals(item))) {
963-
try {
964-
shulkerBoxSlot = i;
965-
// ClientUtil.CheckAndSend(stack,i);
966-
//#if MC >= 12001
967-
if(loadChestTracker) InteractionTracker.INSTANCE.clear();
968-
//#endif
969-
method.invoke(method, stack, i);
970-
closeScreen++;
971-
isOpenHandler = true;
972-
return true;
973-
} catch (Exception e) {
974-
}
975-
}
976-
}
977-
}
978-
}
979-
return false;
980-
}
981828
static ItemStack yxcfItem; //有序存放临时存储
982829
public boolean switchToItems(ClientPlayerEntity player, Item[] items) {
983830
if (items == null) return false;

src/main/java/me/aleksilassila/litematica/printer/printer/PrinterUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Map;
2222

2323
import static me.aleksilassila.litematica.printer.printer.zxy.Utils.ZxyUtils.client;
24+
import static me.aleksilassila.litematica.printer.printer.zxy.inventory.InventoryUtils.remoteItem;
2425

2526
public class PrinterUtils {
2627

@@ -42,7 +43,7 @@ public static boolean playerHasAccessToItems(ClientPlayerEntity playerEntity, It
4243
return true;
4344
}
4445
}
45-
Printer.remoteItem.add(item);
46+
remoteItem.add(item);
4647
}
4748
}
4849
return false;

0 commit comments

Comments
 (0)