Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/blocks/rail/RailStandardCurveWide9.java
2024-01-06 22:59:40 +01:00

149 lines
3.5 KiB
Java

package com.hbm.blocks.rail;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.obj.WavefrontObject;
import net.minecraftforge.common.util.ForgeDirection;
public class RailStandardCurveWide9 extends RailStandardCurveBase {
public RailStandardCurveWide9() {
super();
this.width = 8;
}
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
int[][] dim = new int[][] {
{1, 0},
{2, 0},
{0, 1},
{1, 1},
{2, 1},
{3, 1},
{4, 1},
{2, 2},
{3, 2},
{4, 2},
{5, 2},
{4, 3},
{5, 3},
{5, 4},
{6, 3},
{6, 4},
{7, 4},
{6, 5},
{7, 5},
{6, 6},
{7, 6},
{7, 7},
{7, 8},
{8, 6},
{8, 7},
{8, 8},
};
for(int[] array : dim) {
if(!world.getBlock(x + dX * array[0] + rX * array[1], y, z + dZ * array[0] + rZ * array[1]).isReplaceable(world, x + dX * array[0] + rX * array[1], y, z + dZ * array[0] + rZ * array[1])) return false;
}
return true;
}
@Override
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
BlockDummyable.safeRem = true;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
int d = dir.ordinal();
int r = rot.ordinal();
int[][] dim = new int[][] {
{1, 0, d},
{2, 0, d},
{0, 1, r},
{1, 1, d},
{2, 1, d},
{3, 1, d},
{4, 1, d},
{2, 2, r},
{3, 2, r},
{4, 2, r},
{5, 2, d},
{4, 3, r},
{5, 3, r},
{5, 4, r},
{6, 3, d},
{6, 4, d},
{7, 4, d},
{6, 5, r},
{7, 5, r},
{6, 6, r},
{7, 6, r},
{7, 7, r},
{7, 8, r},
{8, 6, d},
{8, 7, d},
{8, 8, d},
};
for(int[] array : dim) {
world.setBlock(x + dX * array[0] + rX * array[1], y, z + dZ * array[0] + rZ * array[1], this, array[2], 3);
}
BlockDummyable.safeRem = false;
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventory(Tessellator tessellator, Block block, int metadata) {
GL11.glScaled(0.175, 0.175, 0.175);
GL11.glRotated(45, 0, 1, 0);
GL11.glRotated(60, 1, 0, 0);
GL11.glTranslated(4, 0, 4);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide9, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();
}
@Override
@SideOnly(Side.CLIENT)
public void renderWorld(Tessellator tessellator, Block block, int meta, IBlockAccess world, int x, int y, int z) {
if(meta < 12) return;
float rotation = 0;
if(meta == 15) rotation = 90F / 180F * (float) Math.PI;
if(meta == 12) rotation = 180F / 180F * (float) Math.PI;
if(meta == 14) rotation = 270F / 180F * (float) Math.PI;
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide9, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
}
}