Jump to content

[1.8] [SOLVED] Manipulating model in ISmartBlockModel.handleBlockState()


SnowyEgret

Recommended Posts

Hi,

 

I have implemented ISmartModel as instructed in TheGreyGhost's MBE04 tutorial. Things are working fine. In handleBlockState() I am looking up a model from an IBlockState I get from an unlisted property of the incoming IExtendedBlockState.

 

Before returning the model, can I manipulate it? I am attempting to find a way to modify the color of it's texture (I posted a couple of days ago on this).  There is a method returning the model's texture (of class TextureAtlasSprite), and a method to get the texture's texture data which is also setable. My printlns seem to indicate the texture data is changed, but I am not seeing any difference to the texture in game.

 

Here is my implentation of ISmartModel:

 

package ds.plato.block;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.IFlexibleBakedModel;
import net.minecraftforge.client.model.ISmartBlockModel;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;

public class BlockSelectedModel implements ISmartBlockModel {

public static ModelResourceLocation modelResourceLocation = new ModelResourceLocation("plato:blockSelected");
private IBakedModel defaultModel;
private IUnlistedProperty prevBlockProperty;

public BlockSelectedModel(IBakedModel defaultModel, PropertyPreviousBlock prevBlockProperty) {
	super();
	this.defaultModel = defaultModel;
	this.prevBlockProperty = prevBlockProperty;
}

@Override
public IBakedModel handleBlockState(IBlockState state) {
	assert IExtendedBlockState.class.isAssignableFrom(state.getClass());
	IBlockState s = ((IExtendedBlockState) state).getValue(prevBlockProperty);
	IBakedModel model = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes()
			.getModelForState(s);

	IFlexibleBakedModel m = (IFlexibleBakedModel)model;

	TextureAtlasSprite t = m.getTexture();
	int[][] td = t.getFrameTextureData(0);
	System.out.println(Arrays.deepToString(td));

	td = modifyTextureData(td);
	List l = new ArrayList();
	l.add(td);
	t.setFramesTextureData(l);

	t = m.getTexture();
	td = t.getFrameTextureData(0);
	System.out.println(Arrays.deepToString(td));

	return m;
}

@Override
public List getFaceQuads(EnumFacing p_177551_1_) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public List getGeneralQuads() {
	// TODO Auto-generated method stub
	return null;
}

@Override
public boolean isAmbientOcclusion() {
	// TODO Auto-generated method stub
	return false;
}

@Override
public boolean isGui3d() {
	// TODO Auto-generated method stub
	return false;
}

@Override
public boolean isBuiltInRenderer() {
	// TODO Auto-generated method stub
	return false;
}

@Override
public TextureAtlasSprite getTexture() {
	return defaultModel.getTexture();
}

@Override
public ItemCameraTransforms getItemCameraTransforms() {
	// TODO Auto-generated method stub
	return null;
}

// Private-------------------------------------------------------------

private int[][] modifyTextureData(int[][] data) {
	for (int i = 0; i < data.length; i++) {
		for (int j = 0; j < data[i].length; j++) {
			data[i][j] = 0;
		}
	}
	return data;
}

}

 

For testing purposes I am just setting the texture data to 0. Seems I can cast the IBakedModel to an IFlexibleBakedModel, for whatever that's worth.

Link to comment
Share on other sites

Hi

 

the getTexture method is not generally used for rendering the block  - it is used (for example) for the 'exploding shards' that you get when you destroy a block by digging it.

 

