Jump to content

Recommended Posts

Posted

I get this error every time I try to open my world. I am using MCAnimator and this is one of the classes. I am using Forge 1.8, Java 1.7 (I tried both 1.7 and 1.8 java they both didn't work).

 

 

[17:40:33] [main/INFO] [GradleStart]: username: Asweez
[17:40:33] [main/INFO] [GradleStart]: Extra: []
[17:40:33] [main/INFO] [GradleStart]: Password found, attempting login
[17:40:34] [main/INFO]: Logging in with username & password
[17:40:35] [main/INFO] [GradleStart]: Login Succesful!
[17:40:35] [main/INFO] [GradleStart]: Running with arguments: [--userProperties, [], --username, Asweez, --accessToken, {REDACTED}, --assetIndex, 1.8, --uuid, f5cb1557227e4b58b571b98d4f5e2f34, --userType, mojang, --assetsDir, /Users/Kids/.gradle/caches/minecraft/assets, --version, 1.8, --tweakClass, net.minecraftforge.fml.common.launcher.FMLTweaker, --tweakClass, net.minecraftforge.gradle.tweakers.CoremodTweaker]
[17:40:35] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.CoremodTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLTweaker
[17:40:35] [main/INFO] [FML]: Forge Mod Loader version 8.99.124.1450 for Minecraft 1.8 loading
[17:40:35] [main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_71, running on Mac OS X:x86_64:10.10.4, installed at /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/jre
[17:40:35] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
[17:40:35] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.CoremodTweaker
[17:40:35] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.fml.relauncher.FMLCorePlugin
[17:40:35] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.classloading.FMLForgePlugin
[17:40:35] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
[17:40:35] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:40:35] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work!
[17:40:36] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing
[17:40:36] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
[17:40:36] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
[17:40:37] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
[17:40:37] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker
[17:40:37] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker
[17:40:37] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main}
[17:40:38] [Client thread/INFO]: Setting user: Asweez
[17:40:41] [Client thread/INFO]: LWJGL Version: 2.9.2
[17:40:41] [Client thread/INFO] [sTDOUT]: [net.minecraftforge.fml.client.SplashProgress:start:235]: ---- Minecraft Crash Report ----
// My bad.

Time: 11/30/15 5:40 PM
Description: Loading screen debug info

