Jump to content

Villfuk02

Members
  • Posts

    301
  • Joined

  • Last visited

Everything posted by Villfuk02

  1. I thought it requires more things.... I allready had the ItemStackHandler here, but i thought i am supposed to implement IItemHandler But now what do i do with this? this.addSlotToContainer(new SlotItemHandler(te, x + y * 9, 15 + x * 16, 15 + y * 16)); (adding slots to a container)
  2. How do i use ItemStackHandler? You said "Use ItemStackHandler", but i dont know how.
  3. Aaaaand, how do i use it? if i dont implement it, where else am i supposed to put it?
  4. Because it wants me to. If i remove it, it says add unimplemented methods.
  5. @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { if(!simulate){ if(this.getStackInSlot(slot)!= null){ ItemStack itemStack; if (this.getStackInSlot(slot).stackSize <= amount) { itemStack = this.getStackInSlot(slot); this.setInventorySlotContents(slot, null); this.markDirty(); return itemStack; }else{ itemStack = this.getStackInSlot(slot).splitStack(amount); if(this.getStackInSlot(slot).stackSize <= 0){ this.setInventorySlotContents(slot, null); }else{ this.setInventorySlotContents(slot, this.getStackInSlot(slot)); } this.markDirty(); return itemStack; } } else { return null; } } return null; } also when i placed hopper under it, the game crashed and i cant load the world anymore
  6. Something is working now, but how do i do this public ItemStack removeStackFromSlot(int index) { ItemStack stack = this.getStackInSlot(index); this.setInventorySlotContents(index, null); return stack; } with IItemHandlerModifiable? (it does not let me take items out from the slots)
  7. Still dont know
  8. OooOO that looks good, but where do i find it?
  9. Sorry, i've read them, but i'm so stupid and new. The language is too technical for me and i dont understand, what am i supposed to do.
  10. I just dont understand what am i exactly supposed to do. COULD ANYONE PLEASE GIVE ME A CODE FOR SIMPLE CHEST WITH ALL THE THINGS LIKE TILEENTITY, GUI CONTAINER AND BLOCK, PLEASE? I will look at the code and learn how to do it, dont worry, i'll not juct copy and paste it.
  11. And how do i use it?
  12. and what am i supposed to do with this? private TileEntityStoneCrate te; public ContainerStoneCrate(IInventory playerInv, TileEntityStoneCrate te) { this.te = te; //Tile Entity, Slot 0-80, Slot IDs 0-80 for (int y = 0; y < 9; ++y){ for (int x = 0; x < 9; ++x){ this.addSlotToContainer(new Slot(te, x + y * 9, 15 + x * 16, 15 + y * 16)); } } the Slot() wants IInventory, but the tileentity isn't IInventory anymore. I tried just casting it to IInventory, but that doesn't work. And this: InventoryHelper.dropInventoryItems(world, pos, (IInventory) te);
  13. Could you please give me an example code for simple custom chest? I dont have much time for this and it takes some time until somebody responds, so want to have it right pretty much first time. I'm out of time for today, so see you tomorrow and thanks for your help.
  14. and thats all ?!?!
  15. I looked at the link, but i dont proprly understand it, can you please say it little bit less complicated? Or even better: give me a code for simple custom chest using it, and i will learn from it. THX
  16. I'm having problem with my TileEntity. When the progress > power_needed it is supposed to remove one item from each input slot and put items in output, also incrementing essence_stored and setting its type. It works fine, but when i update one of the item slots, it resets and if i reload the world, the progress, essence, and everything else also resets. What am i supposed to do to fix this? Please help, i'm trying to fix this 5 days and still no idea how to do this. Tile Entity code: package com.villfuk02.essence.tileentities; import org.xml.sax.InputSource; import com.villfuk02.essence.Essence; import com.villfuk02.essence.gui.ContainerManualMill; import com.villfuk02.essence.init.ModItems; import jline.internal.Log; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; 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.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ITickable; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityManualMill extends TileEntity implements IInventory, ITickable { public static final int fuel_slots = 0; public static final int input_slots = 4; public static final int output_slots = 1; public static final int total_slots = input_slots + output_slots + fuel_slots; public static final int first_fuel_slot = 0; public static final int first_input_slot = first_fuel_slot + fuel_slots; public static final int first_output_slot = first_input_slot + input_slots; private static int recipe_count = 3; public boolean powered = false; private ItemStack[] itemStacks = new ItemStack[total_slots]; private String customName; private static ItemStack[] inputs = {new ItemStack(Items.FEATHER),new ItemStack(Items.STRING),new ItemStack(Items.GLOWSTONE_DUST),new ItemStack(Items.PAPER),new ItemStack(Blocks.LEAVES),new ItemStack(Blocks.TALLGRASS),new ItemStack(Items.WHEAT),new ItemStack(Items.MELON),new ItemStack(Blocks.LEAVES2),new ItemStack(Blocks.TALLGRASS),new ItemStack(Items.WHEAT),new ItemStack(Items.MELON)}; private static ItemStack[] outputs = {new ItemStack(ModItems.essence_dust, 1, 0),new ItemStack(ModItems.essence_dust, 1, 1),new ItemStack(ModItems.essence_dust, 1, 1)}; private static Essence[] essence_outputs ={new Essence(40, 0),new Essence(40, 1),new Essence(40, 1)}; private int speed; private int average_speed = 0; private int cache_speed = -1; private int speed_decrement = 3; private int power_needed = 8000; private int progress; private int rotation; private int rotation_stage; private int max_essence = 1000; private int essence_stored = 0; private int essence_type = -1; public int getAvgSpeed(){ return average_speed; } public int getSpeed(){ return speed; } public boolean getPowered(){ return powered; } public int getEssence(){ return essence_stored; } public int getEssenceType(){ return essence_type; } public double fractionEssence(){ double fraction = 39.0 *((double)essence_stored / (double)max_essence); if (fraction > 0.0) fraction++; return MathHelper.clamp_double(fraction, 0.0, 40.0); } public double fractionProgress(){ double fraction = ((double)progress / (double)power_needed); return MathHelper.clamp_double(fraction, 0.0, 1.0); } public double fractionSpeed(){ double fraction = ((double)average_speed / (double)(30 * speed_decrement)); return MathHelper.clamp_double(fraction, 0.0, 1.0); } public int getRotationStage() { return rotation_stage; } @Override public void update(){ if (essence_stored == 0){ essence_type = -1; } if(powered){ speed += 80; }else if(speed > 0){ speed -= 1 + (int)((double)speed / (double)speed_decrement); } if (speed < 0) speed = 0; if (progress >= power_needed){ finishRecipe(); progress = 0; } average_speed = (average_speed * 39 + speed) / 40; if(validRecipe()){ if(average_speed > 0){ rotation += average_speed; progress += average_speed; } if (progress <0) progress = 0; rotation_stage = ((int)((double)rotation / 37.5)) % 4; if (rotation > 149) rotation -= 150; }else { progress = 0; } if (essence_stored == 0){ essence_type = -1; } powered = false; this.markDirty(); } private boolean validRecipe(){ ItemStack result = null; boolean validi = false; boolean valide = false; result = getOutput(this.itemStacks[0],this.itemStacks[1],this.itemStacks[2],this.itemStacks[3]); if (result != null) { ItemStack outputStack = this.itemStacks[4]; if (outputStack == null){ validi = true; }else if (outputStack.getItem() == result.getItem() && outputStack.getMetadata() == result.getMetadata() && ItemStack.areItemStackTagsEqual(outputStack, result)){ int combinedSize = outputStack.stackSize + result.stackSize; if (combinedSize <= 64 && combinedSize <= outputStack.getMaxStackSize()){ validi = true; } } } if (validi){ Essence essence = getEssenceOutput(this.itemStacks[0],this.itemStacks[1],this.itemStacks[2],this.itemStacks[3]); if (essence != null){ if(essence_type == -1){ valide = true; }else if(essence.getType() == essence_type){ int combined_amount = essence.getAmount() + essence_stored; if (combined_amount <= max_essence){ valide = true; } } } } if (!valide){ validi = false; } this.markDirty(); return validi; } public void finishRecipe(){ ItemStack out = getOutput(this.itemStacks[0],this.itemStacks[1],this.itemStacks[2],this.itemStacks[3]); if (this.getStackInSlot(4) == null){ this.setInventorySlotContents(4, out); }else{ this.setInventorySlotContents(4, new ItemStack(this.itemStacks[4].getItem(), this.itemStacks[4].stackSize + out.stackSize, this.itemStacks[4].getMetadata())); } for(int i = 0; i < 4; i++){ ItemStack stack = this.itemStacks[i]; stack.stackSize--; if (stack.stackSize <= 0){ stack = null; } this.setInventorySlotContents(i, stack); } essence_stored += getEssenceOutput(this.itemStacks[0],this.itemStacks[1],this.itemStacks[2],this.itemStacks[3]).getAmount(); essence_type = getEssenceOutput(this.itemStacks[0],this.itemStacks[1],this.itemStacks[2],this.itemStacks[3]).getType(); this.markDirty(); } public static ItemStack getOutput(ItemStack in1, ItemStack in2, ItemStack in3, ItemStack in4){ ItemStack result = null; ItemStack[] in = {in1, in2, in3, in4}; if (in1 == null || in2 == null || in3 == null || in4 == null){ return null; }else{ for(int x = 0; x < recipe_count; x++){ for (int a = 0; a < 4; a++){ if (in[a].getItem() == inputs[4*x].getItem()){ for (int b = 0; b < 4; b++){ if (in[b].getItem() == inputs[4*x + 1].getItem()){ for (int c = 0; c < 4; c++){ if (in[c].getItem() == inputs[4*x + 2].getItem()){ for (int d = 0; d < 4; d++){ if (in[d].getItem() == inputs[4*x + 3].getItem()){ result = outputs[x]; } } } } } } } } } if (in1.getItem() == ModItems.essence_dust && in2.getItem() == ModItems.essence_dust && in3.getItem() == ModItems.essence_dust && in4.getItem() == ModItems.essence_dust){ int data = in1.getMetadata(); if (in2.getMetadata() == data && in3.getMetadata() == data && in4.getMetadata() == data) result = new ItemStack(ModItems.essence_dust, 3, data); } } return result; } public static Essence getEssenceOutput(ItemStack in1, ItemStack in2, ItemStack in3, ItemStack in4){ Essence result = null; ItemStack[] in = {in1, in2, in3, in4}; if (in1 == null || in2 == null || in3 == null || in4 == null){ return null; }else{ for(int x = 0; x < recipe_count; x++){ for (int a = 0; a < 4; a++){ if (in[a].getItem() == inputs[4*x].getItem()){ for (int b = 0; b < 4; b++){ if (in[b].getItem() == inputs[4*x + 1].getItem()){ for (int c = 0; c < 4; c++){ if (in[c].getItem() == inputs[4*x + 2].getItem()){ for (int d = 0; d < 4; d++){ if (in[d].getItem() == inputs[4*x + 3].getItem()){ result = essence_outputs[x]; } } } } } } } } } if (in1.getItem() == ModItems.essence_dust && in2.getItem() == ModItems.essence_dust && in3.getItem() == ModItems.essence_dust && in4.getItem() == ModItems.essence_dust){ int data = in1.getMetadata(); if (in2.getMetadata() == data && in3.getMetadata() == data && in4.getMetadata() == data) result = new Essence(20, data); } } return result; } public String getCustomName(){ return this.customName; } public void setCustomName(String customName){ this.customName = customName; } public ItemStack[] getStacks(){ return this.itemStacks; } @Override public String getName() { return this.hasCustomName() ? this.customName : "Manual Essence Mill"; } @Override public boolean hasCustomName() { return this.customName != null && !this.customName.equals(""); } @Override public int getSizeInventory() { return 5; } @Override public ItemStack getStackInSlot(int index) { if(index < 0 || index >= this.getSizeInventory()){ return null; } return this.itemStacks[index]; } @Override public ItemStack decrStackSize(int index, int count) { if(this.getStackInSlot(index)!= null){ ItemStack itemStack; if (this.getStackInSlot(index).stackSize <= count) { itemStack = this.getStackInSlot(index); this.setInventorySlotContents(index, null); this.markDirty(); return itemStack; }else{ itemStack = this.getStackInSlot(index).splitStack(count); if(this.getStackInSlot(index).stackSize <= 0){ this.setInventorySlotContents(index, null); }else{ this.setInventorySlotContents(index, this.getStackInSlot(index)); } this.markDirty(); return itemStack; } } else { return null; } } @Override public ItemStack removeStackFromSlot(int index) { ItemStack stack = this.getStackInSlot(index); this.setInventorySlotContents(index, null); return stack; } @Override public void setInventorySlotContents(int index, ItemStack stack) { if (index < 0 || index >= this.getSizeInventory()) return; if (stack != null && stack.stackSize > this.getInventoryStackLimit()) stack.stackSize = this.getInventoryStackLimit(); if (stack != null && stack.stackSize == 0) stack = null; this.itemStacks[index] = stack; this.markDirty(); } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return this.worldObj.getTileEntity(this.getPos()) == this && player.getDistanceSq(this.pos.add(0.5, 0.5, 0.5)) <= 64; } @Override public void openInventory(EntityPlayer player) { } @Override public void closeInventory(EntityPlayer player) { } @Override public boolean isItemValidForSlot(int index, ItemStack stack) { return true; } @Override public int getField(int id) { int value = 0; if (id == 0) value = progress; if (id == 1) value = speed; if (id == 2) value = rotation; if (id == 3) value = essence_stored; if (id == 4) value = essence_type; return value; } @Override public void setField(int id, int value) { if (id == 0) progress = value; if (id == 1) speed = value; if (id == 2) rotation = value; if (id == 3) essence_stored = value; if (id == 4) essence_type = value; } @Override public int getFieldCount() { return 5; } @Override public void clear() { for(int i = 0; i < this.getSizeInventory(); i++){ this.setInventorySlotContents(i, null); } } @Override public NBTTagCompound writeToNBT(NBTTagCompound nbt){ super.writeToNBT(nbt); NBTTagList list = new NBTTagList(); for (int i = 0; i < this.getSizeInventory(); i++){ if (this.itemStacks[i] != null){ NBTTagCompound stackTag = new NBTTagCompound(); stackTag.setByte("Slot", ((byte)i)); this.itemStacks[i].writeToNBT(stackTag); list.appendTag(stackTag); } } nbt.setTag("Items", list); nbt.setInteger("progress", progress); nbt.setInteger("speed", speed); nbt.setInteger("rotation", rotation); nbt.setInteger("essence_stored", essence_stored); nbt.setInteger("essence_type", essence_type); if (this.hasCustomName()){ nbt.setString("CustomName",this.getCustomName()); } return nbt; } @Override public void readFromNBT(NBTTagCompound nbt){ super.readFromNBT(nbt); NBTTagList list = nbt.getTagList("Items", 10); for(int i = 0; i < list.tagCount(); ++i){ NBTTagCompound stackTag = list.getCompoundTagAt(i); int slot = stackTag.getByte("Slot") & 255; this.setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(stackTag)); } progress = nbt.getInteger("progress"); speed = nbt.getInteger("speed"); rotation = nbt.getInteger("rotation"); essence_stored = nbt.getInteger("essence_stored"); essence_type = nbt.getInteger("essence_type"); if(nbt.hasKey(customName, ){ this.setCustomName(nbt.getString("CustomName")); } } } HELP Thanks for any response
  17. thanks, i am going to try something tomorrow and i'll probably have some questions, please respond then. Thanks
  18. Ok, i'll ry something, but will this fix the problem i'm having?
  19. I was wondering, how could i make fluid container in custom tileentity, and use it for some crafting, so i tried to find any tutorial on the internet, but i haven't found anything usefull. Could somebody just tell what do i need to do? Thanks for any response
  20. How? only thing i know is markDirty();
  21. I dont know how does IItemHandler work, can you please show me, what am i supposed to do with the boolean simulate, or the other things?
  22. BUT HOW?!!? I am trying two days already and cant figure it out :'( HOW AM I SUPPOSED TO RUN finishRecipe FROM THE SERVER SIDE?? PLEASE HELP
  23. INTERESTING: The items are doubling, because server thinks there arent items, so it in finishRecipe() sets both slot and the recipe as the same but for server the slot doesnt change but the recipe changes and its changed even between worlds, just until you close minecraft. So i need to call server to update the slot after finishRecipe()
  24. I've figured out it doesnt write changes to nbt Do you know how to do it?
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.