Как узнать сколько тиков назад закрылась гуи

476
9
39
Проблема такая мне нужно открывать гуи на N кнопку, и закрывать её на эту же кнопку, но проблема в том, что, тогда она или не закрывает на N кнопку или открывается и закрывается буквально за тик. И тут мне в голову пришла самая наименее костыльная идея, что, если по закрытию гуишки начинать отсчитывать тики, и, если гуишка закрыта менее, чем 20 тиков, то не открывать гуи, а если закрыта более 20 тиков, открыть. В обоих случаях кнопка нажата.
Вопрос: Как начать отсчёт тиков до 20 после закрытия гуишки?
 
Эм. Поставь проверку на закрытие перед проверкой на открытие и юзай эвент начала нажатия, или как там.

А, стоп, я омич. Ну ставь булеан перед обоими проверками, и проверяй его. Ща накидаю суть.

Вот суть, собственно. Если юзать ту хрень, которая срабатывает только один раз за нажатие, то все норм.
Код:
onButtonPress(WhateverEvent event) // ну не юзал я кнопки, щито поделать
{
if (gui.opened())
{
gui.close();
}
else 
{
gui.open();
}
}
Код чисто клиентский. Если нужно что-то серверное - придется пакеты курить. Хотя удобнее будет тупо юзать еще_одну_книгу.
 
laz2727 написал(а):
Эм. Поставь проверку на закрытие перед проверкой на открытие и юзай эвент начала нажатия, или как там.

А, стоп, я омич. Ну ставь булеан перед обоими проверками, и проверяй его. Ща накидаю суть.

Вот суть, собственно. Если юзать ту хрень, которая срабатывает только один раз за нажатие, то все норм.
Код:
onButtonPress(WhateverEvent event) // ну не юзал я кнопки, щито поделать
{
if (gui.opened())
{
gui.close();
}
else 
{
gui.open();
}
}
Код чисто клиентский. Если нужно что-то серверное - придется пакеты курить. Хотя удобнее будет тупо юзать еще_одну_книгу.
Собственно у меня сейчас подобный код, и к чему он приводит я писал уже.(Аля первый пост)
 
А ты не то проверяешь. Там же наверняка есть что-то на тему "Начал жать на кнопку".
 
laz2727 написал(а):
А ты не то проверяешь. Там же наверняка есть что-то на тему "Начал жать на кнопку".
Я уже проходил это, целую неделю мучаюсь с проблемой, костыль придумал, он пока работает, но, если гуишку закрыть не через N-ную кнопку, то придётся нажать 2 раза N-ную кнопку, чтоб открыть гуишку.
 
Agravaine написал(а):
Покажи ВЕСЬ код.
О боже, это страшно, он настолько говняв, ну ладно.
Значит это GuiTab
Код:
@SideOnly(Side.CLIENT)
public class GuiTab extends GuiScreen {

    private GuiTextField pmMSG;
    private String selectedPlayer;
    private GuiTextField region;
    private GuiButton guibutton;
    private GuiButton guiRegion;
    private GuiButton guiRegion2;
    public GuiScreen parentGui;
    int u = 0;
    
    private ResourceLocation TextureTab = new ResourceLocation("revivalapi:textures/gui/gui_tab.png");
    
    public GuiTab(GuiScreen par1GuiScreen){
          this.parentGui = par1GuiScreen;
    }
    
    /**
     * Called from the main game loop to update the screen.
     */
    public void updateScreen()
    {
        this.pmMSG.updateCursorCounter();
        if(this.pmMSG.getText().equals("Введите сообщение") || this.pmMSG.getText().equals("")){
            this.guibutton.enabled = false;
        }
        else this.guibutton.enabled = true;
        
        this.region.updateCursorCounter();
        if(this.region.getText().equals("Имя региона") || this.region.getText().equals("")){
            this.guiRegion.enabled = false;
        }
        else this.guiRegion.enabled = true;
        
        if(this.region.getText().equals("Имя региона") || this.region.getText().equals("")){
            this.guiRegion2.enabled = false;
        }
        else this.guiRegion2.enabled = true;
    }

    
    public void SendChatCommand(String tabCommand){
        Minecraft.getMinecraft().thePlayer.sendChatMessage(tabCommand);
        }
    
