Hello, I'm trying to do my own cable, but I have a problem with TESR. Whenever I place a new cable, model of some previously placed cable change. It look like it's completly random. I really don't know what is going on and I don't know what to do. Where is a problem? Here are some pictures and code.
My TileEntity class:
public class TileEntityCable extends TileEntity implements ITickable {
public CdlmEnergyStorage storage = new CdlmEnergyStorage(400, 100, 10);
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if(capability == CapabilityEnergy.ENERGY) return true;
return super.hasCapability(capability, facing);
}
@Override
public <T> T getCapability(Capability<T> capability, final EnumFacing facing) {
if(capability == CapabilityEnergy.ENERGY) return (T)this.storage;
return super.getCapability(capability, facing);
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setTag("EnergyStorage", this.storage.serializeNBT());
return nbt;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.storage.deserializeNBT(nbt.getCompoundTag("EnergyStorage"));
}
@Override
public void update() {
for (EnumFacing face : EnumFacing.VALUES) {
this.storage.extractEnergy(EnergyHelper.insertIntoAdjacentTile(this, face, this.storage.getMaxExtract(), false), false);
}
}
public int receiveEnergy(int maxReceive, boolean simulate) {
this.markDirty();
return this.storage.receiveEnergy(maxReceive, simulate);
}
public ArrayList<EnumFacing> getEnergyHandlersSides() {
ArrayList<EnumFacing> faces = new ArrayList<EnumFacing>();
for (EnumFacing face : EnumFacing.VALUES) {
if(EnergyHelper.isAdjacentTileEnergyHandler(this, face)) faces.add(face);
}
return faces;
}
}
My Renderer class:
@SideOnly(Side.CLIENT)
public class RenderCable extends TileEntitySpecialRenderer<TileEntityCable> {
private static final ResourceLocation TEXTURE = new ResourceLocation(Reference.MOD_ID + ":textures/blocks/cable.png");
private final ModelCable MODEL = new ModelCable();
public void render(TileEntityCable te, double x, double y, double z, float partialTicks, int destroyStage, float alpha)
{
GlStateManager.enableDepth();
GlStateManager.depthFunc(515);
GlStateManager.depthMask(true);
ModelCable model = MODEL;
if (destroyStage >= 0)
{
GlStateManager.matrixMode(5890);
GlStateManager.pushMatrix();
GlStateManager.scale(4.0F, 4.0F, 1.0F);
GlStateManager.translate(0.0625F, 0.0625F, 0.0625F);
GlStateManager.matrixMode(5888);
}
else this.bindTexture(TEXTURE);
GlStateManager.pushMatrix();
GlStateManager.enableRescaleNormal();
GlStateManager.translate((float)x, (float)y - 1.0F, (float)z);
GlStateManager.scale(1.0F, 1.0F, 1.0F);
GlStateManager.translate(0.5F, 0.5F, 0.5F);
model.renderAll();
GlStateManager.disableRescaleNormal();
GlStateManager.popMatrix();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
if (destroyStage >= 0)
{
GlStateManager.matrixMode(5890);
GlStateManager.popMatrix();
GlStateManager.matrixMode(5888);
}
for(EnumFacing face : te.getEnergyHandlersSides()) {
switch(face) {
case DOWN:
model.hideSides(true, true, true, false, true, true);
break;
case EAST:
model.hideSides(true, true, true, true, true, false);
break;
case NORTH:
model.hideSides(false, true, true, true, true, true);
break;
case SOUTH:
model.hideSides(true, false, true, true, true, true);
break;
case UP:
model.hideSides(true, true, false, true, true, true);
break;
case WEST:
model.hideSides(true, true, true, true, false, true);
break;
default:
model.hideSides(true, true, true, true, true, true);
break;
}
}
}
}
And my Model class:
@SideOnly(Side.CLIENT)
public class ModelCable extends ModelBase
{
public ModelRenderer up;
public ModelRenderer down;
public ModelRenderer middle;
public ModelRenderer back;
public ModelRenderer front;
public ModelRenderer left;
public ModelRenderer right;
public ModelCable()
{
textureWidth = 64;
textureHeight = 64;
up = new ModelRenderer(this, 0, 0);
up.addBox(0F, 0F, 0F, 4, 6, 4, 0F);
up.setRotationPoint(-2F, 8F, -2F);
up.rotateAngleX = 0F;
up.rotateAngleY = 0F;
up.rotateAngleZ = 0F;
up.mirror = false;
up.isHidden = true;
down = new ModelRenderer(this, 0, 0);
down.addBox(0F, 0F, 0F, 4, 6, 4, 0F);
down.setRotationPoint(-2F, 18F, -2F);
down.rotateAngleX = 0F;
down.rotateAngleY = 0F;
down.rotateAngleZ = 0F;
down.mirror = false;
down.isHidden = true;
middle = new ModelRenderer(this, 0, 10);
middle.addBox(0F, 0F, 0F, 4, 4, 4, 0F);
middle.setRotationPoint(-2F, 14F, -2F);
middle.rotateAngleX = 0F;
middle.rotateAngleY = 0F;
middle.rotateAngleZ = 0F;
middle.mirror = false;
middle.isHidden = false;
back = new ModelRenderer(this, 16, 0);
back.addBox(0F, 0F, 0F, 4, 4, 6, 0F);
back.setRotationPoint(-2F, 14F, 2F);
back.rotateAngleX = 0F;
back.rotateAngleY = 0F;
back.rotateAngleZ = 0F;
back.mirror = false;
back.isHidden = true;
front = new ModelRenderer(this, 16, 0);
front.addBox(0F, 0F, 0F, 4, 4, 6, 0F);
front.setRotationPoint(-2F, 14F, -8F);
front.rotateAngleX = 0F;
front.rotateAngleY = 0F;
front.rotateAngleZ = 0F;
front.mirror = false;
front.isHidden = true;
left = new ModelRenderer(this, 36, 0);
left.addBox(0F, 0F, 0F, 6, 4, 4, 0F);
left.setRotationPoint(2F, 14F, -2F);
left.rotateAngleX = 0F;
left.rotateAngleY = 0F;
left.rotateAngleZ = 0F;
left.mirror = false;
left.isHidden = true;
right = new ModelRenderer(this, 36, 0);
right.addBox(0F, 0F, 0F, 6, 4, 4, 0F);
right.setRotationPoint(-8F, 14F, -2F);
right.rotateAngleX = 0F;
right.rotateAngleY = 0F;
right.rotateAngleZ = 0F;
right.mirror = false;
right.isHidden = true;
}
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
{
super.render(entity, f, f1, f2, f3, f4, f5);
setRotationAngles(f, f1, f2, f3, f4, f5, entity);
up.render(f5);
down.render(f5);
middle.render(f5);
back.render(f5);
front.render(f5);
left.render(f5);
right.render(f5);
}
public void renderAll() {
up.render(0.0625F);
down.render(0.0625F);
middle.render(0.0625F);
back.render(0.0625F);
front.render(0.0625F);
left.render(0.0625F);
right.render(0.0625F);
}
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
{
super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
}
public void hideSides(boolean front, boolean back, boolean up, boolean down, boolean left, boolean right) {
this.front.isHidden = front;
this.back.isHidden = back;
this.up.isHidden = up;
this.down.isHidden = down;
this.left.isHidden = left;
this.right.isHidden = right;
}
}
Thank you for your help.