Блок с своим интерфейсом

timaxa007

Модератор
5,831
409
672
EssenXmax написал(а):
как добавить слоты
Можно посмотреть в исходники Minecraft'а - net.minecraft.inventory.
Во-основном типа так:
Код:
addSlotToContainer(new Slot(tile, 0, 56, 17));
tile - твой инвентарь.
0 - это ид слота
56 - позиция по x координате.
17 - позиция по y координате.
EssenXmax написал(а):
саму "пережарку" (в моем случае создание пластин) и собсна сами рецепты) Не подскажите где можно пример подсмотреть?
Не совсем понимаю. Смотри в исходники печки TileEntityFurnace и т.п.
Рецепты есть тут - net.minecraft.item.crafting.FurnaceRecipesnet.minecraft.item.crafting.FurnaceRecipes, а если смотреть на все рецепты (включая добавленной модами), то это как-то надо выводить (выводить можно по разному).
 
Спасибо всем большое! То,что я хотел,получилось...дальше попробую разобраться сам.. :)
[merge_posts_bbcode]Добавлено: 22.06.2016 14:30:13[/merge_posts_bbcode]

кстати addSlotToContainer у печки я не вижу
 

timaxa007

Модератор
5,831
409
672
net.minecraft.inventory.ContainerFurnace;
Код:
    public ContainerFurnace(InventoryPlayer p_i1812_1_, TileEntityFurnace p_i1812_2_)
    {
        this.tileFurnace = p_i1812_2_;
        this.addSlotToContainer(new Slot(p_i1812_2_, 0, 56, 17));
        this.addSlotToContainer(new Slot(p_i1812_2_, 1, 56, 53));
        this.addSlotToContainer(new SlotFurnace(p_i1812_1_.player, p_i1812_2_, 2, 116, 35));
        int i;

        for (i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(p_i1812_1_, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
            }
        }

        for (i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(p_i1812_1_, i, 8 + i * 18, 142));
        }
    }
 
Появилась небольшая проблема
Вот код MoltingMachineContainer
Код:
package com.essenxmax.additplus;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.inventory.SlotFurnace;
import net.minecraft.tileentity.TileEntityFurnace;
public class MoldingMachineContainer extends Container{
 
 private MoldingMachineTileEntity tileMoldingMachine;
 
 
 
 public MoldingMachineContainer(InventoryPlayer invPlayer,MoldingMachineTileEntity entity ){
  this.tileMoldingMachine = entity;
  this.addSlotToContainer(new Slot(entity, 0, 56, 17));
        this.addSlotToContainer(new Slot(entity, 1, 56, 53));
        this.addSlotToContainer(new SlotFurnace(invPlayer.player, entity, 2, 116, 35));
        int i;
        
        for (i = 0; i < 3; ++i){
         for (int j = 0; j < 9; ++j){
           this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
         }
        }
        for (i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142));
        }
 }
 @Override
 public boolean canInteractWith(EntityPlayer var1) {
 
  return tileMoldingMachine.isUseableByPlayer(var1);
 }
 }

Это я слоты добавил..когда открываю инвентарь блока, игра вылетает..
вот что говорит консоль:
Код:
java.lang.ArrayIndexOutOfBoundsException: 1
 at com.essenxmax.additplus.MoldingMachineTileEntity.setInventorySlotContents(MoldingMachineTileEntity.java:53) ~[MoldingMachineTileEntity.class:?]
 at net.minecraft.inventory.Slot.putStack(Slot.java:104) ~[Slot.class:?]
 at net.minecraft.inventory.Container.putStacksInSlots(Container.java:558) ~[Container.class:?]
 at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1202) ~[NetHandlerPlayClient.class:?]
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70) ~[S30PacketWindowItems.class:?]
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78) ~[S30PacketWindowItems.class:?]
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) ~[NetworkManager.class:?]
 at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317) ~[PlayerControllerMP.class:?]
 at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693) ~[Minecraft.class:?]
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?]
 at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
 at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_73]
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]
 at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_73]
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
 at GradleStart.main(Unknown Source) [start/:?]
