Recette smelting custom.
-
Ok je pense avoir compris le code juste quelques choses que je ne comprend pas c’est :
public static ArrayList <ianalyzerrecipe>getRecipes() { return recipes; // Si tu veux plus de sécurité, tu peux en créer une copie }Comment ca plus de sécurité ?
Ensuite pour enregister mes recettes je dois placer ceci alors ?
AnalyzerRecipes.initRecipes();Si je fais ca j’ai un crash
This crash report has been saved to: C:\Users\Legrandfifou\Pictures\forge\eclipse\.\crash-reports\crash-2015-08-06_21.01.42-server.txt [21:01:42] [Server thread/INFO]: Stopping server [21:01:42] [Server thread/INFO]: Saving players [21:01:42] [Server thread/INFO]: Saving worlds [21:01:42] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld [21:01:42] [Server thread/INFO]: Saving chunks for level 'New World'/Nether [21:01:42] [Server thread/INFO]: Saving chunks for level 'New World'/The End [21:01:42] [Server thread/INFO] [FML]: Unloading dimension 0 [21:01:42] [Server thread/INFO] [FML]: Unloading dimension -1 [21:01:42] [Server thread/INFO] [FML]: Unloading dimension 1 [21:01:42] [Server thread/INFO] [FML]: Applying holder lookups [21:01:42] [Server thread/INFO] [FML]: Holder lookups applied [21:01:42] [Server thread/INFO] [FML]: The state engine was in incorrect state SERVER_STOPPING and forced into state SERVER_STOPPED. Errors may have been discarded. [21:01:43] [Client thread/FATAL]: Reported exception thrown! net.minecraft.util.ReportedException: Ticking block entity at net.minecraft.world.World.updateEntities(World.java:2175) ~[World.class:?] at net.minecraft.client.Minecraft.runTick(Minecraft.java:2097) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_75] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_75] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_75] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_75] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?] at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?] at GradleStart.main(Unknown Source) [start/:?] Caused by: java.lang.ArrayIndexOutOfBoundsException: 2 at mod.common.block.AnalyzerSimpleRecipe.matches(AnalyzerSimpleRecipe.java:22) ~[AnalyzerSimpleRecipe.class:?] at mod.common.block.AnalyzerRecipes.getOutput(AnalyzerRecipes.java:24) ~[AnalyzerRecipes.class:?] at mod.common.block.entity.TileEntityAnalyzer.canSmelt(TileEntityAnalyzer.java:164) ~[TileEntityAnalyzer.class:?] at mod.common.block.entity.TileEntityAnalyzer.updateEntity(TileEntityAnalyzer.java:181) ~[TileEntityAnalyzer.class:?] at net.minecraft.world.World.updateEntities(World.java:2160) ~[World.class:?] … 12 more [21:01:43] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: –-- Minecraft Crash Report ---- // This is a token for 1 free hug. Redeem at your nearest Mojangsta: [~~HUG~~] Time: 6/08/15 21:01 Description: Ticking block entity java.lang.ArrayIndexOutOfBoundsException: 2 at mod.common.block.AnalyzerSimpleRecipe.matches(AnalyzerSimpleRecipe.java:22) at mod.common.block.AnalyzerRecipes.getOutput(AnalyzerRecipes.java:24) at mod.common.block.entity.TileEntityAnalyzer.canSmelt(TileEntityAnalyzer.java:164) at mod.common.block.entity.TileEntityAnalyzer.updateEntity(TileEntityAnalyzer.java:181) at net.minecraft.world.World.updateEntities(World.java:2160) at net.minecraft.client.Minecraft.runTick(Minecraft.java:2097) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) at net.minecraft.client.Minecraft.run(Minecraft.java:962) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) at GradleStart.main(Unknown Source) A detailed walkthrough of the error, its code path and all known details is as follows: –------------------------------------------------------------------------------------- -- Head -- Stacktrace: at mod.common.block.AnalyzerSimpleRecipe.matches(AnalyzerSimpleRecipe.java:22) at mod.common.block.AnalyzerRecipes.getOutput(AnalyzerRecipes.java:24) at mod.common.block.entity.TileEntityAnalyzer.canSmelt(TileEntityAnalyzer.java:164) at mod.common.block.entity.TileEntityAnalyzer.updateEntity(TileEntityAnalyzer.java:181) -- Block entity being ticked -- Details: Name: entity_analyzer // mod.common.block.entity.TileEntityAnalyzer Block type: ID #165 (tile.blockAnalyzer // mod.common.block.BlockAnalyzer) Block data value: 2 / 0x2 / 0b0010 Block location: World: (-160,67,304), Chunk: (at 0,4,0 in -10,19; contains blocks -160,0,304 to -145,255,319), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511) Actual block type: ID #165 (tile.blockAnalyzer // mod.common.block.BlockAnalyzer) Actual block data value: 2 / 0x2 / 0b0010 Stacktrace: at net.minecraft.world.World.updateEntities(World.java:2160) -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityClientPlayerMP['Player734'/209, l='MpServer', x=-161,14, y=68,62, z=306,95]] Chunk stats: MultiplayerChunkCache: 613, 613 Level seed: 0 Level generator: ID 00 - default, ver 1\. Features enabled: false Level generator options: Level spawn location: World: (244,64,228), Chunk: (at 4,4,4 in 15,14; contains blocks 240,0,224 to 255,255,239), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511) Level time: 47015 game time, 47015 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false Forced entities: 118 total; [EntitySkeleton['Skeleton'/273, l='MpServer', x=-115,50, y=39,00, z=321,50], EntitySheep['Sheep'/279, l='MpServer', x=-156,47, y=69,00, z=352,97], EntitySheep['Sheep'/277, l='MpServer', x=-148,50, y=73,00, z=357,72], EntitySquid['Squid'/283, l='MpServer', x=-204,75, y=54,66, z=357,31], EntitySquid['Squid'/285, l='MpServer', x=-195,13, y=57,19, z=357,66], EntitySquid['Squid'/259, l='MpServer', x=-208,94, y=56,38, z=321,97], EntitySquid['Squid'/257, l='MpServer', x=-208,25, y=57,00, z=319,50], EntityBat['Bat'/263, l='MpServer', x=-177,31, y=26,81, z=264,31], EntitySheep['Sheep'/264, l='MpServer', x=-186,97, y=64,00, z=269,03], EntitySkeleton['Skeleton'/270, l='MpServer', x=-118,50, y=39,00, z=321,50], EntitySpider['Spider'/306, l='MpServer', x=-201,06, y=24,11, z=271,66], EntitySpider['Spider'/312, l='MpServer', x=-121,28, y=69,00, z=340,84], EntitySpider['Spider'/314, l='MpServer', x=-120,94, y=69,00, z=337,91], EntitySheep['Sheep'/318, l='MpServer', x=-128,50, y=71,00, z=353,91], EntitySquid['Squid'/288, l='MpServer', x=-194,81, y=59,34, z=363,69], EntitySquid['Squid'/292, l='MpServer', x=-209,78, y=59,34, z=353,97], EntitySquid['Squid'/294, l='MpServer', x=-207,75, y=58,31, z=340,81], EntitySquid['Squid'/296, l='MpServer', x=-211,19, y=53,28, z=354,09], EntitySquid['Squid'/298, l='MpServer', x=-208,50, y=55,28, z=347,53], EntityBat['Bat'/343, l='MpServer', x=-94,84, y=30,99, z=299,09], EntitySkeleton['Skeleton'/342, l='MpServer', x=-144,38, y=64,00, z=243,91], EntityBat['Bat'/341, l='MpServer', x=-235,72, y=22,74, z=288,75], EntitySpider['Spider'/340, l='MpServer', x=-101,09, y=65,00, z=306,00], EntityCreeper['Creeper'/339, l='MpServer', x=-101,50, y=52,00, z=307,50], EntitySquid['Squid'/351, l='MpServer', x=-208,75, y=55,31, z=360,13], EntityCreeper['Creeper'/350, l='MpServer', x=-219,50, y=19,00, z=364,50], EntityZombie['Zombie'/349, l='MpServer', x=-157,94, y=25,00, z=382,59], EntitySkeleton['Skeleton'/348, l='MpServer', x=-156,44, y=25,00, z=383,53], EntitySkeleton['Skeleton'/347, l='MpServer', x=-107,13, y=42,00, z=322,63], EntityBat['Bat'/346, l='MpServer', x=-106,97, y=40,12, z=305,31], EntityBat['Bat'/345, l='MpServer', x=-108,34, y=38,00, z=311,78], EntityBat['Bat'/344, l='MpServer', x=-94,66, y=31,15, z=297,84], EntityCreeper['Creeper'/635, l='MpServer', x=-127,50, y=40,00, z=309,50], EntityCreeper['Creeper'/634, l='MpServer', x=-124,69, y=40,00, z=310,92], EntityCreeper['Creeper'/633, l='MpServer', x=-124,11, y=40,00, z=309,99], EntityCreeper['Creeper'/636, l='MpServer', x=-122,75, y=40,00, z=311,13], EntityCreeper['Creeper'/373, l='MpServer', x=-188,72, y=63,00, z=244,47], EntityCreeper['Creeper'/375, l='MpServer', x=-87,50, y=51,00, z=298,50], EntitySpider['Spider'/374, l='MpServer', x=-150,41, y=63,00, z=237,34], EntityCreeper['Creeper'/368, l='MpServer', x=-166,50, y=33,00, z=384,50], EntityZombie['Zombie'/381, l='MpServer', x=-89,50, y=14,00, z=342,50], EntityZombie['Zombie'/380, l='MpServer', x=-193,50, y=63,00, z=238,50], EntityBat['Bat'/383, l='MpServer', x=-91,22, y=25,27, z=342,84], EntityZombie['Zombie'/382, l='MpServer', x=-94,50, y=25,00, z=349,50], EntitySpider['Spider'/379, l='MpServer', x=-192,00, y=63,00, z=235,00], EntitySkeleton['Skeleton'/378, l='MpServer', x=-192,94, y=63,00, z=228,53], EntitySkeleton['Skeleton'/356, l='MpServer', x=-108,38, y=14,00, z=337,94], EntityCow['Cow'/357, l='MpServer', x=-139,78, y=69,00, z=378,38], EntitySheep['Sheep'/352, l='MpServer', x=-126,50, y=71,00, z=352,50], EntitySheep['Sheep'/353, l='MpServer', x=-125,09, y=69,00, z=365,94], EntityBat['Bat'/354, l='MpServer', x=-236,03, y=20,91, z=284,19], EntityBat['Bat'/355, l='MpServer', x=-102,16, y=28,00, z=289,72], EntityCreeper['Creeper'/364, l='MpServer', x=-98,41, y=69,00, z=365,97], EntityCow['Cow'/365, l='MpServer', x=-126,91, y=72,00, z=374,78], EntityZombie['Zombie'/366, l='MpServer', x=-118,50, y=70,00, z=377,50], EntityZombie['Zombie'/367, l='MpServer', x=-112,50, y=72,00, z=379,50], EntitySpider['Spider'/360, l='MpServer', x=-130,41, y=67,00, z=245,30], EntityZombie['Zombie'/361, l='MpServer', x=-99,50, y=63,00, z=265,50], EntityCreeper['Creeper'/362, l='MpServer', x=-95,03, y=15,00, z=305,47], EntityBat['Bat'/363, l='MpServer', x=-107,81, y=32,37, z=367,75], EntitySkeleton['Skeleton'/395, l='MpServer', x=-86,50, y=66,00, z=355,50], EntitySkeleton['Skeleton'/394, l='MpServer', x=-82,50, y=65,00, z=353,50], EntityZombie['Zombie'/393, l='MpServer', x=-121,13, y=64,00, z=230,25], EntityCreeper['Creeper'/396, l='MpServer', x=-93,50, y=68,00, z=366,50], EntityCow['Cow'/385, l='MpServer', x=-137,53, y=68,00, z=386,41], EntityBat['Bat'/432, l='MpServer', x=-235,25, y=37,10, z=238,25], EntityBat['Bat'/433, l='MpServer', x=-229,25, y=38,03, z=235,72], EntitySkeleton['Skeleton'/434, l='MpServer', x=-102,50, y=64,00, z=234,50], EntitySkeleton['Skeleton'/641, l='MpServer', x=-123,34, y=40,00, z=308,72], EntityCreeper['Creeper'/431, l='MpServer', x=-226,69, y=41,00, z=228,34], EntitySquid['Squid'/220, l='MpServer', x=-181,06, y=55,34, z=330,75], EntitySquid['Squid'/221, l='MpServer', x=-188,78, y=58,19, z=338,63], EntitySquid['Squid'/222, l='MpServer', x=-183,09, y=59,19, z=333,66], EntitySkeleton['Skeleton'/460, l='MpServer', x=-95,16, y=64,00, z=235,91], EntitySquid['Squid'/223, l='MpServer', x=-213,19, y=61,34, z=319,06], EntitySkeleton['Skeleton'/459, l='MpServer', x=-95,53, y=64,00, z=236,88], EntitySheep['Sheep'/216, l='MpServer', x=-164,19, y=67,00, z=310,56], EntitySquid['Squid'/217, l='MpServer', x=-185,19, y=61,38, z=330,47], EntitySquid['Squid'/218, l='MpServer', x=-193,84, y=57,13, z=332,41], EntitySquid['Squid'/219, l='MpServer', x=-183,91, y=58,10, z=324,19], EntityZombie['Zombie'/212, l='MpServer', x=-172,06, y=36,00, z=301,59], EntitySkeleton['Skeleton'/213, l='MpServer', x=-171,50, y=62,00, z=294,97], EntityClientPlayerMP['Player734'/209, l='MpServer', x=-161,14, y=68,62, z=306,95], EntityZombie['Zombie'/215, l='MpServer', x=-173,69, y=65,48, z=289,38], EntityBat['Bat'/210, l='MpServer', x=-165,50, y=45,10, z=301,50], EntityZombie['Zombie'/211, l='MpServer', x=-174,34, y=40,00, z=301,09], EntitySquid['Squid'/239, l='MpServer', x=-208,69, y=53,75, z=347,91], EntitySquid['Squid'/238, l='MpServer', x=-200,69, y=56,09, z=344,22], EntitySquid['Squid'/237, l='MpServer', x=-208,53, y=60,38, z=342,06], EntitySquid['Squid'/236, l='MpServer', x=-200,69, y=51,34, z=349,84], EntityBat['Bat'/235, l='MpServer', x=-152,25, y=57,10, z=282,34], EntityBat['Bat'/234, l='MpServer', x=-151,28, y=56,10, z=278,72], EntitySheep['Sheep'/233, l='MpServer', x=-187,75, y=66,00, z=287,41], EntitySheep['Sheep'/232, l='MpServer', x=-184,91, y=68,00, z=288,91], EntitySquid['Squid'/231, l='MpServer', x=-203,28, y=59,31, z=333,78], EntitySquid['Squid'/230, l='MpServer', x=-202,53, y=59,13, z=320,28], EntitySquid['Squid'/229, l='MpServer', x=-179,25, y=58,31, z=339,44], EntitySquid['Squid'/228, l='MpServer', x=-169,47, y=57,00, z=343,25], EntitySheep['Sheep'/227, l='MpServer', x=-172,41, y=71,00, z=275,13], EntitySquid['Squid'/226, l='MpServer', x=-185,65, y=56,53, z=307,21], EntitySquid['Squid'/225, l='MpServer', x=-205,66, y=61,38, z=317,75], EntitySquid['Squid'/224, l='MpServer', x=-196,56, y=58,34, z=316,75], EntitySquid['Squid'/254, l='MpServer', x=-186,66, y=60,34, z=362,84], EntitySquid['Squid'/255, l='MpServer', x=-188,94, y=60,34, z=360,53], EntitySquid['Squid'/252, l='MpServer', x=-187,69, y=56,31, z=361,91], EntitySquid['Squid'/253, l='MpServer', x=-192,22, y=55,13, z=353,19], EntitySheep['Sheep'/250, l='MpServer', x=-162,50, y=71,00, z=363,72], EntitySheep['Sheep'/251, l='MpServer', x=-163,75, y=70,00, z=359,63], EntityBat['Bat'/248, l='MpServer', x=-114,75, y=37,09, z=316,34], EntityBat['Bat'/249, l='MpServer', x=-113,72, y=39,74, z=317,06], EntitySquid['Squid'/246, l='MpServer', x=-209,72, y=60,38, z=313,66], EntitySkeleton['Skeleton'/247, l='MpServer', x=-114,56, y=37,00, z=316,03], EntitySheep['Sheep'/244, l='MpServer', x=-136,75, y=73,00, z=345,63], EntitySquid['Squid'/245, l='MpServer', x=-207,94, y=59,09, z=320,19], EntitySheep['Sheep'/242, l='MpServer', x=-205,06, y=64,00, z=279,03], EntitySheep['Sheep'/243, l='MpServer', x=-139,44, y=75,00, z=337,34], EntitySheep['Sheep'/240, l='MpServer', x=-191,17, y=64,00, z=279,39], EntitySheep['Sheep'/241, l='MpServer', x=-196,16, y=64,00, z=287,09]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:415) at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2566) at net.minecraft.client.Minecraft.run(Minecraft.java:984) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) at GradleStart.main(Unknown Source) – System Details -- Details: Minecraft Version: 1.7.10 Operating System: Windows 8.1 (amd64) version 6.3 Java Version: 1.7.0_75, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 756458592 bytes (721 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95 FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1448 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{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1448-1.7.10.jar) UCHIJAAAA Forge{10.13.4.1448} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1448-1.7.10.jar) UCHIJAAAA modminecraft{1.0} [Mod Minecraft] (bin) GL info: ' Vendor: 'NVIDIA Corporation' Version: '4.5.0 NVIDIA 353.62' Renderer: 'GeForce GTX 770/PCIe/SSE2' Launched Version: 1.7.10 LWJGL: 2.9.1 OpenGL: GeForce GTX 770/PCIe/SSE2 GL version 4.5.0 NVIDIA 353.62, NVIDIA Corporation GL Caps: Using GL 1.3 multitexturing. Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. Anisotropic filtering is supported and maximum anisotropy is 16. Shaders are available because OpenGL 2.1 is supported. Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [] Current Language: English (US) Profiler Position: N/A (disabled) Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Anisotropic Filtering: Off (1) [21:01:43] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:398]: #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\Legrandfifou\Pictures\forge\eclipse\.\crash-reports\crash-2015-08-06_21.01.43-client.txt AL lib: (EE) alc_cleanup: 1 device not closedJ’ai un BoundOfException je suppose que c’est la taille de l’inventaire ?
Voici du coup les classes qu’il me reste
package mod.common.block.entity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mod.common.block.AnalyzerRecipes; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityAnalyzer extends TileEntity implements IInventory { private ItemStack[] contents = new ItemStack[4]; private int workingTime = 1999; private int workingTimeNeeded = 256; @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.contents.length; ++i) { if (this.contents* != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte) i); this.contents*.writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } } compound.setTag("Items", nbttaglist); compound.setShort("workingTime", (short) this.workingTime); compound.setShort("workingTimeNeeded", (short) this.workingTimeNeeded); } @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); NBTTagList nbttaglist = compound.getTagList("Items", 10); this.contents = new ItemStack[this.getSizeInventory()]; for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); int j = nbttagcompound1.getByte("Slot") & 255; if (j >= 0 && j < this.contents.length) { this.contents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); } } this.workingTime = compound.getShort("workingTime"); this.workingTimeNeeded = compound.getShort("workingTimeNeeded"); } @Override public int getSizeInventory() { return this.contents.length; } @Override public ItemStack getStackInSlot(int slotIndex) { return this.contents[slotIndex]; } @Override public ItemStack decrStackSize(int slotIndex, int amount) { if (this.contents[slotIndex] != null) { ItemStack itemstack; if (this.contents[slotIndex].stackSize <= amount) { itemstack = this.contents[slotIndex]; this.contents[slotIndex] = null; this.markDirty(); return itemstack; } else { itemstack = this.contents[slotIndex].splitStack(amount); if (this.contents[slotIndex].stackSize == 0) { this.contents[slotIndex] = null; } this.markDirty(); return itemstack; } } else { return null; } } @Override public ItemStack getStackInSlotOnClosing(int slotIndex) { if (this.contents[slotIndex] != null) { ItemStack itemstack = this.contents[slotIndex]; this.contents[slotIndex] = null; return itemstack; } else { return null; } } @Override public void setInventorySlotContents(int slotIndex, ItemStack stack) { this.contents[slotIndex] = stack; if (stack != null && stack.stackSize > this.getInventoryStackLimit()) { stack.stackSize = this.getInventoryStackLimit(); } this.markDirty(); } @Override public String getInventoryName() { return "tile.BlockAnalyzer"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double) this.xCoord + 0.5D, (double) this.yCoord + 0.5D, (double) this.zCoord + 0.5D) <= 64.0D; } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return slot == 2 ? false : true; } public boolean isBurning() { return this.workingTime > 0; } private boolean canSmelt() { if (this.contents[0] == null || this.contents[1] == null) { return false; } else { ItemStack itemstack = AnalyzerRecipes.getOutput(this); // On récupère le recipe avec AnalyzerManager qui est une classe pour t'aider if (itemstack == null) return false; if (this.contents[2] == null) return true; if (!this.contents[2].isItemEqual(itemstack)) return false; int result = contents[2].stackSize + itemstack.stackSize; return result <= getInventoryStackLimit() && result <= this.contents[2].getMaxStackSize(); } } @Override public void updateEntity() { if (this.isBurning() && this.canSmelt()) { ++this.workingTime; } if (this.canSmelt() && !this.isBurning()) { this.workingTime = 1; } if (this.canSmelt() && this.workingTime == this.workingTimeNeeded) { this.smeltItem(); this.workingTime = 0; } if (!this.canSmelt()) { this.workingTime = 0; } } public void smeltItem() { if (this.canSmelt()) { ItemStack itemstack = AnalyzerRecipes.getOutput(this); // On récupère le recipe if (this.contents[2] == null) { this.contents[2] = itemstack.copy(); } else if (this.contents[2].getItem() == itemstack.getItem()) { this.contents[2].stackSize += itemstack.stackSize; } –this.contents[0].stackSize; –this.contents[1].stackSize; if (this.contents[0].stackSize <= 0) { this.contents[0] = null; } if (this.contents[1].stackSize <= 0) { this.contents[1] = null; } } } @SideOnly(Side.CLIENT) public int getCookProgress() { return this.workingTime * 33 / this.workingTimeNeeded; } }package mod.common.block; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.ListIterator; import mod.common.block.entity.TileEntityAnalyzer; import net.minecraft.item.ItemStack; public class AnalyzerRecipes { private static ArrayList <ianalyzerrecipe>recipes = new ArrayList<ianalyzerrecipe>(); /** * @param stacks tile content * @return the recipe output */ public static ItemStack getOutput(TileEntityAnalyzer tile, ItemStack … stacks) { ListIterator <ianalyzerrecipe>ite = recipes.listIterator(); while (ite.hasNext()) { IAnalyzerRecipe r = ite.next(); if (r.matches(tile, tile.getWorldObj())) return r.getOutput(tile, tile.getWorldObj()); // Si le recipe correspond, on récupère l'output } return null; } /** * @return the recipe map */ public static ArrayList <ianalyzerrecipe>getRecipes() { return recipes; // Si tu veux plus de sécurité, tu peux en créer une copie } /** * init your recipes (called from your main class) */ public static void initRecipes() { // C'est là que tu dois initialiser tes recettes (appelle cette fonction depuis ta classe principale) AnalyzerRecipes.addRecipe(new AnalyzerSimpleRecipe()); } /** * @param recipe */ public static void addRecipe(IAnalyzerRecipe recipe) { recipes.add(recipe); } /** * @param stack first stack * @param stack1 second stack * @return true if the 2 stacks are equals */ public static boolean corresponds(ItemStack stack, ItemStack stack1) { if (stack == null && stack1 == null) return true; if (stack == null && stack1 != null) return false; if (stack != null && stack1 == null) return false; if (stack.getItem() != stack1.getItem()) return false; if (stack.getItemDamage() != stack1.getItemDamage()) return false; return true; } }package mod.common.block; import java.util.Random; import mod.common.block.entity.TileEntityAnalyzer; import mod.common.item.ItemRegister; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class AnalyzerSimpleRecipe implements IAnalyzerRecipe { public static final Random RNG = new Random(); public static final Item[] matrix = new Item[] { ItemRegister.itemADNofFrog, // Second slot (car tes slots sont inversés) ItemRegister.itemSevewithmosquito }; // Premier slot @Override public boolean matches(TileEntityAnalyzer tile, World world) { for (int i = 0; i < tile.getSizeInventory(); i++) { // On parcourt tous les slots de l'inventaire de la TileEntity if (!AnalyzerSimpleRecipe.corresponds(AnalyzerSimpleRecipe.matrix*, tile.getStackInSlot(i))) return false; // S'ils ne correspondent pas, alors on retourne "faux" } return true; // Sinon on retourne "vrai" } @Override public ItemStack getOutput(TileEntityAnalyzer tile, World world) { return new ItemStack(ItemRegister.itemAmbre, RNG.nextInt(30)); // Ici j'utilise un random pour te montrer comment le faire } public static boolean corresponds(Item item, ItemStack stack) { if (stack == null && item == null) return true; if (stack == null && item != null) return false; if (stack != null && item == null) return false; if (stack.getItem() != item) return false; return true; } }Si tu as le temps de vérif pour voir si j’ai pas fait de fautes ^^</ianalyzerrecipe></ianalyzerrecipe></ianalyzerrecipe></ianalyzerrecipe></ianalyzerrecipe>
-
Correction : dans les méthodes matches, tu dois pas avoir tile.getSizeInventory() mais 2. La méthode Analyzer.initRecipes est un méthode pour organiser, tu as juste à l’appeler depuis ta classe principale.
Pour l’histoire de sécurité : c’est si tu veux pas que les gens qui créent des mods dépendant du tient puissent modifier cette liste, mais c’est secondaire.
-
Oké donc la ce que j’ai mis ne sert a rien alors ^^ ?
Pour le random si je comprend il sélectionne un valeur de 1 à 30 et ca correspond aux nombres qu’il en donne , par contre moi j’aimerais que ca sélectionne random un des egg , je dois faire comment , car le random dois sélectionner entre plusieurs eggs différent ^^
Ah si ce n’est que ca ce n’est pas grave justement ca permettera des add-ons ^^
En tout cas ca marche

-
tu dois faire new ItemStack(tonItem, 1, TonRandom.nextInt(leNombreDeMetadatasPossibles)) (attention : l’objet random génère de 0 jusqu’à ton nombre, celui mis en paramètres n’est pas inclus)
-
Tu es littéralement un dieux , il produit un oeuf différent ( metadata ) , je n’aurais plus que dans la prochaine machine a vérifier le metadata et donner un egg en fonction de ca

Par contre en créant le metadata , les particules on buggé j’avais bien mis ca :
.setBlockTextureName(ModMinecraft.MODID + ":partEgg");Voici mes metadatas :
BlockEgg
package mod.common.block; import java.util.List; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mod.ModMinecraft; import mod.client.ClientProxy; import mod.common.block.entity.TileEntityBarriere; import mod.common.block.entity.TileEntityEgg; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockEgg extends Block { // METADATA public static String[] subBlock = new String[] {"egg1", "egg2", "egg3", "egg4"}; public IIcon[] iconArray = new IIcon[subBlock.length]; public BlockEgg() { super(Material.dragonEgg); } public void registerBlockIcons(IIconRegister iconRegister) { for(int i = 0; i < subBlock.length; i++) { this.iconArray[ i] = iconRegister.registerIcon(ModMinecraft.MODID + ":" + subBlock*); } } public IIcon getIcon(int side, int metadata) { if(metadata >= 0 && metadata < subBlock.length) { return this.iconArray[metadata]; } return this.iconArray[0]; } public int damageDropped(int metadata) { return metadata; } //RESTE DU CODE public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { int direction = MathHelper.floor_double(living.rotationYaw * 4.0F / 360.0F + 2.5D) & 0x3; TileEntity te = world.getTileEntity(x, y, z); if ((te instanceof TileEntityEgg)) { ((TileEntityEgg)te).setDirection((byte)direction); world.markBlockForUpdate(x, y, z); } } protected BlockEgg(Material material) { super(material); this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.8000F, 1.0F, 0.8000F); } public void onBlockAdded(World world, int x, int y, int z) { world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); } public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); } public void updateTick(World world, int x, int y, int z, Random random) { this.func_150018_e(world, x, y, z); } private void func_150018_e(World world, int x, int y, int z) { if (BlockFalling.func_149831_e(world, x, y - 1, z) && y >= 0) { byte b0 = 32; if (!BlockFalling.fallInstantly && world.checkChunksExist(x - b0, y - b0, z - b0, x + b0, y + b0, z + b0)) { EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double)((float)x + 0.5F), (double)((float)y + 0.5F), (double)((float) z + 0.5F), this); world.spawnEntityInWorld(entityfallingblock); } else { world.setBlockToAir(x, y, z); while (BlockFalling.func_149831_e(world, x, y - 1, z) && y > 0) { –y; } if (y > 0) { world.setBlock(x, y, z, this, 0, 2); } } } } public int tickRate(World world) { return 5; } @SideOnly(Side.CLIENT) public Item getItem(World world, int x, int y, int z) { return null; } @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) { return true; } /* private void func_149830_m(World world, int x, int y, int z) { if (func_149831_e(world, x, y - 1, z) && y >= 0) { byte b0 = 32; if (!fallInstantly &&world.checkChunksExist(x - b0, y - b0, z - b0, x + b0, z + b0, z + b0)) { if (!world.isRemote) { EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double)((float)x + 0.5F), (double)((float)z + 0.5F), (double)((float)z + 0.5F), this, world.getBlockMetadata(x, y, z)); this.func_149829_a(entityfallingblock); world.spawnEntityInWorld(entityfallingblock); } } else { world.setBlockToAir(x, y, z); while (func_149831_e(world, x, y - 1, z) && y > 0) { --y; } if (y > 0) { world.setBlock(x, y, z, this); } } } }*/ protected void func_149829_a(EntityFallingBlock entityfallingblock) {} @Override public TileEntity createTileEntity(World world, int metadata) { if(metadata == 0) { return new TileEntityEgg(); } else if(metadata == 1) { return new TileEntityEgg(); } else if(metadata == 2) { return new TileEntityEgg(); } return null; } @Override public boolean hasTileEntity(int metadata) { if(metadata >= 0 && metadata <= 2) return true; return false; } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } public int getRenderType() { return ClientProxy.tesrRenderId; } }ItemBlockEgg
package mod.common.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; public class ItemBlockEgg extends ItemBlock { public ItemBlockEgg(Block block) { super(block); this.setMaxDamage(0); this.setHasSubtypes(true); } public int getMetadata(int metadata) { return metadata; } @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int metadata) { return this.field_150939_a.getIcon(2, metadata); } public String getUnlocalizedName(ItemStack stack) { int metadata = stack.getItemDamage(); if(metadata < 0 || metadata >= BlockEgg.subBlock.length) { metadata = 0; } return super.getUnlocalizedName() + "." + BlockEgg.subBlock[metadata]; } }Aussi je peut ajouter une nouvelle recette ?
public static final Item[] matrix = new Item[] { ItemRegister.itemADNofFrog, ItemRegister.itemSevewithmosquito };Je suppose que je dois l’add ici mais comment ?
-
Essaie de clarifier ton code, car tu as un constructeur au début, tu en as un après 4 méthodes, tu as une fonction qui n’est utilisée que par les BlockFalling, et le code dans ta fonction getTileEntity est inutile.
-
BlockEgg clarifier

package mod.common.block; import java.util.List; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mod.ModMinecraft; import mod.client.ClientProxy; import mod.common.block.entity.TileEntityAnalyzer; import mod.common.block.entity.TileEntityBarriere; import mod.common.block.entity.TileEntityEgg; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockEgg extends Block { // METADATA public static String[] subBlock = new String[] {"egg1", "egg2", "egg3", "egg4"}; public IIcon[] iconArray = new IIcon[subBlock.length]; public void registerBlockIcons(IIconRegister iconRegister) { for(int i = 0; i < subBlock.length; i++) { this.iconArray[ i] = iconRegister.registerIcon(ModMinecraft.MODID + ":" + subBlock*); } } public IIcon getIcon(int side, int metadata) { if(metadata >= 0 && metadata < subBlock.length) { return this.iconArray[metadata]; } return this.iconArray[0]; } public int damageDropped(int metadata) { return metadata; } //AJOUT DU TILEENTITY public BlockEgg() { super(Material.dragonEgg); } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } public int getRenderType() { return ClientProxy.tesrRenderId; } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityEgg(); } @Override public boolean hasTileEntity(int metadata) { return true; } }J’avais un problème avec le rendu dans le monde de mon block mais j’ai résolu le soucis

Du coup je me demandais car j’ai ajouté des metadatas mais c’est comme si il n’y en avais pas par exemple si je les met dans le tabBlock ca me met #0177 pour chaque y a pas de /2

-
Il te manque surement l’item bloc.
-
Je me posais la question car mon blockEgg est un rendu TESR , donc il a un rendu dans l’inventaire dois utiliser celui la ou faire un nouveau j’ai bien fait l’itemBlockEgg je l’ai juste oublier
package mod.common.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; public class ItemBlockEgg extends ItemBlock { public ItemBlockEgg(Block block) { super(block); this.setMaxDamage(0); this.setHasSubtypes(true); } public int getMetadata(int metadata) { return metadata; } @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int metadata) { return this.field_150939_a.getIcon(2, metadata); } public String getUnlocalizedName(ItemStack stack) { int metadata = stack.getItemDamage(); if(metadata < 0 || metadata >= BlockEgg.subBlock.length) { metadata = 0; } return super.getUnlocalizedName() + "." + BlockEgg.subBlock[metadata]; } } -
Il te manque la méthode getSubItems
-
Dans le tutoriel il n’y a pas de getSubItems il y a juste
public void getSubBlocks(Item item, CreativeTabs tabs, List list) { for(int i = 0; i < subBlock.length; i++) { list.add(new ItemStack(item, 1, i)); } }Mais je ne veut pas qu’il soit dans la creativTabs
-
Tu veux quoi alors ?
-
Je veut qu’il ne soit accessible que par ma machine , donc il ne faut pas qu’il soit dans le menu minecraft ^^
, la pour l’instant j’ai l’impression qu’il n’y a pas de metadatas , quand je fais /give Legrandfifou modminecraft:block_egg 1 2 il me donne juste block_egg … -
Comment tu sais que le metadata est pas donné ? Il s’affiche pas avec F3 + h ? C’est normal. Affiche le metadata dans la fonction addInformation, tu veras que le metadata est bon.
-
Je suis obliger d’enregistrer le blockEgg ( le principal ) pour que les métadatas se créer car du coup avec
public void getSubBlocks(Item item, CreativeTabs tabs, List list) { for(int i = 0; i < subBlock.length; i++) { list.add(new ItemStack(item, 1, i)); } }Il apparaisse ^^
Donc je n’enregistrais qu’un seul , mais est-ce normal que même si le metadata est différent il se stack ?
-
Non, ils peuvent pas se stacker, mais les metadatas ne s’enregistrent pas. La fonction getSubBlocks ne sert à rien si t’utilises un ItemBlock custom
-
J’utilise celui la ( celui du tutoriel )
package mod.common.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; public class ItemBlockEgg extends ItemBlock { public ItemBlockEgg(Block block) { super(block); this.setMaxDamage(0); this.setHasSubtypes(true); } public int getMetadata(int metadata) { return metadata; } @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int metadata) { return this.field_150939_a.getIcon(2, metadata); } public String getUnlocalizedName(ItemStack stack) { int metadata = stack.getItemDamage(); if(metadata < 0 || metadata >= BlockEgg.subBlock.length) { metadata = 0; } return super.getUnlocalizedName() + "." + BlockEgg.subBlock[metadata]; } }EDIT : Olalala , bette erreur c’est sur que si j’enregistre pas dans le GameRegistry l’ItemBlockEgg ca va pas marcher xDD
-
Il faut l’enregistrer avec le block, GameRegistry.registerBlock(tonBlock, ItemBlockEgg.class, “tonNom”)
-
Oui je ne l’avais pas fait , voila pourquoi ca buggais , sinon les particules sont toujours rose/noir à cause des metdatas je dois gerer ca comment :s ?
-
Envoi la classe de ton block.