This is just a prompt for computer specs to be printed. THIS IS NOT A ERROR


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
Minecraft Version: 1.8
Operating System: Mac OS X (x86_64) version 10.10.4
Java Version: 1.7.0_71, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 231537496 bytes (220 MB) / 361234432 bytes (344 MB) up to 1908932608 bytes (1820 MB)
JVM Flags: 0 total; 
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: 
Loaded coremods (and transformers): 
GL info: ' Vendor: 'Intel Inc.' Version: '2.1 INTEL-10.6.31' Renderer: 'Intel Iris Pro OpenGL Engine'
[17:40:41] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization
[17:40:41] [Client thread/INFO] [FML]: MinecraftForge v11.14.3.1450 Initialized
[17:40:41] [Client thread/INFO] [FML]: Replaced 204 ore recipies
[17:40:41] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization
[17:40:41] [Client thread/INFO] [FML]: Found 0 mods from the command line. Injecting into mod discoverer
[17:40:41] [Client thread/INFO] [FML]: Searching /Users/Kids/Desktop/MiniMods/MoreCreeps/mods for mods
[17:40:43] [Client thread/INFO] [FML]: Forge Mod Loader has identified 4 mods to load
[17:40:44] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, creeps] at CLIENT
[17:40:44] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, creeps] at SERVER
[17:40:44] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:More Creeps and Weirdos
[17:40:44] [Client thread/INFO] [FML]: Processing ObjectHolder annotations
[17:40:44] [Client thread/INFO] [FML]: Found 384 ObjectHolder annotations
[17:40:44] [Client thread/INFO] [FML]: Identifying ItemStackHolder annotations
[17:40:44] [Client thread/INFO] [FML]: Found 0 ItemStackHolder annotations
[17:40:44] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0
[17:40:44] [Client thread/INFO] [FML]: Applying holder lookups
[17:40:44] [Client thread/INFO] [FML]: Holder lookups applied
[17:40:44] [Client thread/INFO] [FML]: Injecting itemstacks
[17:40:44] [Client thread/INFO] [FML]: Itemstack injection complete
[17:40:44] [sound Library Loader/INFO]: Starting up SoundSystem...
[17:40:44] [Thread-8/INFO]: Initializing LWJGL OpenAL
[17:40:44] [Thread-8/INFO]: (The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org)
[17:40:44] [Thread-8/INFO]: OpenAL initialized.
[17:40:45] [sound Library Loader/INFO]: Sound engine started
[17:40:47] [Client thread/INFO]: Created: 512x512 textures-atlas
[17:40:48] [Client thread/INFO] [sTDOUT]: [com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.MCAVersionChecker:checkForLibraryVersion:11]: MCA WARNING: com.apmods.creeps.models.ModelSneakySal needs a newer version of the library (5). Things could go wrong!
[17:40:48] [Client thread/INFO] [sTDOUT]: [com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.MCAVersionChecker:checkForLibraryVersion:11]: MCA WARNING: com.apmods.creeps.models.floob.ModelFloob needs a newer version of the library (5). Things could go wrong!
[17:40:48] [Client thread/INFO] [FML]: Injecting itemstacks
[17:40:48] [Client thread/INFO] [FML]: Itemstack injection complete
[17:40:48] [Client thread/INFO] [FML]: Forge Mod Loader has successfully loaded 4 mods
[17:40:48] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:More Creeps and Weirdos
[17:40:48] [Client thread/INFO]: SoundSystem shutting down...
[17:40:49] [Client thread/WARN]: Author: Paul Lamb, www.paulscode.com
[17:40:49] [sound Library Loader/INFO]: Starting up SoundSystem...
[17:40:49] [Thread-10/INFO]: Initializing LWJGL OpenAL
[17:40:49] [Thread-10/INFO]: (The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org)
[17:40:49] [Thread-10/INFO]: OpenAL initialized.
[17:40:49] [sound Library Loader/INFO]: Sound engine started
[17:40:50] [Client thread/INFO]: Created: 512x512 textures-atlas
[17:40:53] [server thread/INFO]: Starting integrated minecraft server version 1.8
[17:40:53] [server thread/INFO]: Generating keypair
[17:40:53] [server thread/INFO] [FML]: Injecting existing block and item data into this server instance
[17:40:53] [server thread/INFO] [FML]: Applying holder lookups
[17:40:53] [server thread/INFO] [FML]: Holder lookups applied
[17:40:53] [server thread/INFO] [FML]: Loading dimension 0 (New World) (net.minecraft.server.integrated.IntegratedServer@170b0284)
[17:40:53] [server thread/INFO] [FML]: Loading dimension 1 (New World) (net.minecraft.server.integrated.IntegratedServer@170b0284)
[17:40:53] [server thread/INFO] [FML]: Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@170b0284)
[17:40:53] [server thread/INFO]: Preparing start region for level 0
[17:40:54] [server thread/INFO]: Changing view distance to 12, from 10
[17:40:54] [server thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.fml.common.gameevent.TickEvent$ServerTickEvent@2a92c388:
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) ~[?:1.7.0_71]
at java.util.ArrayList$Itr.next(ArrayList.java:831) ~[?:1.7.0_71]
at com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.animation.AnimTickHandler.onServerTick(AnimTickHandler.java:54) ~[AnimTickHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_7_AnimTickHandler_onServerTick_ServerTickEvent.invoke(.dynamic) ~[?:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) ~[ASMEventHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) [EventBus.class:?]
at net.minecraftforge.fml.common.FMLCommonHandler.onPreServerTick(FMLCommonHandler.java:301) [FMLCommonHandler.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:658) [MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:171) [integratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540) [MinecraftServer.class:?]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_71]
[17:40:54] [server thread/ERROR] [FML]: Index: 1 Listeners:
[17:40:54] [server thread/ERROR] [FML]: 0: NORMAL
[17:40:54] [server thread/ERROR] [FML]: 1: ASM: com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.animation.AnimTickHandler@7a85393d onServerTick(Lnet/minecraftforge/fml/common/gameevent/TickEvent$ServerTickEvent;)V
[17:40:54] [server thread/ERROR]: Encountered an unexpected exception
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) ~[?:1.7.0_71]
at java.util.ArrayList$Itr.next(ArrayList.java:831) ~[?:1.7.0_71]
at com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.animation.AnimTickHandler.onServerTick(AnimTickHandler.java:54) ~[AnimTickHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_7_AnimTickHandler_onServerTick_ServerTickEvent.invoke(.dynamic) ~[?:?]
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) ~[ASMEventHandler.class:?]
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) ~[EventBus.class:?]
at net.minecraftforge.fml.common.FMLCommonHandler.onPreServerTick(FMLCommonHandler.java:301) ~[FMLCommonHandler.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:658) ~[MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:171) ~[integratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540) [MinecraftServer.class:?]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_71]
[17:40:54] [server thread/ERROR]: This crash report has been saved to: /Users/Kids/Desktop/MiniMods/MoreCreeps/./crash-reports/crash-2015-11-30_17.40.54-server.txt
[17:40:54] [server thread/INFO]: Stopping server
[17:40:54] [server thread/INFO]: Saving players
[17:40:54] [server thread/INFO]: Saving worlds
[17:40:54] [server thread/INFO]: Saving chunks for level 'New World'/Overworld
[17:40:54] [server thread/INFO]: Saving chunks for level 'New World'/Nether
[17:40:54] [server thread/INFO]: Saving chunks for level 'New World'/The End
[17:40:54] [server thread/INFO] [FML]: Unloading dimension 0
[17:40:54] [server thread/INFO] [FML]: Unloading dimension -1
[17:40:54] [server thread/INFO] [FML]: Unloading dimension 1
[17:40:54] [server thread/INFO] [FML]: Applying holder lookups
[17:40:54] [server thread/INFO] [FML]: Holder lookups applied
[17:40:54] [server thread/INFO] [FML]: The state engine was in incorrect state SERVER_STOPPING and forced into state SERVER_STOPPED. Errors may have been discarded.
[17:40:55] [Client thread/INFO] [sTDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:663]: ---- Minecraft Crash Report ----
// Why did you do that?