In order to change the texture, you will need to change the BakedQuad data (each BakedQuad in your BlockModel is made up of four corners (vertices) - and at each vertex, it records the [x,y,z] position as well as a texture coordinate [u,v]. 

 

All of the textures for blocks and item models are "stitched together" into a large texture sheet, see the "Texture Coordinates" diagram on this page halfway down

http://greyminecraftcoder.blogspot.co.at/2014/12/the-tessellator-and-worldrenderer-18.html

 

You will need to create your BakedQuads with the correct texture coordinates of the new texture

An example of how you can do this is in MBE15, this class works for the faces of the cube

https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe15_item_smartitemmodel/ChessboardSmartItemModel.java

see createBakedQuadForFace().

FaceBakery.makeBakedQuad() can be useful for generating quads

 

If you want to change a model with arbitrary quads (not just the NEWSUD faces of the cube) then you can probably read the quads from the base model one by one, convert the int arrays to vertex data, replace the [u,v] with the new [u,v], and create a new list of BakedQuads from it.  Haven't tried it, but it should work.

 

-TGG

Link to comment
Share on other sites

Thanks TGG for the response.

 

I think the last, more generic, method you proposed is the way I need to go. Just a few questions to begin. Here is a start for new handleBlockState():

 

	@Override
public IBakedModel handleBlockState(IBlockState state) {
	assert IExtendedBlockState.class.isAssignableFrom(state.getClass());
	IBlockState s = ((IExtendedBlockState) state).getValue(prevBlockProperty);
	IBakedModel model = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes()
			.getModelForState(s);

	IFlexibleBakedModel m = (IFlexibleBakedModel) model;

	VertexFormat format = m.getFormat();
	System.out.println("format=" + format);

	List<BakedQuad> generalQuads = m.getGeneralQuads();
	System.out.println(Arrays.toString(generalQuads.toArray()));
	for (BakedQuad q : generalQuads) {
		int[] vd = q.getVertexData();
		System.out.println(Arrays.toString(vd));
	}

	for (EnumFacing face : EnumFacing.values()) {
		List<BakedQuad> faceQuads = m.getFaceQuads(face);
		for (BakedQuad q : faceQuads) {
			int[] vd = q.getVertexData();
			System.out.println(Arrays.toString(vd));
		}
	}

	return m;
}

 

When I run and select a vanila block sand, it appears to have no generalQuad data(the list of BakedQuads is empty), only faceQuad data. Can I assume that any model which has more than 6 standard sides will implement getGeneralQuads()?

 

Here is the output of vertex data from the faceQuads:

 

[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 0, 1065353216, -8421505, 1058537800, 1046480159, 0, 0, 0, 0, -8421505, 1058537800, 1048574689, 0, 1065353216, 0, 0, -8421505, 1059061432, 1048574689, 0, 1065353216, 0, 1065353216, -8421505, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 1065353216, 0, -1, 1058537800, 1046480159, 0, 0, 1065353216, 1065353216, -1, 1058537800, 1048574689, 0, 1065353216, 1065353216, 1065353216, -1, 1059061432, 1048574689, 0, 1065353216, 1065353216, 0, -1, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [1065353216, 1065353216, 0, -3355444, 1058537800, 1046480159, 0, 1065353216, 0, 0, -3355444, 1058537800, 1048574689, 0, 0, 0, 0, -3355444, 1059061432, 1048574689, 0, 0, 1065353216, 0, -3355444, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 1065353216, 1065353216, -3355444, 1058537800, 1046480159, 0, 0, 0, 1065353216, -3355444, 1058537800, 1048574689, 0, 1065353216, 0, 1065353216, -3355444, 1059061432, 1048574689, 0, 1065353216, 1065353216, 1065353216, -3355444, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 1065353216, 0, -6710887, 1058537800, 1046480159, 0, 0, 0, 0, -6710887, 1058537800, 1048574689, 0, 0, 0, 1065353216, -6710887, 1059061432, 1048574689, 0, 0, 1065353216, 1065353216, -6710887, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [1065353216, 1065353216, 1065353216, -6710887, 1058537800, 1046480159, 0, 1065353216, 0, 1065353216, -6710887, 1058537800, 1048574689, 0, 1065353216, 0, 0, -6710887, 1059061432, 1048574689, 0, 1065353216, 1065353216, 0, -6710887, 1059061432, 1046480159, 0]

 

Do I use the format from VertexFormat format = m.getFormat() to interpret these arrays of ints?

 

Also, there is no setQuads() method on IFlexibleBakedModel. Is this going to be a problem?

Link to comment
Share on other sites

Thanks TGG for the response.

You're welcome :)

 

When I run and select a vanila block sand, it appears to have no generalQuad data(the list of BakedQuads is empty), only faceQuad data. Can I assume that any model which has more than 6 standard sides will implement getGeneralQuads()?

Yes.  But in general a model may have any mixture of faceQuads and GeneralQuads - it may have all faceQuads, all generalQuads, or a mixture of both.  faceQuads is mostly useful for blocks which don't draw some of their faces when they are next to each other.  For example stone.  Two stone blocks next to each other don't need to draw the two faces where they are touching.

 

General quads are usually for odd-shaped faces such as the torch, or the ladder.

 

Here is the output of vertex data from the faceQuads:

 

[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 0, 1065353216, -8421505, 1058537800, 1046480159, 0, 0, 0, 0, -8421505, 1058537800, 1048574689, 0, 1065353216, 0, 0, -8421505, 1059061432, 1048574689, 0, 1065353216, 0, 1065353216, -8421505, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 1065353216, 0, -1, 1058537800, 1046480159, 0, 0, 1065353216, 1065353216, -1, 1058537800, 1048574689, 0, 1065353216, 1065353216, 1065353216, -1, 1059061432, 1048574689, 0, 1065353216, 1065353216, 0, -1, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [1065353216, 1065353216, 0, -3355444, 1058537800, 1046480159, 0, 1065353216, 0, 0, -3355444, 1058537800, 1048574689, 0, 0, 0, 0, -3355444, 1059061432, 1048574689, 0, 0, 1065353216, 0, -3355444, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 1065353216, 1065353216, -3355444, 1058537800, 1046480159, 0, 0, 0, 1065353216, -3355444, 1058537800, 1048574689, 0, 1065353216, 0, 1065353216, -3355444, 1059061432, 1048574689, 0, 1065353216, 1065353216, 1065353216, -3355444, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [0, 1065353216, 0, -6710887, 1058537800, 1046480159, 0, 0, 0, 0, -6710887, 1058537800, 1048574689, 0, 0, 0, 1065353216, -6710887, 1059061432, 1048574689, 0, 0, 1065353216, 1065353216, -6710887, 1059061432, 1046480159, 0]
[19:27:02] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:55]: [1065353216, 1065353216, 1065353216, -6710887, 1058537800, 1046480159, 0, 1065353216, 0, 1065353216, -6710887, 1058537800, 1048574689, 0, 1065353216, 0, 0, -6710887, 1059061432, 1048574689, 0, 1065353216, 1065353216, 0, -6710887, 1059061432, 1046480159, 0]

 

Do I use the format from VertexFormat format = m.getFormat() to interpret these arrays of ints?

Yes - you need to find the offset corresponding to VertexFormatElement.EnumUsage UV.

If it's the standard format, vertexToInts() in this class

https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe15_item_smartitemmodel/ChessboardSmartItemModel.java

gives you the info you need - also shows you how to go from float to int, you just need to find the function to go back the other way from rawInts to float

If you want to code for any generic VertextFormat, I think you should be able to iterate through its elements, find the one for UV, and get its offset.

 

Also, there is no setQuads() method on IFlexibleBakedModel. Is this going to be a problem?

No problem.  Just create your own class extending IFlexibleBakedmodel and store your modified BakedQuads in it, then return it from handleBlockState.  When your IFlexibleBakedModel instance is called i.e.getGeneralQuads or getFaceQuads, return your modified BakedQuads.

 

-TGG

 

 

 

 

Link to comment
Share on other sites

I have answered the last part of my question. Instead of returning the model looked up in handleBlockState() I return this (which is an IBakedModel). This gives me the oportunity to modify or rebuild the BakedQuads list returned from getFaceQuads() and getGeneralQuads():

 

package ds.plato.block;

import java.util.Arrays;
import java.util.List;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.IFlexibleBakedModel;
import net.minecraftforge.client.model.ISmartBlockModel;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;

public class BlockSelectedModel implements ISmartBlockModel {

public static ModelResourceLocation modelResourceLocation = new ModelResourceLocation("plato:blockSelected");
private IBakedModel defaultModel;
private IFlexibleBakedModel model;
private IUnlistedProperty selectedBlockProperty;

public BlockSelectedModel(IBakedModel defaultModel, PropertySelectedBlock selectedBlockProperty) {
	this.defaultModel = defaultModel;
	this.selectedBlockProperty = selectedBlockProperty;
}

@Override
public IBakedModel handleBlockState(IBlockState state) {
	assert IExtendedBlockState.class.isAssignableFrom(state.getClass());
	IBlockState s = ((IExtendedBlockState) state).getValue(selectedBlockProperty);
	System.out.println("Selected block="+s);
	IBakedModel m = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState(s);
	model = (IFlexibleBakedModel) m;
	return this;
}

@Override
public List getFaceQuads(EnumFacing face) {
	List<BakedQuad> faceQuads = model.getFaceQuads(face);
	for (BakedQuad q : faceQuads) {
		int[] vd = q.getVertexData();
		System.out.println(Arrays.toString(vd));
	}
	//Modify list here
	return faceQuads;
}

@Override
public List getGeneralQuads() {
	List<BakedQuad> generalQuads = model.getGeneralQuads();
	System.out.println(Arrays.toString(generalQuads.toArray()));
	for (BakedQuad q : generalQuads) {
		int[] vd = q.getVertexData();
		System.out.println(Arrays.toString(vd));
	}
	//Modify list here
	return generalQuads;
}

@Override
public boolean isAmbientOcclusion() {
	return model.isAmbientOcclusion();
}

@Override
public boolean isGui3d() {
	return model.isGui3d();
}

@Override
public boolean isBuiltInRenderer() {
	return model.isBuiltInRenderer();
}

@Override
public TextureAtlasSprite getTexture() {
	// return defaultModel.getTexture();
	return model.getTexture();
}

@Override
public ItemCameraTransforms getItemCameraTransforms() {
	return model.getItemCameraTransforms();
}
}

 

This runs fine. My questions are:

 

Why does BakedQuad.getVertexData() return ints, and what do they mean?

The vertex data seems to be the same for every model looked up in handleBlockState():

 

[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:35]: Selected block=minecraft:sand[variant=sand]
[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 0, 1065353216, -8421505, 1058537800, 1046480159, 0, 0, 0, 0, -8421505, 1058537800, 1048574689, 0, 1065353216, 0, 0, -8421505, 1059061432, 1048574689, 0, 1065353216, 0, 1065353216, -8421505, 1059061432, 1046480159, 0]
[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 1065353216, 0, -1, 1058537800, 1046480159, 0, 0, 1065353216, 1065353216, -1, 1058537800, 1048574689, 0, 1065353216, 1065353216, 1065353216, -1, 1059061432, 1048574689, 0, 1065353216, 1065353216, 0, -1, 1059061432, 1046480159, 0]
[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [1065353216, 1065353216, 0, -3355444, 1058537800, 1046480159, 0, 1065353216, 0, 0, -3355444, 1058537800, 1048574689, 0, 0, 0, 0, -3355444, 1059061432, 1048574689, 0, 0, 1065353216, 0, -3355444, 1059061432, 1046480159, 0]
[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 1065353216, 1065353216, -3355444, 1058537800, 1046480159, 0, 0, 0, 1065353216, -3355444, 1058537800, 1048574689, 0, 1065353216, 0, 1065353216, -3355444, 1059061432, 1048574689, 0, 1065353216, 1065353216, 1065353216, -3355444, 1059061432, 1046480159, 0]
[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 1065353216, 0, -6710887, 1058537800, 1046480159, 0, 0, 0, 0, -6710887, 1058537800, 1048574689, 0, 0, 0, 1065353216, -6710887, 1059061432, 1048574689, 0, 0, 1065353216, 1065353216, -6710887, 1059061432, 1046480159, 0]
[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [1065353216, 1065353216, 1065353216, -6710887, 1058537800, 1046480159, 0, 1065353216, 0, 1065353216, -6710887, 1058537800, 1048574689, 0, 1065353216, 0, 0, -6710887, 1059061432, 1048574689, 0, 1065353216, 1065353216, 0, -6710887, 1059061432, 1046480159, 0]
[10:21:59] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getGeneralQuads:55]: []

{ds.plato.block.PropertySelectedBlock@15af3a9b=Optional.of(minecraft:dirt[snowy=false,variant=dirt])}
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:handleBlockState:35]: Selected block=minecraft:dirt[snowy=false,variant=dirt]
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 0, 1065353216, -8421505, 1048576655, 1044383007, 0, 0, 0, 0, -8421505, 1048576655, 1046477537, 0, 1065353216, 0, 0, -8421505, 1049623921, 1046477537, 0, 1065353216, 0, 1065353216, -8421505, 1049623921, 1044383007, 0]
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 1065353216, 0, -1, 1048576655, 1044383007, 0, 0, 1065353216, 1065353216, -1, 1048576655, 1046477537, 0, 1065353216, 1065353216, 1065353216, -1, 1049623921, 1046477537, 0, 1065353216, 1065353216, 0, -1, 1049623921, 1044383007, 0]
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [1065353216, 1065353216, 0, -3355444, 1048576655, 1044383007, 0, 1065353216, 0, 0, -3355444, 1048576655, 1046477537, 0, 0, 0, 0, -3355444, 1049623921, 1046477537, 0, 0, 1065353216, 0, -3355444, 1049623921, 1044383007, 0]
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 1065353216, 1065353216, -3355444, 1048576655, 1044383007, 0, 0, 0, 1065353216, -3355444, 1048576655, 1046477537, 0, 1065353216, 0, 1065353216, -3355444, 1049623921, 1046477537, 0, 1065353216, 1065353216, 1065353216, -3355444, 1049623921, 1044383007, 0]
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [0, 1065353216, 0, -6710887, 1048576655, 1044383007, 0, 0, 0, 0, -6710887, 1048576655, 1046477537, 0, 0, 0, 1065353216, -6710887, 1049623921, 1046477537, 0, 0, 1065353216, 1065353216, -6710887, 1049623921, 1044383007, 0]
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getFaceQuads:46]: [1065353216, 1065353216, 1065353216, -6710887, 1048576655, 1044383007, 0, 1065353216, 0, 1065353216, -6710887, 1048576655, 1046477537, 0, 1065353216, 0, 0, -6710887, 1049623921, 1046477537, 0, 1065353216, 1065353216, 0, -6710887, 1049623921, 1044383007, 0]
[10:22:06] [Client thread/INFO] [sTDOUT]: [ds.plato.block.BlockSelectedModel:getGeneralQuads:55]: []

 

 

