TerraForged/src/main/java/com/terraforged/gui/element/TerraTextInput.java

86 lines
2.2 KiB
Java

package com.terraforged.gui.element;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.StringNBT;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
public class TerraTextInput extends TextFieldWidget implements Element, Consumer<String> {
private final String name;
private final CompoundNBT value;
private final List<String> tooltip;
private String stringValue = "";
private boolean valid = true;
private Predicate<String> validator = s -> true;
private Consumer<TerraTextInput> callback = t -> {};
public TerraTextInput(String name, CompoundNBT value) {
super(Minecraft.getInstance().fontRenderer, 0, 0, 100, 20, Element.getDisplayName(name, value) + ": ");
this.name = name;
this.value = value;
this.tooltip = Element.getToolTip(name, value);
this.stringValue = value.getString(name);
setText(value.getString(name));
setResponder(this);
setEnabled(true);
}
public boolean isValid() {
return valid;
}
public String getValue() {
return stringValue;
}
public void setColorValidator(Predicate<String> validator) {
this.validator = validator;
// update validity immediately
if (validator.test(stringValue)) {
valid = true;
setTextColor(14737632);
} else {
valid = false;
setTextColor(0xffff3f30);
}
}
@Override
public boolean keyPressed(int i, int j, int k) {
return super.keyPressed(i, j, k);
}
@Override
public boolean charTyped(char c, int code) {
return super.charTyped(c, code);
}
@Override
public List<String> getTooltip() {
return tooltip;
}
@Override
public void accept(String text) {
value.put(name, StringNBT.valueOf(text));
stringValue = text;
if (validator.test(text)) {
valid = true;
setTextColor(14737632);
} else {
valid = false;
setTextColor(0xffff3f30);
}
callback.accept(this);
}
}