Files
PrimalSorcery/build/tmp/recompileMc/sources/net/minecraft/util/TabCompleter.java
Mohammad-Ali Minaie b86dedad2f base mod created
2018-10-08 09:07:47 -04:00

133 lines
4.6 KiB
Java

package net.minecraft.util;
import com.google.common.collect.Lists;
import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.network.play.client.CPacketTabComplete;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public abstract class TabCompleter
{
/** The {@link GuiTextField} that is backing this {@link TabCompleter} */
protected final GuiTextField textField;
protected final boolean hasTargetBlock;
protected boolean didComplete;
protected boolean requestedCompletions;
protected int completionIdx;
protected List<String> completions = Lists.<String>newArrayList();
public TabCompleter(GuiTextField textFieldIn, boolean hasTargetBlockIn)
{
this.textField = textFieldIn;
this.hasTargetBlock = hasTargetBlockIn;
}
/**
* Called when tab key pressed. If it's the first time we tried to complete this string, we ask the server for
* completions. When the server responds, this method gets called again (via setCompletions).
*/
public void complete()
{
if (this.didComplete)
{
this.textField.deleteFromCursor(0);
this.textField.deleteFromCursor(this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false) - this.textField.getCursorPosition());
if (this.completionIdx >= this.completions.size())
{
this.completionIdx = 0;
}
}
else
{
int i = this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false);
this.completions.clear();
this.completionIdx = 0;
String s = this.textField.getText().substring(0, this.textField.getCursorPosition());
this.requestCompletions(s);
if (this.completions.isEmpty())
{
return;
}
this.didComplete = true;
this.textField.deleteFromCursor(i - this.textField.getCursorPosition());
}
this.textField.writeText(net.minecraft.util.text.TextFormatting.getTextWithoutFormattingCodes(this.completions.get(this.completionIdx++)));
}
private void requestCompletions(String prefix)
{
if (prefix.length() >= 1)
{
net.minecraftforge.client.ClientCommandHandler.instance.autoComplete(prefix);
Minecraft.getMinecraft().player.connection.sendPacket(new CPacketTabComplete(prefix, this.getTargetBlockPos(), this.hasTargetBlock));
this.requestedCompletions = true;
}
}
@Nullable
public abstract BlockPos getTargetBlockPos();
/**
* Only actually sets completions if they were requested (via requestCompletions)
*/
public void setCompletions(String... newCompl)
{
if (this.requestedCompletions)
{
this.didComplete = false;
this.completions.clear();
String[] complete = net.minecraftforge.client.ClientCommandHandler.instance.latestAutoComplete;
if (complete != null)
{
newCompl = com.google.common.collect.ObjectArrays.concat(complete, newCompl, String.class);
}
for (String s : newCompl)
{
if (!s.isEmpty())
{
this.completions.add(s);
}
}
String s1 = this.textField.getText().substring(this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false));
String s2 = org.apache.commons.lang3.StringUtils.getCommonPrefix(newCompl);
s2 = net.minecraft.util.text.TextFormatting.getTextWithoutFormattingCodes(s2);
if (!s2.isEmpty() && !s1.equalsIgnoreCase(s2))
{
this.textField.deleteFromCursor(0);
this.textField.deleteFromCursor(this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false) - this.textField.getCursorPosition());
this.textField.writeText(s2);
}
else if (!this.completions.isEmpty())
{
this.didComplete = true;
this.complete();
}
}
}
/**
* Called when new text is entered, or backspace pressed
*/
public void resetDidComplete()
{
this.didComplete = false;
}
public void resetRequested()
{
this.requestedCompletions = false;
}
}