Jump to content

[Solved]read/write Entity NBT for both sides?


gff1979

Recommended Posts

I'm writing a mod that creates a mob with visual attributes but I'm having a time figuring out how to save them for persistence with NBTTagCompounds. I think what is happening is that either the server or the client one is not saving nbt data but the other is. I'm also confused at to which is doing what and exactly what data is returned through isRemote. I thought that my server/client proxy class declarations might have been switched but I cannot find where they might be switched at. Do I try and capture the one Entity that's NBT value IS being saved and try to set the one that isn't to that value somehow? If so, what is the best way to do that?

 

package gff.companime.entity.companions;

import java.util.Random;

import gff.companime.Companime;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.ai.EntityAIAvoidEntity;
import net.minecraft.entity.ai.EntityAIFollowGolem;
import net.minecraft.entity.ai.EntityAILookAtTradePlayer;
import net.minecraft.entity.ai.EntityAIMoveIndoors;
import net.minecraft.entity.ai.EntityAIMoveTwardsRestriction;
import net.minecraft.entity.ai.EntityAIOpenDoor;
import net.minecraft.entity.ai.EntityAIPlay;
import net.minecraft.entity.ai.EntityAIRestrictOpenDoor;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAITempt;
import net.minecraft.entity.ai.EntityAITradePlayer;
import net.minecraft.entity.ai.EntityAIVillagerMate;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.ai.EntityAIWatchClosest2;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;

public class EntityGal extends EntityAgeable
{

public int haircolor;
public int eyecolor;

public EntityGal(World par1World)
    {
        super(par1World);
        this.texture = "/textures/mob/gal.png";
//        this.randomTickDivider = 0;
//        this.isMating = false;
//        this.isPlaying = false;
    
        this.moveSpeed = 0.5F;
        this.setSize(0.6F, 1.8F);
        this.getNavigator().setBreakDoors(true);
        this.getNavigator().setAvoidsWater(true);
        this.tasks.addTask(0, new EntityAISwimming(this));
        this.tasks.addTask(1, new EntityAITempt(this, 0.3F, Companime.braceletItem.itemID, false));
        this.tasks.addTask(2, new EntityAIMoveIndoors(this));        
        this.tasks.addTask(3, new EntityAIOpenDoor(this, true));
        this.tasks.addTask(4, new EntityAIMoveTwardsRestriction(this, 0.3F));
        this.tasks.addTask(5, new EntityAIWatchClosest2(this, EntityPlayer.class, 3.0F, 1.0F));
        this.tasks.addTask(5, new EntityAIWatchClosest2(this, EntityGal.class, 5.0F, 0.02F));
        this.tasks.addTask(5, new EntityAIWander(this, 0.3F));
        this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityGal.class, 8.0F));
        
        genFeatures();
    }

public void genFeatures()
{
	Random rnd = new Random();
	this.haircolor = rnd.nextInt(0xFFFFFF);
	this.eyecolor = rnd.nextInt(0xFFFFFF);		
}

@Override
public EntityAgeable createChild(EntityAgeable entityageable) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public int getMaxHealth() {
	// TODO Auto-generated method stub
	return 10;
}

public boolean interact(EntityPlayer par1EntityPlayer)
    {
        ItemStack itemstack = par1EntityPlayer.inventory.getCurrentItem();

        System.out.println(this);
        System.out.println("ID: "+this.entityId);
        System.out.println("isRemote = "+this.worldObj.isRemote);
        System.out.println("Hair color = "+this.haircolor);
                          
        return true;
    }

// NBT for persisting attributes for this instance of a Gal
    public void writeEntityToNBT(NBTTagCompound nbt)
    {
    	super.writeEntityToNBT(nbt);
    	
    	nbt.setInteger("haircolor", this.haircolor);    	    
    	
    	
    	
    }
    
    public void readEntityFromNBT(NBTTagCompound nbt)
    {
    	super.readEntityFromNBT(nbt);
    	
    	this.haircolor = nbt.getInteger("haircolor");
    	
    	    	    	
    	// call to check for non initialized persistant variables.    	
    }    
}


 

These are the ouputs that my right click does on the Entity:

 

After right clicking the entities in a newly created world:

2013-06-26 02:41:15 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7406, l='MpServer', x=202.84, y=64.00, z=-22.14]

2013-06-26 02:41:15 [iNFO] [sTDOUT] ID: 7406

2013-06-26 02:41:15 [iNFO] [sTDOUT] isRemote = true

2013-06-26 02:41:15 [iNFO] [sTDOUT] Hair color = 15120629

2013-06-26 02:41:15 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7406, l='New World', x=202.74, y=64.00, z=-21.63]

2013-06-26 02:41:15 [iNFO] [sTDOUT] ID: 7406

2013-06-26 02:41:15 [iNFO] [sTDOUT] isRemote = false

2013-06-26 02:41:15 [iNFO] [sTDOUT] Hair color = 9323139

2013-06-26 02:41:16 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7409, l='MpServer', x=203.63, y=64.00, z=-23.59]

2013-06-26 02:41:16 [iNFO] [sTDOUT] ID: 7409

2013-06-26 02:41:16 [iNFO] [sTDOUT] isRemote = true

2013-06-26 02:41:16 [iNFO] [sTDOUT] Hair color = 4058533

