
SwordsMiner
Members-
Posts
35 -
Joined
-
Last visited
Converted
-
Gender
Undisclosed
-
Personal Text
I am new!
SwordsMiner's Achievements

Tree Puncher (2/8)
0
Reputation
-
[1.7.2] Using recursion to find block in a cable system.
SwordsMiner replied to SwordsMiner's topic in Modder Support
How should I go about this then? Previously it worked for me when I used onBlockAdded and saved x y and z but, yes, as your implying it all went down hill with the Tile Entity. How should I go about finding the x, y, and z correctly? -
Hey guys, I am trying to find a block in a system of cables, the idea is simple: Block 1 says "I need BlockLOL.class", Wire 1 says "I dont have it? Do you wire 2?", Wire 2 says "Its next to me! here!", and it goes back down the line. However right now I cant even get the nearby blocks, and when I was able to somehow, it wouldnt detect any cables and would stop. Heres my code: General wire, BlockWire package com.revereor.blocks; import java.util.ArrayList; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import com.revereor.blocks.util.BlockHelper; import com.revereor.tileentity.TileEntityWire; public class BlockWire extends BlockContainer{ protected TileEntityWire tileEntity; public BlockWire() { super(Material.cloth); this.setStepSound(soundTypeCloth); this.setHardness(0.1F); } public BlockWire(Material material) { super(material); } public BlockGeneral getBlockFromSystem(Class type, BlockWire last){ Block[] nearby = BlockHelper.getDirectNearbyBlocks(tileEntity); for(Block bl : nearby){ if(type.isInstance(bl)) return (BlockGeneral) bl; if(type.isInstance(this)) return (BlockGeneral) this; ArrayList<BlockWire> nearbyWires = getNearbyWires(); for(BlockWire wire : nearbyWires){ BlockGeneral bg = wire.getBlockFromSystem(type, this); if(bg != null) return bg; } } return null; } public ArrayList<BlockWire> getNearbyWires(){ ArrayList<BlockWire> wires = new ArrayList<BlockWire>(); Block[] nearby = BlockHelper.getDirectNearbyBlocks(tileEntity); for(Block bl : nearby){ if(!Block.isEqualTo(bl, this)){ if(bl instanceof BlockWire){ wires.add((BlockWire)bl); } } } return wires; } public void onBlockAdded(World world,int x, int y, int z){ tileEntity.x=x; tileEntity.y=y; tileEntity.z=z; } @Override public TileEntity createNewTileEntity(World var1, int var2) { tileEntity = new TileEntityWire(); return tileEntity; } } BlockRemoteControlCenter, block thats trying to get control center. package com.revereor.blocks; import com.revereor.tileentity.TileEntityWire; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; public class BlockRemoteControlCenter extends BlockGeneral { public BlockRemoteControlCenter() { super(Material.iron); this.setStepSound(soundTypeMetal); } public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) { BlockControlCenter con = this.getControlCenter(); if(con != null){ System.out.println(con); } else System.out.println("no control center found"); return false; } @Override public TileEntityWire setTileEntity() { return new TileEntityWire(); } } Block Control center, The block we need. package com.revereor.blocks; import com.revereor.tileentity.TileEntityWire; import net.minecraft.block.material.Material; public class BlockControlCenter extends BlockGeneral{ public BlockControlCenter() { super(Material.iron); this.setStepSound(soundTypeMetal); } @Override public TileEntityWire setTileEntity() { return new TileEntityWire(); } } BlockGeneral, the abstract base of functional blocks, but not wires. package com.revereor.blocks; import java.util.ArrayList; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import com.revereor.blocks.util.BlockHelper; import com.revereor.tileentity.TileEntityWire; public abstract class BlockGeneral extends BlockWire{ protected BlockGeneral(Material p_i45394_1_) { super(p_i45394_1_); } public BlockGeneral getBlock(Class type){ ArrayList<BlockWire> wires = getNearbyWires(); for(BlockWire wire : wires){ BlockGeneral bl = wire.getBlockFromSystem(type,this); if(bl != null){ return bl; } } return null; } public BlockControlCenter getControlCenter(){ return (BlockControlCenter) getBlock(BlockControlCenter.class); } public abstract TileEntityWire setTileEntity(); @Override public TileEntity createNewTileEntity(World var1, int var2) { tileEntity = setTileEntity(); return tileEntity; } } BlockHelper, used to get blocks package com.revereor.blocks.util; import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; import com.revereor.main.Main; public class BlockHelper { public static boolean isDirect(int x, int tx, int y, int ty, int z, int tz){ return ((x == tx+1 || x == tx-1) && !(y == ty+1 || y == ty-1) && !(z == tz+1 || z == tz-1)) || (!(x == tx+1 || x == tx-1) && (y == ty+1 || y == ty-1) && !(z == tz+1 || z == tz-1)) || (!(x == tx+1 || x == tx-1) && !(y == ty+1 || y == ty-1) && (z == tz+1 || z == tz-1)); } public static boolean isIndirect(int x, int tx, int y, int ty, int z, int tz){ return !isDirect(x, tx, y, ty, z, tz); } public static Block[] getDirectNearbyBlocks(TileEntity tileEntity){ Block[] blks = new Block[6]; for(int x = tileEntity.xCoord-1; x < tileEntity.xCoord+1; x++){ for(int y = tileEntity.yCoord-1; y < tileEntity.yCoord+1; y++){ for(int z = tileEntity.zCoord-1; z < tileEntity.zCoord+1; z++){ if(isDirect(x, tileEntity.xCoord, y, tileEntity.yCoord, z, tileEntity.zCoord)){ for(int i = 0; i < blks.length; i++){ if(blks[i] == null){ blks[i] = tileEntity.getWorldObj().getBlock(x, y, z); } else if(i == blks.length){ Main.print("Exceeded maximum blocks while getting nearby blocks."); } } } } } } return blks; } } Open to any other ideas to get this!
-
Thanks, Ive been doing this for a long time so I am looking over exceptions since vanilla minecraft makes so many. Thanks again!
-
After trial and error, I came to the conclusion that writeNBT/getDescriptionPacket is called but onDataPacket/readFromNBT is not. Any ideas?
-
I cant seem to get my TileEntity to save its NBT, ive looked at updated 1.7.2 tutorials on saving NBT and it just wont work. Here is my code: public Packet getDescriptionPacket() { NBTTagCompound nbtTag = new NBTTagCompound(); this.writeToNBT(nbtTag); return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, nbtTag); } public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) { readFromNBT(packet.func_148857_g()); } public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); NBTTagList tagList = par1NBTTagCompound.getTagList("Inventory", Constants.NBT.TAG_COMPOUND); for (int i = 0; i < tagList.tagCount(); i++) { NBTTagCompound tag = (NBTTagCompound) tagList.getCompoundTagAt(i); byte slot = tag.getByte("Slot"); if (slot >= 0 && slot < slots.length) { slots[slot] = ItemStack.loadItemStackFromNBT(tag); } } } public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); NBTTagList itemList = new NBTTagList(); for (int i = 0; i < slots.length; i++) { ItemStack stack = slots[i]; if (stack != null) { NBTTagCompound tag = new NBTTagCompound(); tag.setByte("Slot", (byte) i); stack.writeToNBT(tag); itemList.appendTag(tag); } } par1NBTTagCompound.setTag("Inventory", itemList); } Slots is indeed the itemstack array used by the container/gui. I'll give any more code if needed.
-
Oh and sorry for double posting!! It must have submitted twice! ;/
-
Hey guys, I generally dislike coming here to forums, but I have been struggling to get this to work for hours. My problem is I want to make it so I cannot take out of the 2nd slot (number 1 in the index) BlockExtractinator: (the block) public boolean onBlockActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) { if (par1World.isRemote){ return true; } else { TileEntityExtractinator entity = (TileEntityExtractinator)par1World.getTileEntity(x, y, z); if (entity != null){ par5EntityPlayer.openGui(Main.instance, Main.instance.guiIdExtractinator, par1World, x, y, z); } return true; } } @Override public void breakBlock(World world, int x, int y, int z, Block par5, int par6) { dropItems(world, x, y, z); super.breakBlock(world, x, y, z, par5, par6); } private void dropItems(World world, int x, int y, int z){ Random rand = new Random(); TileEntity tileEntity = world.getTileEntity(x, y, z); if (!(tileEntity instanceof IInventory)) { return; } IInventory inventory = (IInventory) tileEntity; for (int i = 0; i < inventory.getSizeInventory(); i++) { ItemStack item = inventory.getStackInSlot(i); if (item != null && item.stackSize > 0) { float rx = rand.nextFloat() * 0.8F + 0.1F; float ry = rand.nextFloat() * 0.8F + 0.1F; float rz = rand.nextFloat() * 0.8F + 0.1F; EntityItem entityItem = new EntityItem(world, x + rx, y + ry, z + rz, new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); if (item.hasTagCompound()) { entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); } float factor = 0.05F; entityItem.motionX = rand.nextGaussian() * factor; entityItem.motionY = rand.nextGaussian() * factor + 0.2F; entityItem.motionZ = rand.nextGaussian() * factor; world.spawnEntityInWorld(entityItem); item.stackSize = 0; } } } @Override public void onBlockExploded(World world, int x, int y, int z, Explosion explosion) { } @Override public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityExtractinator(); } GUI private TileEntityExtractinator extractinator; public static final ResourceLocation texture = new ResourceLocation(Main.MODID.toLowerCase(), "textures/gui/extractinator.png"); public GuiExtractinator(InventoryPlayer inventoryPlayer, TileEntityExtractinator entity) { super(new ContainerExtractinator(inventoryPlayer, entity)); this.extractinator = entity; this.xSize = 176; this.ySize = 166; } @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GL11.glColor4f(1F, 1F, 1F, 1F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); } @Override protected void drawGuiContainerForegroundLayer(int var1, int var2) { String name = "Extractinator"; this.fontRendererObj.drawString(name, this.xSize/2 - this.fontRendererObj.getStringWidth(name) /2, 6, 4210752); this.fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory").trim(), 8, this.ySize - 96, 4210752); } TileEntityExtractinator package com.revereor.tileentity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; public class TileEntityExtractinator extends TileEntity implements ISidedInventory{ private ItemStack[] slots = new ItemStack[2]; private int extractTime; private static final int[] slots_top = new int[]{0}; private static final int[] slots_bottom = new int[]{1}; private static final int[] slots_sides = new int[]{}; public int getSizeInventory(){ return this.slots.length; } @Override public ItemStack getStackInSlot(int var1) { return slots[var1]; } @Override public ItemStack decrStackSize(int var1, int var2) { // TODO Auto-generated method stub return null; } @Override public ItemStack getStackInSlotOnClosing(int var1) { // TODO Auto-generated method stub return null; } @Override public void setInventorySlotContents(int var1, ItemStack var2) { slots[var1] = var2; } @Override public String getInventoryName() { return "Extractinator"; } @Override public boolean hasCustomInventoryName() { return true; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer var1) { // TODO Auto-generated method stub return false; } @Override public void openInventory() { // TODO Auto-generated method stub } @Override public void closeInventory() { // TODO Auto-generated method stub } public void updateEntity(){ if(slots[0] != null){ } else { extractTime = 0; } } @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return var1 != 1; } @Override public int[] getAccessibleSlotsFromSide(int var1) { return var1 == 0 ? slots_bottom : (var1 == 1 ? slots_top : slots_sides); } @Override public boolean canInsertItem(int var1, ItemStack var2, int var3) { return this.isItemValidForSlot(var1, var2); } @Override public boolean canExtractItem(int var1, ItemStack var2, int var3) { return var3 != 0 || var1 != 1; } } Container package com.revereor.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import com.revereor.tileentity.TileEntityExtractinator; public class ContainerExtractinator extends Container { private TileEntityExtractinator extractinator; public ContainerExtractinator(InventoryPlayer inventory, TileEntityExtractinator entity) { this.extractinator = entity; this.addSlotToContainer(new Slot(entity, 0, 52,35)); this.addSlotToContainer(new Slot(entity, 1, 116,35)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j + i*9 + 9, j*18+8, i*18+84)); } } for(int i = 0; i < 9; i++){ for(int j = 0; j < 1; j++){ this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 142)); } } } @Override public boolean canInteractWith(EntityPlayer var1) { return true; } } Sorry if thats a lot!
-
Damage is acting oddly, its still "regenerating" itself
-
Doesnt work , but I do notice a decrease in lag (it used to give out for a second before) Heres what I have in place of my server tick handler now: package mods.MoreMinecraft.Classes.Items; import mods.MoreMinecraft.Classes.MoreMinecraft; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumArmorMaterial; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; public class ItemArmorRedstoneMod extends ItemArmor { String path = "/textures/armor/"; String Extension = ".png"; String armorFile; public ItemArmorRedstoneMod(int par1, EnumArmorMaterial par2EnumArmorMaterial, int par3, int par4, String armorFile) { super(par1, par2EnumArmorMaterial, par3, par4); this.armorFile = armorFile; } @Override public void registerIcons(IconRegister reg) { this.itemIcon = reg.registerIcon(MoreMinecraft.modID + ":" + this.getUnlocalizedName()); } @Override public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer) { return "moreminecraft"+":" + armorFile + Extension; } @Override public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { return Item.redstone.itemID == par2ItemStack.itemID ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); } boolean scubaTank = false; boolean alreadyJumped = false; boolean alreadyJumpedDamaged = false; @Override public void onArmorTickUpdate(World par1World, EntityPlayer player, ItemStack par3ItemStack){ if(player.getCurrentItemOrArmor(4) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(4); if(itemPar1.getItem() == MoreMinecraft.helmetGogglesVision){ if(itemPar1.getItem().getDamage(itemPar1) < 72000){ player.addPotionEffect((new PotionEffect(Potion.nightVision.getId(), 219, 0))); } if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 72000) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); } } if(player.getCurrentItemOrArmor(3) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(3); if(itemPar1.getItem() == MoreMinecraft.plateDualHearts){ if(itemPar1.getItem().getDamage(itemPar1) < 72000){ player.addPotionEffect((new PotionEffect(Potion.regeneration.getId(), 21, 2))); player.addPotionEffect((new PotionEffect(Potion.field_76443_y.getId(), 21, 0))); } if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 72000) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); } } if(player.getCurrentItemOrArmor(4) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(4); if(itemPar1.getItem() == MoreMinecraft.scubaHelmet && player.isInsideOfMaterial(Material.water)){ if(itemPar1.getItem().getDamage(itemPar1) < 72000){ player.addPotionEffect((new PotionEffect(Potion.waterBreathing.getId(), 21, 0))); } if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000 && scubaTank){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 72000 && scubaTank) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000 && !scubaTank){ itemPar1.setItemDamage(4); } else if(itemPar1.getItemDamage() < 72000 && !scubaTank) itemPar1.setItemDamage(itemPar1.getItemDamage() + 4); } } if(player.getCurrentItemOrArmor(3) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(3); if(itemPar1.getItem() == MoreMinecraft.scubaTank){ scubaTank = true; if(player.onGround){ player.addPotionEffect((new PotionEffect(Potion.moveSlowdown.getId(), 21, 0))); } } else scubaTank = false; } else scubaTank = false; if(player.getCurrentItemOrArmor(1) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(1); if(itemPar1.getItem() == MoreMinecraft.jumpBoots){ boolean isJumping = Minecraft.getMinecraft().gameSettings.keyBindJump.pressed && !player.capabilities.isFlying; if(itemPar1.getItem().getDamage(itemPar1) < 60000 && isJumping && !alreadyJumped){ player.addPotionEffect((new PotionEffect(Potion.jump.getId(), 1, 0))); if(!player.capabilities.isCreativeMode && !alreadyJumpedDamaged && !alreadyJumped){ itemPar1.setItemDamage(itemPar1.getItemDamage() + 100); alreadyJumpedDamaged = true; } alreadyJumped = true; } /*if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 60000){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 60000) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); */ } } if(player.onGround || player.isInWater()){ alreadyJumped = false; alreadyJumpedDamaged = false; } } }
-
Ill try it out, but what about items, I have a item that uses it too: package mods.MoreMinecraft.Classes.Items; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mods.MoreMinecraft.Classes.MoreMinecraft; import mods.MoreMinecraft.Classes.Entities.EntityBakedPotatoLaunched; import mods.MoreMinecraft.Classes.Entities.EntityPoisonPotatoLaunched; import mods.MoreMinecraft.Classes.Entities.EntityPotatoLaunched; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class PotatoLauncher extends Item { boolean potatoFired = false; boolean potatoBakedFired = false; boolean potatoPoisonFired = false; public int thrownDamage = 6; public static int current = 0; public PotatoLauncher(int par1) { super(par1); this.maxStackSize = 1; this.setMaxDamage(40000); } @SideOnly(Side.CLIENT) public void registerIcons(IconRegister reg) { this.itemIcon = reg.registerIcon(MoreMinecraft.modID + ":" + this.getUnlocalizedName()); } /** * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer */ public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { if(this.getDamage(par1ItemStack) < 40000 || par3EntityPlayer.capabilities.isCreativeMode){ //par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); if(par3EntityPlayer.inventory.hasItem(Item.potato.itemID) && !par3EntityPlayer.capabilities.isCreativeMode){ par2World.spawnEntityInWorld(new EntityPotatoLaunched(par2World, par3EntityPlayer, thrownDamage, par3EntityPlayer)); this.setDamage(par1ItemStack, this.getDamage(par1ItemStack)+500); par3EntityPlayer.inventory.consumeInventoryItem(Item.potato.itemID); return par1ItemStack; } else if(par3EntityPlayer.capabilities.isCreativeMode){ par2World.spawnEntityInWorld(new EntityPotatoLaunched(par2World, par3EntityPlayer, thrownDamage, par3EntityPlayer)); return par1ItemStack; } if(par3EntityPlayer.inventory.hasItem(Item.bakedPotato.itemID) && !par3EntityPlayer.capabilities.isCreativeMode){ par2World.spawnEntityInWorld(new EntityBakedPotatoLaunched(par2World, par3EntityPlayer, thrownDamage, par3EntityPlayer)); this.setDamage(par1ItemStack, this.getDamage(par1ItemStack)+500); par3EntityPlayer.inventory.consumeInventoryItem(Item.bakedPotato.itemID); return par1ItemStack; } else if(par3EntityPlayer.capabilities.isCreativeMode){ par2World.spawnEntityInWorld(new EntityBakedPotatoLaunched(par2World, par3EntityPlayer, thrownDamage, par3EntityPlayer)); return par1ItemStack; } if(par3EntityPlayer.inventory.hasItem(Item.poisonousPotato.itemID) && !par3EntityPlayer.capabilities.isCreativeMode){ par2World.spawnEntityInWorld(new EntityPoisonPotatoLaunched(par2World, par3EntityPlayer, thrownDamage, par3EntityPlayer)); this.setDamage(par1ItemStack, this.getDamage(par1ItemStack)+500); par3EntityPlayer.inventory.consumeInventoryItem(Item.poisonousPotato.itemID); return par1ItemStack; } else if(par3EntityPlayer.capabilities.isCreativeMode){ par2World.spawnEntityInWorld(new EntityPoisonPotatoLaunched(par2World, par3EntityPlayer, thrownDamage, par3EntityPlayer)); return par1ItemStack; } par3EntityPlayer.addChatMessage("You dont have any Potatoes!"); return par1ItemStack; } else par3EntityPlayer.addChatMessage("This potato launcher is out of charge!"); return par1ItemStack; } }
-
Actually, it works fine until it around the durability of 4000.. I dont understand. and I tried that
-
Im still seeing the durability of 65532. Help?
-
Ill give you my client, common, and tick handler. Tick: package mods.MoreMinecraft.Classes.common; import java.util.EnumSet; import mods.MoreMinecraft.Classes.MoreMinecraft; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import org.lwjgl.input.Keyboard; import cpw.mods.fml.common.ITickHandler; import cpw.mods.fml.common.TickType; public class ServerTickHandler implements ITickHandler { boolean scubaTank = false; boolean alreadyJumped = false; boolean alreadyJumpedDamaged = false; private void OnPlayerTick(EntityPlayer player){ if(player.getCurrentItemOrArmor(4) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(4); if(itemPar1.getItem() == MoreMinecraft.helmetGogglesVision){ if(itemPar1.getItem().getDamage(itemPar1) < 72000){ player.addPotionEffect((new PotionEffect(Potion.nightVision.getId(), 219, 0))); } if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 72000) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); } } if(player.getCurrentItemOrArmor(3) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(3); if(itemPar1.getItem() == MoreMinecraft.plateDualHearts){ if(itemPar1.getItem().getDamage(itemPar1) < 72000){ player.addPotionEffect((new PotionEffect(Potion.regeneration.getId(), 21, 2))); player.addPotionEffect((new PotionEffect(Potion.field_76443_y.getId(), 21, 0))); } if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 72000) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); } } if(player.getCurrentItemOrArmor(4) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(4); if(itemPar1.getItem() == MoreMinecraft.scubaHelmet && player.isInsideOfMaterial(Material.water)){ if(itemPar1.getItem().getDamage(itemPar1) < 72000){ player.addPotionEffect((new PotionEffect(Potion.waterBreathing.getId(), 21, 0))); } if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000 && scubaTank){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 72000 && scubaTank) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 72000 && !scubaTank){ itemPar1.setItemDamage(4); } else if(itemPar1.getItemDamage() < 72000 && !scubaTank) itemPar1.setItemDamage(itemPar1.getItemDamage() + 4); } } if(player.getCurrentItemOrArmor(3) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(3); if(itemPar1.getItem() == MoreMinecraft.scubaTank){ scubaTank = true; if(player.onGround){ player.addPotionEffect((new PotionEffect(Potion.moveSlowdown.getId(), 21, 0))); } } else scubaTank = false; } else scubaTank = false; if(player.getCurrentItemOrArmor(1) != null){ ItemStack itemPar1 = player.getCurrentItemOrArmor(1); if(itemPar1.getItem() == MoreMinecraft.jumpBoots){ boolean isJumping = Minecraft.getMinecraft().gameSettings.keyBindJump.pressed && !player.capabilities.isFlying; if(itemPar1.getItem().getDamage(itemPar1) < 60000 && isJumping && !alreadyJumped){ player.addPotionEffect((new PotionEffect(Potion.jump.getId(), 1, 0))); if(!player.capabilities.isCreativeMode && !alreadyJumpedDamaged && !alreadyJumped){ itemPar1.setItemDamage(itemPar1.getItemDamage() + 100); alreadyJumpedDamaged = true; } alreadyJumped = true; } /*if(itemPar1.getItemDamage() == 0 && itemPar1.getItemDamage() < 60000){ itemPar1.setItemDamage(1); } else if(itemPar1.getItemDamage() < 60000) itemPar1.setItemDamage(itemPar1.getItemDamage() + 1); */ } } if(player.onGround || player.isInWater()){ alreadyJumped = false; alreadyJumpedDamaged = false; } } @Override public void tickStart(EnumSet<TickType> type, Object... tickData) { if(type.equals(EnumSet.of(TickType.PLAYER))){ OnPlayerTick((EntityPlayer) tickData[0]); } } @Override public void tickEnd(EnumSet<TickType> type, Object... tickData) { // TODO Auto-generated method stub } @Override public EnumSet<TickType> ticks() { return EnumSet.of(TickType.PLAYER, TickType.SERVER); } @Override public String getLabel() { // TODO Auto-generated method stub return null; } } Common: package mods.MoreMinecraft.Classes.common; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; public class CommonProxy implements IGuiHandler { public void registerRenders() { } public int addArmor(String string) { return 0; } public void registerServerTickHandler(){ TickRegistry.registerTickHandler(new ServerTickHandler(), Side.SERVER); TickRegistry.registerTickHandler(new ServerTickHandler(), Side.CLIENT); } @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); if(tileEntity != null) { switch(ID) { case 0: /* your Containers go here*/ } } return tileEntity; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } } Client: package mods.MoreMinecraft.Classes.common; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; public class CommonProxy implements IGuiHandler { public void registerRenders() { } public int addArmor(String string) { return 0; } public void registerServerTickHandler(){ TickRegistry.registerTickHandler(new ServerTickHandler(), Side.SERVER); TickRegistry.registerTickHandler(new ServerTickHandler(), Side.CLIENT); } @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getBlockTileEntity(x, y, z); if(tileEntity != null) { switch(ID) { case 0: /* your Containers go here*/ } } return tileEntity; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } } Just a side note, registerServerTickHandler is called. So it is working as far as tick handlers go.
-
Alrighty, so I have "special effect" armor in my mod but its glitching out a bit. What is happening is when the armor's metadata hits 0 (I use metadata as "power" for the armor, and I have the armor set as a enumtype of infinite, so it doesnt protect the player, just allows them to wear it) and when it hits 0 and the player logs out, it will exactly go to a metadata of 65532, and it will completly "regenerate" its power if the max is under that, I also noticed that it does this at values of things like 1 and 2. Help? Heres what my enum looks like public static EnumArmorMaterial armorInfinite = EnumHelper.addArmorMaterial("INFINITE", 0, new int[] { 0, 0, 0, 0}, 0); and heres a sample of my code from my tick hander: and I just use a custom crafting handler for adding to the metadata, it just looks like this CraftingManager.getInstance().getRecipeList().add(new RecipeRepair(this.helmetGogglesVision.itemID, new ItemStack(Item.redstone), 1125)); Help? I suspect that minecraft is freaking out because the metadata is at 0, and since I have it to be "invincible" as far as actual vanilla armor goes I assume it just freaks and trys to fix it.
-
got a crash with my mod dont know why
SwordsMiner replied to Mii1128's topic in Support & Bug Reports
Read the crash report, if you cant read it, then DONT mod. Its saying that your trying to turn an itemstack into a java.lang and it cant convert it.