Résolu TileEntity Cannot be cast to
-
J’ai créer un gui mais j’ai cette erreur :
Caused by: java.lang.ClassCastException: gr8pefish.ironbackpacks.tileenitity.TileEntityPestle cannot be cast to net.minecraftforge.items.IItemHandler at gr8pefish.ironbackpacks.slot.SlotPestleOutput.<init>(SlotPestleOutput.java:22) ~[SlotPestleOutput.class:?] at gr8pefish.ironbackpacks.gui.ContainerPestle.<init>(ContainerPestle.java:22) ~[ContainerPestle.class:?] at gr8pefish.ironbackpacks.gui.GuiHandlerPestle.getServerGuiElement(GuiHandlerPestle.java:17) ~[GuiHandlerPestle.class:?] at net.minecraftforge.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:254) ~[NetworkRegistry.class:?] at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:87) ~[FMLNetworkHandler.class:?] at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2808) ~[EntityPlayer.class:?] at gr8pefish.ironbackpacks.blocks.BlockPestle.onBlockActivated(BlockPestle.java:93) ~[BlockPestle.class:?] at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:472) ~[PlayerInteractionManager.class:?] at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:767) ~[NetHandlerPlayServer.class:?] at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:68) ~[CPacketPlayerTryUseItemOnBlock.class:?] at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:13) ~[CPacketPlayerTryUseItemOnBlock.class:?] at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_152] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_152] at net.minecraft.util.Util.runTask(Util.java:53) ~[Util.class:?] … 5 more
Autre erreur :
[20:06:29] [Server thread/ERROR] [FML]: A TileEntity type gr8pefish.ironbackpacks.tileenitity.TileEntityPestle has throw an exception trying to write state. It will not persist. Report this to the mod author java.lang.RuntimeException: class gr8pefish.ironbackpacks.tileenitity.TileEntityPestle 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.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:412) [AnvilChunkLoader.class:?] at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:183) [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:1060) [WorldServer.class:?] at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:468) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.saveAllWorlds(IntegratedServer.java:274) [IntegratedServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:177) [IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:590) [MinecraftServer.class:?]
TileEntityPestle :
package gr8pefish.ironbackpacks.tileenitity;
import com.google.common.collect.Table;
import gr8pefish.ironbackpacks.recipe.PestleRecipe;import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ItemStackHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable;
import net.minecraft.util.NonNullList;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.ItemStackHandler;public class TileEntityPestle extends TileEntity
{public ItemStackHandler inventory = new ItemStackHandler(3)
{
@Override
public int getSlotLimit(int slot)
{
return 1;
}@Override
protected void onContentsChanged(int slot)
{}
};
private String customName;public String getName()
{
return this.hasCustomName() ? this.customName : “Mortar and Pestle”;
}public boolean hasCustomName()
{
return this.customName != null && !this.customName.isEmpty();
}public void setCustomName(String customName)
{
this.customName = customName;
}@Override
public ITextComponent getDisplayName()
{
return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.customName);
}private boolean canCraft()
{
if(((ItemStack)this.inventory.getStackInSlot(0)).isEmpty() || ((ItemStack)this.inventory.getStackInSlot(1)).isEmpty())
return false;
else
{
ItemStack result = PestleRecipe.instance().getPestleResult((ItemStack)this.inventory.getStackInSlot(0), (ItemStack)this.inventory.getStackInSlot(1));if(result.isEmpty())
return false;
else
{
ItemStack output = (ItemStack)this.inventory.getStackInSlot(2);if(output.isEmpty())
return true;
if(!output.isItemEqual(result))
return false;
int res = output.getCount() + result.getCount();
return res <= this.inventory.getSlotLimit(1) && res <= output.getMaxStackSize();}
}
}
public void craftItem()
{
if(this.canCraft())
{
ItemStack input1 = (ItemStack)this.inventory.getStackInSlot(0);
ItemStack input2 = (ItemStack)this.inventory.getStackInSlot(1);
ItemStack result = PestleRecipe.instance().getPestleResult(input1, input2);
ItemStack output = (ItemStack)this.inventory.getStackInSlot(2);if(output.isEmpty())
this.inventory.setStackInSlot(2, result.copy());
else if(output.getItem() == result.getItem())
output.grow(result.getCount());input1.shrink(1);
input2.shrink(1);
}
}@Override
public boolean hasCapability(Capability capability, EnumFacing facing)
{
if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
return true;
return super.hasCapability(capability, facing);
}@Override
public <t>T getCapability(Capability <t>capability, EnumFacing facing)
{
if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
return (T)inventory;
return super.getCapability(capability, facing);
}}
GuidHandlerPestle :
package gr8pefish.ironbackpacks.gui;
import gr8pefish.ironbackpacks.tileenitity.TileEntityPestle;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.IGuiHandler;public class GuiHandlerPestle implements IGuiHandler
{public static final int PESTLE_GUI = 0;
public static final int FORGE_GUI = 0;@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
if(ID == PESTLE_GUI)
return new ContainerPestle(player.inventory, ((TileEntityPestle)world.getTileEntity(new BlockPos(x, y, z))));
return null;
}@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
if(ID == PESTLE_GUI)
return new GuiPestle(player.inventory, ((TileEntityPestle)world.getTileEntity(new BlockPos(x, y, z))));
return null;
}GuiPestle :
package gr8pefish.ironbackpacks.gui;
import gr8pefish.ironbackpacks.IronBackpacks;
import gr8pefish.ironbackpacks.tileenitity.TileEntityPestle;import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.util.ResourceLocation;public class GuiPestle extends GuiContainer{
private static final ResourceLocation PESTLE_GUI_TEXTURE = new ResourceLocation(IronBackpacks.MODID + “:textures/gui/gui_pestle.png”);
private final InventoryPlayer player;
private final TileEntityPestle tileentity;public GuiPestle(InventoryPlayer player, TileEntityPestle tileentity) {
super(new ContainerPestle(player, tileentity));
this.player = player;
this.tileentity = tileentity;
}@Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
String s = this.tileentity.getDisplayName().getUnformattedComponentText();
this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752);
this.fontRenderer.drawString(this.player.getDisplayName().getUnformattedComponentText(), 8, this.ySize - 96 + 2, 4210752);
}@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.getTextureManager().bindTexture(PESTLE_GUI_TEXTURE);
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);}
}
Voilà j’espère que vous pourrais m’aider :p</t></t></init></init>
-
yo
gr8pefish.ironbackpacks.slot.SlotPestleOutput
pourquoi avoir pris le code du mod IronBackpack ?
envoi cette class stp
-
Je l’ai pris pour les backpacks ^^
package gr8pefish.ironbackpacks.slot; import gr8pefish.ironbackpacks.recipe.PestleRecipe; import gr8pefish.ironbackpacks.tileenitity.TileEntityPestle; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.SlotItemHandler; public class SlotPestleOutput extends SlotItemHandler { private final EntityPlayer player; private int removeCount; public SlotPestleOutput(EntityPlayer player, TileEntityPestle tileentity, int index, int xPosition, int yPosition) { super((IItemHandler)tileentity, index, xPosition, yPosition); this.player = player; } @Override public boolean isItemValid(ItemStack stack) { return false; } @Override public ItemStack decrStackSize(int amount) { if(this.getHasStack()) this.removeCount += Math.min(amount, this.getStack().getCount()); return super.decrStackSize(amount); } @Override public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) { this.onCrafting(stack); super.onTake(player, stack); return stack; } @Override protected void onCrafting(ItemStack stack, int amount) { this.removeCount += amount; this.onCrafting(stack); } }
[size=small
#s3gt_translate_tooltip_mini { display: none !important; }]
-
super((IItemHandler)tileentity, index, xPosition, yPosition); ton tile entity n’implement pas l’interface IItemHandler c’est pour ca que ta une castExcep
-
Donc je change quoi oui je débute donc je m’y connais pas trop
-
copier du code complexe sans connaitre c’est pas conseiller
implement ta class rajoute a la declaration de class
“implements IItemHandler” -
Je met ma class en abstract ou je génère le code qu’il me dit ?
-
non faut pas la mettre en abstract gen le code
en gen le code ca va d’implementer les methods abstraites de l’interface -
Et ensuite j’ai test sa crash:
Laclasse après:
package fr.malyumod.slot; import fr.malyumod.recipe.PestleRecipe; import fr.malyumod.tileenitity.TileEntityPestle; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.SlotItemHandler; public class SlotPestleOutput extends SlotItemHandler implements IItemHandler { private final EntityPlayer player; private int removeCount; public SlotPestleOutput(EntityPlayer player, TileEntityPestle tileentity, int index, int xPosition, int yPosition) { super((IItemHandler)tileentity, index, xPosition, yPosition); this.player = player; } @Override public boolean isItemValid(ItemStack stack) { return false; } @Override public ItemStack decrStackSize(int amount) { if(this.getHasStack()) this.removeCount += Math.min(amount, this.getStack().getCount()); return super.decrStackSize(amount); } @Override public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) { this.onCrafting(stack); super.onTake(player, stack); return stack; } @Override protected void onCrafting(ItemStack stack, int amount) { this.removeCount += amount; this.onCrafting(stack); } @Override public int getSlots() { // TODO Auto-generated method stub return 0; } @Override public ItemStack getStackInSlot(int slot) { // TODO Auto-generated method stub return null; } @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { // TODO Auto-generated method stub return null; } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { // TODO Auto-generated method stub return null; } @Override public int getSlotLimit(int slot) { // TODO Auto-generated method stub return 0; } }
[size=small
#s3gt_translate_tooltip_mini { display: none !important; }]
-
le crash log stp
il faut remplir les methods que ta implementées maintenant je peu pas d’aider je connais pas l’api de ironbackpacks
regarde selon les backpacks du mod comment il a fait et qu’a t-il mit dans ces methodsje crois plutôt que tu devrait refaire un item avec gui fait par toi histoire d’au moins y comprendre un truc mdr car la tu galère comme pas possible
si tu fait ton propre code ca devrait être intensément moins dur déjà