2013-06-26 02:41:16 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7409, l='New World', x=203.62, y=64.00, z=-24.09]

2013-06-26 02:41:16 [iNFO] [sTDOUT] ID: 7409

2013-06-26 02:41:16 [iNFO] [sTDOUT] isRemote = false

2013-06-26 02:41:16 [iNFO] [sTDOUT] Hair color = 12925493

2013-06-26 02:41:18 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7411, l='MpServer', x=200.50, y=64.00, z=-25.50]

2013-06-26 02:41:18 [iNFO] [sTDOUT] ID: 7411

2013-06-26 02:41:18 [iNFO] [sTDOUT] isRemote = true

2013-06-26 02:41:18 [iNFO] [sTDOUT] Hair color = 15959885

2013-06-26 02:41:18 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7411, l='New World', x=200.50, y=64.00, z=-25.50]

2013-06-26 02:41:18 [iNFO] [sTDOUT] ID: 7411

2013-06-26 02:41:18 [iNFO] [sTDOUT] isRemote = false

2013-06-26 02:41:18 [iNFO] [sTDOUT] Hair color = 4745496

Second Click after exit to menu and restarting the same save:

2013-06-26 02:41:28 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7573, l='MpServer', x=207.23, y=63.00, z=-19.99]

2013-06-26 02:41:28 [iNFO] [sTDOUT] ID: 7573

2013-06-26 02:41:28 [iNFO] [sTDOUT] isRemote = true

2013-06-26 02:41:28 [iNFO] [sTDOUT] Hair color = 14664608

2013-06-26 02:41:28 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7573, l='New World', x=207.66, y=63.00, z=-20.27]

2013-06-26 02:41:28 [iNFO] [sTDOUT] ID: 7573

2013-06-26 02:41:28 [iNFO] [sTDOUT] isRemote = false

2013-06-26 02:41:28 [iNFO] [sTDOUT] Hair color = 9323139

2013-06-26 02:41:31 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7574, l='MpServer', x=205.88, y=64.00, z=-26.38]

2013-06-26 02:41:31 [iNFO] [sTDOUT] ID: 7574

2013-06-26 02:41:31 [iNFO] [sTDOUT] isRemote = true

2013-06-26 02:41:31 [iNFO] [sTDOUT] Hair color = 16074411

2013-06-26 02:41:31 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7574, l='New World', x=205.85, y=64.00, z=-26.36]

2013-06-26 02:41:31 [iNFO] [sTDOUT] ID: 7574

2013-06-26 02:41:31 [iNFO] [sTDOUT] isRemote = false

2013-06-26 02:41:31 [iNFO] [sTDOUT] Hair color = 12925493

2013-06-26 02:41:32 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7575, l='MpServer', x=200.50, y=64.00, z=-25.50]

2013-06-26 02:41:32 [iNFO] [sTDOUT] ID: 7575

2013-06-26 02:41:32 [iNFO] [sTDOUT] isRemote = true

2013-06-26 02:41:32 [iNFO] [sTDOUT] Hair color = 6780648

2013-06-26 02:41:32 [iNFO] [sTDOUT] EntityGal['entity.Gal.name'/7575, l='New World', x=200.50, y=64.00, z=-25.50]

2013-06-26 02:41:32 [iNFO] [sTDOUT] ID: 7575

2013-06-26 02:41:32 [iNFO] [sTDOUT] isRemote = false

2013-06-26 02:41:32 [iNFO] [sTDOUT] Hair color = 4745496

 

As shown, the second of each entity is saving the data properly and it states that it's the client side world or "New World". The Entities world that isn't saving is MpServer.

 

I'm a bit confused as to what is going on. My assumption is that there are two instances of the entity one for client and one for server. As I said I'm not sure what exactly isRemote returns. Is it true if the entity is on MpServer? Because the documentation in my IDE states that it should return false, yet my entity's println(this) would state otherwise.

 

 

My Entity Render: (this renders hair color based on the entity.haircolor value, but doesn't seem to use the version that gets saved...)

package gff.companime.client.renderer.entity;

import java.awt.Color;

import org.lwjgl.opengl.GL11;

import gff.companime.entity.companions.EntityGal;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.passive.EntitySheep;

@SideOnly(Side.CLIENT)
public class RenderGal extends RenderLiving 
{

public RenderGal(ModelBase modelGal, ModelBase modelHair, float par2) 
{
	super(modelGal, par2);
	this.setRenderPassModel(modelHair);
}

protected int setHairColor(EntityGal gal, int par2, float par3)
    {
        this.loadTexture("/textures/mob/longhair.png");
        
        Color c = new Color(gal.haircolor);
        byte red = (byte) c.getRed();
        byte green = (byte) c.getGreen();
        byte blue = (byte) c.getBlue();
        
        GL11.glColor3b(red,green,blue);
        return 1;     
    }
    /**
     * Queries whether should render the specified pass or not.
     */
    protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3)
    {
        return this.setHairColor((EntityGal)par1EntityLiving, par2, par3);
    }

}

 

My mod class:

package gff.companime; //The package your mod is in