[15:38:41] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Would you like a cupcake?
Time: 22.06.16 15:38
Description: Unexpected error
java.lang.ArrayIndexOutOfBoundsException: 1
 at com.essenxmax.additplus.MoldingMachineTileEntity.setInventorySlotContents(MoldingMachineTileEntity.java:53)
 at net.minecraft.inventory.Slot.putStack(Slot.java:104)
 at net.minecraft.inventory.Container.putStacksInSlots(Container.java:558)
 at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1202)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78)
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
 at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317)
 at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693)
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
 at net.minecraft.client.Minecraft.run(Minecraft.java:962)
 at net.minecraft.client.main.Main.main(Main.java:164)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
 at GradleStart.main(Unknown Source)

A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
 at com.essenxmax.additplus.MoldingMachineTileEntity.setInventorySlotContents(MoldingMachineTileEntity.java:53)
 at net.minecraft.inventory.Slot.putStack(Slot.java:104)
 at net.minecraft.inventory.Container.putStacksInSlots(Container.java:558)
 at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1202)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:70)
 at net.minecraft.network.play.server.S30PacketWindowItems.processPacket(S30PacketWindowItems.java:78)
 at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
 at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317)
-- Affected level --
Details:
 Level name: MpServer
 All players: 1 total; [EntityClientPlayerMP['Player115'/288, l='MpServer', x=-90,54, y=65,62, z=278,60]]
 Chunk stats: MultiplayerChunkCache: 25, 25
 Level seed: 0
 Level generator: ID 00 - default, ver 1. Features enabled: false
 Level generator options: 
 Level spawn location: World: (131,64,283), Chunk: (at 3,4,11 in 8,17; contains blocks 128,0,272 to 143,255,287), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
 Level time: 410086 game time, 1681 day time
 Level dimension: 0
 Level storage version: 0x00000 - Unknown?
 Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
 Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
 Forced entities: 40 total; [EntityItemFrame['entity.ItemFrame.name'/320, l='MpServer', x=-97,50, y=85,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/321, l='MpServer', x=-96,50, y=85,50, z=276,06], EntityBat['Летучая мышь'/322, l='MpServer', x=-55,75, y=24,82, z=277,38], EntityClientPlayerMP['Player115'/288, l='MpServer', x=-90,54, y=65,62, z=278,60], EntitySheep['Овца'/18, l='MpServer', x=-62,03, y=62,09, z=262,03], EntityBat['Летучая мышь'/19, l='MpServer', x=-51,31, y=26,00, z=281,44], EntityBat['Летучая мышь'/20, l='MpServer', x=-55,25, y=26,00, z=275,07], EntityBat['Летучая мышь'/21, l='MpServer', x=-62,25, y=35,10, z=306,28], EntitySheep['Овца'/22, l='MpServer', x=-56,13, y=68,00, z=315,13], EntityItemFrame['entity.ItemFrame.name'/289, l='MpServer', x=-89,06, y=66,50, z=276,50], EntityItemFrame['entity.ItemFrame.name'/290, l='MpServer', x=-89,06, y=66,50, z=277,50], EntityItemFrame['entity.ItemFrame.name'/291, l='MpServer', x=-89,06, y=66,50, z=278,50], EntityItemFrame['entity.ItemFrame.name'/292, l='MpServer', x=-89,06, y=65,50, z=278,50], EntityItemFrame['entity.ItemFrame.name'/293, l='MpServer', x=-89,06, y=65,50, z=277,50], EntityItemFrame['entity.ItemFrame.name'/294, l='MpServer', x=-89,06, y=65,50, z=276,50], EntityItemFrame['entity.ItemFrame.name'/295, l='MpServer', x=-89,06, y=64,50, z=276,50], EntityItemFrame['entity.ItemFrame.name'/296, l='MpServer', x=-89,06, y=64,50, z=277,50], EntityItemFrame['entity.ItemFrame.name'/297, l='MpServer', x=-89,06, y=64,50, z=278,50], EntityItemFrame['entity.ItemFrame.name'/298, l='MpServer', x=-95,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/299, l='MpServer', x=-94,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/300, l='MpServer', x=-93,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/301, l='MpServer', x=-102,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/302, l='MpServer', x=-102,50, y=83,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/303, l='MpServer', x=-102,50, y=85,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/304, l='MpServer', x=-102,50, y=84,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/305, l='MpServer', x=-101,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/306, l='MpServer', x=-101,50, y=83,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/307, l='MpServer', x=-100,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/308, l='MpServer', x=-100,50, y=83,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/309, l='MpServer', x=-99,50, y=84,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/310, l='MpServer', x=-99,50, y=85,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/311, l='MpServer', x=-99,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/312, l='MpServer', x=-98,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/313, l='MpServer', x=-97,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/314, l='MpServer', x=-97,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/315, l='MpServer', x=-96,50, y=82,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/316, l='MpServer', x=-98,50, y=84,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/317, l='MpServer', x=-97,50, y=84,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/318, l='MpServer', x=-96,50, y=84,50, z=276,06], EntityItemFrame['entity.ItemFrame.name'/319, l='MpServer', x=-98,50, y=85,50, z=276,06]]
 Retry entities: 0 total; []
 Server brand: fml,forge
 Server type: Integrated singleplayer server
