diff --git a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java index 62a0d6b..76f30ba 100644 --- a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java +++ b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java @@ -5,7 +5,6 @@ import com.extendedae_plus.client.ClientRegistrar; import com.extendedae_plus.config.ModConfigs; import com.extendedae_plus.init.*; import com.extendedae_plus.menu.locator.CuriosItemLocator; -import com.extendedae_plus.network.ModNetwork; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ModelEvent; diff --git a/src/main/java/com/extendedae_plus/ae/menu/EntitySpeedTickerMenu.java b/src/main/java/com/extendedae_plus/ae/menu/EntitySpeedTickerMenu.java index 270131d..b8269dc 100644 --- a/src/main/java/com/extendedae_plus/ae/menu/EntitySpeedTickerMenu.java +++ b/src/main/java/com/extendedae_plus/ae/menu/EntitySpeedTickerMenu.java @@ -1,6 +1,7 @@ package com.extendedae_plus.ae.menu; import appeng.core.definitions.AEItems; +import appeng.menu.guisync.GuiSync; import appeng.menu.implementations.UpgradeableMenu; import appeng.menu.slot.OptionalFakeSlot; import com.extendedae_plus.ae.parts.EntitySpeedTickerPart; @@ -22,11 +23,28 @@ public class EntitySpeedTickerMenu extends UpgradeableMenu extends UpgradeableScreen { + private boolean eap$entitySpeedTickerEnabled = false; + private SettingToggleButton eap$entitySpeedTickerToggle; public EntitySpeedTickerScreen( EntitySpeedTickerMenu menu, Inventory playerInventory, Component title, ScreenStyle style) { super((C) menu, playerInventory, title, style); this.addToLeftToolbar(CommonButtons.togglePowerUnit()); + + try{ + this.eap$entitySpeedTickerEnabled = menu.getAccelerateEnabled(); + }catch (Exception ignored){} + + // 使用 SettingToggleButton 的外观(原版图标),但自定义悬停描述为“智能阻挡” + // 不做本地切换,点击仅发送自定义C2S,显示由@GuiSync回传 + eap$entitySpeedTickerToggle = new SettingToggleButton<>( + Settings.BLOCKING_MODE, + this.eap$entitySpeedTickerEnabled ? YesNo.YES : YesNo.NO, + (btn, backwards) -> { + // 不做本地切换,点击仅发送自定义C2S,显示由@GuiSync回传 + ModNetwork.CHANNEL.sendToServer(new ToggleEntityTickerC2SPacket()); + } + ) { + @Override + public List getTooltipMessage() { + boolean enabled = eap$entitySpeedTickerEnabled; + var title = Component.literal("实体加速"); + var stateLine = enabled + ? Component.literal("已启用: 将加速目标方块实体的tick") + : Component.literal("已关闭: 不会对目标方块实体进行加速"); + return List.of(title, stateLine); + } + }; + // 初始化后立刻对齐当前@GuiSync状态,避免首帧显示不一致 + eap$entitySpeedTickerToggle.set(this.eap$entitySpeedTickerEnabled ? YesNo.YES : YesNo.NO); + + this.addToLeftToolbar(eap$entitySpeedTickerToggle); } @Override - protected void updateBeforeRender(){ + protected void updateBeforeRender() { super.updateBeforeRender(); + + if (this.eap$entitySpeedTickerToggle != null) { + boolean desired = this.eap$entitySpeedTickerEnabled; + if (this.menu != null) { + desired = this.menu.getAccelerateEnabled(); + } + + this.eap$entitySpeedTickerEnabled = desired; + this.eap$entitySpeedTickerToggle.set(desired ? YesNo.YES : YesNo.NO); + } textData(); } - public void refreshGui(){ + public void refreshGui() { textData(); } diff --git a/src/main/java/com/extendedae_plus/client/InputEvents.java b/src/main/java/com/extendedae_plus/client/InputEvents.java index 8af06d1..44e9f85 100644 --- a/src/main/java/com/extendedae_plus/client/InputEvents.java +++ b/src/main/java/com/extendedae_plus/client/InputEvents.java @@ -4,16 +4,14 @@ import appeng.api.stacks.GenericStack; import appeng.client.gui.me.common.MEStorageScreen; import appeng.integration.modules.jei.GenericEntryStackHelper; import com.extendedae_plus.ExtendedAEPlus; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.integration.jei.JeiRuntimeProxy; import com.extendedae_plus.mixin.ae2.accessor.MEStorageScreenAccessor; -import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.network.OpenCraftFromJeiC2SPacket; import com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket; -import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.ingredients.ITypedIngredient; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ScreenEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; diff --git a/src/main/java/com/extendedae_plus/client/screen/GlobalProviderModesScreen.java b/src/main/java/com/extendedae_plus/client/screen/GlobalProviderModesScreen.java index c70a53f..49c36a8 100644 --- a/src/main/java/com/extendedae_plus/client/screen/GlobalProviderModesScreen.java +++ b/src/main/java/com/extendedae_plus/client/screen/GlobalProviderModesScreen.java @@ -1,8 +1,8 @@ package com.extendedae_plus.client.screen; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.menu.NetworkPatternControllerMenu; import com.extendedae_plus.network.GlobalToggleProviderModesC2SPacket; -import com.extendedae_plus.network.ModNetwork; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java b/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java index e817f2a..1984717 100644 --- a/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java +++ b/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java @@ -1,6 +1,6 @@ package com.extendedae_plus.client.ui; -import com.extendedae_plus.network.ModNetwork; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.network.UploadEncodedPatternToProviderC2SPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; diff --git a/src/main/java/com/extendedae_plus/network/ModNetwork.java b/src/main/java/com/extendedae_plus/init/ModNetwork.java similarity index 93% rename from src/main/java/com/extendedae_plus/network/ModNetwork.java rename to src/main/java/com/extendedae_plus/init/ModNetwork.java index 78e3adb..2f4eab5 100644 --- a/src/main/java/com/extendedae_plus/network/ModNetwork.java +++ b/src/main/java/com/extendedae_plus/init/ModNetwork.java @@ -1,6 +1,7 @@ -package com.extendedae_plus.network; +package com.extendedae_plus.init; import com.extendedae_plus.ExtendedAEPlus; +import com.extendedae_plus.network.*; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.network.NetworkDirection; import net.minecraftforge.network.NetworkRegistry; @@ -90,6 +91,12 @@ public class ModNetwork { .consumerNetworkThread(GlobalToggleProviderModesC2SPacket::handle) .add(); + CHANNEL.messageBuilder(ToggleEntityTickerC2SPacket.class, nextId(), NetworkDirection.PLAY_TO_SERVER) + .encoder(ToggleEntityTickerC2SPacket::encode) + .decoder(ToggleEntityTickerC2SPacket::decode) + .consumerNetworkThread(ToggleEntityTickerC2SPacket::handle) + .add(); + CHANNEL.messageBuilder(AdvancedBlockingSyncS2CPacket.class, nextId(), NetworkDirection.PLAY_TO_CLIENT) .encoder(AdvancedBlockingSyncS2CPacket::encode) .decoder(AdvancedBlockingSyncS2CPacket::decode) diff --git a/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java b/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java index 56fe87f..33b6254 100644 --- a/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/PickFromWirelessMixin.java @@ -1,6 +1,6 @@ package com.extendedae_plus.mixin; -import com.extendedae_plus.network.ModNetwork; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.network.PickFromWirelessC2SPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/AEBaseScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/AEBaseScreenMixin.java index b741be3..5d089eb 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/AEBaseScreenMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/AEBaseScreenMixin.java @@ -15,9 +15,9 @@ import appeng.client.gui.style.TextAlignment; import appeng.menu.slot.AppEngSlot; import com.extendedae_plus.api.ExPatternPageAccessor; import com.extendedae_plus.content.ClientPatternHighlightStore; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.network.CraftingMonitorJumpC2SPacket; import com.extendedae_plus.network.CraftingMonitorOpenProviderC2SPacket; -import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.util.GuiUtil; import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider; import com.mojang.logging.LogUtils; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternEncodingTermScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternEncodingTermScreenMixin.java index 7119000..23c262f 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternEncodingTermScreenMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternEncodingTermScreenMixin.java @@ -7,10 +7,10 @@ import appeng.client.gui.style.ScreenStyle; import appeng.client.gui.style.WidgetStyle; import appeng.client.gui.widgets.IconButton; import appeng.menu.AEBaseMenu; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.mixin.accessor.AbstractContainerScreenAccessor; import com.extendedae_plus.mixin.accessor.ScreenAccessor; import com.extendedae_plus.mixin.ae2.accessor.AEBaseScreenAccessor; -import com.extendedae_plus.network.ModNetwork; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.renderer.Rect2i; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java index 883fc2a..2fb5edd 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java @@ -10,7 +10,7 @@ import appeng.menu.implementations.PatternProviderMenu; import com.extendedae_plus.api.ExPatternButtonsAccessor; import com.extendedae_plus.api.PatternProviderMenuAdvancedSync; import com.extendedae_plus.api.PatternProviderMenuDoublingSync; -import com.extendedae_plus.network.ModNetwork; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.network.ToggleAdvancedBlockingC2SPacket; import com.extendedae_plus.network.ToggleSmartDoublingC2SPacket; import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider; diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java index e8b5402..65f01f4 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java @@ -9,8 +9,8 @@ import appeng.client.gui.widgets.AETextField; import appeng.client.gui.widgets.IconButton; import appeng.menu.AEBaseMenu; import com.extendedae_plus.config.ModConfigs; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor; -import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.network.OpenProviderUiC2SPacket; import com.extendedae_plus.util.GuiUtil; import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal; diff --git a/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java b/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java index 6680f2f..91ddfa0 100644 --- a/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java @@ -11,6 +11,7 @@ import appeng.menu.AEBaseMenu; import appeng.menu.locator.MenuLocators; import appeng.menu.me.crafting.CraftingCPUMenu; import appeng.parts.AEBasePart; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicAccessor; import com.extendedae_plus.util.PatternProviderDataUtil; import com.glodblock.github.extendedae.util.FCClientUtil; diff --git a/src/main/java/com/extendedae_plus/network/RequestProvidersListC2SPacket.java b/src/main/java/com/extendedae_plus/network/RequestProvidersListC2SPacket.java index 88e51d6..d9a0cc3 100644 --- a/src/main/java/com/extendedae_plus/network/RequestProvidersListC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/RequestProvidersListC2SPacket.java @@ -3,6 +3,7 @@ package com.extendedae_plus.network; import appeng.helpers.patternprovider.PatternContainer; import appeng.menu.implementations.PatternAccessTermMenu; import appeng.menu.me.items.PatternEncodingTermMenu; +import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.util.ExtendedAEPatternUploadUtil; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; diff --git a/src/main/java/com/extendedae_plus/network/ToggleEntityTickerC2SPacket.java b/src/main/java/com/extendedae_plus/network/ToggleEntityTickerC2SPacket.java new file mode 100644 index 0000000..0e4163d --- /dev/null +++ b/src/main/java/com/extendedae_plus/network/ToggleEntityTickerC2SPacket.java @@ -0,0 +1,45 @@ +package com.extendedae_plus.network; + +import com.extendedae_plus.ae.menu.EntitySpeedTickerMenu; +import com.extendedae_plus.ae.parts.EntitySpeedTickerPart; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +/** + * C2S: Toggle the accelerateEnabled flag on the EntitySpeedTickerPart bound to the open menu. + */ +public class ToggleEntityTickerC2SPacket { + public ToggleEntityTickerC2SPacket() { + } + + public static void encode(ToggleEntityTickerC2SPacket msg, FriendlyByteBuf buf) { + } + + public static ToggleEntityTickerC2SPacket decode(FriendlyByteBuf buf) { + return new ToggleEntityTickerC2SPacket(); + } + + public static void handle(ToggleEntityTickerC2SPacket msg, Supplier ctxSupplier) { + var ctx = ctxSupplier.get(); + ctx.enqueueWork(() -> { + ServerPlayer player = ctx.getSender(); + if (player == null) return; + if (!(player.containerMenu instanceof EntitySpeedTickerMenu menu)) return; + + EntitySpeedTickerPart part = menu.getHost(); + if (part == null) return; + + // 切换部件上的状态,并把新状态同步到菜单字段,随后广播以通知客户端 + boolean current = part.getAccelerateEnabled(); + boolean next = !current; + part.setAccelerateEnabled(next); + // 确保菜单上的字段也被更新,这样 @GuiSync 会把状态发回客户端 + menu.setAccelerateEnabled(next); + menu.broadcastChanges(); + }); + ctx.setPacketHandled(true); + } +} \ No newline at end of file