import java.util.logging.Logger;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.Configuration;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
import cpw.mods.fml.common.SidedProxy;
import gff.companime.*;
import gff.companime.block.PetrifiedWood;
import gff.companime.entity.*;
import gff.companime.entity.companions.EntityGal;
import gff.companime.entity.companions.EntityGalBase;
import gff.companime.item.Bracelet;
import gff.companime.server.CommonProxy;

@NetworkMod(clientSideRequired=true,serverSideRequired=false, //Whether client side and server side are needed
clientPacketHandlerSpec = @SidedPacketHandler(channels = {"NitroMod" }, packetHandler = ClientPacketHandler.class), //For clientside packet handling
serverPacketHandlerSpec = @SidedPacketHandler(channels = {"NitroMod" }, packetHandler = ServerPacketHandler.class)) //For serverside packet handling

@Mod(modid=Companime.modid,name="Companime",version="0.0.1")

public class Companime // Mod class
{ 

public static final String modid = "gff_Companime"; // I think this is proper use but I don't fully grok

// * Create instances for use in Registration *

// Tiles:

// blocks:
public final static Block petrifiedWood = new PetrifiedWood(500, Material.rock);

// Items:
public final static Item braceletItem = new Bracelet(500);

// Entities:
// public final static EntityGal gal = new EntityGal(null);	

@Instance( modid ) //The instance, this is very important later on
public static Companime instance = new Companime();

@SidedProxy(clientSide = "gff.companime.client.ClientProxy", serverSide = "gff.companime.server.CommonProxy")
public static CommonProxy proxy;

public static Logger logger;

// * Methods *
@PreInit
public void preInit(FMLPreInitializationEvent event) 
{
	logger = Logger.getLogger(modid);
	logger.setParent(FMLLog.getLogger());

	Configuration config = new Configuration(
			event.getSuggestedConfigurationFile());
	//Configuration.load(config);
}

@Init
//	public void InitCobaltCraft(FMLInitializationEvent event){ //Your main initialization method
public void load(FMLInitializationEvent event)
{ //Your main initialization method									

	NetworkRegistry.instance().registerGuiHandler(this, proxy); //Registers the class that deals with GUI data

	proxy.registerRenderInformation();

	proxy.registerTiles();

	proxy.registerBlocks();

	proxy.addNames();

	proxy.addRecipes();

	proxy.addEntities();

	// Register entities? proxy.addEntities(); ?
//		 EntityRegistry.registerModEntity(EntityGal.class, "Gal", 2, this, 80, 3, true);
//	     EntityRegistry.addSpawn(EntityGal.class, 5, 2, 6, EnumCreatureType.creature, BiomeGenBase.beach);
//	     LanguageRegistry.instance().addStringLocalization("name.gal.entity", "Gal");

}

}

 

ClientProxy: (currently just registers the entity and spawn egg data)

 

package gff.companime.client;

import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import gff.companime.*;
import gff.companime.client.model.*;
import gff.companime.client.renderer.entity.RenderGal;
import gff.companime.client.renderer.entity.RenderGalBase;
import gff.companime.entity.*;
import gff.companime.entity.companions.EntityGal;
import gff.companime.entity.companions.EntityGalBase;
import gff.companime.server.CommonProxy;
import net.minecraftforge.client.MinecraftForgeClient;

public class ClientProxy extends CommonProxy {

@Override
public void registerRenderInformation()
{		
//		// Register Models
//		// Test Gal
//		RenderingRegistry.registerEntityRenderingHandler(EntityGalBase.class, new RenderGalBase(new ModelGalBase(), new ModelGalBase(), 0.5F));				
//		EntityRegistry.registerGlobalEntityID(EntityGalBase.class, "TestGal", EntityRegistry.findGlobalUniqueEntityId() , 3515848, 0xFF8020);
	// Real Gal
	RenderingRegistry.registerEntityRenderingHandler(EntityGal.class, new RenderGal(new ModelGal(), new ModelLongHair(), 0.5F));				
	EntityRegistry.registerGlobalEntityID(EntityGal.class, "Gal", EntityRegistry.findGlobalUniqueEntityId() , 0xd4a98a, 0xd4a98a);
}

}

 

CommonProxy:

package gff.companime.server;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.network.IGuiHandler;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
import gff.companime.*;
import gff.companime.item.*;
import gff.companime.block.*;
import gff.companime.entity.companions.*;

public class CommonProxy implements IGuiHandler //THIS IS IMPORTANT, CANNOT BE A PROXY/GUI HANDLER WITHOUT THIS!!
{ 	

// Methods
public void registerRenderInformation() //Client side texture registering
{

}

@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) 
{ //For GUI's
return null;
}

@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) 
{ //For GUI's
	return null;
}

public void registerTiles()
{ //For registering TileEntities

}

public void registerBlocks()
{ //For registering Blocks

	// Petrified Wood Block

	LanguageRegistry.addName(Companime.petrifiedWood, "Petrified Wood");
	MinecraftForge.setBlockHarvestLevel(Companime.petrifiedWood, "axe", 0);
}

public void addNames() // Change to addItems and handle more than just names soon...
{ //For adding Item's in game names

	// Friendship bracelet item

	LanguageRegistry.addName(Companime.braceletItem, "Friendship Bracelet");
}