Stacktrace:
 at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:415)
 at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2566)
 at net.minecraft.client.Minecraft.run(Minecraft.java:991)
 at net.minecraft.client.main.Main.main(Main.java:164)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
 at GradleStart.main(Unknown Source)
 

timaxa007

Модератор
5,831
409
672
Ты добавляешь три слота, а у тебя можно только один слот из-за "inventory = new ItemStack[1];" в MoldingMachineTileEntity.
 
Это исправил, за то теперь,когда я зажимаю шифт,чтобы перекинуть предметы из интерфейса блока себе в инвентарь,то игра так же крашится

Код:
@Override
 public ItemStack getStackInSlot(int slot) {
  
  return (slot ==0 ? inventory[0]:null);
 }

Тут случайно ничего менять не надо?
 

timaxa007

Модератор
5,831
409
672
Нет. Проблемы с шифтом связано с твоим Container в методе transferStackInSlot.
 
Ага вижу. Вроде начал разбираться в классах печки и понемногу оттуда копирую для своих целей.
Если можно,тему пока не закрывай..будут вопросы,лучше сюда написать,чем засорять форум..
 
Вот еще не могу понять
файл  MoldingMachineGui
Код:
import java.io.IOException;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.util.ResourceLocation;
public class MoldingMachineGui extends GuiContainer{
 
 public static final ResourceLocation texture = new ResourceLocation("additplus:/textures/gui/moldingmachine_gui.png");
  private MoldingMachineTileEntity tileMoldingMachine;
 
 public MoldingMachineGui(InventoryPlayer playerInv, MoldingMachineTileEntity tileentity) {
  super(new MoldingMachineContainer(playerInv, tileentity));
  xSize = 200;
  ySize = 200;
 }
 @Override
 protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
  GL11.glColor4f(1F, 1F, 1F, 1F);
  mc.getTextureManager().bindTexture(texture);
  int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
  
        
        if (this.tileMoldingMachine.isBurning())
        {
            int i1 = this.tileMoldingMachine.getBurnTimeRemainingScaled(13);
            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 1);
            i1 = this.tileMoldingMachine.getCookProgressScaled(24);
            this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
        
        }
 
 }
}

а вот MoldingMachineTileEntity

Код:
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemTool;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;

