package net.minecraft.client.gui.screens; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class InBedChatScreen extends ChatScreen { private Button leaveBedButton; public InBedChatScreen() { super(""); } @Override protected void init() { super.init(); this.leaveBedButton = Button.builder(Component.translatable("multiplayer.stopSleeping"), p_96074_ -> this.sendWakeUp()) .bounds(this.width / 2 - 100, this.height - 40, 200, 20) .build(); this.addRenderableWidget(this.leaveBedButton); } @Override public void render(GuiGraphics p_281659_, int p_283403_, int p_281737_, float p_282201_) { if (!this.minecraft.getChatStatus().isChatAllowed(this.minecraft.isLocalServer())) { this.leaveBedButton.render(p_281659_, p_283403_, p_281737_, p_282201_); } else { super.render(p_281659_, p_283403_, p_281737_, p_282201_); } } @Override public void onClose() { this.sendWakeUp(); } @Override public boolean charTyped(char p_263331_, int p_263427_) { return !this.minecraft.getChatStatus().isChatAllowed(this.minecraft.isLocalServer()) ? true : super.charTyped(p_263331_, p_263427_); } @Override public boolean keyPressed(int p_96070_, int p_96071_, int p_96072_) { if (p_96070_ == 256) { this.sendWakeUp(); } if (!this.minecraft.getChatStatus().isChatAllowed(this.minecraft.isLocalServer())) { return true; } else if (p_96070_ != 257 && p_96070_ != 335) { return super.keyPressed(p_96070_, p_96071_, p_96072_); } else { this.handleChatInput(this.input.getValue(), true); this.input.setValue(""); this.minecraft.gui.getChat().resetChatScroll(); return true; } } private void sendWakeUp() { ClientPacketListener clientpacketlistener = this.minecraft.player.connection; clientpacketlistener.send(new ServerboundPlayerCommandPacket(this.minecraft.player, ServerboundPlayerCommandPacket.Action.STOP_SLEEPING)); } public void onPlayerWokeUp() { if (this.input.getValue().isEmpty()) { this.minecraft.setScreen(null); } else { this.minecraft.setScreen(new ChatScreen(this.input.getValue())); } } }