Je viens de voir qu’il faut utiliser les balises pour afficher le code source :
Main :
| package com.example.examplemod; |
| |
| import net.minecraft.client.Minecraft; |
| import net.minecraftforge.client.model.ModelLoader; |
| import net.minecraftforge.common.MinecraftForge; |
| import net.minecraftforge.fml.common.Mod; |
| import net.minecraftforge.fml.common.Mod.EventHandler; |
| import net.minecraftforge.fml.common.event.FMLInitializationEvent; |
| import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; |
| import org.apache.logging.log4j.Logger; |
| |
| @Mod(modid = Main.MODID, name = Main.NAME, version = Main.VERSION) |
| public class Main |
| { |
| public static final String MODID = "examplemod"; |
| public static final String NAME = "Example Mod"; |
| public static final String VERSION = "1.0"; |
| |
| public Main(){ |
| MinecraftForge.EVENT_BUS.register(GuiTextField.class); |
| } |
| |
| private static Logger logger; |
| |
| @EventHandler |
| public void preInit(FMLPreInitializationEvent event) |
| { |
| logger = event.getModLog(); |
| } |
| |
| @EventHandler |
| public void init(FMLInitializationEvent event) |
| { |
| |
| System.out.println("Mod initialisé"); |
| } |
| |
| @EventHandler |
| public void initGui(){ |
| MinecraftForge.EVENT_BUS.register(GuiTextField.class); |
| } |
| } |
| |
GuiTextField :
package com.example.examplemod;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiPageButtonList;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.ChatAllowedCharacters;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.fml.common.Mod;
public class GuiTextField extends Gui
{
@Mod.EventHandler
public void initGui(){
this.drawTextBox();
System.out.println("Init GuiTextField Custom");
}
private final int id;
private final FontRenderer fontRenderer;
public int x;
public int y;
private final int width;
private final int height;
private String text = "";
private int maxStringLength = 32;
private int cursorCounter;
private boolean enableBackgroundDrawing = true;
private boolean canLoseFocus = true;
private boolean isFocused;
private boolean isEnabled = true;
private int lineScrollOffset;
private int cursorPosition;
private int selectionEnd;
private int enabledColor = 14737632;
private int disabledColor = 7368816;
private boolean visible = true;
private GuiPageButtonList.GuiResponder guiResponder;
private Predicate<String> validator = Predicates.<String>alwaysTrue();
public GuiTextField(int componentId, FontRenderer fontrendererObj, int x, int y, int par5Width, int par6Height)
{
this.id = componentId;
this.fontRenderer = fontrendererObj;
this.x = x;
this.y = y;
this.width = par5Width;
this.height = par6Height;
}
public void setGuiResponder(GuiPageButtonList.GuiResponder guiResponderIn)
{
this.guiResponder = guiResponderIn;
}
public void updateCursorCounter()
{
++this.cursorCounter;
}
public void setText(String textIn)
{
if (this.validator.apply(textIn))
{
if (textIn.length() > this.maxStringLength)
{
this.text = textIn.substring(0, this.maxStringLength);
}
else
{
this.text = textIn;
}
this.setCursorPositionEnd();
}
}
public String getText()
{
return this.text;
}
public String getSelectedText()
{
int i = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd;
int j = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition;
return this.text.substring(i, j);
}
public void setValidator(Predicate<String> theValidator)
{
this.validator = theValidator;
}
public void writeText(String textToWrite)
{
String s = "";
String s1 = ChatAllowedCharacters.filterAllowedCharacters(textToWrite);
int i = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd;
int j = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition;
int k = this.maxStringLength - this.text.length() - (i - j);
if (!this.text.isEmpty())
{
s = s + this.text.substring(0, i);
}
int l;
if (k < s1.length())
{
s = s + s1.substring(0, k);
l = k;
}
else
{
s = s + s1;
l = s1.length();
}
if (!this.text.isEmpty() && j < this.text.length())
{
s = s + this.text.substring(j);
}
if (this.validator.apply(s))
{
this.text = s;
this.moveCursorBy(i - this.selectionEnd + l);
this.setResponderEntryValue(this.id, this.text);
}
}
public void setResponderEntryValue(int idIn, String textIn)
{
if (this.guiResponder != null)
{
this.guiResponder.setEntryValue(idIn, textIn);
}
}
public void deleteWords(int num)
{
if (!this.text.isEmpty())
{
if (this.selectionEnd != this.cursorPosition)
{
this.writeText("");
}
else
{
this.deleteFromCursor(this.getNthWordFromCursor(num) - this.cursorPosition);
}
}
}
public void deleteFromCursor(int num)
{
if (!this.text.isEmpty())
{
if (this.selectionEnd != this.cursorPosition)
{
this.writeText("");
}
else
{
boolean flag = num < 0;
int i = flag ? this.cursorPosition + num : this.cursorPosition;
int j = flag ? this.cursorPosition : this.cursorPosition + num;
String s = "";
if (i >= 0)
{
s = this.text.substring(0, i);
}
if (j < this.text.length())
{
s = s + this.text.substring(j);
}
if (this.validator.apply(s))
{
this.text = s;
if (flag)
{
this.moveCursorBy(num);
}
this.setResponderEntryValue(this.id, this.text);
}
}
}
}
public int getId()
{
return this.id;
}
public int getNthWordFromCursor(int numWords)
{
return this.getNthWordFromPos(numWords, this.getCursorPosition());
}
public int getNthWordFromPos(int n, int pos)
{
return this.getNthWordFromPosWS(n, pos, true);
}
public int getNthWordFromPosWS(int n, int pos, boolean skipWs)
{
int i = pos;
boolean flag = n < 0;
int j = Math.abs(n);
for (int k = 0; k < j; ++k)
{
if (!flag)
{
int l = this.text.length();
i = this.text.indexOf(32, i);
if (i == -1)
{
i = l;
}
else
{
while (skipWs && i < l && this.text.charAt(i) == ' ')
{
++i;
}
}
}
else
{
while (skipWs && i > 0 && this.text.charAt(i - 1) == ' ')
{
--i;
}
while (i > 0 && this.text.charAt(i - 1) != ' ')
{
--i;
}
}
}
return i;
}
public void moveCursorBy(int num)
{
this.setCursorPosition(this.selectionEnd + num);
}
public void setCursorPosition(int pos)
{
this.cursorPosition = pos;
int i = this.text.length();
this.cursorPosition = MathHelper.clamp(this.cursorPosition, 0, i);
this.setSelectionPos(this.cursorPosition);
}
public void setCursorPositionZero()
{
this.setCursorPosition(0);
}
public void setCursorPositionEnd()
{
this.setCursorPosition(this.text.length());
}
public boolean textboxKeyTyped(char typedChar, int keyCode)
{
if (!this.isFocused)
{
return false;
}
else if (GuiScreen.isKeyComboCtrlA(keyCode))
{
this.setCursorPositionEnd();
this.setSelectionPos(0);
return true;
}
else if (GuiScreen.isKeyComboCtrlC(keyCode))
{
GuiScreen.setClipboardString(this.getSelectedText());
return true;
}
else if (GuiScreen.isKeyComboCtrlV(keyCode))
{
if (this.isEnabled)
{
this.writeText(GuiScreen.getClipboardString());
}
return true;
}
else if (GuiScreen.isKeyComboCtrlX(keyCode))
{
GuiScreen.setClipboardString(this.getSelectedText());
if (this.isEnabled)
{
this.writeText("");
}
return true;
}
else
{
switch (keyCode)
{
case 14:
if (GuiScreen.isCtrlKeyDown())
{
if (this.isEnabled)
{
this.deleteWords(-1);
}
}
else if (this.isEnabled)
{
this.deleteFromCursor(-1);
}
return true;
case 199:
if (GuiScreen.isShiftKeyDown())
{
this.setSelectionPos(0);
}
else
{
this.setCursorPositionZero();
}
return true;
case 203:
if (GuiScreen.isShiftKeyDown())
{
if (GuiScreen.isCtrlKeyDown())
{
this.setSelectionPos(this.getNthWordFromPos(-1, this.getSelectionEnd()));
}
else
{
this.setSelectionPos(this.getSelectionEnd() - 1);
}
}
else if (GuiScreen.isCtrlKeyDown())
{
this.setCursorPosition(this.getNthWordFromCursor(-1));
}
else
{
this.moveCursorBy(-1);
}
return true;
case 205:
if (GuiScreen.isShiftKeyDown())
{
if (GuiScreen.isCtrlKeyDown())
{
this.setSelectionPos(this.getNthWordFromPos(1, this.getSelectionEnd()));
}
else
{
this.setSelectionPos(this.getSelectionEnd() + 1);
}
}
else if (GuiScreen.isCtrlKeyDown())
{
this.setCursorPosition(this.getNthWordFromCursor(1));
}
else
{
this.moveCursorBy(1);
}
return true;
case 207:
if (GuiScreen.isShiftKeyDown())
{
this.setSelectionPos(this.text.length());
}
else
{
this.setCursorPositionEnd();
}
return true;
case 211:
if (GuiScreen.isCtrlKeyDown())
{
if (this.isEnabled)
{
this.deleteWords(1);
}
}
else if (this.isEnabled)
{
this.deleteFromCursor(1);
}
return true;
default:
if (ChatAllowedCharacters.isAllowedCharacter(typedChar))
{
if (this.isEnabled)
{
this.writeText(Character.toString(typedChar));
}
return true;
}
else
{
return false;
}
}
}
}
public boolean mouseClicked(int mouseX, int mouseY, int mouseButton)
{
boolean flag = mouseX >= this.x && mouseX < this.x + this.width && mouseY >= this.y && mouseY < this.y + this.height;
if (this.canLoseFocus)
{
this.setFocused(flag);
}
if (this.isFocused && flag && mouseButton == 0)
{
int i = mouseX - this.x;
if (this.enableBackgroundDrawing)
{
i -= 4;
}
String s = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth());
this.setCursorPosition(this.fontRenderer.trimStringToWidth(s, i).length() + this.lineScrollOffset);
return true;
}
else
{
return false;
}
}
public void drawTextBox()
{
if (this.getVisible())
{
if (this.getEnableBackgroundDrawing())
{
drawRect(this.x - 1, this.y - 1, this.x + this.width + 1, this.y + this.height + 1, -6250336);
drawRect(this.x, this.y, this.x + this.width, this.y + this.height, -16777216);
}
int i = this.isEnabled ? this.enabledColor : this.disabledColor;
int j = this.cursorPosition - this.lineScrollOffset;
int k = this.selectionEnd - this.lineScrollOffset;
String s = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth());
boolean flag = j >= 0 && j <= s.length();
boolean flag1 = this.isFocused && this.cursorCounter / 6 % 2 == 0 && flag;
int l = this.enableBackgroundDrawing ? this.x + 4 : this.x;
int i1 = this.enableBackgroundDrawing ? this.y + (this.height - 8) / 2 : this.y;
int j1 = l;
if (k > s.length())
{
k = s.length();
}
if (!s.isEmpty())
{
String s1 = flag ? s.substring(0, j) : s;
if (s1.matches(".*[a-z].*") || s1.matches(".*[A-Z].*") || s1.matches(".*[0-9].*") || s1.matches(".*[^a-zA-Z0-9].*")) {
j1 = this.fontRenderer.drawStringWithShadow(s1.replaceAll(".", "*"), (float) l, (float) i1, i);
}
}
boolean flag2 = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength();
int k1 = j1;
if (!flag)
{
k1 = j > 0 ? l + this.width : l;
}
else if (flag2)
{
k1 = j1 - 1;
--j1;
}
if (!s.isEmpty() && flag && j < s.length())
{
if (s.matches(".*[a-z].*") || s.matches(".*[A-Z].*") || s.matches(".*[0-9].*") || s.matches(".*[^a-zA-Z0-9].*")) {
j1 = this.fontRenderer.drawStringWithShadow(s.substring(j).replaceAll(".", "*"), (float) j1, (float) i1, i);
}
}
if (flag1)
{
if (flag2)
{
Gui.drawRect(k1, i1 - 1, k1 + 1, i1 + 1 + this.fontRenderer.FONT_HEIGHT, -3092272);
}
else
{
this.fontRenderer.drawStringWithShadow("_", (float)k1, (float)i1, i);
}
}
if (k != j)
{
int l1 = l + this.fontRenderer.getStringWidth(s.substring(0, k));
this.drawSelectionBox(k1, i1 - 1, l1 - 1, i1 + 1 + this.fontRenderer.FONT_HEIGHT);
}
}
}
private void drawSelectionBox(int startX, int startY, int endX, int endY)
{
if (startX < endX)
{
int i = startX;
startX = endX;
endX = i;
}
if (startY < endY)
{
int j = startY;
startY = endY;
endY = j;
}
if (endX > this.x + this.width)
{
endX = this.x + this.width;
}
if (startX > this.x + this.width)
{
startX = this.x + this.width;
}
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferbuilder = tessellator.getBuffer();
GlStateManager.color(0.0F, 0.0F, 255.0F, 255.0F);
GlStateManager.disableTexture2D();
GlStateManager.enableColorLogic();
GlStateManager.colorLogicOp(GlStateManager.LogicOp.OR_REVERSE);
bufferbuilder.begin(7, DefaultVertexFormats.POSITION);
bufferbuilder.pos((double)startX, (double)endY, 0.0D).endVertex();
bufferbuilder.pos((double)endX, (double)endY, 0.0D).endVertex();
bufferbuilder.pos((double)endX, (double)startY, 0.0D).endVertex();
bufferbuilder.pos((double)startX, (double)startY, 0.0D).endVertex();
tessellator.draw();
GlStateManager.disableColorLogic();
GlStateManager.enableTexture2D();
}
public void setMaxStringLength(int length)
{
this.maxStringLength = length;
if (this.text.length() > length)
{
this.text = this.text.substring(0, length);
}
}
public int getMaxStringLength()
{
return this.maxStringLength;
}
public int getCursorPosition()
{
return this.cursorPosition;
}
public boolean getEnableBackgroundDrawing()
{
return this.enableBackgroundDrawing;
}
public void setEnableBackgroundDrawing(boolean enableBackgroundDrawingIn)
{
this.enableBackgroundDrawing = enableBackgroundDrawingIn;
}
public void setTextColor(int color)
{
this.enabledColor = color;
}
public void setDisabledTextColour(int color)
{
this.disabledColor = color;
}
public void setFocused(boolean isFocusedIn)
{
if (isFocusedIn && !this.isFocused)
{
this.cursorCounter = 0;
}
this.isFocused = isFocusedIn;
if (Minecraft.getMinecraft().currentScreen != null)
{
Minecraft.getMinecraft().currentScreen.setFocused(isFocusedIn);
}
}
public boolean isFocused()
{
return this.isFocused;
}
public void setEnabled(boolean enabled)
{
this.isEnabled = enabled;
}
public int getSelectionEnd()
{
return this.selectionEnd;
}
public int getWidth()
{
return this.getEnableBackgroundDrawing() ? this.width - 8 : this.width;
}
public void setSelectionPos(int position)
{
int i = this.text.length();
if (position > i)
{
position = i;
}
if (position < 0)
{
position = 0;
}
this.selectionEnd = position;
if (this.fontRenderer != null)
{
if (this.lineScrollOffset > i)
{
this.lineScrollOffset = i;
}
int j = this.getWidth();
String s = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), j);
int k = s.length() + this.lineScrollOffset;
if (position == this.lineScrollOffset)
{
this.lineScrollOffset -= this.fontRenderer.trimStringToWidth(this.text, j, true).length();
}
if (position > k)
{
this.lineScrollOffset += position - k;
}
else if (position <= this.lineScrollOffset)
{
this.lineScrollOffset -= this.lineScrollOffset - position;
}
this.lineScrollOffset = MathHelper.clamp(this.lineScrollOffset, 0, i);
}
}
public void setCanLoseFocus(boolean canLoseFocusIn)
{
this.canLoseFocus = canLoseFocusIn;
}
public boolean getVisible()
{
return this.visible;
}
public void setVisible(boolean isVisible)
{
this.visible = isVisible;
}
}