public class MoldingMachineTileEntity extends TileEntity implements IInventory{
 private ItemStack[] inventory;
  public int moldingmachineBurnTime;
  public int moldingmachineCookTime;
  public int currentItemBurnTime;
 
  private String field_145958_o;
 
 public MoldingMachineTileEntity(){
  inventory = new ItemStack[3];
 }
 @Override
 public int getSizeInventory() {
  
  return inventory.length;
 }

 @Override
 public ItemStack getStackInSlot(int slot) {
  
  return (slot ==0 ? inventory[0]:null);
 }

 @Override
 public ItemStack decrStackSize(int var1, int var2) {
  ItemStack itemStack = getStackInSlot(var1);
  if(itemStack != null){
   if(itemStack.stackSize <= var2){
    setInventorySlotContents(var1, null);
   }else{
    itemStack = itemStack.splitStack(var2);
    onInventoryChanged();
   }
  }
  return itemStack;
 }

 private void onInventoryChanged() {
  
  
 }
 @Override
 public ItemStack getStackInSlotOnClosing(int var1) {
  ItemStack itemStack = getStackInSlot(var1);
  setInventorySlotContents (var1, null);
  return itemStack;
 }

 @Override
 public void setInventorySlotContents(int var1, ItemStack var2) {
 inventory [var1] = var2;
 if (var2 != null && var2.stackSize > getInventoryStackLimit()){
  var2.stackSize = getInventoryStackLimit();
 }
  
 }

 @Override
 public String getInventoryName() {
  
  return "MoldingMachine";
 }

 @Override
 public boolean hasCustomInventoryName() {
  
  return true;
 }

 @Override
 public int getInventoryStackLimit() {
  
  return 64;
 }

 public static boolean isItemFuel(ItemStack p_145954_0_)
    {
        /**
         * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't
         * fuel
         */
        return getItemBurnTime(p_145954_0_) > 0;
    }
 
 
 //////////////////
 @Override
 public boolean isUseableByPlayer(EntityPlayer player) {
   return this.worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false : player.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;

  
 }

 @Override
 public void openInventory() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void closeInventory() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public boolean isItemValidForSlot(int var1, ItemStack var2) {
  
  return true;
 }

 
 public void readFromNBT(NBTTagCompound p_145839_1_)
    {
        super.readFromNBT(p_145839_1_);
        NBTTagList nbttaglist = p_145839_1_.getTagList("Items", 10);
        this.inventory = new ItemStack[this.getSizeInventory()];

        for (int i = 0; i < nbttaglist.tagCount(); ++i)
        {
            NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);
            byte b0 = nbttagcompound1.getByte("Slot");

            if (b0 >= 0 && b0 < this.inventory.length)
            {
                this.inventory[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
            }
        }

        this.moldingmachineBurnTime = p_145839_1_.getShort("BurnTime");
        this.moldingmachineCookTime = p_145839_1_.getShort("CookTime");
        this.currentItemBurnTime = getItemBurnTime(this.inventory[1]);

        if (p_145839_1_.hasKey("CustomName", 8))
        {
            this.field_145958_o = p_145839_1_.getString("CustomName");
        }
    }
 
 
 public void writeToNBT(NBTTagCompound p_145841_1_){
  {
         super.writeToNBT(p_145841_1_);
         p_145841_1_.setShort("BurnTime", (short)this.moldingmachineBurnTime);
         p_145841_1_.setShort("CookTime", (short)this.moldingmachineCookTime);
         NBTTagList nbttaglist = new NBTTagList();

         for (int i = 0; i < this.inventory.length; ++i)
         {
             if (this.inventory[i] != null)
             {
                 NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                 nbttagcompound1.setByte("Slot", (byte)i);
                 this.inventory[i].writeToNBT(nbttagcompound1);
                 nbttaglist.appendTag(nbttagcompound1);
             }
         }

         p_145841_1_.setTag("Items", nbttaglist);

         if (this.hasCustomInventoryName())
         {
             p_145841_1_.setString("CustomName", this.field_145958_o);
         }
     }
 }
 
