Jump to content

vroominator

Forge Modder
  • Posts

    171
  • Joined

  • Last visited

Everything posted by vroominator

  1. Change your recipe so that it uses an ItemStack of your crafting tool with a damage value of -1.
  2. Simple Block Rendering Handler or whatever it's called? Pretty sure you can use those, but I don't know how.
  3. Did you remember to change the reference to your proxy in your @Mod class from Obsidian.common.clientProxyObsidian to Obsidian.client.clientProxyObsidian (or whatever your client proxy's location is)?
  4. Why is your "clientProxyObsidian" inside Common? Shouldn't it be in Client?
  5. Sorry about this, but I'm deciding to pause development for a little while, simply because I have a lot of school work happening at the moment and I need to focus on it as much as I can. I'm hoping to resume development mid to late November. If you guys want me to release what I've currently got done, just ask. Everything I wanted to have done for the public beta except spellcasting (ironic, seeing as it's all this mod started out as) is usable, so I might let you guys have a peak.
  6. That's all well and good, but uh... what exactly is Techcraft? Some screenshots would be nice.
  7. If you check other GUIs, you'll notice that drawGuiContainerForgroundLayer() now has two paramaters, two integers to be precise.
  8. Thanks for the suggestion, but it didn't work. This is so weird.
  9. That's an error on your end. You've forgotten to change the reference to your proxy in your @Mod file from the tutorial to your own.
  10. Well, softClay and hardClay are both variants of the same Item Type, ItemMould. That wouldn't affect naming though, would it?
  11. I know, they are supposed to, as the variant with a metadata of 0 has a different name.
  12. I have a few sets of items in my mod which use metadata, and I'm having troubles with naming them. I have 4 sets of metadata items: softClay, hardClay, magicOrb, and rune. They're being named like this String[] mouldNames = new String[] {"chunk", "Cog", "Key", "Lock", "Keyring", "Ring", "Amulet", "Necklace", "Crossbow Limbs", "Orb"}; for(int i = 1; i < mouldNames.length; i++) { LanguageRegistry.addName(new ItemStack(softClay, 1, i), "Clay Chunk with " + mouldNames[i] + " Imprint"); LanguageRegistry.addName(new ItemStack(hardClay, 1, i), mouldNames[i] + " Mould"); } LanguageRegistry.addName(new ItemStack(softClay, 1, 0), "Clay Chunk"); LanguageRegistry.addName(new ItemStack(hardClay, 1, 0), "Hardened Clay Chunk"); String[] runeNames = {"Blank", "Energy", "Rock", "Frost", "Fire", "Life", "Death", "Temporal", "Eternal", "Balance", "Corruption", "Poison", "Wither", "Fear", "Elemental", "Catalytic"}; for(int i = 0; i < runeNames.length; i++) { LanguageRegistry.addName(new ItemStack(rune, 1, i), runeNames[i] + " Runestone"); } for(int i = 1; i < runeNames.length; i++) { LanguageRegistry.addName(new ItemStack(magicOrb, 1, i), runeNames[i] + " Orb"); } LanguageRegistry.addName(new ItemStack(magicOrb, 1, 0), "Magic Orb"); As you can see with the above code, a rune item with metadata of 4 should be named "Fire Runestone", but is instead being named "Fire Orb", and the same goes for the rest. a softClay item with metadata of 1 should be named "Clay Chunk with Cog Imprint", but is being named "Cog Mould", and when I try to name only one item from this whole set, say a magicOrb with metadata of 0, Every one of those items with metadata of 0 will get the name "Magic Orb". This has been happening for weeks and I thought it might have been a bug that would get fixed by now, but it's still happening. Any help would be great.
  13. Strongholds are only supposed to spawn 3 times per world. Have you look at the code for that?
  14. You shouldn't need any custom packets for that. That's already handled for you.
  15. Depending on what your tile entity does, you may or may not need to use custom Packets.
  16. The sound event only exists on the client. THIS MinecraftForge.EVENT_BUS.register(new SoundEvent());, Should be in your client proxy.
  17. Fixed it, turns out I had misspelled createTileEntity() and it wasn't being called. I feel really stupid now.
  18. Well. Turns out the Tile Entity is infact null. This is interesting.
  19. If you're in need of a good Java Tutorial, I recommend this. I used it to get started.
  20. Alrighty. Prepare for some messy code. ContainerRuneCrafting package sorcery.common; import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import sorcery.common.core.Sorcery; import net.minecraft.src.*; public class ContainerRuneCrafting extends Container { private TileEntityRuneCrafting tile; private World worldObj; private int posX; private int posY; private int posZ; private int lastCookTime; private int lastRuneCookTime; private int lastFuelCookTime; private int lastRune; public ContainerRuneCrafting(InventoryPlayer player, TileEntityRuneCrafting tile, World world, int i, int j, int k) { this.tile = tile; this.worldObj = world; this.posX = i; this.posY = j; this.posZ = k; this.addSlotToContainer(new Slot(tile, 0, 24, 35)); this.addSlotToContainer(new Slot(tile, 1, 48, 35)); this.addSlotToContainer(new SlotFurnace(player.player, tile, 2, 124, 35)); int var3; for (var3 = 0; var3 < 3; ++var3) { for (int var4 = 0; var4 < 9; ++var4) { this.addSlotToContainer(new Slot(player, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); } } for (var3 = 0; var3 < 9; ++var3) { this.addSlotToContainer(new Slot(player, var3, 8 + var3 * 18, 142)); } } public void addCraftingToCrafters(ICrafting par1ICrafting) { System.out.println(((EntityPlayer)par1ICrafting).getEntityName()); super.addCraftingToCrafters(par1ICrafting); <<--This is where the problem starts par1ICrafting.updateCraftingInventoryInfo(this, 0, this.tile.currentCookTime); par1ICrafting.updateCraftingInventoryInfo(this, 1, this.tile.runeCookTime); par1ICrafting.updateCraftingInventoryInfo(this, 2, this.tile.fuelCookTime); par1ICrafting.updateCraftingInventoryInfo(this, 3, this.tile.currentRune); } /** * Updates crafting matrix; called from onCraftMatrixChanged. Args: none */ public void updateCraftingResults() { super.updateCraftingResults(); Iterator i = this.crafters.iterator(); while (i.hasNext()) { ICrafting crafter = (ICrafting)i.next(); if (this.lastCookTime != this.tile.currentCookTime) { crafter.updateCraftingInventoryInfo(this, 0, this.tile.currentCookTime); } if (this.lastRuneCookTime != this.tile.runeCookTime) { crafter.updateCraftingInventoryInfo(this, 1, this.tile.runeCookTime); } if (this.lastFuelCookTime != this.tile.fuelCookTime) { crafter.updateCraftingInventoryInfo(this, 2, this.tile.fuelCookTime); } if (this.lastRune != this.tile.currentRune) { crafter.updateCraftingInventoryInfo(this, 3, this.tile.currentRune); } } this.lastCookTime = this.tile.currentCookTime; this.lastRuneCookTime = this.tile.runeCookTime; this.lastFuelCookTime = this.tile.fuelCookTime; this.lastRune = this.tile.currentRune; } @SideOnly(Side.CLIENT) public void updateProgressBar(int progress) { this.tile.currentCookTime = progress; } public boolean canInteractWith(EntityPlayer player) { return this.worldObj.getBlockId(this.posX, this.posY, this.posZ) != Sorcery.runeCraftingTable.blockID ? false : player.getDistanceSq((double)this.posX + 0.5D, (double)this.posY + 0.5D, (double)this.posZ + 0.5D) <= 64.0D; } } TileEntityRuneCrafting package sorcery.common; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteStreams; import sorcery.common.blocks.BlockHellFurnace; import sorcery.common.core.Sorcery; import sorcery.common.core.TileEntityBasic; import sorcery.common.lib.ItemStackHelper; import sorcery.common.lib.RuneCraftingHelper; import sorcery.common.recipes.ForgeRecipes; import net.minecraft.src.*; import net.minecraftforge.common.ISidedInventory; import net.minecraftforge.common.ForgeDirection; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; public class TileEntityRuneCrafting extends TileEntityBasic implements IInventory, ISidedInventory { public ItemStack[] inventory = new ItemStack[3]; public int tier; public int currentCookTime = 0; public int runeCookTime = 0; public int fuelCookTime = 0; public int currentRune = 1; @Override public void handlePacket(NetworkManager network, Packet pack, String playerName) { ByteArrayDataInput data = ByteStreams.newDataInput(((Packet250CustomPayload)pack).data); if(data.readInt() == 1) { ++this.currentRune; } else if(data.readInt() == 2) { --this.currentRune; } } public TileEntityRuneCrafting(int tier) { this.tier = tier; } public int getSizeInventory() { return this.inventory.length; } public ItemStack getStackInSlot(int slot) { return this.inventory[slot]; } public ItemStack decrStackSize(int slot, int size) { if (this.inventory[slot] != null) { ItemStack var3; if (this.inventory[slot].stackSize <= size) { var3 = this.inventory[slot]; this.inventory[slot] = null; return var3; } else { var3 = this.inventory[slot].splitStack(size); if (this.inventory[slot].stackSize == 0) { this.inventory[slot] = null; } return var3; } } else { return null; } } public ItemStack getStackInSlotOnClosing(int slot) { if (this.inventory[slot] != null) { ItemStack var2 = this.inventory[slot]; this.inventory[slot] = null; return var2; } else { return null; } } public void setInventorySlotContents(int slot, ItemStack item) { this.inventory[slot] = item; if (item != null && item.stackSize > this.getInventoryStackLimit()) { item.stackSize = this.getInventoryStackLimit(); } } public String getInvName() { return "container.runecrafting"; } public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); NBTTagList var2 = tag.getTagList("Items"); this.inventory = new ItemStack[this.getSizeInventory()]; for (int var3 = 0; var3 < var2.tagCount(); ++var3) { NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); byte var5 = var4.getByte("Slot"); if (var5 >= 0 && var5 < this.inventory.length) { this.inventory[var5] = ItemStack.loadItemStackFromNBT(var4); } } this.currentCookTime = tag.getShort("CookTime"); this.runeCookTime = tag.getInteger("RuneCookTime"); this.fuelCookTime = tag.getInteger("FuelCookTime"); this.currentRune = tag.getInteger("CurrentRune"); } public void writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setShort("CookTime", (short)this.currentCookTime); tag.setInteger("RuneCookTime", this.runeCookTime); tag.setInteger("FuelCookTime", this.fuelCookTime); tag.setInteger("CurrentRune", this.currentRune); NBTTagList var2 = new NBTTagList(); for (int var3 = 0; var3 < this.inventory.length; ++var3) { if (this.inventory[var3] != null) { NBTTagCompound var4 = new NBTTagCompound(); var4.setByte("Slot", (byte)var3); this.inventory[var3].writeToNBT(var4); var2.appendTag(var4); } } tag.setTag("Items", var2); } public int getInventoryStackLimit() { return 64; } public int getCurrentItemCookTime() { if(this.inventory[1] != null && RuneCraftingHelper.getEnumFromMeta(this.inventory[1].getItemDamage()) != null) { System.out.println(((RuneCraftingHelper.EnumRuneTypes)RuneCraftingHelper.getEnumFromMeta(this.inventory[1].getItemDamage())).time); return(((RuneCraftingHelper.EnumRuneTypes)RuneCraftingHelper.getEnumFromMeta(this.inventory[1].getItemDamage())).time); } return 0; } @SideOnly(Side.CLIENT) public int getCookProgressScaled(int scale) { if(this.getCurrentItemCookTime() == 0) { return 0; } System.out.println(this.currentCookTime * scale / this.getCurrentItemCookTime()); return this.currentCookTime * scale / this.getCurrentItemCookTime(); } public boolean isCooking() { return this.currentCookTime > 0; } public boolean hasFuel() { return this.runeCookTime > 0; } @Override public void onInventoryChanged() { } public void updateEntity() { if(this.fuelCookTime == 0 && this.isItemFuel(this.inventory[0]) > 0) { this.fuelCookTime = this.isItemFuel(this.inventory[0]); this.decrStackSize(0, 1); } if(this.canCook()) { ++this.currentCookTime; if(this.currentCookTime == RuneCraftingHelper.getEnumFromMeta(this.currentRune).time) { this.smeltItem(); this.currentCookTime = 0; this.runeCookTime -= RuneCraftingHelper.getEnumFromMeta(this.currentRune).fuelCost; --this.inventory[1].stackSize; } } } private boolean canCook() { if(this.inventory[1] == null || this.fuelCookTime == 0 || this.inventory[2].stackSize == 64) { return false; } else if(ItemStackHelper.getInstance().areItemsEqual(this.inventory[1], new ItemStack(Sorcery.rune, 1, 0))) { return true; } else if(ItemStackHelper.getInstance().areItemsEqual(this.inventory[2], new ItemStack(Sorcery.rune, 1, this.currentRune)) || this.inventory[2] == null) { return true; } return false; } private int isItemFuel(ItemStack item) { if(item == null) { return 0; } else { if(item.getItem() == Item.redstone) { return 10; } else if(item.getItem() == Item.lightStoneDust) { return 12; } else if(item.getItem() == Item.gunpowder) { return 14; } else if(item.getItem() == Sorcery.enderdust) { return 14; } else if(item.getItem() == Item.blazePowder) { return 18; } else if(item.getItem() == Sorcery.ectoplasm) { return 20; } else if(item.getItem() == Sorcery.magicDust) { return 30; } } return 0; } public void smeltItem() { if(this.canCook()) { ItemStack result = new ItemStack(Sorcery.rune, 1, this.currentRune); if(this.inventory[2] == null) { this.inventory[2] = result; } else { ++this.inventory[2].stackSize; } } } public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) { return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; } public boolean canGoUpRune() { if(this.currentRune == 4 && this.tier == 0) { return false; } else if(this.currentRune == 9 && this.tier == 1) { return false; } else if(this.currentRune == 13 && this.tier == 2) { return false; } else if(this.currentRune == 15) { return false; } return true; } public boolean canGoDownRune() { if(this.currentRune == 1) { return false; } return true; } public void openChest() { } public void closeChest() { } @Override public int getStartInventorySide(ForgeDirection side) { if (side == ForgeDirection.DOWN) return 1; if (side == ForgeDirection.UP) return 0; return 2; } @Override public int getSizeInventorySide(ForgeDirection side) { return 1; } public Packet getDescriptionPacket() { NBTTagCompound tag = new NBTTagCompound(); this.writeToNBT(tag); return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 1, tag); } public void onDataPacket(NetworkManager manager, Packet132TileEntityData pack) { this.readFromNBT(pack.customParam1); } }
  21. Sorry for the bump, but I just cannot figure out what's going on here. I figure that when a thread just gets ignored like this, it's one of 2 things: A: You're absolutely stumped B: I'm missing something painfully obvious I highly doubt it's A, so could someone please tell me what I've done wrong?
  22. Make sure one of your achievements has a parent achievement on the same page, and that the parent achievement is registered BEFORE the child. That's how I fixed it.
  23. Well nobody's going to just give you that code. That's a bit more advanced and you're going to have to work out how to do that yourself.
  24. I would also like to know how this is done.
  25. Yeah, I can't wait for Arcanacraft either. I loved TC2. Sorry I'm taking such a long time on getting an early version out, I've been so busy with school and stuff. I've decided that I'm going to release an early version whether I've got spell-casting done or not by early November, so keep an eye out!
×
×
  • Create New...

Important Information

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