Everything posted by Villfuk02
-
[1.10.2] GUI changes not saving
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)
-
[1.10.2] GUI changes not saving
How do i use ItemStackHandler? You said "Use ItemStackHandler", but i dont know how.
-
[1.10.2] GUI changes not saving
Aaaaand, how do i use it? if i dont implement it, where else am i supposed to put it?
-
[1.10.2] GUI changes not saving
Because it wants me to. If i remove it, it says add unimplemented methods.
-
[1.10.2] GUI changes not saving
@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
-
[1.10.2] GUI changes not saving
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)
-
[1.10.2] GUI changes not saving
please
-
[1.10.2] GUI changes not saving
Still dont know
-
[1.10.2] GUI changes not saving
OooOO that looks good, but where do i find it?
-
[1.10.2] GUI changes not saving
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.
-
[1.10.2] GUI changes not saving
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.
-
[1.10.2] GUI changes not saving
And how do i use it?
-
[1.10.2] GUI changes not saving
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);
-
[1.10.2] GUI changes not saving
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.
-
[1.10.2] GUI changes not saving
and thats all ?!?!
-
[1.10.2] GUI changes not saving
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
-
[1.10.2] GUI changes not saving
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
-
[1.10.2] How to make an fluid input
thanks, i am going to try something tomorrow and i'll probably have some questions, please respond then. Thanks
-
[1.10.2] Custom Machine Slots Going Crazy
Ok, i'll ry something, but will this fix the problem i'm having?
-
[1.10.2] How to make an fluid input
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
-
[1.10.2] Custom Machine Slots Going Crazy
How? only thing i know is markDirty();
-
[1.10.2] Custom Machine Slots Going Crazy
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?
-
[1.10.2] Custom Machine Slots Going Crazy
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
-
[1.10.2] Custom Machine Slots Going Crazy
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()
-
[1.10.2] Custom Machine Slots Going Crazy
I've figured out it doesnt write changes to nbt Do you know how to do it?
IPS spam blocked by CleanTalk.