[1.7.10]TileEntity не работает

Статус
В этой теме нельзя размещать новые ответы.
Захотел прописать GUI блоку. Для этого создал:

TileEntity
Код:
package ru.zixxa.mercenary.tileentity;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.tileentity.TileEntity;

public class SmithyTileEntity extends TileEntity{
   @Override
   public void writeToNBT(NBTTagCompound par1)
   {
      super.writeToNBT(par1);
   }

   @Override
   public void readFromNBT(NBTTagCompound par1)
   {
      super.readFromNBT(par1);
   }
   public class ModTileEntity extends TileEntity implements IUpdatePlayerListBox {

        @Override
        public void update() {
            System.out.println("Hello, I'm a TileEntity!");
        }
    }
}

TileEntities
Код:
package ru.zixxa.mercenary.tileentity;

import cpw.mods.fml.common.registry.GameRegistry;

public final class MercenaryTileEntities {

    public static void init() {
        GameRegistry.registerTileEntity(SmithyTileEntity.class, "tutorial_tile_entity");
    }

}
И собственно, сам блок
Код:
package ru.zixxa.mercenary;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import ru.zixxa.mercenary.tileentity.SmithyTileEntity;



public class Smithy extends BlockContainer {
    protected Smithy() {
        super(Material.iron);
        this.setBlockName("Smithy");
        this.setCreativeTab(CreativeTabs.tabBlock);
        this.setHardness(15F);
        this.setResistance(10F);
        this.setHarvestLevel("pickaxe", 1);
        this.setBlockTextureName("mercenary:Smithy");
    }
    @Override
     public TileEntity createNewTileEntity(World worldIn, int meta) {
            return new SmithyTileEntity();
        }
    }

Дальше залез проверять в игру. По задумке, в консоль должно высветится Hello, но я вижу только эту ошибку:
Код:
[08:48:26] [Server thread/ERROR] [FML]: A TileEntity type ru.zixxa.mercenary.tileentity.SmithyTileEntity has throw an exception trying to write state. It will not persist. Report this to the mod author
java.lang.RuntimeException: class ru.zixxa.mercenary.tileentity.SmithyTileEntity is missing a mapping! This is a bug!
    at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:96) ~[TileEntity.class:?]
    at ru.zixxa.mercenary.tileentity.SmithyTileEntity.writeToNBT(SmithyTileEntity.java:11) ~[SmithyTileEntity.class:?]
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:395) [AnvilChunkLoader.class:?]
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:204) [AnvilChunkLoader.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.safeSaveChunk(ChunkProviderServer.java:287) [ChunkProviderServer.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:340) [ChunkProviderServer.class:?]
    at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:863) [WorldServer.class:?]
    at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:370) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:636) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]

Я не знаю, почему это не работает, пользуюсь этим гайдом:
Гугл/Поиск по форуму не спасли, промучался всю ночь. Надеюсь на вашу помощь.
 
643
6
14
Мне интересно где ты регистрируешь класс TileEntities
 
398
4
7
Выкини класс MercenaryTileEntities - в нем нет необходимости.
А в главном классе мода должно быть:

Код:
@EventHandler
public void что_угодно(FMLPreInitializationEvent event) {
  GameRegistry.registerTileEntity(SmithyTileEntity.class, "tutorial_tile_entity");
}
[merge_posts_bbcode]Добавлено: 08.03.2016 11:41:53[/merge_posts_bbcode]

Вместо "tutorial_tile_entity" лучше писать "ид_мода.tutorial_tile_entity", чтобы не было случайных совпадений с другими модами.
 
643
6
14
Asd73 написал(а):
Выкини класс MercenaryTileEntities - в нем нет необходимости.
А в главном классе мода должно быть:

Код:
@EventHandler
public void что_угодно(FMLPreInitializationEvent event) {
  GameRegistry.registerTileEntity(SmithyTileEntity.class, "tutorial_tile_entity");
}
Я один в клиентпрокси его в Init пихаю?
 

timaxa007

Модератор
5,831
409
672
Код:
class ru.zixxa.mercenary.tileentity.SmithyTileEntity is missing a mapping!
Причина этой ошибки, часто связано - с твоим не зарегистрированным TileEntity, т.е. SmithyTileEntity. Как регистрировать показал Asd73.