Time: 11/30/15 5:40 PM
Description: Exception in server tick loop

java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.animation.AnimTickHandler.onServerTick(AnimTickHandler.java:54)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_7_AnimTickHandler_onServerTick_ServerTickEvent.invoke(.dynamic)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55)
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138)
at net.minecraftforge.fml.common.FMLCommonHandler.onPreServerTick(FMLCommonHandler.java:301)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:658)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:171)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540)
at java.lang.Thread.run(Thread.java:745)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
Minecraft Version: 1.8
Operating System: Mac OS X (x86_64) version 10.10.4
Java Version: 1.7.0_71, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 391525840 bytes (373 MB) / 778043392 bytes (742 MB) up to 1908932608 bytes (1820 MB)
JVM Flags: 0 total; 
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.10 FML v8.0.99.99 Minecraft Forge 11.14.3.1450 4 mods loaded, 4 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAAA	mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
UCHIJAAAA	FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.8-11.14.3.1450.jar) 
UCHIJAAAA	Forge{11.14.3.1450} [Minecraft Forge] (forgeSrc-1.8-11.14.3.1450.jar) 
UCHIJAAAA	creeps{1.0} [More Creeps and Weirdos] (bin) 
Loaded coremods (and transformers): 
GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
Profiler Position: N/A (disabled)
Player Count: 0 / 8; []
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'
[17:40:55] [Client thread/INFO] [sTDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:663]: #@!@# Game crashed! Crash report saved to: #@!@# ./crash-reports/crash-2015-11-30_17.40.54-server.txt
AL lib: (EE) alc_cleanup: 1 device not closed

 

 

