Jump to content

[1.12.2] IBakedModel help


BeardlessBrady

Recommended Posts

I am trying to use an IBakedModel to create a dynamic model for an item. I've been looking at GreyGhosts examples but I start getting confused here: https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe15_item_dynamic_item_model/ChessboardFinalisedModel.java#L135

From then on there are tons of numbers which to me don't really have any correlation as to where they came from so I can't quite understand how to do it in my own implementation.

 

Any help would be appreciated, thanks!

Link to comment
Share on other sites

3 hours ago, BeardlessBrady said:

I am trying to use an IBakedModel to create a dynamic model for an item. I've been looking at GreyGhosts examples but I start getting confused here: https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe15_item_dynamic_item_model/ChessboardFinalisedModel.java#L135

From then on there are tons of numbers which to me don't really have any correlation as to where they came from so I can't quite understand how to do it in my own implementation.

 

Any help would be appreciated, thanks!

You’ve said that your problem is that your confused, do you want links to some documentation? Or do u want to post your code and your logs and go from there?

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Link to comment
Share on other sites

4 hours ago, BeardlessBrady said:

Any help would be appreciated, thanks!

It would be helpful if you told us which numbers specifically.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Alright, my confusion is about GreyGhost's example here:

https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe15_item_dynamic_item_model/ChessboardFinalisedModel.java#L135

 

and here:

https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe15_item_dynamic_item_model/ChessboardFinalisedModel.java#L212

 

I'm not understanding how all the math on those lines and below are calculated and it is very overwhelming. I'm trying to figure out how to used IBakedModels.

 

Link to comment
Share on other sites

14 minutes ago, BeardlessBrady said:

1/16 is the thickness of the Item ie one pixel.

The next number indicates the center of the item(0-1) so .5 is the literal center.

The max is the farthest position(farthest from 0) and the min is the closest position(closest to 0). These represent how far in the start and the end are in the z direction.

22 minutes ago, BeardlessBrady said:

These are a little bit beyond me, but basically it is just creating the faces for the baked model. It might be easier to experiment with those values to figure out what they do exactly. But it looks like dimensions of some kind.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Thats the problem, I wouldnt even know where to start with experimenting with that. What I'm trying to accomplish it creating an item that has 3 layers. Each layer has different variants. I was going to use JSON overrides and predicates but for some reason with that you can only override the entire model not just a layer of one so that requires me to create every combination of each layer. IBakedModel's seem more flexible but this example of how it works just flies over my head. ]

Link to comment
Share on other sites

Its easier to make just all different overlays and then overlay them onto the item using IBakedModel.

 

So my item has 6 different layers overlayed onto it. For each layer I have made the different json models and textures, I have not done any combinations, those are done in code.

 

Ill just share my code with you, I think its pretty self explaining, but some comments are there making it easy to understand:

 

