
vroominator
Forge Modder-
Posts
171 -
Joined
-
Last visited
Everything posted by vroominator
-
Change your recipe so that it uses an ItemStack of your crafting tool with a damage value of -1.
-
Simple Block Rendering Handler or whatever it's called? Pretty sure you can use those, but I don't know how.
-
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)?
-
Why is your "clientProxyObsidian" inside Common? Shouldn't it be in Client?
-
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.
-
That's all well and good, but uh... what exactly is Techcraft? Some screenshots would be nice.
-
Metadata Item naming behaving very strangely
vroominator replied to vroominator's topic in Modder Support
Thanks for the suggestion, but it didn't work. This is so weird. -
[Help] Can't get eclipse to run minecraft
vroominator replied to warlordjones's topic in Modder Support
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
vroominator replied to vroominator's topic in Modder Support
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
vroominator replied to vroominator's topic in Modder Support
I know, they are supposed to, as the variant with a metadata of 0 has a different name. -
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.
-
Strongholds are only supposed to spawn 3 times per world. Have you look at the code for that?
-
You shouldn't need any custom packets for that. That's already handled for you.
-
Depending on what your tile entity does, you may or may not need to use custom Packets.
-
Error with sounds when starting Server !
vroominator replied to DealerJoe's topic in Support & Bug Reports
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
vroominator replied to vroominator's topic in Modder Support
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
vroominator replied to vroominator's topic in Modder Support
Well. Turns out the Tile Entity is infact null. This is interesting. -
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
vroominator replied to vroominator's topic in Modder Support
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
vroominator replied to vroominator's topic in Modder Support
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? -
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
vroominator replied to INNOCENTFAMZZ's topic in General Discussion
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
vroominator replied to Thor597's topic in General Discussion
I would also like to know how this is done. -
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!