AnimTickHandler:

 

package com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.animation;

import java.util.ArrayList;
import java.util.Iterator;

import com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.IMCAnimatedEntity;

import net.minecraft.entity.Entity;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;

public class AnimTickHandler {
private ArrayList<IMCAnimatedEntity> activeEntities = new ArrayList<IMCAnimatedEntity>();
private ArrayList<IMCAnimatedEntity> removableEntities = new ArrayList<IMCAnimatedEntity>();

public AnimTickHandler() {
	FMLCommonHandler.instance().bus().register(this);
}

public void addEntity(IMCAnimatedEntity entity) {
	activeEntities.add(entity);
}

//Called when the client ticks. 
@SubscribeEvent
public void onClientTick(TickEvent.ClientTickEvent event) {
	if(!activeEntities.isEmpty()) {
		if(event.phase == Phase.START) {
			for(IMCAnimatedEntity entity : activeEntities) {
				entity.getAnimationHandler().animationsUpdate();

				if(((Entity)entity).isDead) {
					removableEntities.add(entity);
				}
			}

			for(IMCAnimatedEntity entity : removableEntities) {
				activeEntities.remove(entity);
			}
			removableEntities.clear();
		}
	}
}

//Called when the server ticks. Usually 20 ticks a second. 
@SubscribeEvent
public void onServerTick(TickEvent.ServerTickEvent event) {
	if(!activeEntities.isEmpty()) {
		if(event.phase == Phase.START) {
			for(IMCAnimatedEntity entity : activeEntities) {
				entity.getAnimationHandler().animationsUpdate();

				if(((Entity)entity).isDead) {
					removableEntities.add(entity);
				}
			}

			for(IMCAnimatedEntity entity : removableEntities) {
				activeEntities.remove(entity);
			}
			removableEntities.clear();
		}
	}
}

//Called when a new frame is displayed (See fps) 
@SubscribeEvent
public void onRenderTick(TickEvent.RenderTickEvent event) {
}

//Called when the world ticks
@SubscribeEvent
public void onWorldTick(TickEvent.WorldTickEvent event) {
}
}

 

Creator of the MyFit, MagiCraft, Tesseract gun, and Papa's Wingeria mod.

Posted

Jesus!

 

CMO appears when you are manipulating contents of collection while they are being in use. Example: One thread is iterating through collection while other thread removes entries.

 

Which is literally what you did. You have 2 arrays shared between client and server event. ClientTick is fired by client thread, server, by server.

You need to have separate arrays for each logical side or not allow client to remove stuff.

Also note that you should remember about thing called "dedic" where clients don't have server thread.

1.7.10 is no longer supported by forge, you are on your own.

Posted

CME can occur even on a single-threaded application, so it is not necessarily a threading issue; in fact, variables exist separately in Minecraft client vs. server because they are (or effectively are) separate applications, so if you had a List that existed on both sides, you could modify it to your heart's content on one side without the other side ever being affected by it. That's why you need packets to communicate between the two.

 

Anyway, you can safely remove elements using Iterators, but not the standard List methods. A quick search on Google brings up lots of information; e.g. this SO question which should help your specific situation.

 

Other solutions are to make a copy of the collection, but I usually prefer iterators when I wish to remove elements mid-iteration.

Posted

Ok heres what I made with Iterators:

 

 

			if(event.phase == Phase.START) {
			for(IMCAnimatedEntity entity : activeEntities) {
				entity.getAnimationHandler().animationsUpdate();

				if(((Entity)entity).isDead) {
					removableEntities.add(entity);
				}
			}

			for(IMCAnimatedEntity entity : removableEntities) {
				activeEntities.remove(entity);
			}
			removableEntities.clear();
		}

 

 

Would this be correct? And should I put it in both client and server or what? I'm kinda confused on this.

 

So the client runs and starts deleting files that the server is currently iterating through? Is that correct?

 

Thanks

Creator of the MyFit, MagiCraft, Tesseract gun, and Papa's Wingeria mod.

Posted