Develance написал(а):
Я один в клиентпрокси его в Init пихаю?
В клиент прокси? Не знаю. В клиент прокси я не когда не регистрировал, но думаю для сервера это не понравиться.
Смотря какая версия. С 1.7 рекомендовано в PreInit, до 1.7 в Init.
 
Asd73 написал(а):
Выкини класс MercenaryTileEntities - в нем нет необходимости.
А в главном классе мода должно быть:

Код:
@EventHandler
public void что_угодно(FMLPreInitializationEvent event) {
  GameRegistry.registerTileEntity(SmithyTileEntity.class, "tutorial_tile_entity");
}
[merge_posts_bbcode]Добавлено: 08.03.2016 11:41:53[/merge_posts_bbcode]

Вместо "tutorial_tile_entity" лучше писать "ид_мода.tutorial_tile_entity", чтобы не было случайных совпадений с другими модами.
Сделал так, как вы сказали.
Удалил MercenaryTileEntities
Добавил в главный класс мода ваш код и слегка отредактировал. Вот результат:

Код:
package ru.zixxa.mercenary;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import ru.zixxa.mercenary.tileentity.SmithyTileEntity;

@Mod (modid = "mercenary", name = "Mercenary", version = "0.1")
    public class CoreMercenary {
    public static Item chain_plate;
    public static Item chain_link;
    public static Item hot_iron_ingot;
    public static Block smithy;
    public static Item iron_hammer;
    @SidedProxy(clientSide = "ru.zixxa.mercenary.ClientSide", serverSide = "ru.zixxa.mercenary.ServerSide")
    public static ServerSide proxy;
    @EventHandler
    public void preLoad(FMLPreInitializationEvent event)
    {
        chain_plate = new Chain_Plate().setUnlocalizedName("Chain Plate");
        hot_iron_ingot = new Hot_Iron_Ingot().setUnlocalizedName("Hot Iron Ingot");
        chain_link = new Chain_Link().setUnlocalizedName("Chain Link");
        smithy = new Smithy();
        iron_hammer = new Iron_Hammer().setUnlocalizedName("Iron Hammer");
        GameRegistry.registerItem(chain_link, "chain_link");
        GameRegistry.registerItem(chain_plate, "chain_plate");
        GameRegistry.registerItem(hot_iron_ingot, "hot_iron_ingot");
        GameRegistry.registerBlock(smithy, "smithy");
        GameRegistry.registerItem(iron_hammer,"iron_hammer");
        GameRegistry.registerTileEntity(SmithyTileEntity.class, "mercenary.tutorial_tile_entity");
    }
}
Ничего другого не изменял.
Зашёл в игру, теперь блок не отсылает ошибок, но "Hello" я от него так и не дождался. Что я снова сделал не так?
 

timaxa007

Модератор
5,831
409
672
ModTileEntity у тебя должен отсылать Hello, а не SmithyTileEntity.
 
timaxa007 написал(а):
ModTileEntity у тебя должен отсылать Hello, а не SmithyTileEntity.
Если я правильно понял, вы про класс, который внутри SmithyTileEntity?
Код:
package ru.zixxa.mercenary.tileentity;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.tileentity.TileEntity;

public class SmithyTileEntity extends TileEntity{
   @Override
   public void writeToNBT(NBTTagCompound par1)
   {
      super.writeToNBT(par1);
   }

   @Override
   public void readFromNBT(NBTTagCompound par1)
   {
      super.readFromNBT(par1);
   }
   public class ModTileEntity extends TileEntity implements IUpdatePlayerListBox {

        @Override
        public void update() {
            System.out.println("Hello, I'm a TileEntity!");
        }
    }
}
Вот содержимое, но я вас всё-таки не очень понял.
 

timaxa007

Модератор
5,831
409
672
Ага, которые внутри этого класса. В ModTileEntity есть Hello, а не SmithyTileEntity. ,а ты зарегистрировал SmithyTileEntity, (а не)/(и) ModTileEntity.
 
Ага...
Исправил:
Код:
 GameRegistry.registerTileEntity(SmithyTileEntity.class, "mercenary.tutorial_tile_entity");

