Everything posted by vroominator
-
[SOLVED] Item Damage in crafting grid
Change your recipe so that it uses an ItemStack of your crafting tool with a damage value of -1.
-
Animated Block texture
Simple Block Rendering Handler or whatever it's called? Pretty sure you can use those, but I don't know how.
-
SSP mod doesn't work on SMP!
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)?
-
SSP mod doesn't work on SMP!
Why is your "clientProxyObsidian" inside Common? Shouldn't it be in Client?
-
[1.5.1] Sorcery Beta 1.0
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.
-
[1.4.2] Techcraft
That's all well and good, but uh... what exactly is Techcraft? Some screenshots would be nice.
-
[solved]1.4.2 Gui drawGuiContainerForegroundLayer() issue
If you check other GUIs, you'll notice that drawGuiContainerForgroundLayer() now has two paramaters, two integers to be precise.
-
Metadata Item naming behaving very strangely
Thanks for the suggestion, but it didn't work. This is so weird.
-
[Help] Can't get eclipse to run minecraft
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.
-
Metadata Item naming behaving very strangely
Well, softClay and hardClay are both variants of the same Item Type, ItemMould. That wouldn't affect naming though, would it?
-
Metadata Item naming behaving very strangely
I know, they are supposed to, as the variant with a metadata of 0 has a different name.
-
Metadata Item naming behaving very strangely
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.
-
Custom Structure Generation. Need Help
Strongholds are only supposed to spawn 3 times per world. Have you look at the code for that?
-
do tile entities need packets?
You shouldn't need any custom packets for that. That's already handled for you.
-
do tile entities need packets?
Depending on what your tile entity does, you may or may not need to use custom Packets.
-
Error with sounds when starting Server !
The sound event only exists on the client. THIS MinecraftForge.EVENT_BUS.register(new SoundEvent());, Should be in your client proxy.
-
[FIXED]Weird NPE on opening a Tile Entity GUI
Fixed it, turns out I had misspelled createTileEntity() and it wasn't being called. I feel really stupid now.
-
[FIXED]Weird NPE on opening a Tile Entity GUI
Well. Turns out the Tile Entity is infact null. This is interesting.
-
Looking for a Java/Forge Modding Tutor
If you're in need of a good Java Tutorial, I recommend this. I used it to get started.
-
[FIXED]Weird NPE on opening a Tile Entity GUI
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); } }
-
[FIXED]Weird NPE on opening a Tile Entity GUI
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?
-
Achievement Page Problems
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.
-
Can someone give the Auto Building code :D
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.
-
Making items have a custom model when held
I would also like to know how this is done.
-
[1.5.1] Sorcery Beta 1.0
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!
IPS spam blocked by CleanTalk.