Ok heres what I made with Iterators:

 

 

			if(event.phase == Phase.START) {
			for(IMCAnimatedEntity entity : activeEntities) {
				entity.getAnimationHandler().animationsUpdate();

				if(((Entity)entity).isDead) {
					removableEntities.add(entity);
				}
			}

			for(IMCAnimatedEntity entity : removableEntities) {
				activeEntities.remove(entity);
			}
			removableEntities.clear();
		}

 

o.0 I don't see any Iterator in there at all, just a foreach loop. Please, if you don't know what something is, search before you ask. There are literally thousands of pages discussing how to use Iterators in Java that you should read rather than wasting our time here.

 

So the client runs and starts deleting files that the server is currently iterating through? Is that correct?

variables exist separately in Minecraft client vs. server because they are (or effectively are) separate applications, so if you had a List that existed on both sides, you could modify it to your heart's content on one side without the other side ever being affected by it.

How is that not clear? And "files" ?! You're not handling any files at all in the code you posted...

Posted

MCAnimator.  There's your problem.  The animation system exported by MCAnimator is rife with problems.  You will not be able to fix this on your own.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

o.0 I don't see any Iterator in there at all, just a foreach loop. Please, if you don't know what something is, search before you ask. There are literally thousands of pages discussing how to use Iterators in Java that you should read rather than wasting our time here.

 

Sorry posted the wrong code, here's the correct code:

 

 

Iterator<IMCAnimatedEntity> it = activeEntities.iterator();
			while(it.hasNext()){
				IMCAnimatedEntity entity = it.next();
				entity.getAnimationHandler().animationsUpdate();
				if(((Entity)entity).isDead){
					removableEntities.add(entity);
				}
			}

			Iterator<IMCAnimatedEntity> itremove = removableEntities.iterator();

			while(itremove.hasNext()){
				IMCAnimatedEntity entity = it.next();
				activeEntities.remove(entity);
			}
			removableEntities.clear();

 

 

MCAnimator.  There's your problem.  The animation system exported by MCAnimator is rife with problems.  You will not be able to fix this on your own.

 

MCAnimator is not my go-to modeling program, but I have a Mac so there's no other option :/

Creator of the MyFit, MagiCraft, Tesseract gun, and Papa's Wingeria mod.

Posted

You are not using the Iterator to remove the element... -.-

 

Please, search 'removing Collection element with Iterator' or some such to learn how to use them to remove entries from a Collection.

 

Also, you won't need a removableEntities list - you can remove the entry directly when found (when using the Iterator correctly).

Posted

I did that:

 

 

Iterator<IMCAnimatedEntity> it = activeEntities.iterator();
			while(it.hasNext()){
				IMCAnimatedEntity entity = it.next();
				entity.getAnimationHandler().animationsUpdate();
				if(((Entity)entity).isDead){
					it.remove();
				}
			}

 

 

And it is in both the client and the server tick methods. However, I still get CME, even when I don't remove anything from the lists (deleting it#remove()). Why?

Creator of the MyFit, MagiCraft, Tesseract gun, and Papa's Wingeria mod.

Posted

AnimTickHandler:

 

package com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.animation;

import java.util.ArrayList;
import java.util.Iterator;

import com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.IMCAnimatedEntity;

import net.minecraft.entity.Entity;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;

