flan/common/src/main/java/io/github/flemmli97/flan/gui/StringResultScreenHandler.java

142 lines
5.2 KiB
Java
Raw Normal View History

package io.github.flemmli97.flan.gui;
2020-08-23 12:52:36 +00:00
import io.github.flemmli97.flan.claim.PermHelper;
import io.github.flemmli97.flan.config.ConfigHandler;
2021-12-03 21:37:35 +00:00
import io.github.flemmli97.flan.mixin.AbstractContainerAccessor;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundSetExperiencePacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.AnvilMenu;
import net.minecraft.world.inventory.ClickType;
import net.minecraft.world.inventory.ContainerListener;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
2020-08-23 12:52:36 +00:00
import org.apache.commons.lang3.StringUtils;
2021-05-02 16:06:56 +00:00
import java.util.ArrayList;
2020-08-23 12:52:36 +00:00
import java.util.List;
import java.util.function.Consumer;
2021-12-03 21:37:35 +00:00
public class StringResultScreenHandler extends AnvilMenu {
2020-08-23 12:52:36 +00:00
2021-12-03 21:37:35 +00:00
private final List<ContainerListener> listeners = new ArrayList<>();
2020-08-23 12:52:36 +00:00
private final Consumer<String> cons;
private final Runnable ret;
private boolean init;
private String name;
2021-12-03 21:37:35 +00:00
private StringResultScreenHandler(int syncId, Inventory playerInventory, Consumer<String> cons, Runnable ret) {
2020-08-23 12:52:36 +00:00
super(syncId, playerInventory);
ItemStack stack = new ItemStack(Items.PAPER);
2021-12-03 21:37:35 +00:00
stack.setHoverName(PermHelper.simpleColoredText(""));
this.inputSlots.setItem(0, stack);
2020-08-23 12:52:36 +00:00
ItemStack out = new ItemStack(Items.BOOK);
2022-01-30 17:31:45 +00:00
out.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("stringScreenReturn")));
2021-12-03 21:37:35 +00:00
this.resultSlots.setItem(0, out);
2020-08-23 12:52:36 +00:00
this.cons = cons;
this.ret = ret;
}
2021-12-03 21:37:35 +00:00
public static void createNewStringResult(Player player, Consumer<String> cons, Runnable ret) {
MenuProvider fac = new MenuProvider() {
2020-08-23 12:52:36 +00:00
@Override
2021-12-03 21:37:35 +00:00
public AbstractContainerMenu createMenu(int syncId, Inventory inv, Player player) {
2020-08-23 12:52:36 +00:00
return new StringResultScreenHandler(syncId, inv, cons, ret);
}
@Override
2021-12-03 21:37:35 +00:00
public Component getDisplayName() {
2020-08-25 18:35:38 +00:00
return PermHelper.simpleColoredText("");
2020-08-23 12:52:36 +00:00
}
};
2021-12-03 21:37:35 +00:00
player.openMenu(fac);
2020-08-23 12:52:36 +00:00
}
@Override
2021-12-03 21:37:35 +00:00
public boolean stillValid(Player player) {
2020-08-23 12:52:36 +00:00
return true;
}
@Override
2021-12-03 21:37:35 +00:00
protected boolean mayPickup(Player player, boolean present) {
2020-08-23 12:52:36 +00:00
return true;
}
@Override
2021-12-03 21:37:35 +00:00
public void clicked(int i, int j, ClickType actionType, Player playerEntity) {
if (i < 0 || !(playerEntity instanceof ServerPlayer player))
2021-12-03 21:37:35 +00:00
return;
Slot slot = this.slots.get(i);
2021-12-03 21:37:35 +00:00
if (((AbstractContainerAccessor) this).containerSync() != null)
((AbstractContainerAccessor) this).containerSync().sendCarriedChange(this, this.getCarried().copy());
2020-08-23 12:52:36 +00:00
if (i == 0)
this.ret.run();
else if (i == 2) {
2022-07-01 16:26:13 +00:00
String s = slot.getItem().hasCustomHoverName() ? slot.getItem().getHoverName().getString() : "";
2022-01-30 17:31:45 +00:00
if (!s.isEmpty() && !s.equals(ConfigHandler.langManager.get("stringScreenReturn"))) {
2020-08-23 12:52:36 +00:00
this.cons.accept(s);
}
2021-12-03 21:37:35 +00:00
player.connection.send(new ClientboundSetExperiencePacket(player.experienceProgress, player.totalExperience, player.experienceLevel));
2020-08-23 12:52:36 +00:00
}
2021-12-03 21:37:35 +00:00
this.broadcastChanges();
2020-08-23 12:52:36 +00:00
}
@Override
2021-12-03 21:37:35 +00:00
public ItemStack quickMoveStack(Player player, int index) {
if (!(player instanceof ServerPlayer))
return ItemStack.EMPTY;
2020-08-23 12:52:36 +00:00
if (index == 0)
this.ret.run();
else if (index == 2) {
Slot slot = this.slots.get(index);
2022-07-01 16:26:13 +00:00
String s = slot.getItem().hasCustomHoverName() ? slot.getItem().getHoverName().getString() : "";
2022-01-30 17:31:45 +00:00
if (!s.isEmpty() && !s.equals(ConfigHandler.langManager.get("stringScreenReturn")))
2020-08-23 12:52:36 +00:00
this.cons.accept(s);
2021-12-03 21:37:35 +00:00
((ServerPlayer) player).connection.send(new ClientboundSetExperiencePacket(player.experienceProgress, player.totalExperience, player.experienceLevel));
2020-08-23 12:52:36 +00:00
}
2021-12-03 21:37:35 +00:00
this.broadcastChanges();
2020-08-23 12:52:36 +00:00
return ItemStack.EMPTY;
}
@Override
2021-12-03 21:37:35 +00:00
public void broadcastChanges() {
2020-08-23 12:52:36 +00:00
int j;
for (j = 0; j < this.slots.size(); ++j) {
2021-12-03 21:37:35 +00:00
ItemStack itemStack = this.slots.get(j).getItem();
2020-08-23 12:52:36 +00:00
2021-12-03 21:37:35 +00:00
for (ContainerListener screenHandlerListener : this.listeners) {
screenHandlerListener.slotChanged(this, j, itemStack.copy());
2020-08-23 12:52:36 +00:00
}
}
}
@Override
2021-12-03 21:37:35 +00:00
public void createResult() {
2020-10-30 14:38:24 +00:00
if (!this.init)
2020-08-23 12:52:36 +00:00
this.init = true;
else {
2021-12-03 21:37:35 +00:00
ItemStack out = this.slots.get(2).getItem();
2020-08-23 12:52:36 +00:00
if (StringUtils.isBlank(this.name))
2021-12-03 21:37:35 +00:00
out.resetHoverName();
else if (!this.name.equals(out.getHoverName().getString())) {
out.setHoverName(ServerScreenHelper.coloredGuiText(this.name));
2020-08-23 12:52:36 +00:00
}
}
2021-12-03 21:37:35 +00:00
this.broadcastChanges();
2020-08-23 12:52:36 +00:00
}
@Override
2023-06-11 19:47:12 +00:00
public boolean setItemName(String string) {
2020-08-23 12:52:36 +00:00
this.name = string;
2021-12-03 21:37:35 +00:00
this.createResult();
2023-06-11 19:47:12 +00:00
return true;
2020-08-23 12:52:36 +00:00
}
}