1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Мод [1.7.10] Pickup on key / Подбор на кнопку [source] 0.0.1

Тема в разделе "Модификации клиента", создана пользователем Fr0Le, 11 апр 2020.

  1. Автор темы
    Fr0Le

    Fr0Le Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    В этом ресурсе Вы узнаете:
    • Как создать кнопку, которая при нажатии подберает предмет с земли.
    Скачать исходники
    Скачать мод

    Немного кода:
    Регистрируем кнопку
    KeybindsRegister.java:
    PHP:
    public static final KeyBinding
        PICKUP_KEY 
    = new KeyBinding(Type.getTranslate("key.pickup"), Keyboard.KEY_FType.getTranslate("key.categories.pickup"));

    public static 
    void register() {
        
    setRegister(PICKUP_KEY);
    }

    private static 
    void setRegister(KeyBinding binding) {
        
    ClientRegistry.registerKeyBinding(binding);
    }
    Отменяем ванильный автоподбор предметов
    PHP:
    @SubscribeEvent
    public void onItemPickup(EntityItemPickupEvent event) {
        if(
    event.entity.worldObj.isRemote || !(event.entityLiving instanceof EntityPlayer)) {
            return;
        }   
        
    event.setCanceled(true);   
    }
    Отсылаем пакет на поднятие предмета при нажатии кнопки
    PHP:
    public Minecraft mc;
    RenderItem itemRenderer = new RenderItem();

    public 
    PacketSender(Minecraft mc) {
        
    this.mc mc;
    }

    @
    SubscribeEvent(priority EventPriority.HIGHEST,receiveCanceled true)
    public 
    void onKeyInput(KeyInputEvent e) {
        if(
    KeybindsRegister.PICKUP_KEY.isPressed()) {
            if (
    mc.theWorld.isRemote && mc.objectMouseOver != null && mc.objectMouseOver.hitVec != null) {
                
    Vec3 hitVec mc.objectMouseOver.hitVec;
                
    EntityClientPlayerMP player mc.thePlayer;
                
    double playerX player.posX;
                
    double playerY player.posY;
                
    double segLen 0.25;
                
    double segLend2 0.125;
                
    double playerZ player.posZ;
                
    double dx hitVec.xCoord playerX;
                
    double dy hitVec.yCoord playerY;
                
    double dz hitVec.zCoord playerZ;
                
    double lineLen Math.sqrt(Math.pow(dx2.0) + Math.pow(dy2.0) + Math.pow(dz2.0));
                
    double segNumDouble lineLen segLen;
                
    int segNum = (int)segNumDouble;
                
    World world player.getEntityWorld();
                
    ArrayList<EntityItemitems null;
                
    int index 0;

                while (++
    index <= segNum) {
                    
    double cenX playerX dx segNumDouble * (double)index;
                    
    double cenY playerY dy segNumDouble * (double)index;
                    
    double cenZ playerZ dz segNumDouble * (double)index;
                    
    AxisAlignedBB curAABB AxisAlignedBB.getBoundingBox((double)(cenX segLend2), (double)(cenY segLend2), (double)(cenZ segLend2), (double)(cenX segLend2), (double)(cenY segLend2), (double)(cenZ segLend2));
                    
    items = (ArrayList)world.getEntitiesWithinAABB(EntityItem.class, curAABB);
                    if (
    items == null || items.isEmpty()) continue;
                    
    index segNum 1;
                }

                if (
    items != null && !items.isEmpty()) {
                    
    EntityItem closeItem = (EntityItem)items.get(0);
                    
    double closeDist 100.0;
                    for (
    EntityItem item items) {
                        
    double itemDist Math.pow(item.posX playerX2.0) + Math.pow(item.posY playerY2.0) + Math.pow(item.posZ playerZ2.0);
                        if (
    itemDist >= closeDist) continue;
                        
    closeDist itemDist;
                        
    closeItem item;
                    }
                    
    PickupNetwork.netHandler.sendToServer(new PickupPacket(closeItem.getEntityId(), player.getEntityId()));
                }
            }
        }
    }

    @
    SubscribeEvent(receiveCanceled true,    priority EventPriority.HIGHEST)
    public 
    void onInGameUI(RenderGameOverlayEvent e) {
        if(
    e.type == ElementType.ALL) {
            
    RenderHelper.disableStandardItemLighting();
            
    ItemRenderOnFloor.drawItems(e);
            
    RenderHelper.disableStandardItemLighting();
        }
    }
    Рендерим предмет и надпись, когда предмет лежит на земле и мы на него смотрим
    PHP:
    static RenderItem itemRenderer = new RenderItem();

    public static 
    void drawItems(RenderGameOverlayEvent e) {
        
    Minecraft mc Minecraft.getMinecraft();
        if(
    e.type == ElementType.ALL) {
            if (
    Minecraft.getMinecraft().objectMouseOver != null && Minecraft.getMinecraft().objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
                
    Vec3 hitVec mc.objectMouseOver.hitVec;
                
    EntityClientPlayerMP player mc.thePlayer;
                
    double playerX player.posX;
                
    double playerY player.posY;
                
    double playerZ player.posZ;
                
    WorldClient world mc.theWorld;
                
    double segLen 0.25;
                
    double segLend2 0.125;
                
    double dx hitVec.xCoord playerX;
                
    double dy hitVec.yCoord playerY;
                
    double dz hitVec.zCoord playerZ;
                
    double lineLen Math.sqrt(Math.pow(dx2.0) + Math.pow(dy2.0) + Math.pow(dz2.0));
                
    double segNumDouble lineLen segLen;
                
    int segNum = (int)segNumDouble;
                
    ArrayList<EntityItemitems null;
                
    int index 0;
                while (++
    index <= segNum) {
                    
    double cenX playerX dx segNumDouble * (double)index;
                    
    double cenY playerY dy segNumDouble * (double)index;
                    
    double cenZ playerZ dz segNumDouble * (double)index;
                    
    AxisAlignedBB curAABB AxisAlignedBB.getBoundingBox((double)(cenX segLend2), (double)(cenY segLend2), (double)(cenZ segLend2), (double)(cenX segLend2), (double)(cenY segLend2), (double)(cenZ segLend2));
                    
    items = (ArrayList)world.getEntitiesWithinAABB(EntityItem.class, curAABB);
                    if (
    items == null || items.isEmpty()) continue;
                    
    index segNum 1;
                }
                if (
    items != null && !items.isEmpty()) {
                    
    EntityItem closeItem = (EntityItem)items.get(0);
                    
    double closeDist 100.0;
                    for (
    EntityItem item items) {
                        
    double itemDist Math.pow(item.posX playerX2.0) + Math.pow(item.posY playerY2.0) + Math.pow(item.posZ playerZ2.0);
                        if (
    itemDist >= closeDist) continue;
                        
    closeDist itemDist;
                        
    closeItem item;
                    }

                    
    String keyName closeItem.getEntityItem().getDisplayName();
                    
    String itemName Keyboard.getKeyName(KeybindsRegister.PICKUP_KEY.getKeyCode());
                    
    Minecraft.getMinecraft().fontRenderer.drawString("[" itemName "] " Type.getTranslate("event.pickup"), e.resolution.getScaledWidth() / 2e.resolution.getScaledHeight() / 220xFFFFFF);
                    
    Minecraft.getMinecraft().fontRenderer.drawString(keyName, (e.resolution.getScaledWidth()) / Minecraft.getMinecraft().fontRenderer.getStringWidth(keyName) - 6e.resolution.getScaledHeight() / 220xFFFFFF);
                    
    renderInventorySlot(closeItem.getEntityItem(), e.resolution.getScaledWidth() / 7e.resolution.getScaledHeight() / 60f);               
                }
            }
        }
    }

    protected static 
    void renderInventorySlot(ItemStack itemStackdouble dint ifloat f) {
        
    Minecraft mc Minecraft.getMinecraft();

        if(
    itemStack != null) {
            
    float f1 = (float)itemStack.animationsToGo f;
            if(
    f1 0.0F) {
                
    GL11.glPushMatrix();
                
    float f2 1.0F f1 5.0F;
                
    GL11.glTranslatef((float)(8), (float)(12), 0.0F);
                
    GL11.glScalef(1.0F f2, (f2 1.0F) / 2.0F1.0F);
                
    GL11.glTranslatef((float)(-(8)), (float)(-(12)), 0.0F);
            }

            
    itemRenderer.renderItemIntoGUI(mc.fontRenderermc.getTextureManager(), itemStack, (int) di);
            if(
    f1 0.0F) {
                
    GL11.glPopMatrix();
            }
            
    itemRenderer.renderItemOverlayIntoGUI(mc.fontRenderermc.getTextureManager(), itemStack, (int) di);
        }
    }
    Результат:
    2020-04-11_03.55.52.png
    2020-04-11_03.56.07.png
     
  2. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Прикольно, только такое уже давно на HCS было сделано
     
  3. Автор темы
    Fr0Le

    Fr0Le Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    И не только на хкс, хотя там сейчас совсем другая система подбора лута. И при этом никакой сервер тебе не даст исходный код или серверную часть мода, если есть разделение.
     
    Последнее редактирование: 2 май 2020
  4. alexandrage

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

    Баллы:
    173
    Бесполезно, но очень интересно. Да и версия дино.
     
  5. Автор темы
    Fr0Le

    Fr0Le Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    полезно на некоторых тематиках типа DayZ, Metro, Stalker и т.д. а версию и портнуть можно.
     
    Последнее редактирование: 2 май 2020
  6. alexandrage

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

    Баллы:
    173
    Полезно это то, как реализовано в crafting dead. А это хрень. Без обид.

    Самый лучший мод на дейз кстати.
     
    Последнее редактирование: 2 май 2020
  7. Автор темы
    Fr0Le

    Fr0Le Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    без обид, просто одна из реализаций подбора лута с земли на кнопку, а причем здесь подбор лута с трупов? который можно добавить модом Corpse например. или покажи тайм код как подбирается с земли на твоем карфтинг деде.
     
  8. alexandrage

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

    Баллы:
    173
    Там на видосе смотри, есть и подбор лута с земли, он там лежит прям на земле. Ну и фишка с трупами тоже интересная. Правильно подметил.
     
  9. Автор темы
    Fr0Le

    Fr0Le Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    Не, ну заставил видос смотреть) ну дроп лежит, да прикольно в ItemPhysic такое же есть, при желании это можно все добавить.
     
  10. alexandrage

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

    Баллы:
    173
    Ну вот тебе идея как реализовать. Не ставить же 90 модов ради этого). Извини за давление, если скил не позволяет, тогда ладно.
     
  11. Автор темы
    Fr0Le

    Fr0Le Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    Доделаю арена шутер свой и можно будет поковырять
     
  12. BestFoxy

    BestFoxy Активный участник

    Баллы:
    61
    Имя в Minecraft:
    BestFoxy
    Зачем сливать давно слитые исходники, сделай и выложи текущий подбор хкс'а.
     
  13. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Почему так агрессивно? Он захотел выложить такой туториал и выложил.
    И еще, он ничего не должен делать и выкладывать (это про хкс).
     
  14. BestFoxy

    BestFoxy Активный участник

    Баллы:
    61
    Имя в Minecraft:
    BestFoxy
    Это полноценный мод, который никак с ним не связан, вообще он залил его на гит, тем самым присвоив себе чужой код.
     
  15. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Ну еще в суд на него подай)
     
  16. BestFoxy

    BestFoxy Активный участник

    Баллы:
    61
    Имя в Minecraft:
    BestFoxy
    Автор увидит, ему будет не приятно, тебе не понять, сомневаюсь, что у тебя есть что украсть.
     
  17. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Уууу... унизил прям :D Пойду вены порежу ложкой :D
     

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