2021-06-08 17:03:16 -04:00
|
|
|
package io.github.flemmli97.flan.gui;
|
2020-08-23 08:52:36 -04:00
|
|
|
|
2021-06-08 17:03:16 -04:00
|
|
|
import io.github.flemmli97.flan.claim.PermHelper;
|
|
|
|
import io.github.flemmli97.flan.config.ConfigHandler;
|
2020-08-23 08:52:36 -04:00
|
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
|
|
import net.minecraft.entity.player.PlayerInventory;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.item.Items;
|
|
|
|
import net.minecraft.screen.AnvilScreenHandler;
|
|
|
|
import net.minecraft.screen.NamedScreenHandlerFactory;
|
|
|
|
import net.minecraft.screen.ScreenHandler;
|
|
|
|
import net.minecraft.screen.ScreenHandlerListener;
|
|
|
|
import net.minecraft.screen.slot.Slot;
|
|
|
|
import net.minecraft.screen.slot.SlotActionType;
|
2021-05-02 15:39:06 -04:00
|
|
|
import net.minecraft.server.network.ServerPlayerEntity;
|
2020-08-23 08:52:36 -04:00
|
|
|
import net.minecraft.text.Text;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
2021-05-02 12:06:56 -04:00
|
|
|
import java.util.ArrayList;
|
2020-08-23 08:52:36 -04:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
|
|
public class StringResultScreenHandler extends AnvilScreenHandler {
|
|
|
|
|
2021-05-02 12:06:56 -04:00
|
|
|
private final List<ScreenHandlerListener> listeners = new ArrayList<>();
|
2020-08-23 08:52:36 -04:00
|
|
|
|
|
|
|
private final Consumer<String> cons;
|
|
|
|
private final Runnable ret;
|
|
|
|
|
|
|
|
private boolean init;
|
|
|
|
private String name;
|
|
|
|
|
|
|
|
private StringResultScreenHandler(int syncId, PlayerInventory playerInventory, Consumer<String> cons, Runnable ret) {
|
|
|
|
super(syncId, playerInventory);
|
|
|
|
ItemStack stack = new ItemStack(Items.PAPER);
|
2020-08-25 14:35:38 -04:00
|
|
|
stack.setCustomName(PermHelper.simpleColoredText(""));
|
2020-08-23 08:52:36 -04:00
|
|
|
this.input.setStack(0, stack);
|
|
|
|
ItemStack out = new ItemStack(Items.BOOK);
|
2021-05-12 12:30:35 -04:00
|
|
|
out.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.stringScreenReturn));
|
2020-08-23 08:52:36 -04:00
|
|
|
this.output.setStack(0, out);
|
|
|
|
this.cons = cons;
|
|
|
|
this.ret = ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2021-05-02 15:39:06 -04:00
|
|
|
public static void createNewStringResult(PlayerEntity player, Consumer<String> cons, Runnable ret) {
|
2020-08-23 08:52:36 -04:00
|
|
|
NamedScreenHandlerFactory fac = new NamedScreenHandlerFactory() {
|
|
|
|
@Override
|
|
|
|
public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) {
|
|
|
|
return new StringResultScreenHandler(syncId, inv, cons, ret);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Text getDisplayName() {
|
2020-08-25 14:35:38 -04:00
|
|
|
return PermHelper.simpleColoredText("");
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|
|
|
|
};
|
|
|
|
player.openHandledScreen(fac);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canUse(PlayerEntity player) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected boolean canTakeOutput(PlayerEntity player, boolean present) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ItemStack onSlotClick(int i, int j, SlotActionType actionType, PlayerEntity playerEntity) {
|
|
|
|
if (i < 0)
|
|
|
|
return ItemStack.EMPTY;
|
2021-05-02 15:39:06 -04:00
|
|
|
Slot slot = this.slots.get(i);
|
2020-08-23 08:52:36 -04:00
|
|
|
if (i == 0)
|
|
|
|
this.ret.run();
|
|
|
|
else if (i == 2) {
|
|
|
|
String s = slot.getStack().hasCustomName() ? slot.getStack().getName().asString() : "";
|
|
|
|
if (!s.isEmpty() && !s.equals(ConfigHandler.lang.stringScreenReturn))
|
|
|
|
this.cons.accept(s);
|
|
|
|
}
|
|
|
|
this.sendContentUpdates();
|
2021-05-02 15:39:06 -04:00
|
|
|
((ServerPlayerEntity) playerEntity).updateCursorStack();
|
|
|
|
return slot.getStack();
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ItemStack transferSlot(PlayerEntity player, int index) {
|
|
|
|
if (index == 0)
|
|
|
|
this.ret.run();
|
|
|
|
else if (index == 2) {
|
|
|
|
Slot slot = this.slots.get(index);
|
|
|
|
String s = slot.getStack().hasCustomName() ? slot.getStack().getName().asString() : "";
|
|
|
|
if (!s.isEmpty() && !s.equals(ConfigHandler.lang.stringScreenReturn))
|
|
|
|
this.cons.accept(s);
|
|
|
|
}
|
|
|
|
this.sendContentUpdates();
|
|
|
|
return ItemStack.EMPTY;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void addListener(ScreenHandlerListener listener) {
|
|
|
|
if (!this.listeners.contains(listener)) {
|
|
|
|
this.listeners.add(listener);
|
|
|
|
listener.onHandlerRegistered(this, this.getStacks());
|
|
|
|
this.sendContentUpdates();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void sendContentUpdates() {
|
|
|
|
int j;
|
|
|
|
for (j = 0; j < this.slots.size(); ++j) {
|
|
|
|
ItemStack itemStack = this.slots.get(j).getStack();
|
|
|
|
|
2020-08-23 09:16:26 -04:00
|
|
|
for (ScreenHandlerListener screenHandlerListener : this.listeners) {
|
2020-08-23 08:52:36 -04:00
|
|
|
screenHandlerListener.onSlotUpdate(this, j, itemStack.copy());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void updateResult() {
|
2020-10-30 10:38:24 -04:00
|
|
|
if (!this.init)
|
2020-08-23 08:52:36 -04:00
|
|
|
this.init = true;
|
|
|
|
else {
|
|
|
|
ItemStack out = this.slots.get(2).getStack();
|
|
|
|
if (StringUtils.isBlank(this.name))
|
|
|
|
out.removeCustomName();
|
|
|
|
else if (!this.name.equals(out.getName().getString())) {
|
2021-05-12 12:30:35 -04:00
|
|
|
out.setCustomName(ServerScreenHelper.coloredGuiText(this.name));
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
this.sendContentUpdates();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setNewItemName(String string) {
|
|
|
|
this.name = string;
|
|
|
|
this.updateResult();
|
|
|
|
}
|
|
|
|
}
|