Jump to content

vandy22

Members
  • Posts

    224
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

vandy22's Achievements

Creeper Killer

Creeper Killer (4/8)

-2

Reputation

  1. Have you also wanted a fun, colorful set of tools, armor, blocks and custom items that can make your minecraft experience 1000x times better?! This is the ColorMod with loads of amazing armor sets, magical and powerful tools, blocks and much more! There are tiers of colors that range from just above iron to god-like weapons and armor. The tiers are: Red->Orange->Yellow->Warm Blue->Green->Purple->Cool Warm->Cool->Rainbow What to expect?: An item that makes you fly A custom furnace Colored Hardwood Colored Stairs Colored Slabs Colored Doors A custom crafting table 9 Custom Tool and Armor Sets 7 Custom Ores and Ingots 9 Custom Blocks Cryptic Dimension Cryptic Tree's Magical Weapons Craftable Tool Repair Caves are filled with colorful ores Your minecraft experience is alot better! Things to know: The shiner is what lights the portal to the Cryptic. The Cryptic is made out of rainbow blocks in the same pattern as a Nether Portal. All tools and armor can be repaired with 1 ingot in the crafting table unless its warm or cool which must be repaired with blocks. The Cryptic Dimension has no use to this point but will in the following updates The warm, cool, and rainbow armor sets when equipped fully come with a special effect. Most of the rainbow tools have magical powers. When the Cryptic Artifact is in your inventory, you can fly. Ebonite is used as the Cryptic Infuser fuel. The rainbow tools ~Can not enchant rainbow tools ~Sword can shoot lightning on right click ~Pickaxe can generate torches on right click ~Axe can break whole tree Why does this mod make minecraft better: This mod adds many unique features that vanilla minecraft could never offer. If you have always wanted stuff better than... diamonds! Well then this is the mod for you! More updates will come: If you have suggestions please leave them in the comments below! The next update will invole the cryptic dimension and hopefully the adding of new mobs, fixing of possible bugs and much more. Mods that can make this mod better: Forge(Needed) Not Enough Items (Help with recipes) Optifine (Run's mod faster and minecraft in general) To see more about this mod and to download go here: http://www.planetminecraft.com/mod/1710colormod/
  2. I think I had the same problem? I just deleted it.
  3. If you want certain items to go into certain slots (a.k.a fuel) you need to make a custom transferStackInSlot method in your container class. For fuels in general, vanilla handles it by using the isItemFuel method in the TileEntity.
  4. The lines inside the if statement are doing this: flag1 = true; When set true, is making sure that when your furnace is not in a loaded chunk, it will save items inside. CrypticInfuser.updateFurnaceBlockState(this.isInfusing(), this.worldObj, this.xCoord, this.yCoord, this.zCoord); Is changing the texture of the furnace when on/off. Just for reference here is: updateFurnaceBlockState public static void updateFurnaceBlockState(boolean isInfusing, World world, int xCoord, int yCoord, int zCoord) { int i = world.getBlockMetadata(xCoord, yCoord, zCoord); TileEntity entity = world.getTileEntity(xCoord, yCoord, zCoord); TileEntityCrypticInfuser infuser = new TileEntityCrypticInfuser(); keepInventory = true; if(isInfusing){ world.setBlock(xCoord, yCoord, zCoord, BlockHandler.blockCrypticInfuserActive); }else{ world.setBlock(xCoord, yCoord, zCoord, BlockHandler.blockCrypticInfuserIdle); } keepInventory = false; world.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, i, 2); if(entity != null){ entity.validate(); world.setTileEntity(xCoord, yCoord, zCoord, entity); } } Draco, with what you said here: It doesn't make since to me, that this statement only works correctly when its set to false. When set to false, it can check for true or false. When set to true, it stays true. When set to true, the "active furnace texture" will stay on forever.
  5. I've been sitting here for 5 minutes trying to figure out how this actually makes the texture turn off and on, and work. When you said this: I knew that it meant that, but I never really thought about it deeply. I'm actually super confused right now. Can you at least explain to me how this would make the textures work for the furnace? If I were to make flag be static (either false or true), if it was false the texture wouldn't work. If it was true the texture would always stay on once starting the smelting. Basically if I set the flag to anything else, rather than this.isInfusing() the gui will work. Anything you can think of? Thanks
  6. Edited the Thread ^^. Thanks ~vandy22
  7. Edit: So I figured out what line of code directly impacts this problem: boolean flag = this.isInfusing(); If this boolean is set to this.isInfusing(), the furnace texturing works, as in, it lights up when stuff is infusing (smelting). But for some reason if this is set to this.isInfusing() the gui progress bars don't work properly. To have the gui work properly you have to change that line to: boolean flag = this.hasPower(); But now, the textures don't work, as in, it doesn't light up when stuff is infusing (smelting). It's kind of ironic because this is a boolean and two different values make two different things true / false all at the same time. There has to be something in my code that I'm doing wrong that can fix this. It also most likely has to do with the TE Class (updateEntity method specifically). Here's the TE Code: package com.mjj.colormod.tileentity; import com.mjj.colormod.blocks.CrypticInfuser; import com.mjj.colormod.crafting.CrypticInfuserRecipes; import com.mjj.colormod.handler.BlockHandler; import com.mjj.colormod.handler.ItemHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityCrypticInfuser extends TileEntity implements ISidedInventory{ private ItemStack slots[]; public int dualPower; public int dualCookTime; public static final int maxPower = 10000; public static final int infusingSpeed = 100; private static final int[] slots_top = new int[] {0, 1}; private static final int[] slots_bottom = new int[] {3}; private static final int[] slots_side = new int[] {2}; private String customName; public TileEntityCrypticInfuser(){ slots = new ItemStack[4]; } @Override public int getSizeInventory() { return slots.length; } @Override public ItemStack getStackInSlot(int i) { return slots[i]; } @Override public ItemStack getStackInSlotOnClosing(int i) { if(slots[i] != null){ ItemStack itemstack = slots[i]; slots[i] = null; return itemstack; }else{ return null; } } @Override public void setInventorySlotContents(int i, ItemStack itemstack) { slots[i] = itemstack; if(itemstack != null && itemstack.stackSize > getInventoryStackLimit()){ itemstack.stackSize = getInventoryStackLimit(); } } //public static ItemStack getSmeltingResultForItem(ItemStack stack) { return FurnaceRecipes.instance().getSmeltingResult(stack); } public void setGuiDisplayName(String name){ this.customName = name; } @Override public String getInventoryName() { return "container.crypticinfuser"; } @Override public boolean hasCustomInventoryName() { return this.customName != null && this.customName.length() > 0; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this){ return false; }else{ return player.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64; } } public void openInventory() {} public void closeInventory() {} @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { return i == 2 ? false : (i == 1 ? hasItemPower(itemstack) : true); } public boolean hasItemPower(ItemStack itemstack){ return getItemPower(itemstack) > 0; } private static int getItemPower(ItemStack itemstack){ if(itemstack == null){ return 0; }else{ Item item = itemstack.getItem(); if(item == ItemHandler.ebonite) return 50; return 0; } } public ItemStack decrStackSize(int i, int j){ if(slots[i] != null){ if(slots[i].stackSize <= j){ ItemStack itemstack = slots[i]; slots[i] = null; return itemstack; } ItemStack itemstack1 = slots[i].splitStack(j); if(slots[i].stackSize == 0){ slots[i] = null; } return itemstack1; }else{ return null; } } public void readFromNBT (NBTTagCompound nbt){ super.readFromNBT(nbt); NBTTagList list = nbt.getTagList("Items", 10); slots = new ItemStack[getSizeInventory()]; for(int i = 0; i < list.tagCount(); i++){ NBTTagCompound nbt1 = (NBTTagCompound)list.getCompoundTagAt(i); byte b0 = nbt1.getByte("Slot"); if(b0 >= 0 && b0 < slots.length){ slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } dualPower = nbt.getShort("PowerTime"); dualCookTime = nbt.getShort("CookTime"); } public void writeToNBT(NBTTagCompound nbt){ super.writeToNBT(nbt); nbt.setShort("PowerTime", (short)dualPower); nbt.setShort("CookTime", (short)dualCookTime); NBTTagList list = new NBTTagList(); for(int i = 0; i < slots.length; i++){ if(slots[i] != null){ NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("Slot", (byte)i); slots[i].writeToNBT(nbt1); list.appendTag(nbt1); } } nbt.setTag("Items", list); } @Override public int[] getAccessibleSlotsFromSide (int i){ return i == 0 ? slots_bottom : (i == 1 ? slots_top : slots_side); } @Override public boolean canInsertItem(int var1, ItemStack itemstack, int var3) { return this.isItemValidForSlot(var1, itemstack); } @Override public boolean canExtractItem(int i, ItemStack itemstack, int j) { return j != 0 || i != 1 || itemstack.getItem() == Items.bucket; } public int getInfuserProgressScaled(int i){ return (dualCookTime * i) /this.infusingSpeed; } public int getPowerRemainingScaled(int i){ return (dualPower * i) / maxPower; } private boolean canInfuse() { if (slots[0] == null || slots[1] == null) { return false; } ItemStack itemstack = CrypticInfuserRecipes.getInfusedResult(slots[0].getItem(), slots[1].getItem()); if (itemstack == null) { return false; } if (slots[3] == null) { return true; } if (!slots[3].isItemEqual(itemstack)) { return false; } if (slots[3].stackSize < getInventoryStackLimit() && slots[3].stackSize < slots[3].getMaxStackSize()) { return true; }else{ return slots[3].stackSize < itemstack.getMaxStackSize(); } } private void infuseItem() { if (canInfuse()) { ItemStack itemstack = CrypticInfuserRecipes.getInfusedResult(slots[0].getItem(), slots[1].getItem()); if (slots[3] == null) { slots[3] = itemstack.copy(); }else if (slots[3].isItemEqual(itemstack)) { slots[3].stackSize += itemstack.stackSize; } for (int i = 0; i < 2; i++) { if (slots[i].stackSize <= 0) { slots[i] = new ItemStack(slots[i].getItem().setFull3D()); }else{ slots[i].stackSize--; } if (slots[i].stackSize <= 0){ slots[i] = null; } } } } public boolean hasPower(){ return dualPower > 0; } public boolean isInfusing(){ return this.dualCookTime > 0; } public void updateEntity() { boolean flag = this.isInfusing(); boolean flag1= false; if(hasPower() && this.isInfusing()) { this.dualPower--; } if (this.hasItemPower(this.slots[2]) && this.dualPower <= (this.maxPower - this.getItemPower(this.slots[2]))) { this.dualPower += getItemPower(this.slots[2]); if(this.slots[2] != null) { flag1 = true; this.slots[2].stackSize--; if(this.slots[2].stackSize == 0) { this.slots[2] = this.slots[2].getItem().getContainerItem(this.slots[2]); } } } if (hasPower() && canInfuse()) { this.dualCookTime++; if (this.dualCookTime == this.infusingSpeed) { this.dualCookTime = 0; this.infuseItem(); flag1 = true; } }else{ dualCookTime = 0; } if (flag != this.isInfusing()) { flag1 = true; CrypticInfuser.updateFurnaceBlockState(this.isInfusing(), this.worldObj, this.xCoord, this.yCoord, this.zCoord); } if (flag1) { this.markDirty(); } } } Now that I've narrowed down the problem I just need to figure out what is going on. Thanks ~vandy22
  8. First off, you guys are great coders, and your organization is amazing. I also love how you use comments, one to help you, and also to help people like me. The transferStackInSlot im using is straight up vanilla code. Which now makes since why its not working. I have a fuel slot, 2 input slots, and an output slot. Vanilla uses only one input slot. I like how you defined variables as it makes your code very easy to read and nice and organized. But I am still kind of confused what I would need to change the vanilla transferStackInSlot to in order for it to work with two input slots. I understand that it has to do with the number of slots. Like you said I believe my total slot number would be 39 though. Since player is 0-35 and my tile entity is 0-3. I would love if you could just give a small example with how I would do this with my code. I know it seems fairly obvious to you. It's just all these numbers everywhere, I don't want to mess something up. I do understand conceptually what I need to be doing though. Also for the fuel slot it uses a method called .getSmeltingResult() in the furnace recipe class. Since I have a custom recipe class, do you have any idea what I would do with that? Although not as important as my first question, I would love to know if you have the time. Thanks ~vandy22
  9. Wow.. I' dumb. I got it to work, the reason was the flag boolean was returning whether or not the system had fuel. Not if it was actually infusing. Now, I just need to figure out the second issue: The furnace to the container/ the container to the furnace when shift clicking is messed up. Even if someone could point me to the specific class they think the problem would lie in, that would be great. I'm assuming there has to be a method in one of these classes that has to do with shift-clicking items. Maybe Its because I haven't overrode it yet. If anyone has had this issue, or know where the shift clicking stuff occurs. In which class. I would love to know. Thanks! ~vandy22
  10. I like the way you did your block, but I don't really want to re-code most of code unless I necessarily have to. I am using the updateFurnaceBlockState and you aren't. I want to be closer to the vanilla side of things, unless for some reason I have to change my code to be similar to yours. I did make some progress though. At least I think. In the method updateEntity() in the TileEntity class, when updating the blockFurnaceState there was a problem. Here's the original updateEntity code: public void updateEntity() { boolean flag = this.hasPower(); boolean flag1= false; if(hasPower() && this.isInfusing()) { this.dualPower--; } if (this.hasItemPower(this.slots[2]) && this.dualPower <= (this.maxPower - this.getItemPower(this.slots[2]))) { this.dualPower += getItemPower(this.slots[2]); if(this.slots[2] != null) { flag1 = true; this.slots[2].stackSize--; if(this.slots[2].stackSize == 0) { this.slots[2] = this.slots[2].getItem().getContainerItem(this.slots[2]); } } } if (hasPower() && canInfuse()) { dualCookTime++; if (this.dualCookTime == this.infusingSpeed) { this.dualCookTime = 0; this.infuseItem(); flag1 = true; } }else{ dualCookTime = 0; } if (flag != this.isInfusing()) { flag1 = true; CrypticInfuser.updateFurnaceBlockState(this.isInfusing(), this.worldObj, this.xCoord, this.yCoord, this.zCoord); if (flag1) { this.markDirty(); } } } You want to be looking at this: if (flag != this.isInfusing()) { flag1 = true; CrypticInfuser.updateFurnaceBlockState(this.isInfusing(), this.worldObj, this.xCoord, this.yCoord, this.zCoord); if (flag1) { this.markDirty(); } } This never works, and hasen't worked. When I do this: if (flag = this.isInfusing()) { flag1 = true; System.out.println(isInfusing()); CrypticInfuser.updateFurnaceBlockState(this.isInfusing(), this.worldObj, this.xCoord, this.yCoord, this.zCoord); if (flag1) { this.markDirty(); } It will work, but there's nothing here to say stop infusing if there not equal. Trust me I have tried else statements, if statements and i get all sorts of crazy glitches. Here's the updateFurnaceBlockState method: public static void updateFurnaceBlockState(boolean isInfusing, World world, int xCoord, int yCoord, int zCoord) { System.out.println("Here!"); int i = world.getBlockMetadata(xCoord, yCoord, zCoord); TileEntity entity = world.getTileEntity(xCoord, yCoord, zCoord); TileEntityCrypticInfuser infuser = new TileEntityCrypticInfuser(); keepInventory = true; if(isInfusing){ System.out.println("HERE!"); world.setBlock(xCoord, yCoord, zCoord, BlockHandler.blockCrypticInfuserActive); }else{ world.setBlock(xCoord, yCoord, zCoord, BlockHandler.blockCrypticInfuserIdle); } keepInventory = false; world.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, i, 2); if(entity != null){ entity.validate(); world.setTileEntity(xCoord, yCoord, zCoord, entity); } } You can see my println's for testing purposes. The first one println() is always reached by both of the different if statements I showed you in the updateEntity method(). The only one that gets the the second println() is the second if statement I showed you, that I said got it to turn on. By the way, the first if statement: if(flag != this.isInfusing()) is how vanilla is written. Which makes my brain hurt even more. I'm very confused and not sure why this is happening. Thanks shadowfacts for the code referencing, it helped me dig deeper into my code, and find different ways (that almost work). If you know of a way closer to vanilla that will work, I would love to know. Thanks, any help is much appreciated! ~vandy22
  11. I think you are referring to two different methods of getIcon in that responce, but I'm pretty sure I know which is which. I think your saying I need to do this? It does not show the front angle of the item though. @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata){ //return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); return side == metadata ? this.iconFront : this.blockIcon; } And for this method your saying something like this? Although I'm not positive what I should be returning in this getIcon method. @SideOnly(Side.CLIENT) public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side){ if(isActive){ return //what do I put here } } Thanks ~vandy22
  12. There are only two issues with my furnace right now that need to be fixed. Before I carry on I want to say that, before I ever post on this forum I take a lot of time reviewing my code, comparing it to vanilla, make sure things are matching up right, so on and so forth. The two issues are not very big and I think are most likely the issue is hidden behind one line of code. Issue 1: The activated furnace texture does not turn on. Issue 2: When using shift click and an item is in the a certain slot in the furnace, it will go into the output slot. TE: Block: Container: Slot: If anyone has made a furnace before in 1.7.10 and has all this stuff working, I would love to have some advice from you. Thanks! ~vandy22
  13. Wow.. It was a simple as that. I was registering it with this code: MinecraftForge.EVENT_BUS.register(new ArtifactEvent()); Not this: FMLCommonHandler.instance().bus().register(new ArtifactEvent()); Thanks coolAlias!
  14. I want to run it on both, so I removed !event.player.worldObj.isRemote Looks like this: package com.mjj.colormod.event; import com.mjj.colormod.handler.ItemHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.network.play.client.C13PacketPlayerAbilities; import net.minecraft.world.World; public class ArtifactEvent { @SubscribeEvent public void onTickPlayerEvent(PlayerTickEvent event){ //if(!event.player.worldObj.isRemote){ if(event.phase == Phase.START){ EntityPlayer player = (EntityPlayer) event.player; if(player.inventory.hasItem(ItemHandler.crypticArtifact)){ player.capabilities.allowFlying = true; }else{ if(player.capabilities.isFlying == true){ player.capabilities.isFlying = player.capabilities.isCreativeMode ? true : false; player.capabilities.allowFlying = player.capabilities.isCreativeMode ? true : false; } } if(event.phase == Phase.END){ } } } } //} Still doesn't work though?
  15. Well doesn't this check for if I'm on the server? So removing the "!" would make it check for client? Not to keen on the whole client and server side stuff. (!event.player.worldObj.isRemote
×
×
  • Create New...

Important Information

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