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

Мод [1.7.10] RPG Custom Inventory / РПГ Кастомный Инвентарь [source] 0.0.3b

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

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

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

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

    Что нам нужно:
    inventory.png


    Немного кода:
    Регистрируем нужные ресурсы
    Resources.java
    PHP:
    public class Resources {

       public static final 
    ResourceLocation customArmorTexture = new ResourceLocation(Info.modid"textures/models/items/customArmorTexture.png");

       public static final 
    ResourceLocation inventoryTexture = new ResourceLocation(Info.modid"textures/gui/inventory.png");

    }
    Отменяем открытие ванильного инвентаря и открываем свой
    OpenInventory.java:
    PHP:
    @SubscribeEvent
    public void onOpenGui(GuiOpenEvent event) {
        if(
    event.gui instanceof GuiInventory) {
            
    EntityPlayer player FMLClientHandler.instance().getClient().thePlayer;
            if (!
    player.capabilities.isCreativeMode) {
                
    event.setCanceled(true);
                
    PacketDispatcher.sendToServer(new OpenGuiMessage(Core.GUI_CUSTOM_INV));
            }
        }
    }
    Рендерим GUI инвентаря
    GuiCustomPlayerInventory.java:
    PHP:
    private int xSize_lo;
    private 
    int ySize_lo;

    private final 
    InventoryCustomPlayer inventory;

    public 
    GuiCustomPlayerInventory(EntityPlayer playerInventoryPlayer inventoryPlayerInventoryCustomPlayer inventoryCustom) {
        
    super(new ContainerCustomPlayer(playerinventoryPlayerinventoryCustom));
        
    this.inventory inventoryCustom;
    }

    @
    Override
    public void drawScreen(int mouseXint mouseYfloat f) {
        
    super.drawScreen(mouseXmouseYf);
        
    xSize_lo mouseX;
        
    ySize_lo mouseY;
    }

    @
    Override
    protected void drawGuiContainerBackgroundLayer(float fint mouseXint mouseY) {
        
    GL11.glColor4f(1.0F1.0F1.0F1.0F);
        
    mc.getTextureManager().bindTexture(Resources.inventoryTexture);
        
    drawTexturedModalRect(guiLeftguiTop00xSizeySize);

        
    //рендер кастомных слотов когда пустые
        
    for (int i 04i++) {
            
    int noEquip 169;
            if(
    inventory.getStackInSlot(i) != null) {
                
    noEquip 0;
            }
            
    drawTexturedModalRect(guiLeft 7guiTop 18 inoEquip18 i1818);
        }

        for (
    int i 04i++) {
            
    int noEquip 205;
            if(
    inventory.getStackInSlot(4) != null) {
                
    noEquip 0;
            }
            
    drawTexturedModalRect(guiLeft 43guiTop 18 inoEquip18 i1818);
        }

        
    //рендер игрока в инвентаре
        
    GuiInventory.func_147046_a(guiLeft 70guiTop 16585guiLeft 51 xSize_loguiTop 25 ySize_lomc.thePlayer);
    }
    Добавляем свои слоты
    ContainerCustomPlayer.java:
    PHP:
    public ContainerCustomPlayer(EntityPlayer playerInventoryPlayer inventoryPlayerInventoryCustomPlayer inventoryCustom) {
       
    this.player player;
       
    int i;
       
    int j;

       
    //кастомные слоты
       
    addSlotToContainer(new SlotShoulders(inventoryCustomCustomSlots.SHOULDERS.ordinal(), 88)); //наплечники
       
    addSlotToContainer(new SlotBracers(inventoryCustomCustomSlots.BRACERS.ordinal(), 826)); //наручи
       
    addSlotToContainer(new SlotGloves(inventoryCustomCustomSlots.GLOVES.ordinal(), 844)); //перчатки
       
    addSlotToContainer(new SlotBelt(inventoryCustomCustomSlots.BELT.ordinal(), 862)); //пояс    

       
    addSlotToContainer(new SlotNecklace(inventoryCustomCustomSlots.NECKLACE.ordinal(), 448)); //ожерелье
       
    addSlotToContainer(new SlotRing(inventoryCustomCustomSlots.RING1.ordinal(), 4426)); //кольцо
       
    addSlotToContainer(new SlotRing(inventoryCustomCustomSlots.RING2.ordinal(), 4444)); //кольцо
       
    addSlotToContainer(new SlotArtifact(inventoryCustomCustomSlots.ARTIFACT.ordinal(), 4462)); //артефакт

       //сюда добавлять новые кастомные слоты
       //потом изменить - enum в CustomSlots

       //броня
       
    for (04; ++i) {
           
    addSlotToContainer(new SlotArmor(playerinventoryPlayerinventoryPlayer.getSizeInventory() - i2618i));
       }

       
    //сетка крафта
       
    for(02; ++i) {
           for(
    02; ++j) {
               
    this.addSlotToContainer(new Slot(this.craftMatrix280 1826 18));
           }
       }

       
    //результат крафта
       
    this.addSlotToContainer(new SlotCrafting(playerthis.craftMatrixthis.craftResultslotCraftResult13435));

       
    //инвентарь    все 3 ряда
       
    for (03; ++i) {
           for (
    09; ++j) {
               
    addSlotToContainer(new Slot(inventoryPlayer91884 18));
           }
       }

       
    //хотбар
       
    for (09; ++i) {
           
    addSlotToContainer(new Slot(inventoryPlayeri18142));
       }
    }
    Апдейтим кастомные слоты для других игроков на примере наплечников
    PlayerUpdateEquipShoulders.java:
    PHP:
    private static HashMap<IntegerIntegerequip0Map = new HashMap<IntegerInteger>();

    @
    SubscribeEvent
    public void onPlayerUpdateEvent(LivingUpdateEvent event) {
        if(
    event.entity.worldObj.isRemote || !(event.entityLiving instanceof EntityPlayer)) {
            return;
        }

        
    EntityPlayer player = (EntityPlayerevent.entityLiving;
        
    int prevEquip equip0Map.containsKey(player.getEntityId()) ? equip0Map.get(player.getEntityId()) : -1;
        
    int currentEquip 0;

        if(
    prevEquip == -1) {
            for(
    Map.Entry<IntegerIntegerentry0 equip0Map.entrySet()) {
                
    Entity target event.entity.worldObj.getEntityByID(entry0.getKey());

                if(
    target != null && target.dimension == event.entity.dimension) {
                    
    PacketDispatcher.sendTo(new SyncEquipShouldersMessage(entry0.getKey(), entry0.getValue()), (EntityPlayerMPplayer);
                }
            }
        }

        if(
    MinecraftServer.getServer().getTickCounter() % 20 == 0) {
            
    ItemStack itemStack ExtendedPlayer.get(player).inventory.getStackInSlot(ContainerCustomPlayer.slotShoulders);

            if(
    itemStack != null) {
                
    Item equip itemStack.getItem();
                if (
    equip == LoadItemArmor.shoulderscurrentEquip 1;
            }

            if(
    prevEquip != currentEquip) {
                
    equip0Map.put(player.getEntityId(), currentEquip);
                if(
    prevEquip currentEquip >= 0) {
                    
    PacketDispatcher.sendToDimension(new SyncEquipShouldersMessage(player.getEntityId(), currentEquip), player.dimension);
                }
            }

            if(
    MinecraftServer.getServer().getTickCounter() % 12000 == 0) {
                
    equip0Map.clear();
            }
        }
    }
    Апдейтим кастомные слоты для onArmorTick на примере наплечников
    CustomArmorTick.java
    PHP:
    private static ItemStack shoulders = (ItemStack)null;
    private static 
    ItemStack bracers = (ItemStack)null;
    private static 
    ItemStack gloves = (ItemStack)null;
    private static 
    ItemStack belt = (ItemStack)null;

    private static 
    ItemStack necklace = (ItemStack)null;
    private static 
    ItemStack ring1 = (ItemStack)null;
    private static 
    ItemStack ring2 = (ItemStack)null;
    private static 
    ItemStack artifact = (ItemStack)null;

    @
    SubscribeEvent
    public void onPlayerUpdateEvent(LivingUpdateEvent event) {
        if(
    event.entity.worldObj.isRemote || !(event.entityLiving instanceof EntityPlayer)) {
            return;
        }

        
    EntityPlayer player = (EntityPlayerevent.entityLiving;

        if(
    ExtendedPlayer.get(player).inventory.getStackInSlot(CustomSlots.SHOULDERS.ordinal()) != null) {
            
    shoulders ExtendedPlayer.get(player).inventory.getStackInSlot(CustomSlots.SHOULDERS.ordinal());
            
    CustomItemArmor.onCustomArmorTick(player.worldObjplayershoulders);
        } else {
            
    shoulders = (ItemStack)null;
        }
    }
    Результат:
    1.png
    2.png
     
    Последнее редактирование: 27 май 2020
  2. Быстрая раскрутка сервера Minecraft
  3. alexandrage

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

    Баллы:
    173
    С лавамода украдено да?
     
  4. Автор темы
    Fr0Le

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    погуглил я ваш лавамод, посмотрел пару обзоров и не могу понять в чем схожесть? доп слоты в инвентаре или ты думаешь это их исходники?:D
     
  5. alexandrage

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

    Баллы:
    173
    Ну идея визуализации бижи на скине. Хотя колец и прочего у тебя не видно таки. Реализация не полная.
     
  6. Автор темы
    Fr0Le

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    пока не планировал рендерить аксессуары)
     
  7. Автор темы
    Fr0Le

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    Обновление 0.0.2
    Изменения:

    • Обновлен код в шапке;
    • Изменено форматирование кода, так как все поплыло на GitHub;
    • Изменена нумерация кастомных слотов через enum, не знаю на сколько это адекватно реализовано;
    • Изменена логика работы шифт-клика по слотам, теперь как в ванильном майнкрафте;

    Добавления:
    • Добавлена возможность перемещать предметы по инвентарю через шифт-клик;
    • Добавлена возможность одевать броню в катомные слоты через шифт-клик;
    • При перемещении одинаковые предметы теперь стакаются;
    • Добавлена возможность использовать шифт-клик на слоте результата крафта;
    • Теперь если слот брони занят, броня перемещается по инвентарю;
    • Добавлен свой onArmorTick для кастомных слотов;

    TODO:
    - Добавить очистку кастомных слотов при использовании команды /clear
     
  8. Автор темы
    Fr0Le

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    Обновление 0.0.3b
    Добавления:


    Исправления:
    • Фикс краша при перемещении через Shift-click;
     
    Последнее редактирование: 17 июн 2020
  9. SlenderMix

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

    Баллы:
    66
    Имя в Minecraft:
    SlenderMix
    Сам лавамод тоже неплохо ворует и выдает за свое.
     

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