Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    UNSOLVED TileEntity type XXX$TileEntityCustom has throw an exception trying to write state. It will not persist.

    Sans suite
    1.12.2
    2
    8
    116
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Alatrick last edited by Alatrick

      Bonjour
      Je voulais créer un bloc basique qui émet de la lumière et j’ai cette erreur:

      [18:35:27] [Server thread/ERROR] [FML]: A TileEntity type fr.alatrick.admintoolmod.mcreator_megaTorch$TileEntityCustom has throw an exception trying to write state. It will not persist. Report this to the mod author
      java.lang.RuntimeException: class fr.alatrick.admintoolmod.mcreator_megaTorch$TileEntityCustom is missing a mapping! This is a bug!
      	at net.minecraft.tileentity.TileEntity.writeInternal(TileEntity.java:89) ~[TileEntity.class:?]
      	at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:80) ~[TileEntity.class:?]
      	at net.minecraft.tileentity.TileEntityLockable.writeToNBT(TileEntityLockable.java:22) ~[TileEntityLockable.class:?]
      	at fr.alatrick.admintoolmod.mcreator_megaTorch$TileEntityCustom.writeToNBT(mcreator_megaTorch.java:165) ~[mcreator_megaTorch$TileEntityCustom.class:?]
      	at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:414) [AnvilChunkLoader.class:?]
      	at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:185) [AnvilChunkLoader.class:?]
      	at net.minecraft.world.gen.ChunkProviderServer.saveChunkData(ChunkProviderServer.java:214) [ChunkProviderServer.class:?]
      	at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:242) [ChunkProviderServer.class:?]
      	at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:2730) [WorldServer.class:?]
      	at org.spongepowered.common.world.WorldManager.saveWorld(WorldManager.java:564) [WorldManager.class:?]
      	at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:4113) [MinecraftServer.class:?]
      	at net.minecraft.server.MinecraftServer.constant$getSaveTickInterval$zjo000(MinecraftServer.java:4065) [MinecraftServer.class:?]
      	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:762) [MinecraftServer.class:?]
      	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) [MinecraftServer.class:?]
      	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
      

      Comme je code coté plugin que je maîtrise pas trop Forge? c’est un logiciel qui a généré le code:

      import net.minecraft.util.ResourceLocation;
      import net.minecraftforge.fml.relauncher.SideOnly;
      import net.minecraftforge.fml.relauncher.Side;
      import net.minecraftforge.fml.common.registry.GameRegistry;
      import net.minecraftforge.fml.common.event.FMLInitializationEvent;
      import net.minecraftforge.client.model.ModelLoader;
      import net.minecraftforge.client.event.ModelRegistryEvent;
      
      import net.minecraft.world.World;
      import net.minecraft.util.math.BlockPos;
      import net.minecraft.util.NonNullList;
      import net.minecraft.util.EnumBlockRenderType;
      import net.minecraft.util.BlockRenderLayer;
      import net.minecraft.tileentity.TileEntityLockableLoot;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.item.ItemStack;
      import net.minecraft.item.ItemBlock;
      import net.minecraft.item.Item;
      import net.minecraft.inventory.ItemStackHelper;
      import net.minecraft.inventory.InventoryHelper;
      import net.minecraft.inventory.ContainerDispenser;
      import net.minecraft.inventory.Container;
      import net.minecraft.entity.player.InventoryPlayer;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.client.renderer.block.model.ModelResourceLocation;
      import net.minecraft.block.state.IBlockState;
      import net.minecraft.block.material.Material;
      import net.minecraft.block.SoundType;
      import net.minecraft.block.ITileEntityProvider;
      import net.minecraft.block.Block;
      
      import java.io.File;
      
      public class mcreator_megaTorch extends admintoolmod.ModElement {
      
      	@GameRegistry.ObjectHolder("admintoolmod:megatorch")
      	public static final Block block = null;
      
      	public mcreator_megaTorch(admintoolmod instance) {
      		super(instance);
      		instance.blocks.add(() -> new BlockCustom());
      		instance.items.add(() -> new ItemBlock(block).setRegistryName(block.getRegistryName()));
      	}
      
      	@Override
      	public void init(FMLInitializationEvent event) {
      		GameRegistry.registerTileEntity(TileEntityCustom.class, "admintoolmod:tileentitymegatorch");
      	}
      
      	@SideOnly(Side.CLIENT)
      	@Override
      	public void registerModels(ModelRegistryEvent event) {
      		ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation("admintoolmod:megatorch", "inventory"));
      	}
      
      	public static class BlockCustom extends Block implements ITileEntityProvider {
      
      		public BlockCustom() {
      			super(Material.WOOD);
      			setRegistryName("megatorch");
      			setUnlocalizedName("megatorch");
      			setSoundType(SoundType.WOOD);
      			setHarvestLevel("pickaxe", 1);
      			setHardness(2F);
      			setResistance(10F);
      			setLightLevel(1F);
      			setLightOpacity(255);
      			setCreativeTab(mcreator_adminToolMod.tab);
      		}
      
      		@SideOnly(Side.CLIENT)
      		@Override
      		public BlockRenderLayer getBlockLayer() {
      			return BlockRenderLayer.SOLID;
      		}
      
      		@Override
      		public TileEntity createNewTileEntity(World worldIn, int meta) {
      			return new TileEntityCustom();
      		}
      
      		@Override
      		public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int eventID, int eventParam) {
      			super.eventReceived(state, worldIn, pos, eventID, eventParam);
      			TileEntity tileentity = worldIn.getTileEntity(pos);
      			return tileentity == null ? false : tileentity.receiveClientEvent(eventID, eventParam);
      		}
      
      		@Override
      		public EnumBlockRenderType getRenderType(IBlockState state) {
      			return EnumBlockRenderType.MODEL;
      		}
      
      		@Override
      		public void breakBlock(World world, BlockPos pos, IBlockState state) {
      			TileEntity tileentity = world.getTileEntity(pos);
      			InventoryHelper.dropInventoryItems(world, pos, (TileEntityCustom) tileentity);
      			world.removeTileEntity(pos);
      			super.breakBlock(world, pos, state);
      		}
      
      		@Override
      		public boolean hasComparatorInputOverride(IBlockState state) {
      			return true;
      		}
      
      		@Override
      		public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) {
      			TileEntity tileentity = worldIn.getTileEntity(pos);
      			if (tileentity instanceof TileEntityCustom)
      				return Container.calcRedstoneFromInventory((TileEntityCustom) tileentity);
      			else
      				return 0;
      		}
      	}
      
      	public static class TileEntityCustom extends TileEntityLockableLoot {
      
      		private NonNullList<ItemStack> stacks = NonNullList.<ItemStack> withSize(9, ItemStack.EMPTY);
      
      		@Override
      		public int getSizeInventory() {
      			return 9;
      		}
      
      		@Override
      		public boolean isEmpty() {
      			for (ItemStack itemstack : this.stacks)
      				if (!itemstack.isEmpty())
      					return false;
      			return true;
      		}
      
      		@Override
      		public boolean isItemValidForSlot(int index, ItemStack stack) {
      			return true;
      		}
      
      		@Override
      		public ItemStack getStackInSlot(int slot) {
      			return stacks.get(slot);
      		}
      
      		@Override
      		public String getName() {
      			return this.hasCustomName() ? this.customName : "container.megatorch";
      		}
      
      		@Override
      		public void readFromNBT(NBTTagCompound compound) {
      			super.readFromNBT(compound);
      			this.stacks = NonNullList.<ItemStack> withSize(this.getSizeInventory(), ItemStack.EMPTY);
      			if (!this.checkLootAndRead(compound))
      				ItemStackHelper.loadAllItems(compound, this.stacks);
      			if (compound.hasKey("CustomName", 8))
      				this.customName = compound.getString("CustomName");
      		}
      
      		@Override
      		public NBTTagCompound writeToNBT(NBTTagCompound compound) {
      			super.writeToNBT(compound);
      			if (!this.checkLootAndWrite(compound))
      				ItemStackHelper.saveAllItems(compound, this.stacks);
      			if (this.hasCustomName())
      				compound.setString("CustomName", this.customName);
      			return compound;
      		}
      
      		@Override
      		public int getInventoryStackLimit() {
      			return 64;
      		}
      
      		@Override
      		public String getGuiID() {
      			return "admintoolmod:megatorch";
      		}
      
      		@Override
      		public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) {
      			this.fillWithLoot(playerIn);
      			return new ContainerDispenser(playerInventory, this);
      		}
      
      		@Override
      		protected NonNullList<ItemStack> getItems() {
      			return this.stacks;
      		}
      	}
      }
      
      

      Quelqu’un sait pourquoi j’ai ce problème ? Je n’ai pas réussi a le résoudre depuis plusieurs heures. J’ai lu que la TileEntity ne serait pas “déclaré”, mais il le fait ligne 48
      Pour mon plugin j’ai besoin d’une TileEntity 😢

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by robin4002

        Bonsoir,

        MCreator est un très mauvais logiciel générant un code erroné, ça ne m’étonnerait pas que ta fonction init ligne 47 ne sont en réalité jamais appelé (d’où le problème).

        Donc soit tu trouves comment déboguer ça (bonne chance) soit tu reprends ton code au propre dans un IDE et ça sera probablement plus simple pour déboguer.

        1 Reply Last reply Reply Quote 0
        • A
          Alatrick last edited by Alatrick

          En fait je génère le code et je le mets dans IntelliJ et je le modifie, ça m’aide car je code plus des plugins Sponge et quand j’ai besoin d’un item juste pour l’apparence en gros je prends ce MCreator genre pour mettre le jour j’ai un item avec une texture de soleil et c’est bien mieux qu’un bâton^^.

          J’ai besoin de cette TileEntity pour stocker des choses dans le bloc si je peux pas je suis obligé de le faire en conf et c’est assez lourd

          1 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

            Dans ce cas il te reste à trouver pourquoi init n’est pas appelé.
            Mais franchement tu ferais mieux de ne pas utiliser mcreator, car il risque de te causer d’autres soucis.

            1 Reply Last reply Reply Quote 0
            • A
              Alatrick last edited by

              J’ai mit ce code dans l’event FMLPreInitializationEvent de la main class et plus de problème on dirait:
              GameRegistry.registerTileEntity(mcreator_megaTorch.TileEntityCustom.class, “admintoolmod:tileentitymegatorch”);

              Je code pas sur forge malheureusement et j’ai pas trop le temps d’apprendre déja que parfois je galère sur Sponge. A moins que quelqu’un me recode tout. Je paye^^.
              Il y a mieux que mcreator?

              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                Il y a mieux que mcreator?

                Développer soi-même le mod. C’est la seule meilleur chose qu’il y a.

                1 Reply Last reply Reply Quote 0
                • A
                  Alatrick last edited by

                  J’essaierais de regarder cela comme je fais tout coté serveur(même les craft) l’intérêt du mod c’est surtout d’avoir de nouveau item avec une nouvelle texture pour savoir directement en les voyants a quoi ils servent d’ou ma feignantise d’apprendre a coder sur Forge.
                  Ca ne devrait pas être difficile a refaire si j’ai un code d’exemple a modifier.

                  PS:
                  D’ailleurs quand je pose un bloc créé par ce logiciel j’ai pas de Keys.DIRECTION de disponible sur Sponge ce qui est assez embêtant. Je suppose que le bloc doit déclarer cela, mais jamais comprit comment faire:

                  Sponge requires block implementations to reveal the key/values available. It does not discover them automatically.
                  
                  You will need to implement the necessary MixinBlock / IMixinBlock methods.
                  See MixinBlockFurnace as an example of a block with a direction: https://github.com/SpongePowered/SpongeCommon/blob/a9423c7ec9f2b423b52c273f7e7a23818a8f3e41/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlockFurnace.java#L69
                  

                  Donc c’est pas au mod d’implémenter cela ? Je suis pas très bon en anglais

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                    Visiblement il faut implémenter l’interface IMixinBlock et y implémenter la méthode getStateWithValue.

                    1 Reply Last reply Reply Quote 0
                    • 1 / 1
                    • First post
                      Last post
                    Design by Woryk
                    Contact / Mentions Légales / Faire un don

                    MINECRAFT FORGE FRANCE © 2018

                    Powered by NodeBB