    public void initGui() {
        Keyboard.enableRepeatEvents(true);
        int minus = 40;
        int minusTwo = 0;
        int yaz = 36;
        super.buttonList.clear();
        boolean flag = true;
        super.buttonList.add(new GuiButton(1, super.width / 8 - minus, super.height / 4 + yaz - 90, 40, 10, I18n.getString("Set home")));
        super.buttonList.add(new GuiButton(2, super.width / 8 - minus, super.height / 4 + yaz - 80, 40, 10, I18n.getString("Home")));
        super.buttonList.add(new GuiButton(3, super.width / 8 - minus, super.height / 4 + yaz - 70, 40, 10, I18n.getString("Start loc")));
        super.buttonList.add(new GuiButton(4, super.width / 8 - minus, super.height / 4 + yaz - 60, 40, 10, I18n.getString("Room")));
        super.buttonList.add(new GuiButton(5, super.width / 8 - minus, super.height / 4 + yaz - 50, 40, 10, I18n.getString("Job")));
        super.buttonList.add(new GuiButton(7, super.width / 8 - minus, super.height / 4 + yaz - 40, 40, 10, I18n.getString("Бонусы")));
        super.buttonList.add(new GuiButton(8, super.width / 8 - minus, super.height / 4 + yaz - 30, 40, 10, I18n.getString("Правила")));
        super.buttonList.add(new GuiButton(9, super.width / 8 - minus, super.height / 4 + yaz - 20, 40, 10, I18n.getString("Рецепты")));
        super.buttonList.add(new GuiButton(10, super.width / 8 - minus, super.height / 4 + 110, 40, 10, I18n.getString("Пригласить")));
        super.buttonList.add(new GuiButton(11, super.width / 8 - minus, super.height / 4 + 120, 40, 10, I18n.getString("Выгнать")));
        super.buttonList.add(guiRegion = new GuiButton(12, super.width / 8 - minus, super.height / 4 + 140, 40, 10, I18n.getString("Add Member")));
        super.buttonList.add(guiRegion2 = new GuiButton(14, super.width / 8 - minus, super.height / 4 + 150, 40, 10, I18n.getString("Remove Member")));
        this.pmMSG = new GuiTextField(this.fontRenderer, super.width / 2 - 0, super.height / 4 + 80, 200, 20);
        this.region = new GuiTextField(this.fontRenderer, super.width / 2 - 100, super.height / 4 + 130, 60, 10);
        this.region.setMaxStringLength(25);
        this.pmMSG.setMaxStringLength(80);
        if(u == 0)
        this.pmMSG.setText("Введите сообщение");
        else this.pmMSG.setText("");
        this.region.setText("Имя региона");
        //this.pmMSG.getText();
        super.buttonList.add(guibutton = new GuiButton(6, super.width / 2 - 144, super.height / 4 + 80, 100, 20, I18n.getString("Отправить ЛС")));

    }
    

       protected void actionPerformed(GuiButton par1GuiButton) {
          int i = 0;
          boolean t = true;
          switch(par1GuiButton.id){
          case 1:
              this.SendChatCommand("/sethome");
              break;
          case 2:
              this.SendChatCommand("/home");
              break;
          case 3:
              this.SendChatCommand("/warp spawn");
              break;
          case 4:
              this.SendChatCommand("/warp room");
              break;
          case 5:
              this.SendChatCommand("/warp job");
              break;
          case 6:
              this.SendChatCommand("pm " + selectedPlayer + " " + this.pmMSG.getText());
              this.pmMSG.setText("");
              u = 1;
              break;
          case 7:
              Minecraft.getMinecraft().displayGuiScreen(new GuiBonus(this));
              break;
          case 8:
              Minecraft.getMinecraft().displayGuiScreen(null);
              break;
          case 9:
              Minecraft.getMinecraft().displayGuiScreen(GuiCraftGuide.getGuiTab(this));
              GuiCraftGuide.getGuiTab(this).parentGui = this;
              break;
          case 10:
              this.SendChatCommand("/home invite " + selectedPlayer);
              break;
          case 11:
              this.SendChatCommand("/home uninvite " + selectedPlayer);
              break;
          case 12:
              this.SendChatCommand("/rg addmember" + region.getText() + selectedPlayer);
              break;
          case 14:
              this.SendChatCommand("/rg removemember" + region.getText() + selectedPlayer);
              break;
          }
       }

        /**
         * Called when the screen is unloaded. Used to disable keyboard repeat events
         */
        public void onGuiClosed()
        {
            Keyboard.enableRepeatEvents(false);
        }
       
       
       protected void keyTyped(char par1, int par2)
        {
            this.pmMSG.textboxKeyTyped(par1, par2);
            if (par2 == 15)this.pmMSG.setFocused(!this.pmMSG.isFocused());
            
            this.region.textboxKeyTyped(par1, par2);
            if(par2 == 15)this.region.setFocused(!this.region.isFocused());
            
            
            if(Keyboard.isKeyDown(Keyboard.KEY_TAB)) {
                Minecraft.getMinecraft().thePlayer.closeScreen();
                }
            if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
                Minecraft.getMinecraft().thePlayer.closeScreen();
                }
            }
       
        /**
         * Called when the mouse is clicked.
         */
        protected void mouseClicked(int par1, int par2, int par3)
        {
            super.mouseClicked(par1, par2, par3);
            this.pmMSG.mouseClicked(par1, par2, par3);
            this.region.mouseClicked(par1, par2, par3);
        }
       
    public void drawBackground(){
          GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
          GL11.glPushMatrix();
          this.mc.getTextureManager().bindTexture(TextureTab);
          GL11.glScalef(super.width/254f, super.height/256f, 1);
          this.drawTexturedModalRect(0, 0, 10240, 5120, 1024, 512);
          GL11.glPopMatrix();
    }
        
        
    public void drawScreen(int par1, int par2, float par3) {
          this.drawBackground();
          this.drawCenteredString(super.fontRenderer, "Меню игрока", super.width / 2, 15, 16777215);
          int i = 0;
          boolean t = true;
          this.drawCenteredString(super.fontRenderer, "Alpha Version", super.width / 1 - 127, 30 + 10 * i, 16777215);
          this.pmMSG.drawTextBox();
          this.region.drawTextBox();
          super.drawScreen(par1, par2, par3);
          
    }
}
А вот это EventKeyboard
Код:
public class EventKeybord extends KeyHandler
    {
    Minecraft mc = FMLClientHandler.instance().getClient();
    GuiScreen screen = mc.currentScreen;
    int i = 1;
    public boolean GuiTabEnabled = false;
    public boolean GuiTabDisabled = true;
    private EnumSet tickTypes = EnumSet.of(TickType.CLIENT);
    private static EventKeybord theEventKeybord;
    public static boolean keyPressed = false;

         
         public static EventKeybord getEventKeybord()
         {
             return theEventKeybord;
         }
         
         public EventKeybord(KeyBinding[] keyBindings, boolean[] repeatings)
         {
             super(keyBindings, repeatings);
             theEventKeybord = this;
         }
         @Override
         public String getLabel()
         {
             return "TutorialKey";
         }
         public Boolean keyHasBeenPressed;
         
         
         public void GuiTab(){
            GuiTabEnabled = true;
            GuiTabDisabled = false;
            if(Minecraft.getMinecraft().inGameHasFocus){
             Minecraft.getMinecraft().displayGuiScreen(new GuiTab(null));
        }
    }
         
             public void keyDown(EnumSet<TickType> types, KeyBinding kb, boolean tickEnd, boolean isRepeat)
             {
             keyHasBeenPressed = true;
             }
             @Override
             public void keyUp(EnumSet<TickType> types, KeyBinding kb, boolean tickEnd)
             {
             if (keyHasBeenPressed) {
             keyHasBeenPressed = false;
             keyPressed = true; 
             if (EventKeybord.keyPressed) {
                 EventKeybord.keyPressed = false;
                if (GuiTabEnabled == false && GuiTabDisabled == true) {
                    GuiTab();} 
                else if (GuiTabEnabled == true && GuiTabDisabled == false) {
                    GuiTabEnabled = false;
                    GuiTabDisabled = true;    
                }
            }
        }
    }
             
         @Override
         public EnumSet<TickType> ticks()
         {
             return tickTypes;
         }
    }
А вот это основном класс
Код:
public class RevivalOverlay {

       
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {

    }

    @EventHandler
    public void serverstarting(FMLServerStartingEvent event) {

    }

    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {
    }

    @EventHandler
    public void serverStarting(FMLServerStartingEvent event) {
    }

    @Init
    @EventHandler
    public void init(FMLInitializationEvent event) {
         KeyBinding[] key = {new KeyBinding("Меню игрока", Keyboard.KEY_TAB)};
         boolean[] repeat = {false};
         KeyBindingRegistry.registerKeyBinding(new EventKeybord(key, repeat));
    }

}
:whistling:
[merge_posts_bbcode]Добавлено: 18.10.2014 14:36:09[/merge_posts_bbcode]

Пробовал ещё по другому, но те способы отвалились, поэтому их здесь нету.
 
Up
 
Назад
Сверху