Link to comment
Share on other sites

Ok, after looking closely at your excelent example, I've come up with this really simple solution which works ...almost.

 

package ds.plato.block;

import java.awt.Color;
import java.util.List;

import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.ISmartBlockModel;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;

public class BlockSelectedModel implements ISmartBlockModel {

public static ModelResourceLocation modelResourceLocation = new ModelResourceLocation("plato:blockSelected");
private IBakedModel defaultModel, model;
private IUnlistedProperty selectedBlockProperty;
private final int tint = Color.RED.getRed();

public BlockSelectedModel(IBakedModel defaultModel, PropertySelectedBlock selectedBlockProperty) {
	this.defaultModel = defaultModel;
	this.selectedBlockProperty = selectedBlockProperty;
}

@Override
public IBakedModel handleBlockState(IBlockState state) {
	assert IExtendedBlockState.class.isAssignableFrom(state.getClass());
	IBlockState s = ((IExtendedBlockState) state).getValue(selectedBlockProperty);
	model = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState(s);
	return this;
}

@Override
public List getFaceQuads(EnumFacing face) {
	List<BakedQuad> faceQuads = model.getFaceQuads(face);
	for (BakedQuad q : faceQuads) {
		q = new BakedQuad(tint(q.getVertexData()), 0, face);
	}
	return faceQuads;
}

@Override
public List getGeneralQuads() {
	List<BakedQuad> generalQuads = model.getGeneralQuads();
	for (BakedQuad q : generalQuads) {
		q = new BakedQuad(tint(q.getVertexData()), 0, q.getFace());
	}
	return generalQuads;
}

@Override
public boolean isAmbientOcclusion() {
	return model.isAmbientOcclusion();
}

@Override
public boolean isGui3d() {
	return model.isGui3d();
}

@Override
public boolean isBuiltInRenderer() {
	return model.isBuiltInRenderer();
}

@Override
public TextureAtlasSprite getTexture() {
	return model.getTexture();
}

@Override
public ItemCameraTransforms getItemCameraTransforms() {
	return model.getItemCameraTransforms();
}

// Private-----------------------------------------------------

private int[] tint(int[] vertexData) {
	//int[] vd = new int[vertexData.length];
	//System.arraycopy(vertexData, 0, vd, 0, vertexData.length);
	int[] vd = vertexData;
	vd[3] = tint;
	vd[10] = tint;
	vd[17] = tint;
	vd[24] = tint;
	return vd;
}

}

 

Just to recap, I am replacing the selected block with a new block that uses the model of the selected block. I modify to vertex data to tint the texture red. This works fine! :)

 

The only problem is that some, but not all, of the blocks of the same type as the selected block are also tinted red:

 

2015-05-12_17.04.26.png

 

