上传合成样板改为按下仅shift时可触发
This commit is contained in:
parent
33cf5ca8f1
commit
714d1d687c
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.extendedae_plus.api.upload;
|
||||||
|
|
||||||
|
public interface IPatternEncodingShiftUploadSync {
|
||||||
|
/**
|
||||||
|
* 由客户端发送的编码指令附带的 Shift 状态。
|
||||||
|
*/
|
||||||
|
void eap$clientSetShiftUpload(boolean shiftDown);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务器在处理 encode() 时消费该标记,并在读取后自动复位。
|
||||||
|
*/
|
||||||
|
boolean eap$consumeShiftUploadFlag();
|
||||||
|
}
|
||||||
|
|
@ -7,6 +7,7 @@ import com.extendedae_plus.network.crafting.CraftingMonitorOpenProviderC2SPacket
|
||||||
import com.extendedae_plus.network.crafting.OpenCraftFromJeiC2SPacket;
|
import com.extendedae_plus.network.crafting.OpenCraftFromJeiC2SPacket;
|
||||||
import com.extendedae_plus.network.meInterface.InterfaceAdjustConfigAmountC2SPacket;
|
import com.extendedae_plus.network.meInterface.InterfaceAdjustConfigAmountC2SPacket;
|
||||||
import com.extendedae_plus.network.provider.*;
|
import com.extendedae_plus.network.provider.*;
|
||||||
|
import com.extendedae_plus.network.upload.EncodeWithShiftFlagC2SPacket;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraftforge.network.NetworkDirection;
|
import net.minecraftforge.network.NetworkDirection;
|
||||||
import net.minecraftforge.network.NetworkRegistry;
|
import net.minecraftforge.network.NetworkRegistry;
|
||||||
|
|
@ -48,6 +49,12 @@ public final class ModNetwork {
|
||||||
.consumerNetworkThread(PullFromJeiOrCraftC2SPacket::handle)
|
.consumerNetworkThread(PullFromJeiOrCraftC2SPacket::handle)
|
||||||
.add();
|
.add();
|
||||||
|
|
||||||
|
CHANNEL.messageBuilder(EncodeWithShiftFlagC2SPacket.class, nextId(), NetworkDirection.PLAY_TO_SERVER)
|
||||||
|
.encoder(EncodeWithShiftFlagC2SPacket::encode)
|
||||||
|
.decoder(EncodeWithShiftFlagC2SPacket::decode)
|
||||||
|
.consumerNetworkThread(EncodeWithShiftFlagC2SPacket::handle)
|
||||||
|
.add();
|
||||||
|
|
||||||
CHANNEL.messageBuilder(UploadEncodedPatternToProviderC2SPacket.class, nextId(), NetworkDirection.PLAY_TO_SERVER)
|
CHANNEL.messageBuilder(UploadEncodedPatternToProviderC2SPacket.class, nextId(), NetworkDirection.PLAY_TO_SERVER)
|
||||||
.encoder(UploadEncodedPatternToProviderC2SPacket::encode)
|
.encoder(UploadEncodedPatternToProviderC2SPacket::encode)
|
||||||
.decoder(UploadEncodedPatternToProviderC2SPacket::decode)
|
.decoder(UploadEncodedPatternToProviderC2SPacket::decode)
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,29 @@
|
||||||
package com.extendedae_plus.mixin.ae2.client.gui;
|
package com.extendedae_plus.mixin.ae2.client.gui;
|
||||||
|
|
||||||
|
import appeng.api.config.ActionItems;
|
||||||
import appeng.client.gui.Icon;
|
import appeng.client.gui.Icon;
|
||||||
import appeng.client.gui.me.items.PatternEncodingTermScreen;
|
import appeng.client.gui.me.items.PatternEncodingTermScreen;
|
||||||
import appeng.client.gui.style.ScreenStyle;
|
import appeng.client.gui.style.ScreenStyle;
|
||||||
import appeng.client.gui.style.WidgetStyle;
|
import appeng.client.gui.style.WidgetStyle;
|
||||||
|
import appeng.client.gui.widgets.ActionButton;
|
||||||
import appeng.client.gui.widgets.IconButton;
|
import appeng.client.gui.widgets.IconButton;
|
||||||
import com.extendedae_plus.init.ModNetwork;
|
import com.extendedae_plus.init.ModNetwork;
|
||||||
import com.extendedae_plus.mixin.ae2.accessor.AEBaseScreenAccessor;
|
import com.extendedae_plus.mixin.ae2.accessor.AEBaseScreenAccessor;
|
||||||
import com.extendedae_plus.mixin.minecraft.accessor.AbstractContainerScreenAccessor;
|
import com.extendedae_plus.mixin.minecraft.accessor.AbstractContainerScreenAccessor;
|
||||||
import com.extendedae_plus.mixin.minecraft.accessor.ScreenAccessor;
|
import com.extendedae_plus.mixin.minecraft.accessor.ScreenAccessor;
|
||||||
import com.extendedae_plus.network.provider.RequestProvidersListC2SPacket;
|
import com.extendedae_plus.network.provider.RequestProvidersListC2SPacket;
|
||||||
|
import com.extendedae_plus.network.upload.EncodeWithShiftFlagC2SPacket;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.Tooltip;
|
import net.minecraft.client.gui.components.Tooltip;
|
||||||
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.client.renderer.Rect2i;
|
import net.minecraft.client.renderer.Rect2i;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -32,6 +37,15 @@ public abstract class PatternEncodingTermScreenMixin {
|
||||||
|
|
||||||
@Unique private IconButton eap$uploadBtn;
|
@Unique private IconButton eap$uploadBtn;
|
||||||
|
|
||||||
|
@ModifyVariable(method = "<init>", at = @At(value = "STORE"), ordinal = 0)
|
||||||
|
private ActionButton eap$wrapEncodeButton(ActionButton original) {
|
||||||
|
return new ActionButton(ActionItems.ENCODE, act -> {
|
||||||
|
ModNetwork.CHANNEL.sendToServer(new EncodeWithShiftFlagC2SPacket(Screen.hasShiftDown()));
|
||||||
|
var screen = (PatternEncodingTermScreen<?>) (Object) this;
|
||||||
|
screen.getMenu().encode();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 只创建按钮
|
// 只创建按钮
|
||||||
@Inject(method = "<init>", at = @At("TAIL"))
|
@Inject(method = "<init>", at = @At("TAIL"))
|
||||||
private void eap$createUploadButton(CallbackInfo ci) {
|
private void eap$createUploadButton(CallbackInfo ci) {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import appeng.api.crafting.PatternDetailsHelper;
|
||||||
import appeng.menu.me.items.PatternEncodingTermMenu;
|
import appeng.menu.me.items.PatternEncodingTermMenu;
|
||||||
import appeng.menu.slot.RestrictedInputSlot;
|
import appeng.menu.slot.RestrictedInputSlot;
|
||||||
import appeng.parts.encoding.EncodingMode;
|
import appeng.parts.encoding.EncodingMode;
|
||||||
|
import com.extendedae_plus.api.upload.IPatternEncodingShiftUploadSync;
|
||||||
import com.extendedae_plus.util.uploadPattern.MatrixUploadUtil;
|
import com.extendedae_plus.util.uploadPattern.MatrixUploadUtil;
|
||||||
import com.glodblock.github.glodium.network.packet.sync.IActionHolder;
|
import com.glodblock.github.glodium.network.packet.sync.IActionHolder;
|
||||||
import com.glodblock.github.glodium.network.packet.sync.Paras;
|
import com.glodblock.github.glodium.network.packet.sync.Paras;
|
||||||
|
|
@ -27,7 +28,7 @@ import java.util.function.Consumer;
|
||||||
* 注册动作 "upload_to_matrix":仅上传“合成图样”到 ExtendedAE 装配矩阵。
|
* 注册动作 "upload_to_matrix":仅上传“合成图样”到 ExtendedAE 装配矩阵。
|
||||||
*/
|
*/
|
||||||
@Mixin(PatternEncodingTermMenu.class)
|
@Mixin(PatternEncodingTermMenu.class)
|
||||||
public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHolder {
|
public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHolder, IPatternEncodingShiftUploadSync {
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
private final Map<String, Consumer<Paras>> eap$actions = createHolder();
|
private final Map<String, Consumer<Paras>> eap$actions = createHolder();
|
||||||
|
|
@ -35,6 +36,9 @@ public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHo
|
||||||
@Unique
|
@Unique
|
||||||
private Player epp$player;
|
private Player epp$player;
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private boolean eap$pendingShiftUpload;
|
||||||
|
|
||||||
@Shadow(remap = false)
|
@Shadow(remap = false)
|
||||||
private RestrictedInputSlot encodedPatternSlot;
|
private RestrictedInputSlot encodedPatternSlot;
|
||||||
|
|
||||||
|
|
@ -73,6 +77,20 @@ public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHo
|
||||||
// 不再注册任何上传相关动作
|
// 不再注册任何上传相关动作
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
@Override
|
||||||
|
public void eap$clientSetShiftUpload(boolean shiftDown) {
|
||||||
|
this.eap$pendingShiftUpload = shiftDown;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
@Override
|
||||||
|
public boolean eap$consumeShiftUploadFlag() {
|
||||||
|
boolean flag = this.eap$pendingShiftUpload;
|
||||||
|
this.eap$pendingShiftUpload = false;
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Consumer<Paras>> getActionMap() {
|
public Map<String, Consumer<Paras>> getActionMap() {
|
||||||
|
|
@ -86,6 +104,9 @@ public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHo
|
||||||
if (!(this.epp$player instanceof ServerPlayer sp)) {
|
if (!(this.epp$player instanceof ServerPlayer sp)) {
|
||||||
return; // 仅服务器执行
|
return; // 仅服务器执行
|
||||||
}
|
}
|
||||||
|
if (!this.eap$consumeShiftUploadFlag()) {
|
||||||
|
return; // 未按下 Shift,不自动上传
|
||||||
|
}
|
||||||
var menu = (PatternEncodingTermMenu) (Object) this;
|
var menu = (PatternEncodingTermMenu) (Object) this;
|
||||||
if (menu.getMode() != EncodingMode.CRAFTING
|
if (menu.getMode() != EncodingMode.CRAFTING
|
||||||
&& menu.getMode() != EncodingMode.SMITHING_TABLE
|
&& menu.getMode() != EncodingMode.SMITHING_TABLE
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.extendedae_plus.network.upload;
|
||||||
|
|
||||||
|
import appeng.menu.me.items.PatternEncodingTermMenu;
|
||||||
|
import com.extendedae_plus.api.upload.IPatternEncodingShiftUploadSync;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端在点击编码按钮时发送一次,携带当前是否按下 Shift。
|
||||||
|
*/
|
||||||
|
public record EncodeWithShiftFlagC2SPacket(boolean shiftDown) {
|
||||||
|
|
||||||
|
public static void encode(EncodeWithShiftFlagC2SPacket msg, FriendlyByteBuf buf) {
|
||||||
|
buf.writeBoolean(msg.shiftDown());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EncodeWithShiftFlagC2SPacket decode(FriendlyByteBuf buf) {
|
||||||
|
return new EncodeWithShiftFlagC2SPacket(buf.readBoolean());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handle(EncodeWithShiftFlagC2SPacket msg, Supplier<NetworkEvent.Context> ctxSupplier) {
|
||||||
|
var ctx = ctxSupplier.get();
|
||||||
|
ctx.enqueueWork(() -> {
|
||||||
|
ServerPlayer player = ctx.getSender();
|
||||||
|
if (player == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (player.containerMenu instanceof PatternEncodingTermMenu menu
|
||||||
|
&& menu instanceof IPatternEncodingShiftUploadSync sync) {
|
||||||
|
sync.eap$clientSetShiftUpload(msg.shiftDown());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ctx.setPacketHandled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user