1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов 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. Быстрая раскрутка сервера Minecraft
  3. NuaN

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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