(How do I insert an image? file://~/image.png?, i'm on ubuntu.)

 

If I return a copy of the new vertex data arrray as commented out in private method tint(), the problem goes away, but my block is not tinted.

 

Any help appreciated.

Link to comment
Share on other sites

Solved my problems. Works great.

 

package ds.plato.block;

import java.awt.Color;
import java.util.ArrayList;
import java.util.List;

import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.ISmartBlockModel;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;

public class BlockSelectedModel implements ISmartBlockModel {

public static ModelResourceLocation modelResourceLocation = new ModelResourceLocation("plato:blockSelected");
private IBakedModel defaultModel, model;
private IUnlistedProperty selectedBlockProperty;
private final int tint = Color.RED.getRed();

public BlockSelectedModel(IBakedModel defaultModel, PropertySelectedBlock selectedBlockProperty) {
	this.defaultModel = defaultModel;
	this.selectedBlockProperty = selectedBlockProperty;
}

@Override
public IBakedModel handleBlockState(IBlockState state) {
	assert IExtendedBlockState.class.isAssignableFrom(state.getClass());
	IBlockState s = ((IExtendedBlockState) state).getValue(selectedBlockProperty);
	model = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState(s);
	return this;
}

@Override
public List getFaceQuads(EnumFacing face) {
	List<BakedQuad> quads = new ArrayList<>();
	List<BakedQuad> faceQuads = model.getFaceQuads(face);
	for (BakedQuad q : faceQuads) {
		quads.add(new BakedQuad(tint(q.getVertexData()), 0, face));
	}
	return quads;
}

@Override
public List getGeneralQuads() {
	List<BakedQuad> quads = new ArrayList<>();
	List<BakedQuad> generalQuads = model.getGeneralQuads();
	for (BakedQuad q : generalQuads) {
		quads.add( new BakedQuad(tint(q.getVertexData()), 0, q.getFace()));
	}
	return quads;
}

@Override
public boolean isAmbientOcclusion() {
	return model.isAmbientOcclusion();
}

@Override
public boolean isGui3d() {
	return model.isGui3d();
}

@Override
public boolean isBuiltInRenderer() {
	return model.isBuiltInRenderer();
}

@Override
public TextureAtlasSprite getTexture() {
	return model.getTexture();
}

@Override
public ItemCameraTransforms getItemCameraTransforms() {
	return model.getItemCameraTransforms();
}

// Private-----------------------------------------------------

private int[] tint(int[] vertexData) {
	int[] vd = new int[vertexData.length];
	System.arraycopy(vertexData, 0, vd, 0, vertexData.length);
	vd[3] = tint;
	vd[10] = tint;
	vd[17] = tint;
	vd[24] = tint;
	return vd;
}

}

 

Thanks TGG!

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • ---- Minecraft Crash Report ---- // Daisy, daisy... Time: 2024-10-13 19:15:43 Description: Exception in server tick loop java.lang.NullPointerException: Cannot invoke "com.cobblemon.mod.common.api.conditional.RegistryLikeCondition.fits(Object, net.minecraft.class_2378)" because "condition" is null     at com.cobblemon.mod.common.api.spawning.condition.SpawningCondition.fits(SpawningCondition.java:85)     at com.cobblemon.mod.common.api.spawning.condition.AreaTypeSpawningCondition.fits(AreaTypeSpawningCondition.java:30)     at com.cobblemon.mod.common.api.spawning.condition.GroundedTypeSpawningCondition.fits(GroundedTypeSpawningCondition.java:28)     at com.cobblemon.mod.common.api.spawning.condition.GroundedTypeSpawningCondition.fits(GroundedTypeSpawningCondition.java:24)     at com.cobblemon.mod.common.api.spawning.condition.SpawningCondition.isSatisfiedBy(SpawningCondition.java:68)     at com.cobblemon.mod.common.api.spawning.detail.SpawnDetail.isSatisfiedBy(SpawnDetail.java:78)     at com.cobblemon.mod.common.api.spawning.spawner.Spawner$DefaultImpls.getMatchingSpawns(Spawner.java:42)     at com.cobblemon.mod.common.api.spawning.spawner.TickingSpawner.getMatchingSpawns(TickingSpawner.java:31)     at com.cobblemon.mod.common.api.spawning.selection.FlatContextWeightedSelector.getSelectionData(FlatContextWeightedSelector.java:79)     at com.cobblemon.mod.common.api.spawning.selection.FlatContextWeightedSelector.select(FlatContextWeightedSelector.java:106)     at com.cobblemon.mod.common.api.spawning.spawner.AreaSpawner.run(AreaSpawner.java:94)     at com.cobblemon.mod.common.api.spawning.spawner.TickingSpawner.tick(TickingSpawner.java:71)     at com.cobblemon.mod.common.api.spawning.SpawnerManager.onServerTick(SpawnerManager.java:58)     at com.cobblemon.mod.common.events.ServerTickHandler.onTick(ServerTickHandler.java:20)     at com.cobblemon.mod.common.Cobblemon$initialize$7.invoke(Cobblemon.java:368)     at com.cobblemon.mod.common.Cobblemon$initialize$7.invoke(Cobblemon.java:368)     at com.cobblemon.mod.common.api.reactive.ObservableSubscription.handle(ObservableSubscription.java:16)     at com.cobblemon.mod.common.api.reactive.SimpleObservable.emit(SimpleObservable.java:39)     at com.cobblemon.mod.fabric.CobblemonFabric.initialize$lambda$8(CobblemonFabric.kt:440)     at net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents.lambda$static$2(ServerTickEvents.java:43)     at net.minecraft.server.MinecraftServer.handler$cka002$fabric-lifecycle-events-v1$onEndTick(MinecraftServer.java:6862)     at net.minecraft.server.MinecraftServer.method_3748(MinecraftServer.java:847)     at net.minecraft.server.MinecraftServer.method_29741(MinecraftServer.java:671)     at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:265)     at java.base/java.lang.Thread.run(Thread.java:1583) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Cobblemon -- Details:     Version: 1.5.2     Is Snapshot: false     Git Commit: df8f078 (https://gitlab.com/cable-mc/cobblemon/-/commit/df8f078d13702ab9a000438910b822ceffbb2248)     Branch: HEAD -- System Details -- Details:     Minecraft Version: 1.20.1     Minecraft Version ID: 1.20.1     Operating System: Linux (amd64) version 6.5.0-41-generic     Java Version: 21.0.4, Amazon.com Inc.     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Amazon.com Inc.     Memory: 3487078768 bytes (3325 MiB) / 5360320512 bytes (5112 MiB) up to 11567890432 bytes (11032 MiB)     CPUs: 2     Processor Vendor: AuthenticAMD     Processor Name: AMD Ryzen 7 5800X 8-Core Processor     Identifier: AuthenticAMD Family 25 Model 33 Stepping 0     Microarchitecture: Zen 3     Frequency (GHz): -0.00     Number of physical packages: 1     Number of physical CPUs: 8     Number of logical CPUs: 16     Graphics card #0 name: unknown     Graphics card #0 vendor: unknown     Graphics card #0 VRAM (MB): 0.00     Graphics card #0 deviceId: unknown     Graphics card #0 versionInfo: unknown     Virtual memory max (MB): 68443.22     Virtual memory used (MB): 51550.91     Swap memory total (MB): 4096.00     Swap memory used (MB): 793.75     JVM Flags: 2 total; -Xms128M -XX:MaxRAMPercentage=95.0     Fabric Mods:          a_man_with_plushies: A Man With Plushies 4.2.0         alloy_forgery: Alloy Forgery 2.1.2+1.20         almostunified: AlmostUnified 1.20.1-0.9.4         alternate-current: Alternate Current 1.9.0         amendments: Amendments 1.20-1.2.11         another_furniture: Another Furniture 1.20.1-3.0.1         appleskin: AppleSkin 2.5.1+mc1.20         architectury: Architectury 9.2.14         artifacts: Artifacts 9.5.13             cardinal-components-base: Cardinal Components API (base) 5.2.2             cardinal-components-entity: Cardinal Components API (entities) 5.2.2             expandability: ExpandAbility 9.0.4             step-height-entity-attribute: Step Height Entity Attribute 1.2.0         athena: Athena 3.1.2         attributefix: AttributeFix 21.0.4         automobility: Automobility 0.4.2+1.20.1-fabric             jsonem: JsonEM 0.2.1+1.20         bakery: [Let's Do] Bakery 1.1.15         balm-fabric: Balm 7.3.9             kuma_api: KumaAPI 20.1.8         barteringstation: Bartering Station 8.0.0         bbb: Building But Better 1.20.1-fabric-1.0.2         bcg_smp: BCG_SMP 1.0.1         bcgmusic: BCG Music 1.1.0-1.20.1         bcgutil: BCG Util 1.0.5         bclib: BCLib 3.0.14             wunderlib: WunderLib 1.1.5         beautify: Beautify 1.2.0+1.20.1         bedbenefits: BedBenefits 13.0.3         beekeeperhut: Friends&Foes - Beekeeper Hut 2.0.1         better_climbing: Better Climbing 3         bettercombat: Better Combat 1.8.6+1.20.1         betterdungeons: YUNG's Better Dungeons 1.20-Fabric-4.0.4             org_reflections_reflections: reflections 0.10.2         betterend: Better End 4.0.11         betterendisland: YUNG's Better End Island 1.20-Fabric-2.0.6         bettermineshafts: YUNG's Better Mineshafts 1.20-Fabric-4.0.4         betteroceanmonuments: YUNG's Better Ocean Monuments 1.20-Fabric-3.0.4         betterstrongholds: YUNG's Better Strongholds 1.20-Fabric-4.0.3         bitsandchisels: BitsAndChisels 2.7.3         blahaj: Blåhaj 0.3.2         boatbreakfix: Boat Break Fix 1.0.2         bookshelf: Bookshelf 20.2.13         brewery: [Let's Do] Brewery 1.1.9         bwncr: Bad Wither No Cookie Reloaded 3.17.0         candlelight: [Let's Do] Candlelight 1.2.13         cardinal-components: Cardinal Components API 5.2.2             cardinal-components-block: Cardinal Components API (blocks) 5.2.2             cardinal-components-chunk: Cardinal Components API (chunks) 5.2.2             cardinal-components-item: Cardinal Components API (items) 5.2.2             cardinal-components-level: Cardinal Components API (world saves) 5.2.2             cardinal-components-scoreboard: Cardinal Components API (scoreboard) 5.2.2             cardinal-components-world: Cardinal Components API (worlds) 5.2.2         carryon: Carry On 2.1.2.7         charmofundying: Charm of Undying 6.5.0+1.20.1         chefsdelight: Chefs Delight 1.0.3-fabric-1.20.1         chimes: Chimes 2.0.1         chipped: Chipped 3.0.6         clickadv: Clickable Advancements Mod 1.20.1-3.8         cloth-config: Cloth Config v11 11.1.136             cloth-basic-math: cloth-basic-math 0.6.1         clumps: Clumps 12.0.0.4         cobbledex: Cobbledex 1.1.0         cobbledollars: CobbleDollars 1.5.1+1.20.1         cobblemon: Cobblemon 1.5.2+1.20.1         cobblemon-ui-tweaks: Cobblemon UI Tweaks 1.0.6         cobblemon_capturexp: Cobblemon Capture EXP 1.5-fabric-1.0.1         cobblemon_counter: Cobblemon Counter 1.5-fabric-1.2.0         cobblemon_quests: Cobblemon Quests 1.1.11         cobblemon_spawn_notification: Cobblemon Spawn Notification 1.5-fabric-1.1.0         cobblemonbreakouts: Cobblemon Outbreaks fabric-1.1.4-1.20.1         cobblemontrainers: CobblemonTrainers 1.1.11+1.5.2         cobblepedia: Cobblepedia 0.6.8         cobbreeding: Cobbreeding 1.7.2         collective: Collective 7.84         comforts: Comforts 6.4.0+1.20.1         commonnetworking: Common Network 1.0.5-1.20.1         compact_storage: CompactStorage 6.0.1.64         connectivity: Connectivity Mod 1.20.1-5.8         convenientdecor: Convenient Decor 0.4.3             omega-config: OmegaConfig 1.4.0+1.20.1         copycats: Create: Copycats+ 2.1.4+mc.1.20.1-fabric         coroutil: CoroUtil 1.20.1-1.3.7         crawl: Crawl 0.12.0         create: Create 0.5.1-f-build.1417+mc1.20.1             com_google_code_findbugs_jsr305: jsr305 3.0.2             milk: Milk Lib 1.2.60                 dripstone_fluid_lib: Dripstone Fluid Lib 3.0.2             porting_lib_brewing: Porting Lib Brewing 2.3.2+1.20.1             porting_lib_client_events: Porting Lib Client Events 2.3.2+1.20.1             porting_lib_tags: Porting Lib Tags 3.0             registrate-fabric: Registrate for Fabric 1.3.62-MC1.20.1         create_cobblemon: Create: Cobblemon Industrialized 0.4         create_enchantment_industry: Create Enchantment Industry 1.2.16             create_dragon_lib: Create Dragon Lib 1.4.2         createaddition: Create Crafts & Additions 1.2.4         createbigcannons: Create Big Cannons 5.5.1+mc.1.20.1-fabric             ritchiesprojectilelib: Ritchie's Projectile Library 2.0.0-dev+mc.1.20.1-fabric-build.182                 porting_lib_utility: Porting Lib Utility 2.1.1127+1.20                     porting_lib_gametest: Porting Lib GameTest 2.1.1127+1.20         createdeco: Create Deco 2.0.2-1.20.1-fabric         creeperoverhaul: Creeper Overhaul 3.0.2         cupboard: cupboard 1.20.1-2.7         customcursorcomm: CustomCursorComm 1.2.0         dailyshop: Daily Shop 1.0.2         darkutils: DarkUtilities 17.0.5         debugify: Debugify 1.20.1+2.0         design_decor: Create: Design n' Decor 0.4.0b_fabric+1.20.1         deuf_refabricated: DEUF Refabricated 1.1.0         diagonalfences: Diagonal Fences 8.1.4         diagonalwalls: Diagonal Walls 8.0.3             diagonalblocks: Diagonal Blocks 8.0.5         diagonalwindows: Diagonal Windows 8.1.4         dimensionalsyncfixes: DimensionalSyncFixes 1.20.1-0.0.2         doapi: [Let's Do] API 1.2.15             terraform-wood-api-v1: Terraform Wood API (v1) 7.0.1         dragonfight: Dragonfight Mod 1.20.1-4.6         drippyloadingscreen: Drippy Loading Screen 3.0.2         e4mc_minecraft: e4mc 5.2.1             folk_sisby_kaleido-config: kaleido-config 0.3.1+1.3.1         easy_npc: Easy NPC 5.6.0         easyanvils: Easy Anvils 8.0.2         easymagic: Easy Magic 8.0.1         elytraslot: Elytra Slot 6.4.4+1.20.1             mixinsquared: MixinSquared 0.1.2-beta.6         emi: EMI 1.1.14+1.20.1+fabric         emi_letsdo_compat: emi-letsdo-compat 1.3         endermanoverhaul: Enderman Overhaul 1.0.4         endrem: End Remastered 5.2.4         ends_delight: End's Delight 2.1         entityculling: EntityCulling 1.7.0         everycomp: Every Compat 1.20-2.6.76             porting_lib_attributes: Porting Lib Attributes 2.3.4+1.20.1             porting_lib_common: Porting Lib Common 2.3.4+1.20.1             porting_lib_entity: Porting Lib Entity 2.3.4+1.20.1             porting_lib_extensions: Porting Lib Extensions 2.3.4+1.20.1             porting_lib_model_generators: Porting Lib Model Generators 2.3.4+1.20.1                 porting_lib_data: Porting Lib Data 2.3.4+1.20.1                 porting_lib_model_materials: Porting Lib Model Materials 2.3.4+1.20.1             porting_lib_model_loader: Porting Lib Model Loader 2.3.4+1.20.1             porting_lib_models: Porting Lib Models 2.3.4+1.20.1             porting_lib_obj_loader: Porting Lib Obj Loader 2.3.4+1.20.1             porting_lib_transfer: Porting Lib Transfer 2.3.4+1.20.1         expandeddelight: Expanded Delight 0.3.2         explorerscompass: Explorer's Compass 1.20.1-2.2.3-fabric         exposure: Exposure 1.7.7         extendedgears: Extended Cogwheels 2.1.1-1.20.1-0.5.1.f-fabric         fabric-api: Fabric API 0.92.2+1.20.1             fabric-api-base: Fabric API Base 0.4.31+1802ada577             fabric-api-lookup-api-v1: Fabric API Lookup API (v1) 1.6.36+1802ada577             fabric-biome-api-v1: Fabric Biome API (v1) 13.0.13+1802ada577             fabric-block-api-v1: Fabric Block API (v1) 1.0.11+1802ada577             fabric-block-view-api-v2: Fabric BlockView API (v2) 1.0.1+1802ada577             fabric-command-api-v1: Fabric Command API (v1) 1.2.34+f71b366f77             fabric-command-api-v2: Fabric Command API (v2) 2.2.13+1802ada577             fabric-commands-v0: Fabric Commands (v0) 0.2.51+df3654b377             fabric-containers-v0: Fabric Containers (v0) 0.1.64+df3654b377             fabric-content-registries-v0: Fabric Content Registries (v0) 4.0.11+1802ada577             fabric-convention-tags-v1: Fabric Convention Tags 1.5.5+1802ada577             fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.2.19+1802ada577             fabric-data-attachment-api-v1: Fabric Data Attachment API (v1) 1.0.0+de0fd6d177             fabric-data-generation-api-v1: Fabric Data Generation API (v1) 12.3.4+1802ada577             fabric-dimensions-v1: Fabric Dimensions API (v1) 2.1.54+1802ada577             fabric-entity-events-v1: Fabric Entity Events (v1) 1.6.0+1c78457f77             fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.6.2+1802ada577             fabric-events-lifecycle-v0: Fabric Events Lifecycle (v0) 0.2.63+df3654b377             fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.40+1802ada577             fabric-item-api-v1: Fabric Item API (v1) 2.1.28+1802ada577             fabric-item-group-api-v1: Fabric Item Group API (v1) 4.0.12+1802ada577             fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 2.2.22+1802ada577             fabric-loot-api-v2: Fabric Loot API (v2) 1.2.1+1802ada577             fabric-loot-tables-v1: Fabric Loot Tables (v1) 1.1.45+9e7660c677             fabric-message-api-v1: Fabric Message API (v1) 5.1.9+1802ada577             fabric-mining-level-api-v1: Fabric Mining Level API (v1) 2.1.50+1802ada577             fabric-networking-api-v1: Fabric Networking API (v1) 1.3.11+1802ada577             fabric-networking-v0: Fabric Networking (v0) 0.3.51+df3654b377             fabric-object-builder-api-v1: Fabric Object Builder API (v1) 11.1.3+1802ada577             fabric-particles-v1: Fabric Particles (v1) 1.1.2+1802ada577             fabric-recipe-api-v1: Fabric Recipe API (v1) 1.0.21+1802ada577             fabric-registry-sync-v0: Fabric Registry Sync (v0) 2.3.3+1802ada577             fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.3.37+92a0d36777             fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 3.0.28+1802ada577             fabric-resource-conditions-api-v1: Fabric Resource Conditions API (v1) 2.3.8+1802ada577             fabric-resource-loader-v0: Fabric Resource Loader (v0) 0.11.10+1802ada577             fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.3.30+1802ada577             fabric-transfer-api-v1: Fabric Transfer API (v1) 3.3.5+8dd72ea377             fabric-transitive-access-wideners-v1: Fabric Transitive Access Wideners (v1) 4.3.1+1802ada577         fabric-language-kotlin: Fabric Language Kotlin 1.12.2+kotlin.2.0.20             org_jetbrains_kotlin_kotlin-reflect: kotlin-reflect 2.0.20             org_jetbrains_kotlin_kotlin-stdlib: kotlin-stdlib 2.0.20             org_jetbrains_kotlin_kotlin-stdlib-jdk7: kotlin-stdlib-jdk7 2.0.20             org_jetbrains_kotlin_kotlin-stdlib-jdk8: kotlin-stdlib-jdk8 2.0.20             org_jetbrains_kotlinx_atomicfu-jvm: atomicfu-jvm 0.25.0             org_jetbrains_kotlinx_kotlinx-coroutines-core-jvm: kotlinx-coroutines-core-jvm 1.9.0             org_jetbrains_kotlinx_kotlinx-coroutines-jdk8: kotlinx-coroutines-jdk8 1.9.0             org_jetbrains_kotlinx_kotlinx-datetime-jvm: kotlinx-datetime-jvm 0.6.1             org_jetbrains_kotlinx_kotlinx-io-bytestring-jvm: kotlinx-io-bytestring-jvm 0.5.4             org_jetbrains_kotlinx_kotlinx-io-core-jvm: kotlinx-io-core-jvm 0.5.4             org_jetbrains_kotlinx_kotlinx-serialization-cbor-jvm: kotlinx-serialization-cbor-jvm 1.7.2             org_jetbrains_kotlinx_kotlinx-serialization-core-jvm: kotlinx-serialization-core-jvm 1.7.2             org_jetbrains_kotlinx_kotlinx-serialization-json-jvm: kotlinx-serialization-json-jvm 1.7.2         fabricloader: Fabric Loader 0.16.5             mixinextras: MixinExtras 0.4.1         fancymenu: FancyMenu 3.2.3             com_github_keksuccino_japng: japng 0.5.3             com_github_rtyley_animated-gif-lib-for-java: animated-gif-lib-for-java animated-gif-lib-1.7         farmersdelight: Farmer's Delight 1.20.1-2.1.6+refabricated             mm: Manningham Mills 2.3             porting_lib_accessors: Porting Lib Accessors 2.3.4+1.20.1             porting_lib_base: Porting Lib Base 2.3.4+1.20.1                 porting_lib_core: Porting Lib Core 2.3.4+1.20.1                 porting_lib_fluids: Porting Lib Fluids 2.3.4+1.20.1                 porting_lib_mixin_extensions: Porting Lib Mixin Extensions 2.3.4+1.20.1             porting_lib_config: Porting Lib Config 2.3.4+1.20.1             porting_lib_lazy_registration: Porting Lib Lazy Register 2.3.4+1.20.1             porting_lib_loot: Porting Lib Loot 2.3.4+1.20.1             porting_lib_networking: Porting Lib Networking 2.3.4+1.20.1             porting_lib_recipe_book_categories: Porting Lib Recipe Book Categories 2.3.4+1.20.1             porting_lib_tool_actions: Porting Lib Tool Actions 2.3.4+1.20.1         farsight: Farsight Mod 1.20.1-4.3             org_jctools_jctools-core: jctools-core 4.0.1         faster-random: Faster Random 5.1.0         fastpaintings: Fast Paintings 1.20-1.2.7         ferritecore: FerriteCore 6.0.1         fightorflight: Cobblemon Fight or Flight Fabric 0.5.0         flowerymooblooms: Friends&Foes - Flowery Mooblooms 2.0.2         forgeconfigapiport: Forge Config API Port 8.0.0         framework: Framework 0.6.16             org_javassist_javassist: javassist 3.29.2-GA         friendsandfoes: Friends & Foes 3.0.3         ftbchunks: FTB Chunks 2001.3.1         ftbessentials: FTB Essentials 2001.2.2         ftblibrary: FTB Library 2001.2.4         ftbquests: FTB Quests 2001.4.8             team_reborn_energy: Energy 3.0.0         ftbteams: FTB Teams 2001.3.0         ftbultimine: FTB Ultimine 2001.1.5         ftbxmodcompat: FTB XMod Compat 2.1.1         fwaystones: Fabric Waystones 3.3.2+mc1.20.1         fzzy_config: Fzzy Config 0.5.0+1.20.1             blue_endless_jankson: jankson 1.2.3             fabric-permissions-api-v0: fabric-permissions-api 0.3.1             net_peanuuutz_tomlkt_tomlkt-jvm: tomlkt-jvm 0.3.7         geckolib: GeckoLib 4 4.4.9             com_eliotlash_mclib_mclib: mclib 20         getittogetherdrops: Get It Together, Drops! fabric-1.20-1.3.1         globalpacks: Global Data- & Resourcepacks 1.16.1_fabric         go-fish: Go Fish 1.6.3+1.20.1         gpumemleakfix: Gpu memory leak fix mod 1.20.1-1.8         grindenchantments: Grind Enchantments 3.1.2+1.20             codec-config-api: Codec Config API 1.0.2+1.19.3         guarding: Guarding 2.4.0             scribe: Scribe 1.20.1-0.5.0-alpha         guardvillagers: GuardVillagers 2.0.9-1.20.1         gymbadges: GymBadges 1.0         hamsters: Hamsters fabric-1.0.3-1.20.1         handcrafted: Handcrafted 3.0.6         healingcampfire: Healing Campfire 6.1         herbalbrews: [Let's Do] HerbalBrews 1.0.8.1         herdspanic: Herds Panic 1.1.0         horseexpert: Horse Expert 8.1.1         icarus: Icarus 2.10.0         idwtialsimmoedm: idwtialsimmoedm 0.3.1+1.20         illagerinvasion: Illager Invasion 8.0.6             extensibleenums: Extensible Enums 7.0.1         immersive_aircraft: Immersive Aircraft 1.1.2+1.20.1             org_mariuszgromada_math_mathparser_org-mxparser: MathParser.org-mXparser 5.2.1         immersive_paintings: Immersive Paintings 0.6.7+1.20.1         incantationem: Incantationem 1.2.1+1.20         incendium: Incendium 5.3.5         item_obliterator: Item Obliterator 2.3.0         itemcollectors: Item Collectors 1.1.10         itemfilters: Item Filters 2001.1.0-build.59         jade: Jade 11.11.0+fabric         java: OpenJDK 64-Bit Server VM 21         jmi: JourneyMapIntegration 1.20.1-0.14-48         journeymap: Journeymap 5.10.2             journeymap-api-fabric: JourneyMap API 1.20-1.9-fabric-SNAPSHOT         jumpoverfences: Jump Over Fences 1.3.1         konkrete: Konkrete 1.8.1         leavesbegone: Leaves Be Gone 8.0.0         letmedespawn: Let Me Despawn 1.3.2b         lithium: Lithium 0.11.2         lmft: Load My F***ing Tags 1.0.2+1.20         logbegone: Log Begone 1.0.8         lootintegrations: Loot integration Mod 1.20.1-3.7         lootr: Lootr 0.7.34.84         luphieclutteredmod: Cluttered 2.1.0+1.20.1         magnumtorch: Magnum Torch 8.0.2         man_of_many_planes: Man of Many Planes 0.2.0+1.20.1         mavapi: More Axolotl Variants API 1.1.4         mavm: More Axolotl Variants Mod 1.2.6         mcwbridges: Macaw's Bridges 3.0.0         mcwdoors: Macaw's Doors 1.1.1         mcwfences: Macaw's Fences and Walls 1.1.2         mcwfurnitures: Macaw's Furniture 3.3.0         mcwholidays: Macaw's Holidays 1.1.0         mcwlights: Macaw's Lights and Lamps 1.1.1         mcwpaths: Macaw's Paths and Pavings 1.0.5         mcwroofs: Macaw's Roofs 2.3.1         mcwtrpdoors: Macaw's Trapdoors 1.1.3         mcwwindows: Macaw's Windows 2.3.0         megamons: Ascension Megamons 1.5.0+1.20.1-forge+fabric-75b66fa         melody: Melody 1.0.3         memoryleakfix: Memory Leak Fix 1.1.2         mighty_mail: Mighty Mail 1.0.14         mine-spawners: mine-spawners 1.0         minecraft: Minecraft 1.20.1         mixintrace: MixinTrace 1.1.1+1.17         modernfix: ModernFix 5.19.4+mc1.20.1         moonlight: Moonlight 1.20-2.13.2         more-axolotl: More Axolotl 2.0.1         mr_remove_terralithintromessage: Remove Terralith Intro Message 1.0         mss: Moog's Soaring Structures 1.1.2-1.20-fabric         mvs: Moog's Voyager Structures 4.1.4-1.20-fabric         mythicmetals: Mythic Metals 0.19.9+1.20.1             additionalentityattributes: Additional Entity Attributes 1.7.3+1.20.0             common-protection-api: Common Protection API 1.0.0             reach-entity-attributes: Reach Entity Attributes 2.4.0         mythsandlegends: Myths and Legends 1.5-HOTFIX             com_moandjiezana_toml_toml4j: toml4j 0.7.2         naturalist: Naturalist 4.0.3         naturescompass: Nature's Compass 1.20.1-2.2.3-fabric         necronomicon: Necronomicon 1.6.0         neruina: Neruina 2.1.2             com_fasterxml_jackson_core_jackson-annotations: jackson-annotations 2.17.0             com_fasterxml_jackson_core_jackson-core: jackson-core 2.17.0             com_fasterxml_jackson_core_jackson-databind: jackson-databind 2.17.0             org_apache_maven_maven-artifact: maven-artifact 3.8.1             org_kohsuke_github-api: github-api 1.318         netherportalfix: NetherPortalFix 13.0.1         nightlights: Night Lights 1.1         nochatreports: No Chat Reports 1.20.1-v2.2.2         notenoughanimations: NotEnoughAnimations 1.7.6         oceansdelight: Ocean's Delight fdrf-fabric-1.0.2-1.20         owo: oωo 0.11.2+1.20         packetfixer: Packet Fixer 1.4.2         patchouli: Patchouli 1.20.1-84-FABRIC             fiber: fiber 0.23.0-2         pehkui: Pehkui 3.8.3+1.14.4-1.21             kanos_config: Kanos Config 0.4.1+1.14.4-1.19.4         permanentsponges: Permanent Sponges 8.1.2         pigpen: PigPen 15.0.2         ping-wheel: Ping Wheel 1.9.1         player-animator: Player Animator 1.0.2-rc1+1.20         plushies: Plushie Mod 1.4.0         polymorph: Polymorph 0.49.7+1.20.1             spectrelib: SpectreLib 0.13.17+1.20.1         puzzleslib: Puzzles Lib 8.1.23             puzzlesaccessapi: Puzzles Access Api 8.0.7         railways: Create: Steam 'n' Rails 1.6.4+fabric-mc1.20.1         reacharound: Reacharound 1.3.0         recipeessentials: recipeessentials Mod 1.20.1-3.6         resourcefulconfig: Resourcefulconfig 2.1.2         resourcefullib: Resourceful Lib 2.1.29             com_teamresourceful_bytecodecs: bytecodecs 1.0.2             com_teamresourceful_yabn: yabn 1.0.3         ribbits: Ribbits 1.20.1-Fabric-3.0.0         runelic: Runelic 18.0.2         seasons: Fabric Seasons 2.3+1.20         seasonsdelightcompat: Fabric Seasons: Delight Compat 1.0-1.3.9         seasonsterralithcompat: Fabric Seasons: Terralith Compat 1.0-2.3.7         sellingbin: Selling Bin 1.0.4         serverredirect: Server Redirect 1.4.5         shadertoggle: Shader Toggle 1.0         simpletms: Cobblemon: Simple TM's 1.1.2         simplyswords: Simply Swords 1.56.0-1.20.1         sliceanddice: Create Slice & Dice 3.3.1         smallships: Small Ships 2.0.0-b1.4         spark: spark 1.10.53         spiceoffabric: Spice of Fabric 1.6.2+mc1.20.1             capsaicin: Capsaicin 1.3.3+mc1.20.1             tweed4_annotated: tweed4_annotated 1.3.1+mc1.20-pre1             tweed4_base: tweed4_base 1.7.1+mc1.20-pre1             tweed4_data: tweed4_data 1.2.1+mc1.20-pre1             tweed4_data_hjson: tweed4_data_hjson 1.1.1+mc1.20-pre1             tweed4_tailor_lang_json_descriptions: tweed4_tailor_lang_json_descriptions 1.1.0+mc1.20-pre1         stacc: Stacc 1.7.0         starterkit: Starter Kit 7.1         strawstatues: Straw Statues 8.0.3             puzzlesapi: Puzzles Api 8.1.4         structory: Structory 1.3.5         structory_towers: Structory: Towers 1.0.7         structureessentials: Structure Essentials Mod 1.20.1-3.4         supermartijn642configlib: SuperMartijn642's Config Lib 1.1.8+a         supermartijn642corelib: SuperMartijn642's Core Lib 1.1.17+a         supplementaries: Supplementaries 1.20-2.8.17         suppsquared: Supplementaries Squared 1.20-1.1.15         terrablender: TerraBlender 3.0.1.7             com_electronwill_night-config_core: core 3.6.7             com_electronwill_night-config_toml: toml 3.6.7         terralith: Terralith 2.5.4         thiccpackets: Extra Thicc Packets 1.17-1.19+         things: Things 0.3.3+1.20             lavender: Lavender 0.1.0-pre.18+1.20                 lavender-md: lavender-md 0.1.0-pre.3+1.20                 lavender-md-owo-ui: lavender-md-owo-ui 0.1.0-pre.3+1.20         toms_storage: Tom's Simple Storage Mod 1.6.8         toolstats: ToolStats 16.0.9         trade_cycling: Trade Cycling 1.20.1-1.0.7         tradingpost: Trading Post 8.0.2         trashcans: Trash Cans 1.0.18         travelersbackpack: Traveler's Backpack 9.1.17         trinkets: Trinkets 3.7.2         tutorialmod: Fullers Pokecenters 1.0.0             structurized-reborn: Structurized Reborn 1.20.1-01         ubesdelight: Ube's Delight 0.2.0             midnightlib: MidnightLib 1.4.1             porting_lib_registries: Porting Lib Registries 2.3.4+1.20.1         universal_shops: Universal Shops 1.3.2+1.20.1             common-economy-api: Common Economy API 1.1.1             placeholder-api: Placeholder API 2.1.1+1.20             polymer-core: Polymer (Core) 0.5.3+1.20.1                 polymer-networking: Polymer (Networking) 0.5.3+1.20.1                 polymer-registry-sync-manipulator: Polymer (Registry Sync Manipulator) 0.5.3+1.20.1             polymer-resource-pack: Polymer (Resource Pack) 0.5.3+1.20.1                 polymer-common: Polymer (Common) 0.5.3+1.20.1             polymer-virtual-entity: Polymer (Virtual Entity) 0.5.3+1.20.1             server_translations_api: Server Translations API 2.0.0+1.20                 packet_tweaker: Packet Tweaker 0.4.0+1.19.4             sgui: sgui 1.2.2+1.20         vanityslots: Vanity Slots 1.2.9         villagernames: Villager Names 8.1         vinery: [Let's Do] Vinery 1.4.28         visualworkbench: Visual Workbench 8.0.0         voicechat: Simple Voice Chat 1.20.1-2.5.23         wands: Building Wands 2.6.9-release         watut: What Are They Up To 1.20.1-1.1.3         xercamusic: Music Maker Mod fabric-1.20.1-1.0.2         xercapaint: Joy of Painting fabric-1.20.1-1.0.1         yet_another_config_lib_v3: YetAnotherConfigLib 3.5.0+1.20.1-fabric             com_twelvemonkeys_common_common-image: common-image 3.10.0             com_twelvemonkeys_common_common-io: common-io 3.10.0             com_twelvemonkeys_common_common-lang: common-lang 3.10.0             com_twelvemonkeys_imageio_imageio-core: imageio-core 3.10.0             com_twelvemonkeys_imageio_imageio-metadata: imageio-metadata 3.10.0             com_twelvemonkeys_imageio_imageio-webp: imageio-webp 3.10.0             org_quiltmc_parsers_gson: gson 0.2.1             org_quiltmc_parsers_json: json 0.2.1         yigd: You're in Grave Danger 2.0.9             libgui: LibGui 8.1.1+1.20.1                 jankson: Jankson 6.0.0+j1.2.3                 libninepatch: LibNinePatch 1.2.0         yosbr: YOSBR 0.1.2         ysns: You Shall Not Spawn 2.0.1         yungsapi: YUNG's API 1.20-Fabric-4.0.6         yungsextras: YUNG's Extras 1.20-Fabric-4.0.3     Server Running: true     Player Count: 3 / 20; [class_3222['TreverForever'/674, l='ServerLevel[world]', x=-524.99, y=124.62, z=-103.03], class_3222['Shadowknight3420'/675, l='ServerLevel[world]', x=-180.57, y=65.48, z=216.34], class_3222['XThatSamuraiGuyX'/1223, l='ServerLevel[world]', x=-78.28, y=65.00, z=220.26]]     Data Packs: vanilla, Everycomp Generated Pack, Supplementaries Generated Pack, Suppsquared Generated Pack, fabric, file/AlphabetSoup-v2.1, file/AshiMons_ver1.3, file/BCG Cobblemon Loot, file/BCG Datapack, file/BCG x AllTheMons 1.1.0, file/Cobblemon Village, file/Genomons [1.5.1], file/HiddenMons [Cobblemon] v0.5.3, file/Kale's Collection [v1.7], file/LackingMons-ReleaseCanditate-1, file/MissingMon_v3.0 [METALIC MADNESS], file/NotSoCobblemon, file/PigeonPack, file/Project Eevolve Data (incompatible), file/SaltMons v2.0, file/Vivillon Pride Patterns v1.0, file/Wavimons1.1, file/cobble_cats, file/diance, file/CobblemonLoot-v1.1.1, file/CobblemonPokeLoot 1.5, file/Legendary Structures v1.1.1, file/Poké Costume [2.0], file/Pokémon Fishing v1.1.4 [1.20.1-v1.4+], file/MythsandLegends-Datapack-v1.0.2     Enabled Feature Flags: minecraft:vanilla     World Generation: Stable     Is Modded: Definitely; Server brand changed to 'fabric'     Type: Dedicated Server (map_server.txt)
    • I am following a tutorial for modding minecraft 1.20.1, and while running the mod with the minecraft of the idea, no errors was present but, when I switched to real minecraft, it started to want a default constructor "public ZeroToAutomation()" instead of the one recomended by the video "public ZeroToAutomation(FMLJavaModLoadingContext context) {...}", and I can't use the default constructor because I need the FMLJavaModLoadingContext to register the blocks and items.   The problem is at: "net/myself/zerotoautomation/ZeroToAutomation.java" the file contains the default constructor, "Logger"s, and the code for the mod the defaut constructor was added after an error requesting it the Loggers was used to see which methods/constructors was used by the Launcher   things that I tried to fix the issue: remove the default constructor, but an error appeared "net.myself.zerotoautomation.ZeroToAutomation.<init>()", and nothing else on the class runs adding an "public static void init()" method, but it changed nothing   The mod files: https://github.com/Matwaua/Zero_To_Automation/tree/not-finished
    • It is an issue/conflict with distanthorizons
    • I have been trying to combat this issue between oculus and embeddium and to no avail... I have already tried a few online tutorials on how to get this working but it doesn't work at all. https://pastebin.com/geQgifjc
  • Topics

×
×
  • Create New...

Important Information

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