perromercenary00 Posted January 6, 2015 Posted January 6, 2015 good days this gona be a llittle long well i get done a block whit 2 textures overlayed for each side but thats a childs game wath im triying to do is a block that counts from 0 to 99 folowing the block states / json logic it means i must create a blockstate definig 100 states representing the counting from 0 - 99 and if i wanna rotate it becomes 600 states but there is only rom for 16 states so this plan is dead before start well i spend the last nigth playing whit jsons reading things in internet there is like 3 apis thath allow you to load a json file edit it and saved the changes to json again .jum load a esternal api and add it to a minecraft mod ñaaaa i prefer to do use stream reader and java nio and do something just to the size of mi needs ñaa beter explain mi idea before it gets more messy, in the code for the texture overlayed well is just two perfects cubes one a little bit more big than the other,the two are defined in a parental cube_layer0_parental.json andd is called from mi blockeprueba.json where i define every texture to load lets say i do the 3 perfects cubes each one a little bit bigger than the last, the first the inner holds the yellow background texture the second is for display the units in the count and the thirth is for the tens in the count soo is something like BlockState blockeprueba.json > blockmodel blockeprueba.json > parental cube_layer0_parental.json in blockeprueba.json just define for textures just the backgrond an numbers from 0 -9 and so i wanna do something like create mi own class to load text files a edit it using imput string and java nio or something like to do //JsonObject b = new JsonObject("modmercenario:block/cube_layer0_parental"); miclasse b = new miclasse("modmercenario:block/cube_layer0_parental"); then change the value from the second north face from "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#north" }, to "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#number0" }, saved the file and force somehow minecraft to reload cube_layer0_parental to display in game the change this part is wath i dont like the accion of reading and writing text files looks like it gonna demand a good piece of resources soo i sit and think again, minecraft uses jsons so it must have its own methods to read and likely to edit and change, minecraft just load jsons at the beginig soo it you minecraft runing and change something in the jsons files it dont get the changes until you close and fireup again soo it must load the jsons values somewhere in the memory and maiby there is alredy some class allowing to change this values in memory on the fly whithout having to restart minecraft for wath i tested minecraft it using import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSyntaxException; i gets this from the errors it shows wen dont find a json file or json has errors well this wen get stuck the class JsonObject.class define methods to read and writte values in a json but dont get how to set whath json gonna read or write values there is this class reosuce locations wo aparently is the on in charge of load the jsons in the models folder but dont get it alwais return the name of the json dont matters if exist or not example "modmercenario:gato" dont exist but anyway it returns "gato in the exit " ResourceLocation jsona = new ResourceLocation("modmercenario:cube_top"); System.out.println("####a="+jsona.getResourcePath()); ResourceLocation jsonb = new ResourceLocation("modmercenario:blockePrueba"); System.out.println("####b="+jsonb.getResourcePath()); ResourceLocation jsonc = new ResourceLocation("modmercenario:test/gato"); System.out.println("####c="+jsonc.getResourcePath()); ResourceLocation jsond = new ResourceLocation("modmercenario:gato"); System.out.println("####d="+jsond.getResourcePath()); go back to the teory well wath i need is a method to return a list of the jsons models minecraft has loaded on the start a method to return the values of an specific json to string to knows whats inside realize how to use JsonObject to edit this jsons on fly and make minecraft load this change on the fly in the world this is code from the overlayed block main class blockePrueba.class package mercenarymod.blocks.pruebas; import java.util.Random; import mercenarymod.Mercenary; import mercenarymod.blocks.MercenaryModBlocks; import net.minecraft.block.Block; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.client.resources.FallbackResourceManager; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumWorldBlockLayer; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraft.util.JsonUtils; import com.google.gson.JsonObject; import net.minecraft.util.ResourceLocation; public class blockePrueba extends Block { public static String name = "blockeprueba"; //###########################################################3 public blockePrueba() { super(Material.rock); setUnlocalizedName(Mercenary.MODID + "_" + name); GameRegistry.registerBlock(this, name); setCreativeTab(Mercenary.herramientas); //this.maxStackSize = 1; } //###########################################################3 public Item getItemDropped(IBlockState state, Random rand, int fortune) { return Item.getItemFromBlock(MercenaryModBlocks.blockePrueba); } //###########################################################3 public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { //"modmercenario:blockePrueba" ResourceLocation jsona = new ResourceLocation("modmercenario:cube_top"); System.out.println("####a="+jsona.getResourcePath()); ResourceLocation jsonb = new ResourceLocation("modmercenario:blockePrueba"); System.out.println("####b="+jsonb.getResourcePath()); ResourceLocation jsonc = new ResourceLocation("modmercenario:test/gato"); System.out.println("####c="+jsonc.getResourcePath()); ResourceLocation jsond = new ResourceLocation("modmercenario:gato"); System.out.println("####d="+jsond.getResourcePath()); JsonObject b = new JsonObject(); return false;} //###########################################################3 public boolean isOpaqueCube() { return false; } public boolean translucent() { return true; } public int lightValue() { return 1; } public boolean fullBlock() { return false; } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { //return EnumWorldBlockLayer.CUTOUT; return EnumWorldBlockLayer.TRANSLUCENT; } } BlockState blockeprueba.json { "variants": { "normal": { "model": "modmercenario:blockePrueba" } } } model block json blockePrueba.json { "parent": "modmercenario:block/cube_layer0_parental", "textures": { "all": "modmercenario:blocks/charcoal", "down": "modmercenario:blocks/metablockes/metablockemercenario18", "up": "modmercenario:blocks/metablockes/metablockemercenario19", "north": "modmercenario:blocks/metablockes/metablockemercenario20", "south": "modmercenario:blocks/metablockes/metablockemercenario21", "west": "modmercenario:blocks/metablockes/metablockemercenario22", "east": "modmercenario:blocks/metablockes/metablockemercenario23", "down0": "modmercenario:items/hachas/hacha_acero_diamante", "up0": "modmercenario:items/hachas/hacha_acero_esmeralda", "north0":"modmercenario:items/hachas/hacha_acero_redstone", "south0":"modmercenario:items/palas/pala_madera_nokia", "west0": "modmercenario:items/palas/pala_madera_obsidiana", "east0": "modmercenario:items/palas/pala_madera_oro" } } paretal whit the two cubes cube_layer0_parental.json { "elements": [ { "from": [0.1, 0.1, 0.1 ], "to": [15.9, 15.9, 15.9 ], "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#north" }, "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#south" }, "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#west" }, "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#east" }, "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#up" }, "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#down" } } }, { "from": [ 0, 0, 0 ], "to": [ 16, 16, 16 ], "faces": { "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#north0" }, "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#south0" }, "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#west0" }, "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#east0" }, "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#up0" }, "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#down0" } } } ] } well at this point i have this bunch of theories it i could get this in order it will grant the posibility to make more complex animated blocks and items, using code to get over the 16 metastates limit and for why not do animations muve using sen cos in the code Quote
Nephroid Posted January 6, 2015 Posted January 6, 2015 At some point, it's probably better to use TileEntitySpecialRenderer, which according to this, the 1.7 versions still work. Quote GitHub|Recipe API Proposal
Recommended Posts
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.