На:
Код:
GameRegistry.registerTileEntity(ModTileEntity.class, "mercenary.tutorial_tile_entity");
Теперь снова посылает ошибочку:
Код:
[Server thread/ERROR] [FML]: A TileEntity type ru.zixxa.mercenary.tileentity.SmithyTileEntity has throw an exception trying to write state. It will not persist. Report this to the mod author
java.lang.RuntimeException: class ru.zixxa.mercenary.tileentity.SmithyTileEntity is missing a mapping! This is a bug!
    at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:96) ~[TileEntity.class:?]
    at ru.zixxa.mercenary.tileentity.SmithyTileEntity.writeToNBT(SmithyTileEntity.java:11) ~[SmithyTileEntity.class:?]
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:395) [AnvilChunkLoader.class:?]
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:204) [AnvilChunkLoader.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.safeSaveChunk(ChunkProviderServer.java:287) [ChunkProviderServer.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:340) [ChunkProviderServer.class:?]
    at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:863) [WorldServer.class:?]
    at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:370) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:636) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
[17:07:32] [Server thread/ERROR] [FML]: A TileEntity type ru.zixxa.mercenary.tileentity.SmithyTileEntity has throw an exception trying to write state. It will not persist. Report this to the mod author
java.lang.RuntimeException: class ru.zixxa.mercenary.tileentity.SmithyTileEntity is missing a mapping! This is a bug!
    at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:96) ~[TileEntity.class:?]
    at ru.zixxa.mercenary.tileentity.SmithyTileEntity.writeToNBT(SmithyTileEntity.java:11) ~[SmithyTileEntity.class:?]
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:395) [AnvilChunkLoader.class:?]
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:204) [AnvilChunkLoader.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.safeSaveChunk(ChunkProviderServer.java:287) [ChunkProviderServer.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:340) [ChunkProviderServer.class:?]
    at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:863) [WorldServer.class:?]
    at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:370) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:636) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
Что опять не так?
 

timaxa007

Модератор
5,831
409
672
zixxa, у тебя блок:
Код:
    @Override
     public TileEntity createNewTileEntity(World worldIn, int meta) {
            return new SmithyTileEntity();
        }
устанавливает SmithyTileEntity, а не ModTileEntity.
 
Думал над этим почти весь день. Пробывал регистрировать оба - нет. Вот никак.
 
52
0
Удали ModTileEntity, он тебе не нужен. Метод @update скопируй в свой SmithyTileEntity.

Код:
package ru.zixxa.mercenary.tileentity;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.tileentity.TileEntity;

public class SmithyTileEntity extends TileEntity{
   @Override
   public void writeToNBT(NBTTagCompound par1)
   {
      super.writeToNBT(par1);
   }

   @Override
   public void readFromNBT(NBTTagCompound par1)
   {
      super.readFromNBT(par1);
   }

    @Override
    public void update() {
        System.out.println("Hello, I'm a TileEntity!");
    }

}
 
The method update() of type SmithyTileEntity must override or implement a supertype method


И как-то всё-равно нет. Ваш код кажется не сработал.
 
Исправил - ничего не изменилось.
Код:
  @Override
    public void onUpdate() {
        System.out.println("Hello, I'm a TileEntity!");
    }

}
 
Попробывал другой гайд, получилось так:

Код:
package ru.zixxa.mercenary.tileentity;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.tileentity.TileEntity;

public class TileEntitySmithy extends TileEntity{
   @Override
   public void writeToNBT(NBTTagCompound par1)
   {
      super.writeToNBT(par1);
      par1.setInteger("customField", customField);
   }

   @Override
   public void readFromNBT(NBTTagCompound par1)
   {
      super.readFromNBT(par1);
      this.customField = par1.getInteger("customField");
   }
   public int customField;
   
}
Ничего изменять не нужно?
Также буду благодарен за нормальный гайд по GUI и можно закрывать. Английский я плохо понимаю.
 

timaxa007

Модератор
5,831
409
672
"Изменить" - вроде ни чего не надо, но вот "Добавить" возможно.
По идеи нормальных гайдов по GUI нет. Так как для GUI, есть множество элементов для него, и так множество вариантов и способов в его создании. Так как не всегда нужно только GUI.
 
Тогда гайд и по простому TileEntity сгодится.
А так, тему можно закрывать, спасибо за ответы.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху