Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Мод Говнокоды и костыли (Часть первая)

Тема в разделе "Модификации клиента", создана пользователем agentik007, 5 май 2014.

Статус темы:
Закрыта.
  1. Автор темы
    agentik007

    agentik007 Старожил Пользователь

    Баллы:
    153
    Skype:
    vladislav567695
    Тут я буду собирать все коды с руведра для улучшения клиента, без указания ссылки на оригинал, но с указанием автора.

    Если вы хотите поделиться своим кодом, пишите в лс

    Пакет СЕРВЕР к КЛИЕНТУ(@Konstantin773):
    1. Содаем плагин
    Подключаем интерфейс: PluginMessageListener

    В методе onEnable() добавить
    Код:
    Bukkit.getMessenger().registerOutgoingPluginChannel(this, "opengui");
    В теле команды
    Код:
    player.sendPluginMessage(this, "opengui", text.getBytes());
    2.Создаем мод, добавляем аннотации
    Код:
    @Mod(modid="OpenGuiMod", name="Lalala mod by K773", version="0.1")
    @NetworkMod(clientSideRequired=true, serverSideRequired=false, channels={"opengui"}, packetHandler=OpenGuiListener.class)
    
    Создаем класс OpenGuiListener
    Код:
    import cpw.mods.fml.common.network.IPacketHandler;
    import cpw.mods.fml.common.network.Player;
    import net.minecraft.client.Minecraft;
    import net.minecraft.network.INetworkManager;
    import net.minecraft.network.packet.Packet250CustomPayload;
    import net.minecraft.client.gui.MyGui;
    import net.minecraft.client.Minecraft;
    
    public class OpenGuiListener
      implements IPacketHandler
    {
      public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player)
      {
        if (packet.channel.equalsIgnoreCase("opengui"))
         Minecraft.getMinecraft().displayGuiScreen(new MyGui(new String(packet.data)));
      }
    }
    
    MyGui.class
    Код:
    package net.minecraft.client.gui;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import java.util.Iterator;
    import net.minecraft.client.multiplayer.WorldClient;
    import net.minecraft.client.resources.I18n;
    import net.minecraft.util.EnumChatFormatting;
    import org.lwjgl.opengl.GL11;
    
    @SideOnly(Side.CLIENT)
    public class MyGui extends GuiScreen
    {
         public MyGui(String text){
               this.text=text;
        }
        private String text = "";
        public void initGui()
        {
            this.buttonList.clear();
        }
    
        /**
         * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
         */
        protected void keyTyped(char par1, int par2) {}
    
        /**
         * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
         */
        protected void actionPerformed(GuiButton par1GuiButton)
        {
            switch (par1GuiButton.id)
            {
            }
        }
    
        /**
         * Draws the screen and all the components in it.
         */
        public void drawScreen(int par1, int par2, float par3)
        {
            GL11.glPushMatrix();
            GL11.glScalef(2.0F, 2.0F, 2.0F);
            GL11.glPopMatrix();
           this.mc.fontRenderer.drawString(this.text, this.width / 2, 10, 16777120);
            super.drawScreen(par1, par2, par3);
        }
    
        /**
         * Returns true if this GUI should pause the game when it is displayed in single-player
         */
        public boolean doesGuiPauseGame()
        {
            return false;
        }
    }
    
    Вот и все, при команде сервер отправляет пакет с текстом, при получении которого клиент открывает новое кастомное Gui и записывает в переменную текст.
     
    Последнее редактирование: 5 май 2014
    scrik78, MoPoDeP, Hephest и 2 другим нравится это.
  2. Хостинг MineCraft
    <
  3. Автор темы
    agentik007

    agentik007 Старожил Пользователь

    Баллы:
    153
    Skype:
    vladislav567695
    Статический фон в меню (@Defilak):
    Код:
      private void renderSkybox(int par1, int par2, float par3)
    
    {
           GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
            Tessellator tessellator = Tessellator.instance;
    
            this.mc.getTextureManager().bindTexture(new ResourceLocation("youmod:textures/gui/bg.png"));
            tessellator.startDrawingQuads();
            float f1 = this.width > this.height ? 120.0F / (float)this.width : 120.0F / (float)this.height;
            float fy = (float)this.height * f1 / 256.0F;
            float fx = (float)this.width * f1 / 256.0F;
            double k = this.width;
            double l = this.height;
            tessellator.addVertexWithUV((double)k    , (double)l,    (double)this.zLevel, 0.5 + fx, 0.5 + fy);
            tessellator.addVertexWithUV((double)k    , 0.0D,        (double)this.zLevel, 0.5 + fx, 0.5 - fy);
            tessellator.addVertexWithUV(0.0D            , 0.0D,        (double)this.zLevel, 0.5 - fx, 0.5 - fy);
            tessellator.addVertexWithUV(0.0D            , (double)l,    (double)this.zLevel, 0.5 - fx, 0.5 + fy);
            tessellator.draw();
    
        }
    Добавляем в самый конец метода drawScreen() строки:
    Код:
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

    Код кнопки открытия папки (@DragoSFire):
    Код:
                    File file1 = new File(this.mc.mcDataDir, "screenshots");
                    String s = file1.getAbsolutePath();
                    if (Util.getOSType() == EnumOS.MACOS)
                    {
                        try
                        {
                            this.mc.getLogAgent().logInfo(s);
                            Runtime.getRuntime().exec(new String[] {"/usr/bin/open", s});
                            return;
                        }
                        catch (IOException ioexception)
                        {
                            ioexception.printStackTrace();
                        }
                    }
                    else if (Util.getOSType() == EnumOS.WINDOWS)
                    {
                        String s1 = String.format("cmd.exe /C start \"Open file\" \"%s\"", new Object[] {s});
    
                        try
                        {
                            Runtime.getRuntime().exec(s1);
                            return;
                        }
                        catch (IOException ioexception1)
                        {
                            ioexception1.printStackTrace();
                        }
                    }
    
                    boolean flag = false;
    
                    try
                    {
                        Class oclass = Class.forName("java.awt.Desktop");
                        Object object = oclass.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]);
                        oclass.getMethod("browse", new Class[] {URI.class}).invoke(object, new Object[] {file1.toURI()});
                    }
                    catch (Throwable throwable)
                    {
                        throwable.printStackTrace();
                        flag = true;
                    }
    
                    if (flag)
                    {
                        this.mc.getLogAgent().logInfo("Opening via system class!");
                        Sys.openURL("file://" + s);
                    }
    Отправляем команду в чат нажатием одной кнопки (@DragoSFire):
    В файле MineCraft.java добавить в метод runGameLoop() после this.screenshotListener();
    [CODE]if (Keyboard.isKeyDown(25))
    {
        if (!this.isSpawnKey)
        {
            this.isSpawnKey = true;
            this.thePlayer.sendChatMessage("/spawn");
        }
    }
    else
    {
        this.isSpawnKey = false;
    }


    Выполнение команды нажатием одной кнопки(@DragoSFire):
    В файле MineCraft.java добавить в метод runGameLoop() после this.screenshotListener();

    Код:
    if (Keyboard.isKeyDown(25)) // 25 - код кнопки. Если нужно вызывать эту команду нажатием двух кнопок, то строку заменить на if (Keyboard.isKeyDown(29) && Keyboard.isKeyDown(25))
    {
        if (!this.isSpawnKey)
        {
            this.isSpawnKey = true;
            this.thePlayer.sendChatMessage("/spawn"); // /spawn - наша команда
        }
    }
    else
    {
        this.isSpawnKey = false;
    }
     
    Последнее редактирование: 9 май 2014
    gamerforEA, scrik78, DoG743 и 5 другим нравится это.
Статус темы:
Закрыта.

Поделиться этой страницей