minecraft-src/net/minecraft/client/gui/screens/inventory/LecternScreen.java
2025-07-04 01:41:11 +03:00

112 lines
2.9 KiB
Java

package net.minecraft.client.gui.screens.inventory;
import java.util.Objects;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.ContainerListener;
import net.minecraft.world.inventory.LecternMenu;
import net.minecraft.world.item.ItemStack;
@Environment(EnvType.CLIENT)
public class LecternScreen extends BookViewScreen implements MenuAccess<LecternMenu> {
private final LecternMenu menu;
private final ContainerListener listener = new ContainerListener() {
@Override
public void slotChanged(AbstractContainerMenu containerToSend, int dataSlotIndex, ItemStack stack) {
LecternScreen.this.bookChanged();
}
@Override
public void dataChanged(AbstractContainerMenu containerMenu, int dataSlotIndex, int value) {
if (dataSlotIndex == 0) {
LecternScreen.this.pageChanged();
}
}
};
public LecternScreen(LecternMenu menu, Inventory playerInventory, Component title) {
this.menu = menu;
}
public LecternMenu getMenu() {
return this.menu;
}
@Override
protected void init() {
super.init();
this.menu.addSlotListener(this.listener);
}
@Override
public void onClose() {
this.minecraft.player.closeContainer();
super.onClose();
}
@Override
public void removed() {
super.removed();
this.menu.removeSlotListener(this.listener);
}
@Override
protected void createMenuControls() {
if (this.minecraft.player.mayBuild()) {
this.addRenderableWidget(Button.builder(CommonComponents.GUI_DONE, button -> this.onClose()).bounds(this.width / 2 - 100, 196, 98, 20).build());
this.addRenderableWidget(
Button.builder(Component.translatable("lectern.take_book"), button -> this.sendButtonClick(3)).bounds(this.width / 2 + 2, 196, 98, 20).build()
);
} else {
super.createMenuControls();
}
}
@Override
protected void pageBack() {
this.sendButtonClick(1);
}
@Override
protected void pageForward() {
this.sendButtonClick(2);
}
@Override
protected boolean forcePage(int pageNum) {
if (pageNum != this.menu.getPage()) {
this.sendButtonClick(100 + pageNum);
return true;
} else {
return false;
}
}
private void sendButtonClick(int pageData) {
this.minecraft.gameMode.handleInventoryButtonClick(this.menu.containerId, pageData);
}
@Override
public boolean isPauseScreen() {
return false;
}
void bookChanged() {
ItemStack itemStack = this.menu.getBook();
this.setBookAccess((BookViewScreen.BookAccess)Objects.requireNonNullElse(BookViewScreen.BookAccess.fromItem(itemStack), BookViewScreen.EMPTY_ACCESS));
}
void pageChanged() {
this.setPage(this.menu.getPage());
}
@Override
protected void closeScreen() {
this.minecraft.player.closeContainer();
}
}