 @SideOnly(Side.CLIENT)
    public int getCookProgressScaled(int var1)
    {
        return this.moldingmachineCookTime * var1 / 200;
    }

 
 
 @SideOnly(Side.CLIENT)
    public int getBurnTimeRemainingScaled(int var1)
    {
        if (this.currentItemBurnTime == 0)
        {
            this.currentItemBurnTime = 200;
        }

        return this.moldingmachineBurnTime * var1 / this.currentItemBurnTime;
    }
 
 // Molting machine is burning
 public boolean isBurning(){
  return this.moldingmachineBurnTime > 0;
  
 }
 
 
  public static int getItemBurnTime(ItemStack var1)
     {
         if (var1 == null)
         {
             return 0;
         }
         else
         {
             Item item = var1.getItem();

             if (item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air)
             {
                 Block block = Block.getBlockFromItem(item);

                 if (block == Blocks.wooden_slab)
                 {
                     return 150;
                 }

                 if (block.getMaterial() == Material.wood)
                 {
                     return 300;
                 }

                 if (block == Blocks.coal_block)
                 {
                     return 16000;
                 }
             }

             if (item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD")) return 200;
             if (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD")) return 200;
             if (item instanceof ItemHoe && ((ItemHoe)item).getToolMaterialName().equals("WOOD")) return 200;
             if (item == Items.stick) return 100;
             if (item == Items.coal) return 1600;
             if (item == Items.lava_bucket) return 20000;
             if (item == Item.getItemFromBlock(Blocks.sapling)) return 100;
             if (item == Items.blaze_rod) return 2400;
             return GameRegistry.getFuelValue(var1);
         }
     }
 
 


}
[merge_posts_bbcode]Добавлено: 22.06.2016 17:35:40[/merge_posts_bbcode]

крашит игру

[merge_posts_bbcode]Добавлено: 22.06.2016 17:36:19[/merge_posts_bbcode]

Код:
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1168) ~[EntityRenderer.class:?]
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1067) ~[Minecraft.class:?]
 at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
 at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_73]
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]
 at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_73]
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
 at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
 at com.essenxmax.additplus.MoldingMachineGui.drawGuiContainerBackgroundLayer(MoldingMachineGui.java:34) ~[MoldingMachineGui.class:?]
 at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:93) ~[GuiContainer.class:?]
 at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1137) ~[EntityRenderer.class:?]
 ... 11 more
[17:05:10] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Oh - I know what I did wrong!
Time: 22.06.16 17:05
Description: Rendering screen
java.lang.NullPointerException: Rendering screen
 at com.essenxmax.additplus.MoldingMachineGui.drawGuiContainerBackgroundLayer(MoldingMachineGui.java:34)
 at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:93)
 at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1137)
 at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1067)
 at net.minecraft.client.Minecraft.run(Minecraft.java:962)
 at net.minecraft.client.main.Main.main(Main.java:164)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
 at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
 at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
 at GradleStart.main(Unknown Source)

A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
 at com.essenxmax.additplus.MoldingMachineGui.drawGuiContainerBackgroundLayer(MoldingMachineGui.java:34)
 at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:93)
 

timaxa007

Модератор
5,831
409
672
EssenXmax написал(а):
Код:
 public MoldingMachineGui(InventoryPlayer playerInv, MoldingMachineTileEntity tileentity) {
  super(new MoldingMachineContainer(playerInv, tileentity));
  xSize = 200;
  ySize = 200;
 }

Код:
 public MoldingMachineGui(InventoryPlayer playerInv, MoldingMachineTileEntity tileentity) {
  super(new MoldingMachineContainer(playerInv, tileentity));
  xSize = 200;
  ySize = 200;
tileMoldingMachine = tileentity;
 }
 
