Non résolu TileEntity type XXX$TileEntityCustom has throw an exception trying to write state. It will not persist.
-
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 ;( -
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.
-
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
-
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. -
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? -
Il y a mieux que mcreator?
Développer soi-même le mod. C’est la seule meilleur chose qu’il y a.
-
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
-
Visiblement il faut implémenter l’interface IMixinBlock et y implémenter la méthode getStateWithValue.