@Override
	public void registerGun(IForgeRegistry<Item> registry, ItemGun gun)
	{
		super.registerGun(registry, gun);
		
		registeredGuns.add(gun);
		
		ModelResourceLocation main = new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/gun", "inventory");
		ModelLoader.setCustomModelResourceLocation(gun, 0, main);
		
		ArrayList<ModelResourceLocation> list = new ArrayList<ModelResourceLocation>();
		list.add(main);
		
		int i;
		int j;
		Attachment attachment;
		
		for(i = 0; i < EnumAttachmentType.values().length; ++i) //All layers
		{
			for(j = 0; j < Attachment.getAmmountForSlot(i); ++j) //All attachments per layer
			{
				if(gun.canSetAttachment(i, j)) //Check if attachment is compatible
				{
					attachment = Attachment.getAttachment(i, j);
					
					if(attachment != null && attachment.shouldLoadModel()) //null-attachment exists, as well as some which are not visible
					{
						list.add(new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/" + attachment.getModelRL(), "inventory")); //Add MRL to the list
					}
				}
			}
		}
		
		ModelBakery.registerItemVariants(gun, list.toArray(new ModelResourceLocation[list.size()])); //Register all attachment MRLs found so that they will be loaded
	}
@SubscribeEvent
	public void modelBake(ModelBakeEvent event)
	{
		int i;
		int j;
		Attachment attachment;
		ModelResourceLocation mrl;
		IBakedModel main;
		
		IBakedModel[][] models; //These are the attachment models which will be passed onto the gun model for use
		
		for(ItemGun gun : ProxyClient.registeredGuns) //Cycle through all guns
		{
			models = new IBakedModel[EnumAttachmentType.values().length][];
			
			for(i = 0; i < models.length; ++i) //This represents the layers
			{
				models[i] = new IBakedModel[Attachment.getAmmountForSlot(i)];
				
				for(j = 0; j < Attachment.getAmmountForSlot(i); ++j) //Ammount of attachments for each layer
				{
					if(gun.canSetAttachment(i, j)) //Check if compatible
					{
						attachment = Attachment.getAttachment(i, j);
						
						if(attachment != null && attachment.shouldLoadModel()) //Make sure its not null-attachment and the model is needed
						{
							models[i][j] = event.getModelRegistry().getObject(new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/" + attachment.getModelRL(), "inventory")); //Add attachment model to the array
						}
					}
				}
			}
			
			mrl = new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/gun", "inventory"); //This is the MRL of the main item (gun)
			
			main = event.getModelRegistry().getObject(mrl); //Get the model of the gun
			
			event.getModelRegistry().putObject(mrl, new BakedModelGun(main, models)); //Replace model of the gun with custom IBakedModel and pass all the attachment models to it
		}
	}
public class BakedModelGun implements IBakedModel
{
	/*
	 * The only usage of this class is the item overrides list:
	 * Basically get the itemstack, pass it onto the modelFinal, then return modelFinal for rendering,
	 * so that during the rendering you have information about the itemstack
	 */
	private final IBakedModel modelMain;
	private final BakedModelGunFinalized modelFinal;
	private final OverridesList overridesList;
	
	public BakedModelGun(IBakedModel modelMain, IBakedModel[][] attachmentModels)
	{
		this.modelMain = modelMain;
		this.modelFinal = new BakedModelGunFinalized(this.modelMain, attachmentModels);
		this.overridesList = new OverridesList(this);
	}
	
	public BakedModelGunFinalized getModelFinal()
	{
		return modelFinal;
	}

	@Override
	public ItemOverrideList getOverrides()
	{
		return this.overridesList;
	}

	@Override
	public TextureAtlasSprite getParticleTexture()
	{
		return this.modelMain.getParticleTexture();
	}

	@Override
	public List<BakedQuad> getQuads(IBlockState arg0, EnumFacing arg1, long arg2)
	{
		return this.modelMain.getQuads(arg0, arg1, arg2);
	}

	@Override
	public boolean isAmbientOcclusion()
	{
		return this.modelMain.isAmbientOcclusion();
	}
	
	@Override
	public boolean isBuiltInRenderer()
	{
		return this.modelMain.isBuiltInRenderer();
	}

	@Override
	public boolean isGui3d()
	{
		return this.modelMain.isGui3d();
	}
	
	private static class OverridesList extends ItemOverrideList
	{
		private BakedModelGun modelGun;
		
		public OverridesList(BakedModelGun modelGun)
		{
			super(Collections.EMPTY_LIST);
			this.modelGun = modelGun;
		}
		
		@Override
		public IBakedModel handleItemState(IBakedModel originalModel, ItemStack itemStack, World world, EntityLivingBase entity)
		{
			return this.modelGun.getModelFinal().setCurrentItemStack(itemStack);
		}
	}
}
public class BakedModelGunFinalized implements IBakedModel
{
	private final IBakedModel modelMain;
	private final IBakedModel[][] attachmentModels;
	private ItemStack itemStack;
	
	public BakedModelGunFinalized(IBakedModel modelMain, IBakedModel[][] attachmentModels)
	{
		this.modelMain = modelMain;
		this.attachmentModels = attachmentModels;
		this.itemStack = null;
	}
	
	public BakedModelGunFinalized setCurrentItemStack(ItemStack itemStack)
	{
		this.itemStack = itemStack;
		return this;
	}

	@Override
	public ItemOverrideList getOverrides()
	{
		return this.modelMain.getOverrides();
	}

	@Override
	public TextureAtlasSprite getParticleTexture()
	{
		return this.modelMain.getParticleTexture();
	}

	@Override
	public List<BakedQuad> getQuads(IBlockState arg0, EnumFacing arg1, long arg2)
	{
		ArrayList<BakedQuad> list = new ArrayList<BakedQuad>();
		
		List<BakedQuad> list1 = this.modelMain.getQuads(arg0, arg1, arg2);
		
		ItemGun gun = (ItemGun) this.itemStack.getItem();
		
		Paint paint = gun.<Paint>getAttachmentCalled(this.itemStack, EnumAttachmentType.PAINT.getSlot());
		IBakedModel model;
		
		if(paint != null && paint.shouldRegister())
		{
			model = this.attachmentModels[EnumAttachmentType.PAINT.getSlot()][paint.getID()];
			
			if(model != null)
			{
				list1 = model.getQuads(arg0, arg1, arg2);
			}
		}
		
		if(list1 != null && !list1.isEmpty())
		{
			list.addAll(list1);
		}
		
		List<BakedQuad> list2;
		
		Attachment attachment;
		
		for(int i = 0; i < EnumAttachmentType.values().length; ++i)
		{
			attachment = gun.getAttachment(itemStack, i);
			
			if(attachment != null && attachment.shouldRender())
			{
				model = this.attachmentModels[i][attachment.getID()];
				
				if(model != null)
				{
					list2 = model.getQuads(arg0, arg1, arg2);
					
					if(list2 != null && !list2.isEmpty())
					{
						list.addAll(list2);
					}
				}
			}
		}
		
		return list;
	}

	@Override
	public boolean isAmbientOcclusion()
	{
		return this.modelMain.isAmbientOcclusion();
	}
	
	@Override
	public boolean isBuiltInRenderer()
	{
		return this.modelMain.isBuiltInRenderer();
	}

	@Override
	public boolean isGui3d()
	{
		return this.modelMain.isGui3d();
	}
	
	private static final Matrix4f NULL_MATRIX = new Matrix4f();
	
	@Override
	public Pair<? extends IBakedModel, Matrix4f> handlePerspective(TransformType transformType)
	{
		if(transformType == TransformType.FIRST_PERSON_RIGHT_HAND)
		{
			EntityPlayer entityPlayer = Minecraft.getMinecraft().player;
			
			if(entityPlayer != null && !entityPlayer.isSprinting() && !entityPlayer.isSneaking())
			{
				if(entityPlayer.getHeldItemMainhand().getItem() instanceof ItemGun && entityPlayer.getHeldItemOffhand().isEmpty() && Minecraft.getMinecraft().gameSettings.keyBindUseItem.isKeyDown())
				{
					ItemStack itemStack = entityPlayer.getHeldItemMainhand();
					ItemGun gun = (ItemGun) itemStack.getItem();
					
					Optic optic = gun.<Optic>getAttachmentCalled(itemStack, EnumAttachmentType.OPTIC.getSlot());
					
					if(optic != null && optic.canAim())
					{
						return Pair.of(this, NULL_MATRIX);
					}
				}
			}
		}
		
		return Pair.of(this, this.modelMain.handlePerspective(transformType).getRight());
	}
}

 

 

Edited by CAS_ual_TY
Link to comment
Share on other sites

12 hours ago, CAS_ual_TY said:

Its easier to make just all different overlays and then overlay them onto the item using IBakedModel.

 

So my item has 6 different layers overlayed onto it. For each layer I have made the different json models and textures, I have not done any combinations, those are done in code.

 

Ill just share my code with you, I think its pretty self explaining, but some comments are there making it easy to understand:

 


@Override
	public void registerGun(IForgeRegistry<Item> registry, ItemGun gun)
	{
		super.registerGun(registry, gun);
		
		registeredGuns.add(gun);
		
		ModelResourceLocation main = new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/gun", "inventory");
		ModelLoader.setCustomModelResourceLocation(gun, 0, main);
		
		ArrayList<ModelResourceLocation> list = new ArrayList<ModelResourceLocation>();
		list.add(main);
		
		int i;
		int j;
		Attachment attachment;
		
		for(i = 0; i < EnumAttachmentType.values().length; ++i) //All layers
		{
			for(j = 0; j < Attachment.getAmmountForSlot(i); ++j) //All attachments per layer
			{
				if(gun.canSetAttachment(i, j)) //Check if attachment is compatible
				{
					attachment = Attachment.getAttachment(i, j);
					
					if(attachment != null && attachment.shouldLoadModel()) //null-attachment exists, as well as some which are not visible
					{
						list.add(new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/" + attachment.getModelRL(), "inventory")); //Add MRL to the list
					}
				}
			}
		}
		
		ModelBakery.registerItemVariants(gun, list.toArray(new ModelResourceLocation[list.size()])); //Register all attachment MRLs found so that they will be loaded
	}

@SubscribeEvent
	public void modelBake(ModelBakeEvent event)
	{
		int i;
		int j;
		Attachment attachment;
		ModelResourceLocation mrl;
		IBakedModel main;
		
		IBakedModel[][] models; //These are the attachment models which will be passed onto the gun model for use
		
		for(ItemGun gun : ProxyClient.registeredGuns) //Cycle through all guns
		{
			models = new IBakedModel[EnumAttachmentType.values().length][];
			
			for(i = 0; i < models.length; ++i) //This represents the layers
			{
				models[i] = new IBakedModel[Attachment.getAmmountForSlot(i)];
				
				for(j = 0; j < Attachment.getAmmountForSlot(i); ++j) //Ammount of attachments for each layer
				{
					if(gun.canSetAttachment(i, j)) //Check if compatible
					{
						attachment = Attachment.getAttachment(i, j);
						
						if(attachment != null && attachment.shouldLoadModel()) //Make sure its not null-attachment and the model is needed
						{
							models[i][j] = event.getModelRegistry().getObject(new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/" + attachment.getModelRL(), "inventory")); //Add attachment model to the array
						}
					}
				}
			}
			
			mrl = new ModelResourceLocation(GunCus.MOD_ID + ":" + gun.getModelRL() + "/gun", "inventory"); //This is the MRL of the main item (gun)
			
			main = event.getModelRegistry().getObject(mrl); //Get the model of the gun
			
			event.getModelRegistry().putObject(mrl, new BakedModelGun(main, models)); //Replace model of the gun with custom IBakedModel and pass all the attachment models to it
		}
	}

public class BakedModelGun implements IBakedModel
{
	/*
	 * The only usage of this class is the item overrides list:
	 * Basically get the itemstack, pass it onto the modelFinal, then return modelFinal for rendering,
	 * so that during the rendering you have information about the itemstack
	 */
	private final IBakedModel modelMain;
	private final BakedModelGunFinalized modelFinal;
	private final OverridesList overridesList;
	
	public BakedModelGun(IBakedModel modelMain, IBakedModel[][] attachmentModels)
	{
		this.modelMain = modelMain;
		this.modelFinal = new BakedModelGunFinalized(this.modelMain, attachmentModels);
		this.overridesList = new OverridesList(this);
	}
	
	public BakedModelGunFinalized getModelFinal()
	{
		return modelFinal;
	}

	@Override
	public ItemOverrideList getOverrides()
	{
		return this.overridesList;
	}

	@Override
	public TextureAtlasSprite getParticleTexture()
	{
		return this.modelMain.getParticleTexture();
	}

	@Override
	public List<BakedQuad> getQuads(IBlockState arg0, EnumFacing arg1, long arg2)
	{
		return this.modelMain.getQuads(arg0, arg1, arg2);
	}

	@Override
	public boolean isAmbientOcclusion()
	{
		return this.modelMain.isAmbientOcclusion();
	}
	
	@Override
	public boolean isBuiltInRenderer()
	{
		return this.modelMain.isBuiltInRenderer();
	}

	@Override
	public boolean isGui3d()
	{
		return this.modelMain.isGui3d();
	}
	
	private static class OverridesList extends ItemOverrideList
	{
		private BakedModelGun modelGun;
		
		public OverridesList(BakedModelGun modelGun)
		{
			super(Collections.EMPTY_LIST);
			this.modelGun = modelGun;
		}
		
		@Override
		public IBakedModel handleItemState(IBakedModel originalModel, ItemStack itemStack, World world, EntityLivingBase entity)
		{
			return this.modelGun.getModelFinal().setCurrentItemStack(itemStack);
		}
	}
}

public class BakedModelGunFinalized implements IBakedModel
{
	private final IBakedModel modelMain;
	private final IBakedModel[][] attachmentModels;
	private ItemStack itemStack;
	
	public BakedModelGunFinalized(IBakedModel modelMain, IBakedModel[][] attachmentModels)
	{
		this.modelMain = modelMain;
		this.attachmentModels = attachmentModels;
		this.itemStack = null;
	}
	
	public BakedModelGunFinalized setCurrentItemStack(ItemStack itemStack)
	{
		this.itemStack = itemStack;
		return this;
	}

	@Override
	public ItemOverrideList getOverrides()
	{
		return this.modelMain.getOverrides();
	}

	@Override
	public TextureAtlasSprite getParticleTexture()
	{
		return this.modelMain.getParticleTexture();
	}

	@Override
	public List<BakedQuad> getQuads(IBlockState arg0, EnumFacing arg1, long arg2)
	{
		ArrayList<BakedQuad> list = new ArrayList<BakedQuad>();
		
		List<BakedQuad> list1 = this.modelMain.getQuads(arg0, arg1, arg2);
		
		ItemGun gun = (ItemGun) this.itemStack.getItem();
		
		Paint paint = gun.<Paint>getAttachmentCalled(this.itemStack, EnumAttachmentType.PAINT.getSlot());
		IBakedModel model;
		
		if(paint != null && paint.shouldRegister())
		{
			model = this.attachmentModels[EnumAttachmentType.PAINT.getSlot()][paint.getID()];
			
			if(model != null)
			{
				list1 = model.getQuads(arg0, arg1, arg2);
			}
		}
		
		if(list1 != null && !list1.isEmpty())
		{
			list.addAll(list1);
		}
		
		List<BakedQuad> list2;
		
		Attachment attachment;
		
		for(int i = 0; i < EnumAttachmentType.values().length; ++i)
		{
			attachment = gun.getAttachment(itemStack, i);
			
			if(attachment != null && attachment.shouldRender())
			{
				model = this.attachmentModels[i][attachment.getID()];
				
				if(model != null)
				{
					list2 = model.getQuads(arg0, arg1, arg2);
					
					if(list2 != null && !list2.isEmpty())
					{
						list.addAll(list2);
					}
				}
			}
		}
		
		return list;
	}

	@Override
	public boolean isAmbientOcclusion()
	{
		return this.modelMain.isAmbientOcclusion();
	}
	
	@Override
	public boolean isBuiltInRenderer()
	{
		return this.modelMain.isBuiltInRenderer();
	}

	@Override
	public boolean isGui3d()
	{
		return this.modelMain.isGui3d();
	}
	
	private static final Matrix4f NULL_MATRIX = new Matrix4f();
	
	@Override
	public Pair<? extends IBakedModel, Matrix4f> handlePerspective(TransformType transformType)
	{
		if(transformType == TransformType.FIRST_PERSON_RIGHT_HAND)
		{
			EntityPlayer entityPlayer = Minecraft.getMinecraft().player;
			
			if(entityPlayer != null && !entityPlayer.isSprinting() && !entityPlayer.isSneaking())
			{
				if(entityPlayer.getHeldItemMainhand().getItem() instanceof ItemGun && entityPlayer.getHeldItemOffhand().isEmpty() && Minecraft.getMinecraft().gameSettings.keyBindUseItem.isKeyDown())
				{
					ItemStack itemStack = entityPlayer.getHeldItemMainhand();
					ItemGun gun = (ItemGun) itemStack.getItem();
					
					Optic optic = gun.<Optic>getAttachmentCalled(itemStack, EnumAttachmentType.OPTIC.getSlot());
					
					if(optic != null && optic.canAim())
					{
						return Pair.of(this, NULL_MATRIX);
					}
				}
			}
		}
		
		return Pair.of(this, this.modelMain.handlePerspective(transformType).getRight());
	}
}

 

 

Do you have a GitHub? I’d like to see how you are attaching your attachments to your item gun (capability? NBT?)

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Link to comment
Share on other sites

Link to comment
Share on other sites

  • 5 weeks later...

Hey I know it has been a month but unfortunately I have been busy. So I tried to implement it the way you have on your mod @CAS_ual_TY but I can't seem to get it working. I've only done a test scenario just so I can get it to render before I start working on all the parts. Here is my code:

 

https://github.com/BeardlessBrady/Currency-Mod/commit/01f2dfb9380eae52f0fb738eb2fa0f84124d3bd7

Link to comment
Share on other sites

Where is this invoked from?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

And where's that invoked from. Ultimately I need to know the IBakedModel modelMain object originates, as by the time it gets to BakedModelCurrencyFinalized, it's null.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

IBakedModel main = event.getModelRegistry().getObject(mrl);

 

You need to insure that this is not failing.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Is it ever created? Use the debugger 

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Link to comment
Share on other sites

7 hours ago, BeardlessBrady said:

I dont think it was created but I have no idea why.

Where was it meant to be created? Place a breakpoint there and see if it hits.

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

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.



×
×
  • Create New...

Important Information

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