Bonjour à tous.
J’ai le preoblème suivant : j’ai un container où un block externe va récupérer des objets dedans. Cependant, lorsque je viens de placer un itemstack manuellement dedans, je dois rouvrir et refermer l’interfacer pour que ça s’affiche correctement, par contre après pour les autres items tout va bien. Dans le côté technique ça fonctionne, mais l’affichage persiste. Je soupçonne le fait que j’exécute trop de trucs côté client, mais je ne parviens pas à trouver la chose qui pose problème. Voici la classe du container :
package pingo.virtualcraft.common;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraftforge.common.util.Constants;
public class TileEntityItemScanner extends TileEntityMultiblock implements IInventory {
private ItemStack[] inventory = new ItemStack[27];
private String name = "itemscanner";
public String getName() {
return name;
}
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
{
this.readFromNBT(pkt.func_148857_g());
}
public Packet getDescriptionPacket()
{
NBTTagCompound nbttagcompound = new NBTTagCompound();
this.writeToNBT(nbttagcompound);
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 3, nbttagcompound);
}
public void readFromNBT(NBTTagCompound nbttag){
super.readFromNBT(nbttag);
NBTTagList nbttaglist = nbttag.getTagList("Items", Constants.NBT.TAG_COMPOUND);
this.inventory = new ItemStack[this.getSizeInventory()];
for (int i = 0; i < nbttaglist.tagCount(); i++)
{
NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.getCompoundTagAt(i);
int j = nbttagcompound1.getByte("Slot");
if (j >= 0 && j < this.inventory.length)
{
this.inventory[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
}
}
}
public void writeToNBT(NBTTagCompound nbttag){
super.writeToNBT(nbttag);
NBTTagList nbttaglist = new NBTTagList();
for (int i = 0; i < this.inventory.length; i++)
{
if (this.inventory* != null)
{
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.setByte("Slot", (byte)i);
this.inventory*.writeToNBT(nbttagcompound1);
nbttaglist.appendTag(nbttagcompound1);
}
}
nbttag.setTag("Items", nbttaglist);
}
@Override
public void invalidate() {
if (!worldObj.isRemote){
if (this.hasMaster) {
if ((TileEntityMultiblock) this.master != null) ((TileEntityMultiblock) this.master).elements = ((TileEntityMultiblock) this.master).newMaster();
}
}
super.invalidate();
}
@Override
public int getSizeInventory() {
return inventory.length;
}
@Override
public ItemStack getStackInSlot(int slotId) {
return inventory[slotId];
}
@Override
public ItemStack decrStackSize(int slotId, int quantity)
{
if (this.inventory[slotId] != null)
{
ItemStack itemstack;
if (this.inventory[slotId].stackSize <= quantity)
{
itemstack = this.inventory[slotId];
this.inventory[slotId] = null;
this.checkSorting();
this.iAmLookingForSomething();
this.checkSorting();
this.markDirty();
return itemstack;
}
else
{
itemstack = this.inventory[slotId].splitStack(quantity);
if (this.inventory[slotId].stackSize == 0)
{
this.inventory[slotId] = null;
}
this.checkSorting();
this.iAmLookingForSomething();
this.checkSorting();
this.markDirty();
return itemstack;
}
}
else
{
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int slotId)
{
if (this.inventory[slotId] != null)
{
ItemStack itemstack = this.inventory[slotId];
this.inventory[slotId] = null;
return itemstack;
}
else
{
return null;
}
}
@Override
public void setInventorySlotContents(int slotId, ItemStack stack)
{
this.inventory[slotId] = stack;
if (stack != null && stack.stackSize > this.getInventoryStackLimit())
{
int redrop = stack.stackSize - this.getInventoryStackLimit();
stack.stackSize = this.getInventoryStackLimit();
}
this.checkSorting();
this.iAmLookingForSomething();
this.checkSorting();
this.markDirty();
}
@Override
public String getInventoryName() {
return "container.EUsInjector";
}
@Override
public boolean hasCustomInventoryName() {
return false;
}
@Override
public int getInventoryStackLimit()
{
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player)
{
return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64;
}
@Override
public void openInventory() {
}
@Override
public void closeInventory() {
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack item) {
return true;
}
public void checkSorting() {
boolean areThereItems;
for (int k = 0; 26 > k; k++) {
areThereItems = false;
for (int i = k; 27 > i; i++){
if (this.inventory* != null){
areThereItems = true;
}
}
if (areThereItems) {
while (this.inventory[k] == null){
for (int i = k; 26 > i; i++){
this.inventory* = this.inventory[i+1];
this.inventory[i+1] = null;
}
}
}
}
}
public void iAmLookingForSomething() {
System.out.println("iAmLookingForSomething");
if (this.hasMaster && (!worldObj.isRemote) && this.inventory[0] != null) {
this.inventory[0] = ((TileEntityMultiblockControler) this.master).giveStack(this.inventory[0]);
checkSorting();
this.markDirty();
}
}
}
Pouvez-vous m’aider ?
Merci d’avance !