public class AnimTickHandler {
private ArrayList<IMCAnimatedEntity> activeEntities = new ArrayList<IMCAnimatedEntity>();
private ArrayList<IMCAnimatedEntity> removableEntities = new ArrayList<IMCAnimatedEntity>();

public AnimTickHandler() {
	FMLCommonHandler.instance().bus().register(this);
}

public void addEntity(IMCAnimatedEntity entity) {
	activeEntities.add(entity);
}

//Called when the client ticks. 
@SubscribeEvent
public void onClientTick(TickEvent.ClientTickEvent event) {
	if(!activeEntities.isEmpty()) {
		if(event.phase == Phase.START) {
			Iterator<IMCAnimatedEntity> it = activeEntities.iterator();
			while(it.hasNext()){
				IMCAnimatedEntity entity = it.next();
				entity.getAnimationHandler().animationsUpdate();
				if(((Entity)entity).isDead){
//						it.remove();
				}
			}
		}
	}
}

//Called when the server ticks. Usually 20 ticks a second. 
@SubscribeEvent
public void onServerTick(TickEvent.ServerTickEvent event) {
	if(!activeEntities.isEmpty()) {
		if(event.phase == Phase.START) {
			Iterator<IMCAnimatedEntity> it = activeEntities.iterator();
			while(it.hasNext()){
				IMCAnimatedEntity entity = it.next();
				entity.getAnimationHandler().animationsUpdate();
				if(((Entity)entity).isDead){
					it.remove();
				}
			}
		}
	}
}

//Called when a new frame is displayed (See fps) 
@SubscribeEvent
public void onRenderTick(TickEvent.RenderTickEvent event) {
}

//Called when the world ticks
@SubscribeEvent
public void onWorldTick(TickEvent.WorldTickEvent event) {
}
}

 

 

Log:

 

---- Minecraft Crash Report ----
// Shall we play a game?

Time: 11/29/15 7:23 PM
Description: Exception in server tick loop

java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.apmods.creeps.models.MCALibs.common.MCACommonLibrary.animation.AnimTickHandler.onServerTick(AnimTickHandler.java:51)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_7_AnimTickHandler_onServerTick_ServerTickEvent.invoke(.dynamic)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55)
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138)
at net.minecraftforge.fml.common.FMLCommonHandler.onPreServerTick(FMLCommonHandler.java:301)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:658)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:171)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:540)
at java.lang.Thread.run(Thread.java:745)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
Minecraft Version: 1.8
Operating System: Mac OS X (x86_64) version 10.10.4
Java Version: 1.8.0_65, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 428730112 bytes (408 MB) / 858259456 bytes (818 MB) up to 1908932608 bytes (1820 MB)
JVM Flags: 0 total; 
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.10 FML v8.0.99.99 Minecraft Forge 11.14.3.1450 4 mods loaded, 4 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAAA	mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
UCHIJAAAA	FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.8-11.14.3.1450.jar) 
UCHIJAAAA	Forge{11.14.3.1450} [Minecraft Forge] (forgeSrc-1.8-11.14.3.1450.jar) 
UCHIJAAAA	creeps{1.0} [More Creeps and Weirdos] (bin) 
Loaded coremods (and transformers): 
GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
Profiler Position: N/A (disabled)
Player Count: 1 / 8; [EntityPlayerMP['Asweez'/114, l='New World', x=-116.11, y=4.00, z=-622.92]]
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'

 

Creator of the MyFit, MagiCraft, Tesseract gun, and Papa's Wingeria mod.

Posted

Well, that's pretty bizarre. Using an Iterator to remove elements should generally protect you from CME in this type of scenario - the only other thing I can think of that you can try is to surround your current list traversal with a synchronized block:

synchronized (activeEntities) {
   // iterator code and iterate over list
}

That will prevent any other methods or threads from accessing the activeEntities List until that code block completes.

 

Perhaps someone with more Java knowledge will be able to explain your problem, as I am at the end of mine with respect to CME :\

Posted

1. Using "synchronized" kills purpose of having multi-threading (in Minecraft case it would cause Client tick to "wait" for Server tick or other way around, not to mention that it is totally logic-breaking).

 

2. If you SUPER-NEED to have one Collection for both threads (which is, as alredy mentioned: retarded), you will need... idk... Lock interface (ReentrantReadWriteLock.class). Which again - will break EVERYTHING, since stuff like this is not compatible with Minecraft design. Lock is used to perfom very fast actions while securing from concurrency.

 

3. MC is not designed to handle synchronization - so DON'T do that!

You need to have separate arrays for each logical side or not allow client (or server) to remove stuff.

Also note that you should remember about thing called "dedic" where clients don't have server thread.

 

4. Make those 2 arrays or proxify your code :

On MP:

- Dedic runs ServerTickEvent on its own array.

- Client runs ClientTickEvent on its own array.

On SP:

