Jump to content

[1.7.10][SOLVED]Custom Rendered Block rotation and with hitbox


Wyverndoes

Recommended Posts

So, I made custom rendered block.

When I try to make it rotate with this :

 

@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack){
	if(entity == null){
		return;
	}
	TileEntityMaP tile = (TileEntityMaP)world.getTileEntity(x, y, z);
	tile.direction = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F/360) + 0.5D) & 3;

 

it works fine, but after I relog directions aren't saved.

I think NBT tags are needed but I need help with that.

this model isn't centered so it's hitbox stays same even if rotated ._.

I've tried using AABBs but it doesn't work... Any ideas?

Thing I love most in this forum, is that when you ask for help, moderators don't give you ready code, you have to figure it out yourself.

Link to comment
Share on other sites

public static AxisAlignedBB getRotatedInstance(AxisAlignedBB def, int rotation)
{
def = def.copy();
def.offset(-0.5, -0.5, -0.5);
switch (rotation) {
case 2 : def = AxisAlignedBB.getBoundingBox(def.minZ, def.minY, def.maxX * -1, def.maxZ, def.maxY, def.minX * -1);
case 3 : def = AxisAlignedBB.getBoundingBox(def.maxX * -1, def.minY, def.maxZ * -1, def.minX * -1, def.maxY, def.minZ * -1);
case 1 : def = AxisAlignedBB.getBoundingBox(def.maxZ * -1, def.minY, def.minX, def.minZ * -1, def.maxY, def.maxX);
}
def.offset(0.5, 0.5, 0.5); 
return def;
}

Of course X,Y,Z coordinates were changed(below 1.0F)

Thing I love most in this forum, is that when you ask for help, moderators don't give you ready code, you have to figure it out yourself.

Link to comment
Share on other sites

And... where do you call this method?

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

package com.joey.renderer;

import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;

import com.joey.Main.lib.RefStrings;
import com.joey.model.ModelMaP;

public class RenderMaP extends TileEntitySpecialRenderer{

private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":" + "textures/model/MaP.png");

private ModelMaP model;

public RenderMaP(){
	this.model = new ModelMaP();
}
public static AxisAlignedBB getRotatedInstance(AxisAlignedBB def, int rotation)
{
 def = def.copy();
 def.offset(-0.25, -0.5, -0.25);
 switch (rotation) {
 case 2 : def = AxisAlignedBB.getBoundingBox(0.625F, 0F, 0.375F * -1, 0.875F, 0.1875F, 0.125F * -1);
 case 3 : def = AxisAlignedBB.getBoundingBox(0.375F * -1, 0F, 0.875F * -1, 0.125F * -1, 0.1875F, 0.625F * -1);
 case 1 : def = AxisAlignedBB.getBoundingBox(0.875F * -1, 0F, 0.125F, 0.625F * -1, 0.1875F, 0.375F);
 }
 def.offset(0.25, 0.5, 0.25); 
 return def;
}


@Override
public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) {
	GL11.glPushMatrix();
		GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
		GL11.glRotatef(180, 0.0F, 0.0F, 1.0F);

		this.bindTexture(texture);

		GL11.glPushMatrix();
			this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
		GL11.glPopMatrix();	
	GL11.glPopMatrix();
}

}

 

I also forgot to change default center offsets (defs are 0.5(center of the block)) but already fixed it with some help...

I think this must work now... isn't it? just gonna add rotation to it.

 

Thing I love most in this forum, is that when you ask for help, moderators don't give you ready code, you have to figure it out yourself.

Link to comment
Share on other sites

||||UPDATE||||

I added rotation angles but it still doesn't work

package com.joey.renderer;

import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;

import com.joey.Main.lib.RefStrings;
import com.joey.blocks.TileEntity.TileEntityMaP;
import com.joey.model.ModelMaP;

public class RenderMaP extends TileEntitySpecialRenderer{

private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":" + "textures/model/MaP.png");

private ModelMaP model;

public RenderMaP(){
	this.model = new ModelMaP();
}
public static AxisAlignedBB getRotatedInstance(AxisAlignedBB def, int rotation)
{
 def = def.copy();
 def.offset(-0.25, -0.5, -0.25);
 switch (rotation) {
 case 2 : def = AxisAlignedBB.getBoundingBox(0.625F, 0F, 0.375F * -1, 0.875F, 0.1875F, 0.125F * -1);
 case 3 : def = AxisAlignedBB.getBoundingBox(0.375F * -1, 0F, 0.875F * -1, 0.125F * -1, 0.1875F, 0.625F * -1);
 case 1 : def = AxisAlignedBB.getBoundingBox(0.875F * -1, 0F, 0.125F, 0.625F * -1, 0.1875F, 0.375F);
 }
 def.offset(0.25, 0.5, 0.25); 
 return def;
}

public void renderAModelAt(TileEntityMaP EntityMaP, double x, double y, double z, float f){
	int metadata = EntityMaP.getBlockMetadata();
	int rotationAngle = 0;
	if(metadata%4 == 0){
		rotationAngle = 0;
	}
	if(metadata%4 == 1){
		rotationAngle = 270;
	}
	if(metadata%4 == 2){
		rotationAngle = 180;
	}
	if(metadata%4 == 3){
		rotationAngle = 90;
	}
	GL11.glPushMatrix();
	GL11.glTranslated((float) x + 0.5F,(float) y + 1.5F,(float) z + 0.5F);
	GL11.glScalef(1.0F, -1F, -1F);
	GL11.glRotatef(rotationAngle * 90, 0.0F, 1.0F, 0.0F);
		this.bindTexture(texture);
		this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
	GL11.glPopMatrix();
}

@Override
public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) {
	GL11.glPushMatrix();
		GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
		GL11.glRotatef(180, 0.0F, 0.0F, 1.0F);

		this.bindTexture(texture);

		GL11.glPushMatrix();
			this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
		GL11.glPopMatrix();	
	GL11.glPopMatrix();
}

}

Thing I love most in this forum, is that when you ask for help, moderators don't give you ready code, you have to figure it out yourself.

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.