修修修

This commit is contained in:
GaLicn 2025-08-18 00:06:47 +08:00
parent 120264726e
commit 7138077cd1
5 changed files with 57 additions and 4 deletions

View File

@ -34,6 +34,10 @@ public final class InputEvents {
hovered = JeiRuntimeProxy.getIngredientUnderMouse(); hovered = JeiRuntimeProxy.getIngredientUnderMouse();
} }
if (hovered.isPresent()) { if (hovered.isPresent()) {
// JEI 作弊模式开启则放行给 JEI 处理Shift+左键=一组
if (JeiRuntimeProxy.isJeiCheatModeEnabled()) {
return;
}
ITypedIngredient<?> typed = hovered.get(); ITypedIngredient<?> typed = hovered.get();
GenericStack stack = GenericEntryStackHelper.ingredientToStack(typed); GenericStack stack = GenericEntryStackHelper.ingredientToStack(typed);
if (stack != null) { if (stack != null) {
@ -58,6 +62,10 @@ public final class InputEvents {
if (hovered.isEmpty()) return; if (hovered.isEmpty()) return;
ITypedIngredient<?> typed = hovered.get(); ITypedIngredient<?> typed = hovered.get();
// JEI 作弊模式开启则放行给 JEI 处理中键=一组
if (JeiRuntimeProxy.isJeiCheatModeEnabled()) {
return;
}
GenericStack stack = GenericEntryStackHelper.ingredientToStack(typed); GenericStack stack = GenericEntryStackHelper.ingredientToStack(typed);
if (stack == null) return; if (stack == null) return;

View File

@ -1,5 +1,4 @@
package com.extendedae_plus.content.wireless; package com.extendedae_plus.content.wireless;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
@ -35,6 +34,11 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
if (!level.isClientSide && player.isShiftKeyDown()) { if (!level.isClientSide && player.isShiftKeyDown()) {
BlockEntity be = level.getBlockEntity(pos); BlockEntity be = level.getBlockEntity(pos);
if (be instanceof WirelessTransceiverBlockEntity te) { if (be instanceof WirelessTransceiverBlockEntity te) {
if (te.isLocked()) {
player.displayClientMessage(Component.literal("收发器已锁定,无法修改频道"), true);
super.attack(state, level, pos, player);
return;
}
int step = 1; int step = 1;
if (player.getMainHandItem().is(Items.REDSTONE_TORCH)) step = 10; if (player.getMainHandItem().is(Items.REDSTONE_TORCH)) step = 10;
if (player.getMainHandItem().is(Items.STICK)) step = 10; if (player.getMainHandItem().is(Items.STICK)) step = 10;
@ -57,6 +61,10 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
if (be instanceof WirelessTransceiverBlockEntity te) { if (be instanceof WirelessTransceiverBlockEntity te) {
boolean sneaking = player.isShiftKeyDown(); boolean sneaking = player.isShiftKeyDown();
if (sneaking) { if (sneaking) {
if (te.isLocked()) {
player.displayClientMessage(Component.literal("收发器已锁定,无法修改频道"), true);
return InteractionResult.CONSUME;
}
// 频率调节主手 +1 +10副手 -1 -10 // 频率调节主手 +1 +10副手 -1 -10
int step = 1; int step = 1;
// 手持红石火把加10手持木棍减10仅改变步长不改变加/减方向 // 手持红石火把加10手持木棍减10仅改变步长不改变加/减方向
@ -73,6 +81,10 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
te.setFrequency(f); te.setFrequency(f);
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true); player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
} else { } else {
if (te.isLocked()) {
player.displayClientMessage(Component.literal("收发器已锁定,无法切换模式"), true);
return InteractionResult.CONSUME;
}
te.setMasterMode(!te.isMasterMode()); te.setMasterMode(!te.isMasterMode());
player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true); player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true);
} }

View File

@ -31,8 +31,9 @@ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWire
private IManagedGridNode managedNode; private IManagedGridNode managedNode;
private long frequency = 0L; private long frequency = 1L;
private boolean masterMode = true; private boolean masterMode = false;
private boolean locked = false;
private WirelessMasterLink masterLink; private WirelessMasterLink masterLink;
private WirelessSlaveLink slaveLink; private WirelessSlaveLink slaveLink;
@ -86,6 +87,7 @@ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWire
} }
public void setFrequency(long frequency) { public void setFrequency(long frequency) {
if (this.locked) return;
if (this.frequency == frequency) return; if (this.frequency == frequency) return;
this.frequency = frequency; this.frequency = frequency;
if (isMasterMode()) { if (isMasterMode()) {
@ -101,6 +103,7 @@ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWire
} }
public void setMasterMode(boolean masterMode) { public void setMasterMode(boolean masterMode) {
if (this.locked) return;
if (this.masterMode == masterMode) return; if (this.masterMode == masterMode) return;
// 切换前清理原模式状态 // 切换前清理原模式状态
if (this.masterMode) { if (this.masterMode) {
@ -118,6 +121,16 @@ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWire
setChanged(); setChanged();
} }
public boolean isLocked() {
return locked;
}
public void setLocked(boolean locked) {
if (this.locked == locked) return;
this.locked = locked;
setChanged();
}
public void onRemoved() { public void onRemoved() {
if (this.masterMode) { if (this.masterMode) {
masterLink.onUnloadOrRemove(); masterLink.onUnloadOrRemove();
@ -164,6 +177,7 @@ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWire
super.saveAdditional(tag); super.saveAdditional(tag);
tag.putLong("frequency", frequency); tag.putLong("frequency", frequency);
tag.putBoolean("master", masterMode); tag.putBoolean("master", masterMode);
tag.putBoolean("locked", locked);
if (managedNode != null) { if (managedNode != null) {
managedNode.saveToNBT(tag); managedNode.saveToNBT(tag);
} }
@ -174,6 +188,7 @@ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWire
super.load(tag); super.load(tag);
this.frequency = tag.getLong("frequency"); this.frequency = tag.getLong("frequency");
this.masterMode = tag.getBoolean("master"); this.masterMode = tag.getBoolean("master");
this.locked = tag.getBoolean("locked");
if (managedNode != null) { if (managedNode != null) {
managedNode.loadFromNBT(tag); managedNode.loadFromNBT(tag);
} }

View File

@ -16,6 +16,11 @@ public final class ModBlocks {
public static final RegistryObject<Block> WIRELESS_TRANSCEIVER = BLOCKS.register( public static final RegistryObject<Block> WIRELESS_TRANSCEIVER = BLOCKS.register(
"wireless_transceiver", "wireless_transceiver",
() -> new WirelessTransceiverBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(2.0F, 6.0F)) () -> new WirelessTransceiverBlock(
BlockBehaviour.Properties.of()
.mapColor(MapColor.METAL)
.strength(1.5F, 6.0F)
.requiresCorrectToolForDrops()
)
); );
} }

View File

@ -61,4 +61,17 @@ public final class JeiRuntimeProxy {
return Optional.empty(); return Optional.empty();
} }
/**
* 检测 JEI 是否开启了作弊模式给物品
* 使用 JEI 内部开关 JEI 未初始化或异常则返回 false
*/
public static boolean isJeiCheatModeEnabled() {
try {
// 使用完全限定名以避免在源码缺失时的编译依赖问题
return mezz.jei.common.Internal.getClientToggleState().isCheatItemsEnabled();
} catch (Throwable t) {
return false;
}
}
} }