- Only ServerTickEvent manipulates array

*Which I will AGAIN say - is REALLY bad. Server should not manipulate client stuff and other way around.

1.7.10 is no longer supported by forge, you are on your own.

Posted

So I need to have a entitiesServer and an entitiesClient list? The MCA help thing said that animations are run both on client and server. Is this right? Is there any way to get around all of this client server tick stuff or is there another solution that I can use to animate my model?

Creator of the MyFit, MagiCraft, Tesseract gun, and Papa's Wingeria mod.

Posted

@Ernio I don't know where you're getting all this multi-threading stuff from - MC is not really multi-threaded except for the network, and that is, well... not well done. The server and client run as separate applications (unless on single player), not threads, so synchronizing a block (which does the same thing as a lock) in one application has no effect on the other application.

 

Even in single player, having a single array or Collection that operates on both sides, there is already a separate instance of it on each side. Otherwise doing:

List list = new ArrayList();

someMethod(World world) {
  if (world.isRemote) {
    list.add("you won't see this on the server!");
  } else {
    print list to screen; // nothing will ever show up here because the server list is separate from the client list
  }
}

 

Anyway, @OP Animations are usually triggered by the server, but only run on the client. What that means is, for example, an entity performs an attack on the server (the trigger) which sends a notification to the client saying "I (the entity) am attacking now" and the client then starts the animation timer for the attack animation.

 

I don't know how MCAnimator is set up or expects things to be handled, but really you shouldn't need any sort of Collection to handle animating entities - that should be done in the Entity class (for the triggers and possibly a timer) and the entity's Render / Model class (for the actual animations).

 

For a good example of this, check out the Iron Golem, specifically its attack on the server and how that triggers a client-side animation by using World#setEntityState in combination with the entity's #handleHealthUpdate methods, a class field for the timer that gets set on both sides, and a Model class that uses that timer to change the arm position.

Posted

coolAlias, what you are saying is not always true. Unless there is an underlying mechanism already that separates the two sides into two instances (e.g. with Entities, TileEntities, etc.) fields will not just be magically different between client and server in SinglePlayer.  The two sides run on the same VM, in the same process. If you have an EventHandler somewhere and put a list in it this list will be shared between client & server.

Yeah, you're right. I was thinking in terms of Entity, but if you have an event handler or similar class on single player (which the OP does...), the class fields will be shared (so even if you only add things to the list on 1 side, the other side will have that same data without packets). Thanks for the correction.

 

@OP The above could explain why you are getting CME if you are only getting it in Single Player - both client and server threads (and SP is where MC is actually multi-threaded, as Ernio was saying) are iterating over the list. Adding a synchronized block or any kind of Lock should work but could negatively impact performance on single player (you probably won't notice), or using separate collection instances for each thread (again as Ernio suggested).

 

Still, the best solution is to animate as I described in my previous post, and forget all this tick event business. What you have now is not the best way to animate an entity.

Posted

Still, the best solution is to animate as I described in my previous post, and forget all this tick event business. What you have now is not the best way to animate an entity.

 

Read: MCAnimator is crap. It makes all kinds of assumptions which end up being false. You fix this problem and another will pop up else where. I tried once to fix it and I could not. The animation code is just too complex and too buggy.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Still, the best solution is to animate as I described in my previous post, and forget all this tick event business. What you have now is not the best way to animate an entity.

 

Read: MCAnimator is crap. It makes all kinds of assumptions which end up being false. You fix this problem and another will pop up else where. I tried once to fix it and I could not. The animation code is just too complex and too buggy.

 

I know MCAnimator is not the best, but do you have any other option for model making and animations for macs?

Creator of the MyFit, MagiCraft, Tesseract gun, and Papa's Wingeria mod.

Posted

I've heard good things about Tabula, though I've never used it personally and don't know if it's for Mac.

 

Otherwise, use MCAnimator to create the models and then position your model in various intermediate poses, then cycle through them to create an animation. Jabelar has a pretty good tutorial on that floating around somewhere - find one of his posts and click the link in his signature for his blog.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

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