JEI写样板对于配方书签上传失败时回退到玩家背包

This commit is contained in:
GaLi 2026-03-03 11:28:29 +08:00
parent 45fdf749b1
commit 9fe3336107
3 changed files with 21 additions and 5 deletions

View File

@ -32,16 +32,15 @@ public class UploadEncodedPatternToProviderC2SPacket {
ServerPlayer player = ctx.getSender(); ServerPlayer player = ctx.getSender();
if (player == null) return; if (player == null) return;
// Prefer pending Ctrl+Q pattern upload when present.
if (ProviderUploadUtil.hasPendingCtrlQPattern(player)) { if (ProviderUploadUtil.hasPendingCtrlQPattern(player)) {
if (ProviderUploadUtil.uploadPendingCtrlQPattern(player, msg.providerId)) { if (ProviderUploadUtil.uploadPendingCtrlQPattern(player, msg.providerId)) {
return; return;
} }
ProviderUploadUtil.returnPendingCtrlQPatternToInventory(player);
return;
} }
if (player.containerMenu instanceof PatternEncodingTermMenu menu) { if (player.containerMenu instanceof PatternEncodingTermMenu menu) {
// 1) providerId >= 0: byId mode from access terminal
// 2) providerId < 0: index mode, index = -1 - providerId
if (msg.providerId >= 0) { if (msg.providerId >= 0) {
ProviderUploadUtil.uploadFromEncodingMenuToProvider(player, menu, msg.providerId); ProviderUploadUtil.uploadFromEncodingMenuToProvider(player, menu, msg.providerId);
} else { } else {

View File

@ -145,8 +145,10 @@ public class CreateAndUploadPatternC2SPacket {
boolean uploaded = MatrixUploadUtil.uploadPatternToMatrix(player, pattern, grid); boolean uploaded = MatrixUploadUtil.uploadPatternToMatrix(player, pattern, grid);
if (!uploaded) { if (!uploaded) {
// 上传失败退还空白样板到网络 // 上传失败将样板塞到背包
refundBlankPattern(player, grid); if (!(player.getInventory().add(pattern))) {
player.drop(pattern.copy(),false);
}
} }
}); });
ctx.setPacketHandled(true); ctx.setPacketHandled(true);

View File

@ -281,6 +281,21 @@ public final class ProviderUploadUtil {
return true; return true;
} }
/**
* pending Ctrl+Q 样板回退到玩家背包若背包已满则掉落在地上
*/
public static boolean returnPendingCtrlQPatternToInventory(ServerPlayer player) {
if (player == null) return false;
ItemStack pending = getPendingCtrlQPattern(player);
if (pending.isEmpty()) return false;
clearPendingCtrlQUpload(player);
if (!player.getInventory().add(pending.copy())) {
player.drop(pending.copy(), false);
}
return true;
}
/** /**
* 列出玩家无线终端网络中的可用 provider顺序与负数索引上传保持一致 * 列出玩家无线终端网络中的可用 provider顺序与负数索引上传保持一致
*/ */