Jump to content

[1.8]OverLayer Textures inBlock get and edit a json on the fly ?


perromercenary00

Recommended Posts

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

Captura%20de%20pantalla%20de%202015-01-06%2011%3A19%3A45.png?dl=0

 

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


 

 

 

 

Link to comment
Share on other sites

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.

Announcements



×
×
  • Create New...

Important Information

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