164
1
4
Код:
Caused by: java.lang.NullPointerException
 at com.essenxmax.additplus.MoldingMachineGui.drawGuiContainerBackgroundLayer(MoldingMachineGui.java:34) ~[MoldingMachineGui.class:?]
 

timaxa007

Модератор
5,831
409
672
EssenXmax написал(а):
Код:
 @Override
 protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
  GL11.glColor4f(1F, 1F, 1F, 1F);
  mc.getTextureManager().bindTexture(texture);
  int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
  
        
        if (this.tileMoldingMachine.isBurning())
        {
            int i1 = this.tileMoldingMachine.getBurnTimeRemainingScaled(13);
            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 1);
            i1 = this.tileMoldingMachine.getCookProgressScaled(24);
            this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
        
        }
 
 }

Код:
 @Override
 public void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
  GL11.glColor4f(1F, 1F, 1F, 1F);
  mc.getTextureManager().bindTexture(texture);
  int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
  
        
        if (this.tileMoldingMachine != null)
        {
        if (this.tileMoldingMachine.isBurning())
        {
            int i1 = this.tileMoldingMachine.getBurnTimeRemainingScaled(13);
            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 1);
            i1 = this.tileMoldingMachine.getCookProgressScaled(24);
            this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
        
        }
        }
 
 }
 
Блин, мне уже не удобно столько спрашивать..пытаюсь сам что то решать, но не все получается..
В слоте для топлива пропадают айтемы. То есть что бы я туда не положил, оно сразу исчезает..

И еще не понимаю как убрать прогресс бары сбоку от интерфейса..по идее они должны были сами убраться
и появляться во время работы вот этой части кода
Код:
 if (this.tileMoldingMachine.isBurning())
        {
            int i1 = this.tileMoldingMachine.getBurnTimeRemainingScaled(13);
            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 1);
            i1 = this.tileMoldingMachine.getCookProgressScaled(24);
            this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
        
        }
...если я правильно понял.


Весь код перерыл..не нахожу решения
Огромное спасибо за терпение :)
 

timaxa007

Модератор
5,831
409
672
EssenXmax написал(а):
В слоте для топлива пропадают айтемы. То есть что бы я туда не положил, оно сразу исчезает..
Нужно удостовериться, что слот у тебя работает правельно.
Ты в MoldingMachineTileEntity исправил метод getStackInSlot?

EssenXmax написал(а):
И еще не понимаю как убрать прогресс бары сбоку от интерфейса..по идее они должны были сами убраться
и появляться во время работы вот этой части кода
Трудно преположить в чём именно проблема.
 
164
1
4
EssenXmax написал(а):
Блин, мне уже не удобно столько спрашивать..пытаюсь сам что то решать, но не все получается..
В слоте для топлива пропадают айтемы. То есть что бы я туда не положил, оно сразу исчезает..

И еще не понимаю как убрать прогресс бары сбоку от интерфейса..по идее они должны были сами убраться
и появляться во время работы вот этой части кода
Код:
 if (this.tileMoldingMachine.isBurning())
        {
            int i1 = this.tileMoldingMachine.getBurnTimeRemainingScaled(13);
            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 1);
            i1 = this.tileMoldingMachine.getCookProgressScaled(24);
            this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
        
        }
...если я правильно понял.


Весь код перерыл..не нахожу решения
Огромное спасибо за терпение :)
Ну правильно, ты же поставил xSize и ySize 200, оно захватывает область прогресс баров:
xCdTMQyde5I.jpg
 
Все отлично! Все исправил, все так как надо! И теперь,чтобы все работало,осталось только рецепты добавить, так?
 
И все таки...Создал отдельный класс MoldingMachineRecepiers и скопировал у печки рецепты:
Код:
package com.essenxmax.additplus;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemFishFood;
import net.minecraft.item.ItemStack;

public class MoldingMachineRecipes {
 
 private static final MoldingMachineRecipes smeltingBase = new MoldingMachineRecipes();
  private Map smeltingList = new HashMap();
     private Map experienceList = new HashMap();
     private static final String __OBFID = "CL_00000085";
     
     
     
