Posted September 10, 201213 yr I'm using the latest version of Forge and I get a crash when I try to run my mod outside of MCP. Here's the crash log: ---- Minecraft Crash Report ---- // I let you down. Sorry Time: 9/9/12 4:06 PM Description: Failed to start game cpw.mods.fml.common.LoaderException: java.lang.reflect.InvocationTargetException at cpw.mods.fml.common.LoadController.transition(LoadController.java:102) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:625) at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:174) at net.minecraft.client.Minecraft.a(Minecraft.java:450) at net.minecraft.client.Minecraft.run(Minecraft.java:737) at java.lang.Thread.run(Thread.java:680) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:371) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69) at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300) at com.google.common.eventbus.EventBus.post(EventBus.java:268) at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:124) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69) at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300) at com.google.common.eventbus.EventBus.post(EventBus.java:268) at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:81) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:624) ... 4 more Caused by: java.lang.NoClassDefFoundError: robocraft/common/robots/android/EntityAndroidRobot at robocraft.common.RoboCraft.load(RoboCraft.java:86) ... 30 more Caused by: java.lang.ClassNotFoundException: robocraft.common.robots.android.EntityAndroidRobot at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:100) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 31 more Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file robocraft/common/robots/android/EntityAndroidRobot at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.lang.ClassLoader.defineClass(ClassLoader.java:466) at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:94) ... 33 more Relevant Details: - Minecraft Version: 1.3.2 - Operating System: Mac OS X (i386) version 10.6.8 - Java Version: 1.6.0_22, Apple Inc. - Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Apple Inc. - Memory: 510316592 bytes (486 MB) / 550305792 bytes (524 MB) up to 1070399488 bytes (1020 MB) - JVM Flags: 3 total; -Xbootclasspath/a:/System/Library/PrivateFrameworks/JavaApplicationLauncher.framework/Resources/LauncherSupport.jar -Xms512M -Xmx1024M - FML: FML v3.0.165.344 Minecraft Forge 4.0.0.241 3 mods loaded, 3 mods active FML [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized->Initialized Forge [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized->Initialized ellipsis_RoboCraft [RoboCraft] (robocraft.zip) Unloaded->Constructed->Pre-initialized->Errored - LWJGL: 2.4.2 - OpenGL: ATI Radeon HD 2400 XT OpenGL Engine GL version 2.1 ATI-1.6.36, ATI Technologies Inc. - Is Modded: Definitely; 'forge,fml' - Type: Client - Texture Pack: Default - Profiler Position: N/A (disabled) and here's the EntityAndroidRobot class: package robocraft.common.robots.android; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.List; import net.minecraft.src.DamageSource; import net.minecraft.src.Entity; import net.minecraft.src.EntityItem; import net.minecraft.src.EntityLightningBolt; import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NBTTagList; import net.minecraft.src.PotionEffect; import net.minecraft.src.Vec3; import net.minecraft.src.World; import robocraft.common.InventoryRobot; import robocraft.common.RoboCraft; import robocraft.common.ai.IRobotController; import robocraft.common.ai.IRobotControllerItem; import robocraft.common.ai.pathing.DynamicPathFinder; import robocraft.common.motion.IMotionModule; import robocraft.common.motion.IMotionModuleItem; import robocraft.common.power.IPowerCellItem; import robocraft.common.power.IPowerSupplier; import robocraft.common.power.IPowerTransfer; import robocraft.common.power.IPowerTransferItem; import robocraft.common.sensors.IRobotSensor; import robocraft.common.sensors.IRobotSensorItem; import robocraft.common.tools.IRobotManipulator; import robocraft.common.tools.IRobotManipulatorItem; import robocraft.common.upgrades.IRobotUpgrade; import robocraft.common.upgrades.IRobotUpgradeItem; import robocraft.util.NBTUtilities; import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; public class EntityAndroidRobot extends EntityRobot implements IInventory { // Item interfaces private IRobotController controller; private IRobotSensor sensor; private IPowerTransfer transfer; private IMotionModule motion; private IPowerSupplier battery; private InventoryRobot inventory; private IRobotManipulator leftManip, rightManip; private IRobotUpgrade modules[] = new IRobotUpgrade[6]; // Stacks for the items private ItemStack controllerStack, sensorStack, manipLeft, manipRight; // Slots // 0-3 private ItemStack powerStack, motionStack, transferStack; // Slots 4-6 private ItemStack upgrades[] = new ItemStack[6]; // Persistant state // State private boolean suspended; private int ticksSinceSync; private DynamicPathFinder dynPather; public EntityAndroidRobot(World w) { super(w); texture = "/robocraft/mob/AndroidRobot.png"; controller = null; sensor = null; transfer = null; motion = null; battery = null; leftManip = rightManip = null; inventory = new InventoryRobot(this); // The size of a large chest controllerStack = sensorStack = manipLeft = manipRight = powerStack = null; motionStack = transferStack = null; upgrades[0] = upgrades[1] = upgrades[2] = upgrades[3] = upgrades[4] = upgrades[5] = null; suspended = false; ticksSinceSync = 0; this.height = 2.0f; this.entityType = "humanoid"; dynPather = new DynamicPathFinder(worldObj, this, false, false); getNavigator().setAvoidSun(false); getNavigator().setAvoidsWater(false); getNavigator().setBreakDoors(false); getNavigator().setCanSwim(true); getNavigator().setSpeed(20.0f); getNavigator().setEnterDoors(true); } @Override protected void entityInit() { super.entityInit(); dataWatcher.addObject(16, Byte.valueOf((byte) 0)); dataWatcher.addObject(17, ""); } private boolean consumeEnergy(float e) { if (battery == null) return false; return (battery.removeEnergy(e) == e); } @Override public void onEntityUpdate() { super.onEntityUpdate(); // Update energy transfer system if (transfer != null && battery != null) transfer.updateEnergyTransfer(battery, this); // Don't run any motion or AI if we're suspended or our battery is dead if (battery == null || battery.getEnergy() == 0.0f || (dataWatcher.getWatchableObjectByte(16) == 1)) { if (battery != null) { battery.tick(); battery.removeEnergy(0.01f); } stopMoving(); this.isJumping = false; return; } battery.tick(); battery.removeEnergy(0.5f); // Update AI module if (controller != null) { controller.update(this); battery.removeEnergy(controller.energyUsageThisTick()); } // Iterate through upgrades for (int i = 0; i < 6; i++) if (modules[i] != null) { modules[i].update(this); } } @Override public void onLivingUpdate() { super.onLivingUpdate(); if(isDead) return; // Update the important AI stuff this.worldObj.theProfiler.startSection("navigation"); dynPather.update(); this.worldObj.theProfiler.endSection(); this.worldObj.theProfiler.startSection("controls"); this.worldObj.theProfiler.startSection("move"); getMoveHelper().onUpdateMoveHelper(); this.worldObj.theProfiler.endStartSection("look"); getLookHelper().onUpdateLook(); this.worldObj.theProfiler.endStartSection("jump"); getJumpHelper().doJump(); this.worldObj.theProfiler.endSection(); this.worldObj.theProfiler.endSection(); // Check collision with items List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(1.0D, 0.0D, 1.0D)); if (var3 != null) { Iterator var4 = var3.iterator(); while (var4.hasNext()) { Entity var5 = (Entity) var4.next(); if (!var5.isDead && (var5 instanceof EntityItem)) { // Pickup the item EntityItem i = (EntityItem) var5; if (this.inventory.addItemStackToInventory(i.item)) { this.worldObj .playSoundAtEntity( this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand .nextFloat()) * 0.7F + 1.0F) * 2.0F); if (i.item.stackSize <= 0) i.setDead(); } } } } } @Override public void updateEntityActionState() { // We override this so the robot doesn't turn towards players } @Override public boolean interact(EntityPlayer par1EntityPlayer) { if (par1EntityPlayer == null || worldObj == null) return false; String owner = getOwner(); if (owner != "" && par1EntityPlayer.username != owner && !RoboCraft.debugging) return false; par1EntityPlayer.openGui(RoboCraft.instance, 40, worldObj, entityId, 0, 0); return true; } @Override public void onStruckByLightning(EntityLightningBolt par1EntityLightningBolt) { if (battery != null) { float r = battery.addEnergy(1000); if (r > 0) this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, r / 100); } } @Override public void readEntityFromNBT(NBTTagCompound var1) { super.readEntityFromNBT(var1); // Load inventory info NBTUtilities.loadInventory(var1.getTagList("Items"), this); inventory.readFromNBT(var1.getTagList("ChestItems")); // Construct modules from our inventory if (controllerStack != null && (controllerStack.getItem() instanceof IRobotControllerItem)) { controller = ((IRobotControllerItem) (controllerStack.getItem())) .getControllerInstance(controllerStack); controller.initController(); } if (sensorStack != null && (sensorStack.getItem() instanceof IRobotSensorItem)) sensor = ((IRobotSensorItem) (sensorStack.getItem())) .getSensorInstance(sensorStack); if (transferStack != null && (transferStack.getItem() instanceof IPowerTransferItem)) transfer = ((IPowerTransferItem) (transferStack.getItem())) .getTransferInstance(transferStack); if (motionStack != null && (motionStack.getItem() instanceof IMotionModuleItem)) motion = ((IMotionModuleItem) (motionStack.getItem())) .getModuleInstance(motionStack); if (powerStack != null && (powerStack.getItem() instanceof IPowerCellItem)) battery = ((IPowerCellItem) (powerStack.getItem())) .getPowerSupplierInstance(powerStack); if (manipLeft != null && (manipLeft.getItem() instanceof IRobotManipulatorItem)) leftManip = ((IRobotManipulatorItem) (manipLeft.getItem())) .getManipulatorInstance(manipLeft); if (manipRight != null && (manipRight.getItem() instanceof IRobotManipulatorItem)) rightManip = ((IRobotManipulatorItem) (manipRight.getItem())) .getManipulatorInstance(manipRight); for (int i = 0; i < 6; i++) if (upgrades[i] != null && (upgrades[i].getItem() instanceof IRobotUpgradeItem)) modules[i] = ((IRobotUpgradeItem) (upgrades[i].getItem())) .getUpgradeInstance(upgrades[i]); // Load the owner setOwner(var1.getString("Owner")); } @Override public void writeEntityToNBT(NBTTagCompound var1) { super.writeEntityToNBT(var1); // Make sure all our modules save their states if (controller != null) controller.forceSave(); if (sensor != null) sensor.forceSave(); if (transfer != null) transfer.forceSave(); if (motion != null) motion.forceSave(); if (battery != null) battery.forceSave(); if (leftManip != null) leftManip.forceSave(); if (rightManip != null) rightManip.forceSave(); for (int i = 0; i < 6; i++) if (modules[i] != null) modules[i].forceSave(); var1.setTag("Items", NBTUtilities.saveInventory(this)); var1.setTag("ChestItems", inventory.writeToNBT(new NBTTagList())); var1.setString("Owner", getOwner()); } @Override public int getMaxHealth() { return 1; } @Override public boolean attackEntityFrom(DamageSource par1DamageSource, int par2) { if (!this.worldObj.isRemote) { if (par1DamageSource == DamageSource.inWall) return false; if (par1DamageSource == DamageSource.starve) return false; return super.attackEntityFrom(par1DamageSource, par2); } return false; } @Override protected int applyArmorCalculations(DamageSource par1DamageSource, int par2) { return super.applyArmorCalculations(par1DamageSource, par2); } @Override public void onDeath(DamageSource par1DamageSource) { System.out.println("On Death on " + ((worldObj.isRemote) ? "Remote" : "Local")); // Drop upgrades if (controllerStack != null) { controller.deinitController(); this.entityDropItem(controllerStack, 0.2f); } if (sensorStack != null) { this.entityDropItem(sensorStack, 0.2f); } if (manipLeft != null) { this.entityDropItem(manipLeft, 0.2f); } if (manipRight != null) { this.entityDropItem(manipRight, 0.2f); } if (powerStack != null && !battery.getItem().isVolatile()) { this.entityDropItem(powerStack, 0.2f); } if (motionStack != null) { this.entityDropItem(motionStack, 0.2f); } if (transferStack != null) { this.entityDropItem(transferStack, 0.2f); } for (int i = 0; i < 6; i++) if (upgrades[i] != null) this.entityDropItem(upgrades[i], 0.2f); // Drop items from inventory inventory.dropAllItems(); if (battery != null) { if (battery.getItem().isVolatile()) this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, battery.getEnergy() / 10000); } } @Override public boolean canBreatheUnderwater() { return true; } @Override protected boolean canDespawn() { return false; } @Override @SideOnly(Side.CLIENT) public ItemStack getHeldItem() { return super.getHeldItem(); } @Override public boolean isPotionApplicable(PotionEffect par1PotionEffect) { return false; } @Override public int getSizeInventory() { return 13; } @Override public ItemStack getStackInSlot(int var1) { if (var1 <= 6) { switch (var1) { case 0: return controllerStack; case 1: return sensorStack; case 2: return manipLeft; case 3: return manipRight; case 4: return powerStack; case 5: return motionStack; case 6: return transferStack; } } else { return upgrades[var1 - 7]; } return null; } @Override public ItemStack decrStackSize(int var1, int var2) { System.out.println("decrStackSize on " + ((worldObj.isRemote) ? "Remote" : "Local")); if (getStackInSlot(var1) != null) { if (var1 <= 6) { // We had a module removed } else { if (modules[var1 - 7] != null) { modules[var1 - 7].deinitModule(this); modules[var1 - 7] = null; } } if (getStackInSlot(var1).stackSize <= var2) { ItemStack s = getStackInSlot(var1); setInventorySlotContents(var1, null); onInventoryChanged(); return s; } ItemStack s1 = getStackInSlot(var1).splitStack(var2); if (getStackInSlot(var1).stackSize == 0) setInventorySlotContents(var1, null); onInventoryChanged(); return s1; } else { return null; } } @Override public ItemStack getStackInSlotOnClosing(int var1) { return getStackInSlot(var1); } @Override public void setInventorySlotContents(int var1, ItemStack var2) { if (var1 <= 6) { switch (var1) { case 0: controllerStack = var2; if (var2 != null) { controller = ((IRobotControllerItem) var2.getItem()) .getControllerInstance(var2); controller.initController(); } else if(controller != null) { controller.deinitController(); controller = null; } break; case 1: sensorStack = var2; if (var2 != null) sensor = ((IRobotSensorItem) var2.getItem()) .getSensorInstance(var2); else sensor = null; break; case 2: manipLeft = var2; if (var2 != null) leftManip = ((IRobotManipulatorItem) var2.getItem()) .getManipulatorInstance(var2); else leftManip = null; break; case 3: manipRight = var2; if (var2 != null) rightManip = ((IRobotManipulatorItem) var2.getItem()) .getManipulatorInstance(var2); else rightManip = null; break; case 4: powerStack = var2; if (var2 != null) battery = ((IPowerCellItem) var2.getItem()) .getPowerSupplierInstance(var2); else battery = null; break; case 5: motionStack = var2; if (var2 != null) motion = ((IMotionModuleItem) var2.getItem()) .getModuleInstance(var2); else motion = null; break; case 6: transferStack = var2; if (var2 != null) transfer = ((IPowerTransferItem) var2.getItem()) .getTransferInstance(var2); else transfer = null; break; } } else { upgrades[var1 - 7] = var2; if (var2 != null) { modules[var1 - 7] = ((IRobotUpgradeItem) (var2.getItem())) .getUpgradeInstance(var2); modules[var1 - 7].initModule(this); } else if(modules[var1 - 7] != null){ modules[var1-7].deinitModule(this); modules[var1-7] = null; } } if (var2 != null && var2.stackSize > getInventoryStackLimit()) { var2.stackSize = getInventoryStackLimit(); } onInventoryChanged(); } @Override public String getInvName() { return "Android"; } @Override public int getInventoryStackLimit() { return 1; } @Override public void onInventoryChanged() { } @Override public boolean isUseableByPlayer(EntityPlayer var1) { if (worldObj == null) return true; return var1.getDistanceSq((double) posX + 0.5d, (double) posY + 0.5d, (double) posZ + 0.5d) <= 64d; } @Override public void openChest() { if (worldObj == null) return; if(!worldObj.isRemote) dataWatcher.updateObject(16, Byte.valueOf((byte) 1)); } @Override public void closeChest() { suspended = false; if(!worldObj.isRemote) dataWatcher.updateObject(16, Byte.valueOf((byte) 0)); } @Override public void lookAt(int x, int y, int z) { // Last two are the pitch and yaw velocity getLookHelper().setLookPosition(x, y, z, 5, 5); } @Override public void moveTo(int x, int y, int z) { // Last one is speed dynPather.setTarget(x, y, z); } @Override public boolean isMoving() { return dynPather.isMoving(); } @Override public void stopMoving() { Vec3 lv = getLookVec(); getLookHelper().setLookPosition(lv.xCoord, lv.yCoord, lv.zCoord, 0, 0); getMoveHelper().setMoveTo(this.posX, this.posY, this.posZ, 0); dynPather.abort(); } @Override public void doJump() { getJumpHelper().setJumping(); } @Override public void writeRobotState(DataOutputStream s) throws IOException { } @Override public void readRobotState(DataInputStream s) throws IOException { } @Override public int getEntityID() { return entityId; } @Override public EntityLiving getEntity() { return this; } public String getOwner() { return dataWatcher.getWatchableObjectString(17); } public void setOwner(String s) { if(!worldObj.isRemote) dataWatcher.updateObject(17, s); } @Override public IRobotController getController() { return controller; } @Override public IInventory getInventory() { return inventory; } @Override public IRobotSensor getSensor() { return sensor; } @Override public void transmitAIState(DataOutputStream s) { // TODO Auto-generated method stub } @Override public void decodeAIState(DataInputStream s) { // TODO Auto-generated method stub } public DynamicPathFinder getPathFinder() { return dynPather; } } I really can't seem to figure this out. Does anyone have any ideas?
September 10, 201213 yr Im gunna have to say that its cuz you're useing IInventory, which is typically reserved for Blocks/TileEntities. Not Entities. I do Forge for free, however the servers to run it arn't free, so anything is appreciated. Consider supporting the team on Patreon
September 10, 201213 yr There is not a standard way for entities to have inventories. I do Forge for free, however the servers to run it arn't free, so anything is appreciated. Consider supporting the team on Patreon
September 10, 201213 yr Look at my Particle Decoration Source here: https://github.com/SanAndreasP/Particle-Decoration-Mod I'm using an extra class for the inventory and make an instance field of the inventory in the entity. Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! | mah twitter This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.