public void addRecipes()
{ //For adding your Item's recipes

	// Friendship Bracelet Recipes
	ItemStack silkString = new ItemStack(Item.silk);		

	GameRegistry.addRecipe( new ItemStack(Companime.braceletItem) ,
	"xxx", 
	"x x",
	"xxx",
	Character.valueOf('x') , silkString);
}

public void addEntities()
{

	// Gal		
	EntityRegistry.registerModEntity(EntityGal.class, "Gal", 2, Companime.instance, 30, 3, true);
	EntityRegistry.addSpawn(EntityGal.class, 5, 2, 6, EnumCreatureType.creature, BiomeGenBase.beach);		
	LanguageRegistry.instance().addStringLocalization("name.gal.entity", "Gal");
}

}

 

Any help would be appreciated even if it's something simple or relates to something else in the code as I just started learning MCForge this weekend...

Link to comment
Share on other sites

"isRemote" returns true if the world is client-side. what's actually saving correctly in your post is the server side. so, when you exit and return, the server loads what's saved on the nbt, but the client side generates a new random hair color. i'm not too familiar with mc's entity stuff, but i've played around with it a bit and i think you can use the data watcher to fix that. if not, then maybe you can send packets from the server to the client containing the entity id and hair color

Link to comment
Share on other sites

Thanks for the help. I have a working implementation and just to help anyone here's the simplified version of my EntityGal implementation.

package gff.companime.entity.companions;

import java.util.Random;

import gff.companime.Companime;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.DataWatcher;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.ai.EntityAIAvoidEntity;
import net.minecraft.entity.ai.EntityAIFollowGolem;
import net.minecraft.entity.ai.EntityAILookAtTradePlayer;
import net.minecraft.entity.ai.EntityAIMoveIndoors;
import net.minecraft.entity.ai.EntityAIMoveTwardsRestriction;
import net.minecraft.entity.ai.EntityAIOpenDoor;
import net.minecraft.entity.ai.EntityAIPlay;
import net.minecraft.entity.ai.EntityAIRestrictOpenDoor;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAITempt;
import net.minecraft.entity.ai.EntityAITradePlayer;
import net.minecraft.entity.ai.EntityAIVillagerMate;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.ai.EntityAIWatchClosest2;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;

public class EntityGal extends EntityAgeable
{
public int haircolor;

public EntityGal(World par1World)
    {
        super(par1World);
        this.texture = "/textures/mob/gal/gal.png";
        this.moveSpeed = 0.5F;
        this.setSize(0.6F, 1.8F);
        this.getNavigator().setBreakDoors(true);
        this.getNavigator().setAvoidsWater(true);
        // AI tasks for the entity to perform
        this.tasks.addTask(0, new EntityAISwimming(this));
        this.tasks.addTask(1, new EntityAITempt(this, 0.3F, Companime.braceletItem.itemID, false));
        this.tasks.addTask(2, new EntityAIMoveIndoors(this));        
        this.tasks.addTask(3, new EntityAIOpenDoor(this, true));
        this.tasks.addTask(4, new EntityAIMoveTwardsRestriction(this, 0.3F));
        this.tasks.addTask(5, new EntityAIWatchClosest2(this, EntityPlayer.class, 3.0F, 1.0F));
        this.tasks.addTask(5, new EntityAIWatchClosest2(this, EntityGal.class, 5.0F, 0.02F));
        this.tasks.addTask(5, new EntityAIWander(this, 0.3F));
        this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityGal.class, 8.0F));
        
        // Generate instance specific data
        Random rnd = new Random();
        this.setHairColor(rnd.nextInt(0xffffff));
        this.haircolor = this.getHairColor();

    }

    public void entityInit()
    {
        super.entityInit();
        // Create a data watcher for hair color
        this.dataWatcher.addObject(20, Integer.valueOf(0));
        
    }

// writes persistent values that is saved to the world server side
    public void writeEntityToNBT(NBTTagCompound nbt)
    {
    	super.writeEntityToNBT(nbt);
    	
    	nbt.setInteger("haircolor", this.getHairColor());  	        	    	
    }
    
// reads a persistant value from the server's world
    public void readEntityFromNBT(NBTTagCompound nbt)
    {
    	super.readEntityFromNBT(nbt);
    	
    	this.setHairColor(nbt.getInteger("haircolor"));        	    	       
    }   
    
    // This function will set an RGB color
    // It is called later with EntityGal.getHairColor() in the renderer
    public void setHairColor(int color)
    {
        this.dataWatcher.updateObject(20, Integer.valueOf(color));
    }
    
    // Returns the value set by setHairColor as "haircolor" in the Entities NBTTagCompound
    public int getHairColor()
    {
        return this.dataWatcher.getWatchableObjectInt(20);
    }
    
@Override
public EntityAgeable createChild(EntityAgeable entityageable) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public int getMaxHealth() {
	// TODO Auto-generated method stub
	return 10;
}

public boolean interact(EntityPlayer par1EntityPlayer)
    {
        ItemStack itemstack = par1EntityPlayer.inventory.getCurrentItem();
        
        System.out.println(this.worldObj);
        System.out.println("ID: "+this.entityId);
        System.out.println("isRemote = "+this.worldObj.isRemote);
        System.out.println(this.getHairColor()); // Example of how to get this entity haircolor
        return true;
    }

}

 

