Créer un bloc basique
-
Ce tutoriel est également disponible en vidéo.
Sommaire
Introduction
Dans ce tutoriel, nous allons créer notre premier bloc. Un bloc est comme un item mais qui peut aussi être placé dans le monde. En fait, un bloc possède un item, il s’agit d’un ItemBlock. Son existence n’est pas à négliger, elle nous sera utile plus tard pour personnaliser notre bloc et pour les metadatas.
Pré-requis
Code
La classe principale :
Pour commencer, en dessous de vos items ou de votre proxy, déclarez le bloc :
public static Block blockTutoriel;
Pensez à importer net.minecraft.block.Block (ctrl + shift + o).
Ensuite, il faut initialiser le bloc. Dans la fonction preInit ajoutez :blockTutoriel = new BlockTutoriel(Material.rock).setBlockName("tutoriel").setBlockTextureName("modtutoriel:block_tutoriel");
BlockTutoriel correspond au nom de la classe de mon bloc, dans le constructeur, j’ai mis un matériel. Il existe de nombreux matériaux, faîtes simplement un ctrl + clic sur Material, la classe Material.java va s’ouvrir, les matériaux ayant :
- setBurning : peuvent brûler.
- setRequiresTool : ne peuvent que droper avec un outil spécifique (pioche pour la plupart, pelle pour la neige).
- setTranslucent : sont en général des matériaux transparent.
- setNoPushMobility : ne peuvent pas être déplacé par un piston.
- setBlockName définit le nom non localisé. Celui-ci sera complété par le préfixe “tile.” et le suffixe “.name”. Il sera utiliser dans le fichier de lang.
- setBlockTextureName définit le nom de la texture. Vous pouvez remplacer “modtutoriel:block_tutoriel” par MODID + “:block_tutoriel” si vous avez fait une constante MODID comme dans le tutoriel sur un item basique. modtutoriel correspond à mon modid et block_tutoriel au nom de la texture.
Il ne reste plus qu’à enregistrer le bloc. Toujours dans la fonction preInit ajoutez :
GameRegistry.registerBlock(blockTutoriel, "block_tutoriel");
blockTutoriel étant le nom de la variable du bloc et block_tutoriel le nom dans le game data (utilisé pour le /give, et les donnés de la map). De préférence, ne mettez pas d’espace (utilisez des tirets du bas), pas de caractères spéciaux (accent, etc…) et pas de majuscule.
La classe du bloc :
Depuis tout à l’heure, vous avez une erreur sur BlockTutoriel, créez cette classe, et en “super class” mettez net.minecraft.block.Block (ou ajoutez le extends Block une fois la classe créée).
Le nom de votre classe sera souligné en rouge, il suffit juste de passer la souris dessus et de faire “add constructor ‘NomDeVotreClasse(Material)’”. Vous devrez avoir quelques chose comme ceci maintenant :package fr.minecraftforgefrance.tutoriel.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; public class BlockTutoriel extends Block { protected BlockTutoriel(Material p_i45394_1_) { super(p_i45394_1_); } }
p_i45394_1_ n’étant pas trop significatif, nous allons changer le nom de ce paramètre pour avoir quelque chose qui a un sens :
package fr.minecraftforgefrance.tutoriel.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; public class BlockTutoriel extends Block { protected BlockTutoriel(Material material) { super(material); } }
Et voila !
La texture et le nom :
Il faut maintenant s’occuper des ressources. Allez dans le dossier forge/src/main/resources/assets/modid/
Commençons d’abord par le dossier lang, ouvrez le fichier en_US.lang et ajoutez :tile.le nom non localisé de votre bloc.name=Le nom en jeu en anglais
Dans mon cas :
tile.tutoriel.name=Bloc Tutoriel
Même chose avec les autres langages.
Ensuite retournez dans le dossier de votre mod, et ouvrez le dossier “textures”. Créez un nouveau dossier nommé “blocks”. Dans ce dossier, ajoutez votre texture (format .png, 16x16 ou 32x32 ou 64x64, etc …) portant le nom que nous avons mit dans le .setBlockTextureName du bloc.Ajouter le bloc dans un onglet créatif :
Dans l’initialisation de votre bloc, il suffit d’ajouter :
.setCreativeTab(CreativeTabs.tabBlock)
Ce qui donne donc :
blockTutoriel = new BlockTutoriel(Material.rock).setBlockName("tutoriel").setBlockTextureName("modtutoriel:block_tutoriel").setCreativeTab(CreativeTabs.tabBlock);
Vous pouvez aussi définir la table créatif dans le constructeur du bloc :
protected BlockTutoriel(Material material) { super(material); this.setCreativeTab(CreativeTabs.tabBlock); }
Résultat
Voir le commit sur github
Le commit sur github montre clairement où ont été placés les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.Crédits
Rédaction :
Correction :
Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International -
Merci
-
Bonjour !
tout d’abord, merci pour vos tutoriels très bien faits ! Je voulais juste suggérer de rajouter ce tuto dans le sommaire des tutos pour minecraftforge 1.7.2 !
Bonne continuation ! -
On appelle ça un oublie, normalement il aurait du y être depuis mercredi ^^
Merci de l’avoir faire remarqué, je l’ai ajouté -
Il n’y a plus setHardness?
Tu as oublié de préciser que setHarvestLevel à changer: http://www.minecraftforge.net/wiki/Basic_Blocks#For_1.7Un lien utile à rajouter:
http://minecraft.gamepedia.com/Digging#Blocks_by_hardness -
Ha oui, j’ai oublié d’en parler, je le mettrai dans le tutoriel sur la customisation de bloc
-
Bonjour/soir !
C’est encore moi et j’ai un nouveau problème :sAprès avoir fait la base de mon mod, j’ai créer un nouveau bloc, sauf que quand j’essaye de lancer le Client de mod, le Client crash sans ouverture de fenêtre avec l’erreur :
[22:59:50] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker [22:59:50] [main/INFO] [LaunchWrapper]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker [22:59:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker [22:59:50] [main/INFO] [FML]: Forge Mod Loader version 7.2.156.1060 for Minecraft 1.7.2 loading [22:59:50] [main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.6.0_65, running on Mac OS X:x86_64:10.8.5, installed at /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home [22:59:50] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation [22:59:50] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [22:59:50] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker [22:59:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [22:59:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [22:59:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [22:59:50] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work! [22:59:51] [main/ERROR] [FML]: The minecraft jar file:/Users/Thomas/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.2-10.12.1.1060/forgeSrc-1.7.2-10.12.1.1060.jar!/net/minecraft/client/ClientBrandRetriever.class appears to be corrupt! There has been CRITICAL TAMPERING WITH MINECRAFT, it is highly unlikely minecraft will work! STOP NOW, get a clean copy and try again! [22:59:51] [main/ERROR] [FML]: FML has been ordered to ignore the invalid or missing minecraft certificate. This is very likely to cause a problem! [22:59:51] [main/ERROR] [FML]: Technical information: ClientBrandRetriever was at jar:file:/Users/Thomas/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.2-10.12.1.1060/forgeSrc-1.7.2-10.12.1.1060.jar!/net/minecraft/client/ClientBrandRetriever.class, there were 0 certificates for it [22:59:51] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing [22:59:51] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [22:59:51] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker [22:59:52] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main} [22:59:52] [main/ERROR] [LaunchWrapper]: Unable to launch java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65] at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65] at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?] Caused by: joptsimple.MissingRequiredOptionException: Missing required option(s) ['accessToken'] at joptsimple.OptionParser.ensureRequiredOptions(OptionParser.java:447) ~[OptionParser.class:?] at joptsimple.OptionParser.parse(OptionParser.java:437) ~[OptionParser.class:?] at net.minecraft.client.main.Main.main(Main.java:47) ~[Main.class:?] … 6 more
-
Rien à voir avec le bloc.
Tu as suivis le deuxième bonus ici : http://www.minecraftforgefrance.fr/showthread.php?tid=566#bonus ?
Si oui, tu t’es planté dans ton mdp ou dans ton pseudo / adresse mail.
Si non, il y a un truc qui a fail, ajoute “–accessTocken FML” dans les arguments de lancement. -
@‘robin4002’:
Rien à voir avec le bloc.
Tu as suivis le deuxième bonus ici : http://www.minecraftforgefrance.fr/showthread.php?tid=566#bonus ?
Si oui, tu t’es planté dans ton mdp ou dans ton pseudo / adresse mail.
Si non, il y a un truc qui a fail, ajoute “–accessTocken FML” dans les arguments de lancement.Ah Oui, merci
-
C’est étrange, je ne pense pas avoir fais d’erreur, mais Eclipse me met constamment une erreur à la partie d’initialisation du bloc, sur la partie new StrangeStone(Material.rock)…
Pourtant, je pense ne pas avoir fait d’erreur.
@EventHandler public void preInit(FMLPreInitializationEvent event) { //preinit blocks strangeStone = new StrangeStone(Material.rock).setBlockName("StrangeStone").setHardness(1.5F).setBlockTextureName(MODID + ":StrangeBlock").setCreativeTab(CreativeTabs.tabBlock); //registery blocks GameRegistry.registerBlock(strangeStone, "StrangeStone"); }
Si quelqu’un a une explication, qu’il me la dise s’il vous plait !
-
Eclipse indique quoi ?
Tu as quoi dans ta classe StrangeStone ? -
Il me propose de changer la visibilité de StrangeStone sur public…
Dans la classe du block j’ai ceci:package com.sugarshy.harmomod.blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; public class StrangeStone extends Block { protected StrangeStone(Material material) { super(material); } }
-
Il faut y changer en public sinon la classe est pas accessible.
-
@‘Diangle’:
Il faut y changer en public sinon la classe est pas accessible.
Pourtant elle n’y est pas sur le github du résultat final…
-
@‘Diangle’:
Il faut y changer en public sinon la classe est pas accessible.
Et bien tu avais raison, merci !
-
Car ta classe StrangeStone n’est pas dans le même package que ta classe main. Si tu utilises des packages différent, il faut toujours mettre en public !
-
Ah, je comprend mieux !
Merci ! -
En faite tu as :
protected, qui peux que être utiliser dans une classe qui hérite
private, qui est dans la classe et pas accessible depuis un autre package
public, c’est les portes ouverte. -
Il faut vraiment que je me mette sérieusement au Java…. en tout cas merci, je le saurai pour la prochaine fois !
-
Bonjour,
j’ai encore un problème, c’est que le bloc n’apparaît pas en jeu.#ma classe principale:(ma classe principale:)
:::
package com.gmail.archerux.technicalenergy.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "TechnicalEnergy", name = "TechnicalEnergy", version = "1.0.0") public class TechnicalEnergy { @Instance("TechnicalEnergy") public static TechnicalEnergy instance; @SidedProxy(clientSide = "com.gmail.archerux.technicalenergy.client.ClientProxy", serverSide = "com.gmail.archerux.technicalenergy.common.CommonProxy") public static CommonProxy proxy; public static Block CopperOre, TinOre, TitaniumOre, PlatiniumOre, KhoriumOre, ThoriumOre, AdamantiteOre; //public static Block CopperBlock, TinBlock, TitaniumBlock, PlatiniumBlock, KhoriumBlock, ThoriumBlock, AdamantiteBlock; public static CreativeTabs TechnicalEnergy = new CreativeTabs("TechnicalEnergy") { public Item getTabIconItem() { return Items.baked_potato; } @EventHandler public void preInit(FMLPreInitializationEvent event) { // Blocks–-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CopperOre = new CopperOre(Material.rock).setBlockName("CopperOre").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName(MODID + ":Copper_ore"); GameRegistry.registerBlock(CopperOre, "CopperOre"); TinOre = new TinOre(Material.rock).setBlockName("TinOre").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName(MODID + ":" + "Tin_ore"); GameRegistry.registerBlock(TinOre, "TinOre"); TitaniumOre = new TitaniumOre(Material.rock).setBlockName("TitaniumOre").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName(MODID + ":" + "Titanium_ore"); GameRegistry.registerBlock(TitaniumOre, "TitaniumOre"); PlatiniumOre = new PlatiniumOre(Material.rock).setBlockName("PlatiniumOre").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName(MODID + ":" + "Platinium_ore"); GameRegistry.registerBlock(PlatiniumOre, "PlatiniumOre"); KhoriumOre = new KhoriumOre(Material.rock).setBlockName("KhoriumOre").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName(MODID + ":" + "Khorium_ore"); GameRegistry.registerBlock(KhoriumOre, "KhoriumOre"); ThoriumOre = new ThoriumOre(Material.rock).setBlockName("ThoriumOre").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName(MODID + ":" + "Thorium_ore"); GameRegistry.registerBlock(ThoriumOre, "ThoriumOre"); AdamantiteOre = new AdamantiteOre(Material.rock).setBlockName("AdamantiteOre").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName(MODID + ":" + "Adamantite_ore"); GameRegistry.registerBlock(AdamantiteOre, "AdamantiteOre"); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } public static final String MODID = "TechnicalEnergy"; }; };
:::
#la classe de un de mes blocs que je veut ajouter:(la classe de un de mes blocs que je veut ajouter:)
:::
package com.gmail.archerux.technicalenergy.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; public class CopperOre extends Block { protected CopperOre(Material material) { super(material); } }
:::
#la console:(la console:)
:::
[09:51:10] [main/INFO] [GradleStart]: username: Archerux[09:51:10] [main/INFO] [GradleStart]: Extra: []
[09:51:10] [main/INFO] [GradleStart]: Running with arguments: [–userProperties, {}, --assetsDir, C:/Users/Dylan/.gradle/caches/minecraft/assets, --assetIndex, 1.7.10, --accessToken, {REDACTED}, --version, 1.7.10, --tweakClass, cpw.mods.fml.common.launcher.FMLTweaker, --username, Archerux]
[09:51:10] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker
[09:51:10] [main/INFO] [LaunchWrapper]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker
[09:51:10] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker
[09:51:10] [main/INFO] [FML]: Forge Mod Loader version 7.10.18.1180 for Minecraft 1.7.10 loading
[09:51:10] [main/INFO] [FML]: Java is Java HotSpot 64-Bit Server VM, version 1.8.0_05, running on Windows 7:amd64:6.1, installed at C:\Program Files\Java\jre8
[09:51:10] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
[09:51:10] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[09:51:10] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker
[09:51:10] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[09:51:10] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
[09:51:10] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[09:51:10] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work!
[09:51:14] [main/ERROR] [FML]: The minecraft jar file:/C:/Users/Dylan/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.10-10.13.0.1180/forgeSrc-1.7.10-10.13.0.1180.jar!/net/minecraft/client/ClientBrandRetriever.class appears to be corrupt! There has been CRITICAL TAMPERING WITH MINECRAFT, it is highly unlikely minecraft will work! STOP NOW, get a clean copy and try again!
[09:51:14] [main/ERROR] [FML]: FML has been ordered to ignore the invalid or missing minecraft certificate. This is very likely to cause a problem!
[09:51:14] [main/ERROR] [FML]: Technical information: ClientBrandRetriever was at jar:file:/C:/Users/Dylan/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.10-10.13.0.1180/forgeSrc-1.7.10-10.13.0.1180.jar!/net/minecraft/client/ClientBrandRetriever.class, there were 0 certificates for it
[09:51:14] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing
[09:51:14] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
[09:51:14] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker
[09:51:15] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main}
[09:51:17] [main/INFO]: Setting user: Archerux
[09:51:19] [Client thread/INFO]: LWJGL Version: 2.9.1
[09:51:21] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization
[09:51:21] [Client thread/INFO] [FML]: MinecraftForge v10.13.0.1180 Initialized
[09:51:21] [Client thread/INFO] [FML]: Replaced 182 ore recipies
[09:51:21] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization
[09:51:21] [Client thread/INFO] [FML]: Searching C:\Users\Dylan\Downloads\Minecraft\Modding\forge-1.7.10-10.13.0.1180-src\eclipse\mods for mods
[09:51:22] [Client thread/ERROR] [FML]: FML has detected a mod that is using a package name based on ‘net.minecraft.src’ : net.minecraft.src.FMLRenderAccessLibrary. This is generally a severe programming error. There should be no mod code in the minecraft namespace. MOVE YOUR MOD! If you’re in eclipse, select your source code and ‘refactor’ it into a new package. Go on. DO IT NOW!
[09:51:26] [Client thread/INFO] [FML]: Forge Mod Loader has identified 4 mods to load
[09:51:27] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:TechnicalEnergy
[09:51:27] [Client thread/WARN]: ResourcePack: ignored non-lowercase namespace: %s in %s
[09:51:27] [Client thread/INFO] [FML]: Processing ObjectHolder annotations
[09:51:27] [Client thread/INFO] [FML]: Found 341 ObjectHolder annotations
[09:51:27] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0
[09:51:27] [Client thread/INFO] [FML]: Applying holder lookups
[09:51:27] [Client thread/INFO] [FML]: Holder lookups appliedStarting up SoundSystem…
Initializing LWJGL OpenAL
(The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
OpenAL initialized.[09:51:28] [Sound Library Loader/INFO]: Sound engine started
[09:51:32] [Client thread/INFO]: Created: 512x256 textures/blocks-atlas
[09:51:32] [Client thread/INFO]: Created: 256x256 textures/items-atlas
[09:51:32] [Client thread/INFO] [FML]: Forge Mod Loader has successfully loaded 4 mods
[09:51:32] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:TechnicalEnergy
[09:51:32] [Client thread/WARN]: ResourcePack: ignored non-lowercase namespace: %s in %s
[09:51:33] [Client thread/INFO]: Created: 512x256 textures/blocks-atlas
[09:51:33] [Client thread/INFO]: Created: 256x256 textures/items-atlasSoundSystem shutting down…
Author: Paul Lamb, www.paulscode.comStarting up SoundSystem…
Initializing LWJGL OpenAL
(The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
OpenAL initialized.[09:51:34] [Sound Library Loader/INFO]: Sound engine started
[09:51:42] [Server thread/INFO]: Starting integrated minecraft server version 1.7.10
[09:51:42] [Server thread/INFO]: Generating keypair
[09:51:43] [Server thread/INFO] [FML]: Injecting existing block and item data into this server instance
[09:51:43] [Server thread/INFO] [FML]: Applying holder lookups
[09:51:43] [Server thread/INFO] [FML]: Holder lookups applied
[09:51:43] [Server thread/INFO] [FML]: Loading dimension 0 (New World) (net.minecraft.server.integrated.IntegratedServer@45c2ccd9)
[09:51:43] [Server thread/INFO] [FML]: Loading dimension 1 (New World) (net.minecraft.server.integrated.IntegratedServer@45c2ccd9)
[09:51:44] [Server thread/INFO] [FML]: Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@45c2ccd9)
[09:51:44] [Server thread/INFO]: Preparing start region for level 0
[09:51:45] [Server thread/INFO]: Preparing spawn area: 29%
[09:51:45] [Server thread/INFO]: Changing view distance to 12, from 10
[09:51:46] [Netty Client IO #0/INFO] [FML]: Server protocol version 1
[09:51:46] [Netty IO #1/INFO] [FML]: Client protocol version 1
[09:51:46] [Netty IO #1/INFO] [FML]: Client attempting to join with 4 mods : FML@7.10.18.1180,TechnicalEnergy@1.0.0,Forge@10.13.0.1180,mcp@9.05
[09:51:46] [Netty IO #1/INFO] [FML]: Attempting connection with missing mods [] at CLIENT
[09:51:46] [Netty Client IO #0/INFO] [FML]: Attempting connection with missing mods [] at SERVER
[09:51:46] [Client thread/INFO] [FML]: [Client thread] Client side modded connection established
[09:51:46] [Server thread/INFO] [FML]: [Server thread] Server side modded connection established
[09:51:46] [Server thread/INFO]: Archerux[local:E:f61f54b4] logged in with entity id 409 at (192.58096737140147, 92.2567204514835, 93.94413640754348)
[09:51:46] [Server thread/INFO]: Archerux joined the game
[09:52:03] [Client thread/INFO]: Stopping!
[09:52:03] [Server thread/INFO]: Stopping server
[09:52:03] [Server thread/INFO]: Saving playersSoundSystem shutting down…
[09:52:03] [Server thread/INFO]: Saving worlds
[09:52:03] [Server thread/INFO]: Saving chunks for level ‘New World’/Overworld
Author: Paul Lamb, www.paulscode.comException in thread “Client Shutdown Thread” java.lang.NullPointerException
at net.minecraftforge.common.ForgeChunkManager.saveWorld(ForgeChunkManager.java:836)
at net.minecraftforge.common.ForgeInternalHandler.onDimensionSave(ForgeInternalHandler.java:70)
at cpw.mods.fml.common.eventhandler.ASMEventHandler_0_ForgeInternalHandler_onDimensionSave_Save.invoke(.dynamic)
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:51)
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:122)
at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:875)
at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:370)
at net.minecraft.server.MinecraftServer.stopServer(MinecraftServer.java:405)
at net.minecraft.server.integrated.IntegratedServer.stopServer(IntegratedServer.java:266)
at net.minecraft.client.Minecraft.stopIntegratedServer(Minecraft.java:2789)
at net.minecraft.client.main.Main$3.run(Main.java:154)
Java HotSpot 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
:::