     public static MoldingMachineRecipes smelting()
     {
         return smeltingBase;
     }
     
     private MoldingMachineRecipes()
     {
         this.func_151393_a(Blocks.iron_ore, new ItemStack(Items.iron_ingot), 0.7F);
         this.func_151393_a(Blocks.gold_ore, new ItemStack(Items.gold_ingot), 1.0F);
         this.func_151393_a(Blocks.diamond_ore, new ItemStack(Items.diamond), 1.0F);
         this.func_151393_a(Blocks.sand, new ItemStack(Blocks.glass), 0.1F);
         this.func_151396_a(Items.porkchop, new ItemStack(Items.cooked_porkchop), 0.35F);
         this.func_151396_a(Items.beef, new ItemStack(Items.cooked_beef), 0.35F);
         this.func_151396_a(Items.chicken, new ItemStack(Items.cooked_chicken), 0.35F);
         this.func_151393_a(Blocks.cobblestone, new ItemStack(Blocks.stone), 0.1F);
         this.func_151396_a(Items.clay_ball, new ItemStack(Items.brick), 0.3F);
         this.func_151393_a(Blocks.clay, new ItemStack(Blocks.hardened_clay), 0.35F);
         this.func_151393_a(Blocks.cactus, new ItemStack(Items.dye, 1, 2), 0.2F);
         this.func_151393_a(Blocks.log, new ItemStack(Items.coal, 1, 1), 0.15F);
         this.func_151393_a(Blocks.log2, new ItemStack(Items.coal, 1, 1), 0.15F);
         this.func_151393_a(Blocks.emerald_ore, new ItemStack(Items.emerald), 1.0F);
         this.func_151396_a(Items.potato, new ItemStack(Items.baked_potato), 0.35F);
         this.func_151393_a(Blocks.netherrack, new ItemStack(Items.netherbrick), 0.1F);
         ItemFishFood.FishType[] afishtype = ItemFishFood.FishType.values();
         int i = afishtype.length;
         
         for (int j = 0; j < i; ++j)
         {
             ItemFishFood.FishType fishtype = afishtype[j];
             if (fishtype.func_150973_i())
             {
                 this.func_151394_a(new ItemStack(Items.fish, 1, fishtype.func_150976_a()), new ItemStack(Items.cooked_fished, 1, fishtype.func_150976_a()), 0.35F);
             }
         }
         this.func_151393_a(Blocks.coal_ore, new ItemStack(Items.coal), 0.1F);
         this.func_151393_a(Blocks.redstone_ore, new ItemStack(Items.redstone), 0.7F);
         this.func_151393_a(Blocks.lapis_ore, new ItemStack(Items.dye, 1, 4), 0.2F);
         this.func_151393_a(Blocks.quartz_ore, new ItemStack(Items.quartz), 0.2F);
     }
     
     public void func_151393_a(Block p_151393_1_, ItemStack p_151393_2_, float p_151393_3_)
     {
         this.func_151396_a(Item.getItemFromBlock(p_151393_1_), p_151393_2_, p_151393_3_);
     }
     public void func_151396_a(Item p_151396_1_, ItemStack p_151396_2_, float p_151396_3_)
     {
         this.func_151394_a(new ItemStack(p_151396_1_, 1, 32767), p_151396_2_, p_151396_3_);
     }
     public void func_151394_a(ItemStack p_151394_1_, ItemStack p_151394_2_, float p_151394_3_)
     {
         this.smeltingList.put(p_151394_1_, p_151394_2_);
         this.experienceList.put(p_151394_2_, Float.valueOf(p_151394_3_));
     }
     