I learned that a DataWatcher instance can only have IDs from 0 to 31 and that if your child class is using the parents instance of datawatcher it shouldn't use any ids from the parent. These throw exceptions. Also, don't write to them from the Client or if isRemote is true. They are made to store from client then update from server so they throw an exception when written/updated clientside.

 

It's a bit of code to have to write a get/set for each persistent parameter if you have more than a handful of them but it works. If I'm missing something or anyone has more advice it would be appreciated.

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.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • ---- Informe de fallo de Minecraft ---- // Mi error. Hora: 2024-06-20 22:42:24 Descripción: Superposición de renderizado net.minecraftforge.fml.config.ConfigFileTypeHandler$ConfigLoadingException: Error al cargar el archivo de configuración sofisticadocore-client.toml de tipo CLIENTE para modid sofisticadocore     en net.minecraftforge.fml.config.ConfigFileTypeHandler.lambda$reader$1(ConfigFileTypeHandler.java:47) ~ [fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.fml.config.ConfigTracker.openConfig(ConfigTracker.java:60) ~[fmlcore-1.20.1-47.3. 1.jar%23213!/:?] {}     en net.minecraftforge.fml.config.ConfigTracker.lambda$loadConfigs$1(ConfigTracker.java:50) ~[fmlcore-1.20.1-47.3.1.jar%23213! /:?] {}     en java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}     en java.util.Collections$SynchronizedCollection.forEach(Collections.java:2131) ~ [?:?] {}     en net.minecraftforge.fml.config.ConfigTracker.loadConfigs(ConfigTracker.java:50) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net .minecraftforge.fml.core.ModStateProvider.lambda$new$1(ModStateProvider.java:67) ~[forge-1.20.1-47.3.1-universal.jar%23217!/?:?] {re:classloading}     en la red. minecraftforge.fml.DistExecutor.unsafeRunWhenOn(DistExecutor.java:111) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.fml.core.ModStateProvider.lambda$new $3(ModStateProvider.java:66) ~[forge-1.20.1-47.3.1-universal.jar%23217!/:?] {re:classloading}     en net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java: 217) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:209) ~[fmlcore-1.20. 1-47.3.1.jar%23213!/:?] {}     en java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}     en net.minecraftforge.fml.ModLoader .dispatchAndHandleError(ModLoader.java:209) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.fml.ModLoader.lambda$loadMods$15(ModLoader.java:190 ) ~[fmlcore-1.20.1-47.3.1.jar%23213!/?:?] {}     en java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}     en net.minecraftforge.fml.ModLoader.loadMods(ModLoader.java:190) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.client.loading.ClientModLoader.lambda $startModLoading$5(ClientModLoader.java:97) ~[forge-1.20.1-47.3.1-universal.jar%23217!/:?] {re:classloading,pl:runtimedistcleaner:A}     en net.minecraftforge.client. cargando.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:89) ~[forge-1.20.1-47.3.1-universal.jar%23217!/:?] {re:classloading,pl:runtimedistcleaner:A}     en la red .minecraftforge.client.loading.ClientModLoader.startModLoading(ClientModLoader.java:97) ~[forge-1.20.1-47.3.1-universal.jar%23217!/?] {re:classloading,pl:runtimedistcleaner:A}     en net.minecraftforge.client.loading.ClientModLoader.lambda$onResourceReload$2(ClientModLoader.java:80) ~[forge-1.20.1-47.3.1-universal.jar%23217!/:?] {re:classloading,pl :runtimedistcleaner:A}     en net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:89) ~[forge-1.20.1-47.3.1-universal.jar%23217!/:?] { re:classloading,pl:runtimedistcleaner:A}     en java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}     en java.util.concurrent.CompletableFuture$AsyncRun.exec( CompletableFuture.java:1796) ~[?:?] {}     en java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}     en java.util.concurrent.ForkJoinPool$WorkQueue. topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}     en java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {re:computing_frames}     en java.util.concurrent .ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {re:computing_frames}     en java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {} Causado por: com.electronwill.nightconfig.core.io.ParsingException: No hay suficientes datos disponibles     en com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22) ~[core-3.6.4.jar%2393!/ :?] {}     en com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36) ~[core-3.6.4.jar%2393!/:?] {}     en com.electronwill.nightconfig .core.io.AbstractInput.readChar(AbstractInput.java:49) ~[core-3.6.4.jar%2393!/:?] {}     en com.electronwill.nightconfig.core.io.AbstractInput.readCharsUntil(AbstractInput. java:123) ~[core-3.6.4.jar%2393!/?] {}     en com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:166) ~[toml-3.6.4.jar %2394!/:?] {}     en com.electronwill.nightconfig.toml.TableParser.parseDottedKey(TableParser.java:145) ~[toml-3.6.4.jar%2394!/:?] {}     en com.electronwill .nightconfig.toml.TableParser.parseNormal(TableParser.java:55) ~[toml-3.6.4.jar%2394!/:?] {}     en com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java: 44) ~[toml-3.6.4.jar%2394!/?] {}     en com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37) ~[toml-3.6.4.jar%2394 !/:?] {}     en com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113) ~[core-3.6.4.jar%2393!/:?] {}     en com.electronwill .nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219) ~[core-3.6.4.jar%2393!/:?] {}     en com.electronwill.nightconfig.core.io.ConfigParser.parse( ConfigParser.java:202) ~[core-3.6.4.jar%2393!/:?] {}     en com.electronwill.nightconfig.core.file.WriteSyncFileConfig.load(WriteSyncFileConfig.java:73) ~[core-3.6 .4.jar%2393!/?] {}     en com.electronwill.nightconfig.core.file.AutosaveCommentedFileConfig.load(AutosaveCommentedFileConfig.java:85) ~[core-3.6.4.jar%2393!/:?] {}     en net.minecraftforge.fml.config.ConfigFileTypeHandler. lambda$reader$1(ConfigFileTypeHandler.java:43) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     ... 27 más Un tutorial detallado del error, su ruta de código y todos los detalles conocidos es el siguiente: -------------------------------- -------------------------------------------------- ----- -- Head -- Hilo: Hilo de procesamiento Modificaciones sospechosas: NINGUNA Stacktrace:     en net.minecraftforge.fml.config.ConfigFileTypeHandler.lambda$reader$1(ConfigFileTypeHandler.java:47) ~[fmlcore-1.20.1-47.3.1.jar %23213!/:?] {}     en net.minecraftforge.fml.config.ConfigTracker.openConfig(ConfigTracker.java:60) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.fml.config.ConfigTracker.lambda$loadConfigs$1(ConfigTracker.java:50) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en java.lang.Iterable .forEach(Iterable.java:75) ~[?:?] {re:mixin}     en java.util.Collections$SynchronizedCollection.forEach(Collections.java:2131) ~[?:?] {}     en net.minecraftforge. fml.config.ConfigTracker.loadConfigs(ConfigTracker.java:50) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.fml.core.ModStateProvider.lambda$new $1(ModStateProvider.java:67) ~[forge-1.20.1-47.3.1-universal.jar%23217!/:?] {re:classloading}     en net.minecraftforge.fml.DistExecutor.unsafeRunWhenOn(DistExecutor.java: 111) ~[fmlcore-1.20.1-47.3.1.jar%23213!/:?] {}     en net.minecraftforge.fml.core.ModStateProvider.lambda$new$3(ModStateProvider.java:66) ~[forge- 1.20.1-47.3.1-universal.jar%23217!/:?] {re:classloading} - Detalles de renderizado de superposición - Detalles:     Nombre de superposición: net.minecraftforge.client.loading.ForgeLoadingOverlay Stacktrace:     en net.minecraft .client.renderer.GameRenderer.m_109093_(GameRenderer.java:1385) ~[client-1.20.1-20230612.114412-srg.jar%23212!/:?] {re:mixin,pl:accesstransformer:B,xf:OptiFine: predeterminado,re:classloading,pl:accesstransformer:B,xf:OptiFine:default,pl:mixin:APP:sanitydim.mixins.json:MixinGameRenderer,pl:mixin:APP:securitycraft.mixins.json:camera.GameRendererMixin,pl: mixin:A}     en net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1146) ~[client-1.20.1-20230612.114412-srg.jar%23212!/:?] {re:mixin,pl:accesstransformer: B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     en net.minecraft.client.Minecraft.m_91374_(Minecraft.java:718) ~[cliente -1.20.1-20230612.114412-srg.jar%23212!/?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A, pl:runtimedistcleaner:A}     en net.minecraft.client.main.Main.main(Main.java:218) ~[1.20.1-forge-47.3.1.jar:?] {re:classloading,pl:runtimedistcleaner: A}     en jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}     en jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}     en jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}     en java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}     en net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:111) ~[fmlloader- 1.20.1-47.3.1.jar:?] {}     en net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.3.1.jar:? ] {}     en net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$makeService$0(CommonClientLaunchHandler.java:25) ~[fmlloader-1.20.1-47.3.1.jar:?] {}     en cpw.mods. modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?] {}     en cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9 .jar:?] {}     en cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?] {}     en cpw.mods.modlauncher.Launcher.run(Launcher .java:108) ~[modlauncher-10.0.9.jar:?] {}     en cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?] {}     en cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?] {}     en cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[ modlauncher-10.0.9.jar:?] {}     en cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?] {} -- Última recarga -- Detalles:     Número de recarga: 1     Motivo de recarga: inicial     Terminado: No     Paquetes: vanilla, mod_resources -- Detalles del sistema -- Detalles:     Versión de Minecraft: 1.20.1     ID de versión de Minecraft: 1.20.1     Sistema operativo: Windows 10 (amd64) versión 10.0     Versión de Java: 17.0.8,     Versión de VM de Microsoft Java: VM de servidor OpenJDK de 64 bits ( modo mixto), Microsoft     Memoria: 622962864 bytes (594 MiB) / 1107296256 bytes (1056 MiB) hasta 3170893824 bytes (3024 MiB)     CPU: 4     Proveedor del procesador: Genuino     Nombre del procesador Intel: CPU Intel(R) Core(TM) i5-4210U @ 1,70 GHz     Identificador: Intel64 Familia 6 Modelo 69 Paso 1     Microarquitectura: Haswell (Cliente)     Frecuencia (GHz): 2,39     Número de paquetes físicos: 1     Número de CPU físicas: 2     Número de CPU lógicas: 4     Nombre de la tarjeta gráfica n.º 0: Intel( R) Familia de gráficos HD     Tarjeta gráfica #0 Proveedor: Intel Corporation (0x8086)     Tarjeta gráfica #0 VRAM (MB): 1024.00     Tarjeta gráfica #0 ID del dispositivo: 0x0a16     Tarjeta gráfica #0 versionInfo: DriverVersion=20.19.15.4531     Capacidad de la ranura de memoria #0 ( MB): 4096,00     Velocidad de reloj de la ranura de memoria n.° 0 (GHz): 1,60     Tipo de ranura de memoria n.° 0: DDR3     Capacidad de la ranura de memoria n.° 1 (MB): 2048.00     Velocidad de reloj de la ranura de memoria n.° 1 (GHz): 1.60     Tipo de ranura de memoria n.° 1: DDR3     Memoria virtual máx (MB): 12449,39     Memoria virtual utilizada (MB): 7007,55     Memoria de intercambio total (MB): 6413,12     Memoria de intercambio utilizada (MB): 327,89     Banderas JVM: 8 en total; -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=16M -Xmx3018m -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump     Versión lanzada : 1.20.1-forge-47.3.1     Biblioteca backend: LWJGL versión 3.3.1 build 7     API backend: Intel(R) HD Graphics 4400 GL versión 4.3.0 - Build 20.19.15.4531, Intel     Tamaño de ventana: 1366x768     GL Mayúsculas: Uso framebuffer usando OpenGL 3.2     Mensajes de depuración GL: id=1282, fuente=API, tipo=ERROR, gravedad=ALTA, mensaje='Se ha generado un error. Error de GL GL_INVALID_OPERATION en (nulo): (ID: 173538523) Error genérico x 2     Usando VBO: Sí     Está modificado: Definitivamente; La marca del cliente cambió a 'forge'     Tipo: Cliente (map_client.txt)     Modo de gráficos: sofisticado     Paquetes de recursos:      Idioma actual: es_mx     CPU: 4 CPU Intel(R) Core(TM) i5-4210U a 1,70 GHz     Versión OptiFine: OptiFine_1.20.1 _HD_U_I6     OptiFine Build: 20231221-120401     Fragmentos de distancia de renderizado: 8     Mipmaps: 4     Filtrado anisotrópico: 1     Antialiasing: 0     Multitextura: falso     Sombreadores: nulo     OpenGlVersion: 4.3.0 - Build 20.19.15.4531     OpenGlRenderer: Intel(R) HD Graphics 4400     OpenGlVendor: Intel     CpuCount: 4     ModLauncher: 10.0.9+10.0.9+main. dcd20f30     Destino de lanzamiento de ModLauncher: forgeclient     Nombre de ModLauncher: srg     Servicios de ModLauncher:          mixin-0.8.5.jar mixin PLUGINSERVICE          eventbus-6.0.5.jar eventbus PLUGINSERVICE          fmlloader-1.20.1-47.3.1.jar slf4jfixer PLUGINSERVICE          fmlloader-1.20.1- 47.3.1.jar object_holder_definalize PLUGINSERVICE          fmlloader-1.20.1-47.3.1.jar runtime_enum_extender PLUGINSERVICE          fmlloader-1.20.1-47.3.1.jar capacitity_token_subclass PLUGINSERVICE          accesstransformers-8.0.4.jar accesstransformer PLUGINSERVICE          fmlloader-1.2 0,1-47,3. 1.jar runtimedistcleaner PLUGINSERVICE          modlauncher-10.0.9.jar mixin TRANSFORMATIONERVICE          modlauncher-10.0.9.jar OptiFine TRANSFORMATIONERVICE          modlauncher-10.0.9.jar fml TRANSFORMATIONSERVICE      Proveedores de lenguaje FML:          [email protected]         lowcodefml@null         javafml@null     Lista de mods:          cliente- 1.20.1-20230612.114412-srg.jar |Minecraft |minecraft |1.20.1 |COMMON_SET|Manifiesto: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0: de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f         hijos-de-sins-1.20.1-2.1.6.jar |Hijos de pecados |sons_of_sins |2.1.6 |COMMON_SET|Manifiesto: NOSIGNATURE         TreeChop-1.20.1-forge-0.19.0.jar |HT's TreeChop |treechop |0.18.8 |COMMON_SET|Manifiesto: NOSIGNATURE         geckolib-forge-1.20. 1-4.4.4.jar |GeckoLib 4 |geckolib |4.4.4 |COMMON_SET|Manifiesto: NOSIGNATURE         jei-1.20.1-forge-15.3.0.4.jar |Solo suficientes elementos |jei |15.3.0.4 |COMMON_SET|Manifiesto: NOSIGNATURE         jeiintegration_1.20.1-10.0.0.jar |Integración JEI |jeiintegration |10.0.0 |COMMON_SET|Manifiesto: NOSIGNATURE         sofisticadocore-1.20.1-0.6.22.611.jar |Núcleo sofisticado |núcleo sofisticado |0.6.22.611 |COMMON_SET|Manifiesto: SIN FIRMA         curios-forge-5.9.1+1.20.1.jar |API de Curios |curios |5.9.1+1.20.1 |COMMON_SET|Manifiesto: NOSIGNATURE         waystones-forge-1.20-14.1.3.jar |Waystones |waystones |14.1. 3 |COMMON_SET|Manifiesto: NOSIGNATURE         El-Hombre-De-La-Niebla-1.2.4a-1.20.1.jar |El Hombre De La Niebla |man |1.2.4 |COMMON_SET|Manifiesto: NOSIGNATURE         lápida-1.20.1- 1.0.10.jar |Lápida Mod |lápida |1.20.1-1.0.10 |COMMON_SET|Manifiesto: NOSIGNATURE         [1.20.1] SecurityCraft v1.9.9.jar |SecurityCraft |securitycraft |1.9.9 |COMMON_SET|Manifiesto: NOSIGNATURE         horror_element_mod -1.5.9_1.20.1.jar |Mod elemento de terror |horror_element_mod |1.5.9 |COMMON_SET|Manifiesto: NOSIGNATURE         Apollyon_v1.1.1_Forge_1.20.1.jar |Apollyon |apollyon |1.1.1 |COMMON_SET|Manifiesto: NOSIGNATURE         mixinextras-forge- 0.2.0-beta.6.jar |MixinExtras |mixinextras |0.2.0-beta.6 |COMMON_SET|Manifiesto: NOSIGNATURE         sofisticadasmochilas-1.20.1-3.20.5.1044.jar |Mochilas sofisticadas |mochilas sofisticadas |3.20.5.1044 |COMMON_SET| Manifiesto: NOSIGNATURE         Guide-API-VP-1.20.1-2.2.6.jar |Guide-API VP |guideapi_vp |2.2.6 |COMMON_SET|Manifiesto: NOSIGNATURE         arquitectura-9.2.14-forge.jar |Arquitectura |arquitectura |9.2 .14 |COMMON_SET|Manifiesto: NOSIGNATURE         justhammers-forge-2.0.3+mc1.20.1.jar |Just Hammers                  |justhammers |2.0.3+mc1.20.1 |COMMON_SET|Manifiesto: NOSIGNATURE         Vampirism-1.20.1-1.10.7.jar |Vampirismo |vampirismo |1.10.7 |COMMON_SET|Manifiesto: NOSIGNATURE         vampirism_integrations-1.20.1-1.8.0 .jar |Integraciones de vampirismo |integraciones_vampirismo |1.8.0 |COMMON_SET|Manifiesto: NOSIGNATURE         GodlyVampirism-1.20.1-1.10.0.jar |Vampirismo divino |godly_vampirism |1.10.0 |COMMON_SET|Manifiesto: NOSIGNATURE         balm-forge-1.20.1 -7.2.2.jar |Bálsamo |bálsamo |7.2.2 |COMMON_SET|Manifiesto: NOSIGNATURE         thedragonlib-1.20.1-1.0.0.jar |TheDragonLib |thedragonlib |1.20.1-1.0.0 |COMMON_SET|Manifiesto: NOSIGNATURE         carryon -forge-1.20.1-2.1.2.7.jar |Continuar |carryon |2.1.2.7 |COMMON_SET|Manifiesto: NOSIGNATURE         forge-1.20.1-47.3.1-universal.jar |Forge |forge |47.3.1 |COMMON_SET |Manifiesto: 84:ce:76:e8:45:35:e4:0e:63:86:df:47:59:80:0f:67:6c:c1:5f:6e:5f:4d:b3:54 :47:1a:9f:7f:ed:5e:f2:90         cosmeticarmorreworked-1.20.1-v1a.jar |CosmeticArmorReworked |cosmeticarmorreworked |1.20.1-v1a |COMMON_SET|Manifiesto: 5e:ed:25:99:e4: 44:14:c0:dd:89:c1:a9:4c:10:b5:0d:e4:b1:52:50:45:82:13:d8:d0:32:89:67:56:57: 01:53         Armorplus-1.20.1-20.0.0.jar |ArmorPlus |armorplus |1.20.1-20.0.0 |COMMON_SET|Manifiesto: NOSIGNATURE         THEUNDEADREVAMPED_1.2_1.20.1[Society Monmento Upd|Undead_revamp2 |undead_revamp2 |1.0.0 | COMMON_SET|Manifiesto: NOSIGNATURE         sanitydim-mc1.20-1.1.0.jar |Sanity: Descent Into Madness |sanitydim |1.1.0 |COMMON_SET|Manifiesto: NOSIGNATURE     Informe de fallo UUID: 49e97c25-1f8b-4147-b7cc-4951e2513d6c     FML: 47.3     Forja: net.minecraftforge:47.3.1
    • I created the animations by downloading the existing ones from the Github, and redoing them. I only ever saved the animations, and didnt export because it doesnt know what directory. I'm thinkin i just need a directory and I'd have been done with this, but im not sure.  noticed in blender there was a script thingy on the side, too. so im basically just askin, since i just redid the animations, would I just have to set a directory to the better combat mod somehow? can someone help???
    • Hallo! I'm trying to make a custom modpack for my friends and I to play, but I keep getting this error code whenver I launch it and I can't figure out what's wrong with it. The game crashed whilst rendering overlay Error: java.lang.StackOverflowError: Rendering overlay   Here is the full crash report: Pastebin
  • Topics

×
×
  • Create New...

Important Information

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