Merge remote-tracking branch 'origin/1.21.1' into 1.21.1
# Conflicts: # build/generated/sources/modMetadata/META-INF/neoforge.mods.toml # src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java # src/main/resources/assets/extendedae_plus/lang/en_us.json # src/main/resources/assets/extendedae_plus/lang/zh_cn.json
This commit is contained in:
commit
31f43cc34a
|
|
@ -40,7 +40,7 @@ mod_group_id=com.extendedae_plus
|
|||
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
|
||||
mod_authors=GaLi
|
||||
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
|
||||
mod_description=Add more practical features and auxiliary operations to the Applied Energistics 2 mod. \nSpecial thanks to contributor C-H716.
|
||||
mod_description=Add more practical features and auxiliary operations to the Applied Energistics 2 mod.
|
||||
|
||||
## UI item explorer selection (emi | rei | jei)
|
||||
# Default to 'emi' per request; you can override by running with -Puse_Xei=rei or -Puse_Xei=jei
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
package com.extendedae_plus.api.upload;
|
||||
|
||||
public interface IPatternEncodingShiftUploadSync {
|
||||
/**
|
||||
* 由客户端发送的编码指令附带的 Shift 状态。
|
||||
*/
|
||||
void eap$clientSetShiftUpload(boolean shiftDown);
|
||||
|
||||
/**
|
||||
* 服务器在处理 encode() 时消费该标记,并在读取后自动复位。
|
||||
*/
|
||||
boolean eap$consumeShiftUploadFlag();
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ package com.extendedae_plus.init;
|
|||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.network.*;
|
||||
import com.extendedae_plus.network.packet.EAPConfigButtonPacket;
|
||||
import com.extendedae_plus.network.upload.EncodeWithShiftFlagC2SPacket;
|
||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
|
||||
|
||||
public class ModNetwork {
|
||||
|
|
@ -21,6 +22,7 @@ public class ModNetwork {
|
|||
registrar.playToServer(OpenProviderUiC2SPacket.TYPE, OpenProviderUiC2SPacket.STREAM_CODEC, OpenProviderUiC2SPacket::handle);
|
||||
registrar.playToServer(UploadEncodedPatternToProviderC2SPacket.TYPE, UploadEncodedPatternToProviderC2SPacket.STREAM_CODEC, UploadEncodedPatternToProviderC2SPacket::handle);
|
||||
registrar.playToServer(UploadInventoryPatternToProviderC2SPacket.TYPE, UploadInventoryPatternToProviderC2SPacket.STREAM_CODEC, UploadInventoryPatternToProviderC2SPacket::handle);
|
||||
registrar.playToServer(EncodeWithShiftFlagC2SPacket.TYPE, EncodeWithShiftFlagC2SPacket.STREAM_CODEC, EncodeWithShiftFlagC2SPacket::handle);
|
||||
// 新增:JEI 中键打开合成界面 & 无线终端拾取方块物品
|
||||
registrar.playToServer(com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.TYPE,
|
||||
com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.STREAM_CODEC,
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import appeng.client.gui.Icon;
|
|||
import appeng.client.gui.me.items.PatternEncodingTermScreen;
|
||||
import appeng.client.gui.style.ScreenStyle;
|
||||
import appeng.client.gui.style.WidgetStyle;
|
||||
import appeng.client.gui.widgets.ActionButton;
|
||||
import appeng.client.gui.widgets.IconButton;
|
||||
import appeng.menu.AEBaseMenu;
|
||||
import com.extendedae_plus.mixin.accessor.AbstractContainerScreenAccessor;
|
||||
|
|
@ -20,6 +21,8 @@ import org.spongepowered.asm.mixin.Mixin;
|
|||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package com.extendedae_plus.mixin.ae2.client.gui;
|
||||
|
||||
import appeng.api.config.ActionItems;
|
||||
import appeng.client.gui.me.items.PatternEncodingTermScreen;
|
||||
import appeng.client.gui.widgets.ActionButton;
|
||||
import com.extendedae_plus.init.ModNetwork;
|
||||
import com.extendedae_plus.network.upload.EncodeWithShiftFlagC2SPacket;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
|
||||
@Mixin(PatternEncodingTermScreen.class)
|
||||
public class PatternEncodingTermUploadMixin {
|
||||
@ModifyVariable(method = "<init>", at = @At(value = "STORE"), name = "encodeBtn")
|
||||
private ActionButton eap$encodingButton(ActionButton button) {
|
||||
return new ActionButton(ActionItems.ENCODE,actionItems -> {
|
||||
PacketDistributor.sendToServer(new EncodeWithShiftFlagC2SPacket(Screen.hasShiftDown()));
|
||||
var screen=(PatternEncodingTermScreen<?>) (Object)this;
|
||||
screen.getMenu().encode();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import appeng.api.crafting.PatternDetailsHelper;
|
|||
import appeng.menu.me.items.PatternEncodingTermMenu;
|
||||
import appeng.menu.slot.RestrictedInputSlot;
|
||||
import appeng.parts.encoding.EncodingMode;
|
||||
import com.extendedae_plus.api.upload.IPatternEncodingShiftUploadSync;
|
||||
import com.extendedae_plus.util.uploadPattern.ExtendedAEPatternUploadUtil;
|
||||
import com.glodblock.github.glodium.network.packet.sync.ActionMap;
|
||||
import com.glodblock.github.glodium.network.packet.sync.IActionHolder;
|
||||
|
|
@ -26,7 +27,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|||
* 注册动作 "upload_to_matrix":仅上传“合成图样”到 ExtendedAE 装配矩阵。
|
||||
*/
|
||||
@Mixin(PatternEncodingTermMenu.class)
|
||||
public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHolder {
|
||||
public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHolder, IPatternEncodingShiftUploadSync {
|
||||
|
||||
@Unique
|
||||
private final ActionMap eap$actions = ActionMap.create();
|
||||
|
|
@ -34,9 +35,26 @@ public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHo
|
|||
@Unique
|
||||
private Player epp$player;
|
||||
|
||||
@Unique
|
||||
private boolean eap$pendingShiftUpload;
|
||||
|
||||
@Shadow(remap = false)
|
||||
private RestrictedInputSlot encodedPatternSlot;
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@Unique
|
||||
private void eap$scheduleUploadWithRetry(ServerPlayer sp, PatternEncodingTermMenu menu, int attemptsLeft) {
|
||||
sp.server.execute(() -> {
|
||||
|
|
@ -85,6 +103,9 @@ public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHo
|
|||
if (!(this.epp$player instanceof ServerPlayer sp)) {
|
||||
return; // 仅服务器执行
|
||||
}
|
||||
if (!this.eap$consumeShiftUploadFlag()) {
|
||||
return; // 未按下 Shift,不自动上传
|
||||
}
|
||||
var menu = (PatternEncodingTermMenu) (Object) this;
|
||||
if (menu.getMode() != EncodingMode.CRAFTING
|
||||
&& menu.getMode() != EncodingMode.SMITHING_TABLE
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
package com.extendedae_plus.network.upload;
|
||||
|
||||
import appeng.menu.me.items.PatternEncodingTermMenu;
|
||||
import com.extendedae_plus.ExtendedAEPlus;
|
||||
import com.extendedae_plus.api.upload.IPatternEncodingShiftUploadSync;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
|
||||
/**
|
||||
* C2S:图样编码终端点击「编码」按钮时同步客户端的 Shift 状态。
|
||||
*/
|
||||
public class EncodeWithShiftFlagC2SPacket implements CustomPacketPayload {
|
||||
|
||||
public static final Type<EncodeWithShiftFlagC2SPacket> TYPE = new Type<>(
|
||||
ResourceLocation.fromNamespaceAndPath(ExtendedAEPlus.MODID, "encode_with_shift"));
|
||||
|
||||
public static final StreamCodec<FriendlyByteBuf, EncodeWithShiftFlagC2SPacket> STREAM_CODEC = StreamCodec.of(
|
||||
(buf, pkt) -> buf.writeBoolean(pkt.shiftDown),
|
||||
buf -> new EncodeWithShiftFlagC2SPacket(buf.readBoolean())
|
||||
);
|
||||
|
||||
private final boolean shiftDown;
|
||||
|
||||
public EncodeWithShiftFlagC2SPacket(boolean shiftDown) {
|
||||
this.shiftDown = shiftDown;
|
||||
}
|
||||
|
||||
public boolean shiftDown() {
|
||||
return shiftDown;
|
||||
}
|
||||
|
||||
public static void handle(final EncodeWithShiftFlagC2SPacket msg, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
if (!(ctx.player() instanceof ServerPlayer player)) {
|
||||
return;
|
||||
}
|
||||
if (player.containerMenu instanceof PatternEncodingTermMenu menu
|
||||
&& menu instanceof IPatternEncodingShiftUploadSync sync) {
|
||||
sync.eap$clientSetShiftUpload(msg.shiftDown());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
}
|
||||
|
|
@ -73,6 +73,7 @@
|
|||
"ae2.client.gui.AEBaseScreenMixin",
|
||||
"ae2.client.gui.InterfaceScreenMixin",
|
||||
"ae2.client.gui.PatternEncodingTermScreenMixin",
|
||||
"ae2.client.gui.PatternEncodingTermUploadMixin",
|
||||
"ae2.client.gui.PatternProviderCloseMixin",
|
||||
"ae2.client.gui.PatternProviderScreenUpgradesMixin",
|
||||
"ae2.client.gui.PatternProviderSmartFeaturesMixin",
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ displayURL = "https://github.com/GaLicn/ExtendedAE_Plus"
|
|||
logoFile="logo.png"
|
||||
|
||||
# A text field displayed in the mod UI
|
||||
#credits="" #optional
|
||||
credits="C-H716"
|
||||
|
||||
# A text field displayed in the mod UI
|
||||
authors = "${mod_authors}" #optional
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user