     /**
      * Returns the smelting result of an item.
      */
     public ItemStack getSmeltingResult(ItemStack p_151395_1_)
     {
         Iterator iterator = this.smeltingList.entrySet().iterator();
         Entry entry;
         do
         {
             if (!iterator.hasNext())
             {
                 return null;
             }
             entry = (Entry)iterator.next();
         }
         while (!this.func_151397_a(p_151395_1_, (ItemStack)entry.getKey()));
         return (ItemStack)entry.getValue();
     }
     private boolean func_151397_a(ItemStack p_151397_1_, ItemStack p_151397_2_)
     {
         return p_151397_2_.getItem() == p_151397_1_.getItem() && (p_151397_2_.getItemDamage() == 32767 || p_151397_2_.getItemDamage() == p_151397_1_.getItemDamage());
     }
     public Map getSmeltingList()
     {
         return this.smeltingList;
     }
     public float func_151398_b(ItemStack p_151398_1_)
     {
         float ret = p_151398_1_.getItem().getSmeltingExperience(p_151398_1_);
         if (ret != -1) return ret;
         Iterator iterator = this.experienceList.entrySet().iterator();
         Entry entry;
         do
         {
             if (!iterator.hasNext())
             {
                 return 0.0F;
             }
             entry = (Entry)iterator.next();
         }
         while (!this.func_151397_a(p_151398_1_, (ItemStack)entry.getKey()));
         return ((Float)entry.getValue()).floatValue();
     }
}
нифига не работает( игра запускается, но когда я пытаюсь переплавить железо,то ничего не происходит, мало того...что топливо, что руда ставятся как в верхний слот для руды, так и в нижний слот для топлива.
Безрукий я, но жутко хочется научится моддингу..без помощи профессионалов никак
 

timaxa007

Модератор
5,831
409
672
У тебя update есть в твоём TileEntity?
То что у тебя вставляется в тот и другой возможно, что-то в методах (добавленные от IInventory), что-то написано не правельно.
MoldingMachineRecepiers, то что у тебя он создан - это хорошо. Но используется он у тебя (в твоём TileEntity и Container)?
 
Update в TileEntity не нашел, значит нету.
В TileEntity и Container  было пару промашек (вместо MoldingMachineRecipes было FurnaceRecipes (исправил))
[merge_posts_bbcode]Добавлено: 22.06.2016 22:19:09[/merge_posts_bbcode]

А в методах от IInventory все должно быть правильно..у печки же все копировал.

[merge_posts_bbcode]Добавлено: 22.06.2016 22:42:03[/merge_posts_bbcode]

Код:
public static boolean isItemFuel(ItemStack p_145954_0_)
    {
        /**
         * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't
         * fuel
         */
        return getItemBurnTime(p_145954_0_) > 0;
    }
 
 
 //////////////////
 @Override
 public boolean isUseableByPlayer(EntityPlayer player) {
   return this.worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false : player.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;
  
 }
 @Override
 public void openInventory() {
  // TODO Auto-generated method stub
  
 }
 @Override
 public void closeInventory() {
  // TODO Auto-generated method stub
  
 }
 /**
     * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot.
     */
 
 @Override
 public boolean isItemValidForSlot(int var1, ItemStack var2) {
  
   return var1 == 2 ? false : (var1 == 1 ? isItemFuel(var2) : true);
 }
 /**
     * Returns an array containing the indices of the slots that can be accessed by automation on the given side of this
     * block.
     */
    public int[] getAccessibleSlotsFromSide(int var1)
    {
        if(var1 == 0){
         if(var1 == 1){
          return slotsTop;
         }else{
          return slotsSides;
         }
         
         }else{
          return slotsBottom;
        }
          
          //var1 == 0 ? slotsBottom : (var1== 1 ? slotsTop : slotsSides);
    }
    /**
     * Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_)
    {
        return this.isItemValidForSlot(p_102007_1_, p_102007_2_);
    }

Вот возможно где то здесь ошибка..?
 
769
1
42
Посмотри внимательно уроки(и те, которые я тебе скинул), посмотри на minecrafforum`e с такой же проблемой
 
Сверху