Testing OBJ renderer

Attempt to integrate OBJ render to world, very difficult with blockstate to understand, code failure commit
This commit is contained in:
JackCarterSmith 2017-06-18 11:03:00 +02:00
parent 3694aec33b
commit cccc3e6852
17 changed files with 1143 additions and 7 deletions

View File

@ -1,13 +1,15 @@
package fr.jackcartersmith.orbsat;
import fr.jackcartersmith.orbsat.block.BlockOSBase;
import fr.jackcartersmith.orbsat.block.BlockType_Devices;
import fr.jackcartersmith.orbsat.block.ItemBlockOSBase;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyEnum;
public class OSBlocks {
public static BlockOSBase satelliteLauncher;
public static BlockOSBase devices;
public static void init(){
satelliteLauncher = new Block;
devices = (BlockOSBase)new BlockOSBase("devices", Material.IRON, PropertyEnum.create("type", BlockType_Devices.class), ItemBlockOSBase.class).setOpaque(true).setHardness(2.0F).setResistance(5.0F);
}
}

View File

@ -0,0 +1,27 @@
package fr.jackcartersmith.orbsat.block;
import java.util.Locale;
import net.minecraft.util.IStringSerializable;
public enum BlockType_Devices implements IStringSerializable, BlockOSBase.IBlockEnum{
SATELLITE_LAUNCHER,
SATELLITE_CENTRALE,
SATELLITE_ASSEMBLER;
@Override
public String getName() {
return this.toString().toLowerCase(Locale.ENGLISH);
}
@Override
public int getMeta()
{
return ordinal();
}
@Override
public boolean listForCreative()
{
return ordinal()!=12;
}
}

View File

@ -6,6 +6,7 @@ import fr.jackcartersmith.orbsat.OSRefs;
import fr.jackcartersmith.orbsat.block.OSBlockInterface.IOSMetaBlock;
import fr.jackcartersmith.orbsat.common.CommonProxy;
import fr.jackcartersmith.orbsat.item.ItemOSBase;
import fr.jackcartersmith.orbsat.models.obj.OSOBJLoader;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemMeshDefinition;
@ -15,18 +16,18 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.client.model.obj.OBJLoader;
import net.minecraftforge.fml.common.registry.GameData;
public class ClientProxy extends CommonProxy{
@Override
public void registerRender(){
}
@Override
public void preInit(){
Minecraft.getMinecraft().getFramebuffer().enableStencil();//Enabling FBO stencils
ModelLoaderRegistry.registerLoader(OSOBJLoader.instance);
OBJLoader.INSTANCE.addDomain(OSRefs.MODID);
OSOBJLoader.instance.addDomain(OSRefs.MODID);
for(Block block : OSRefs.registeredOSBlocks)
{

View File

@ -0,0 +1,109 @@
package fr.jackcartersmith.orbsat.common.util;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.oredict.OreDictionary;
public class ComparableItemStack {
public ItemStack stack;
public boolean useNBT;
public int oreID=-1;
public ComparableItemStack(ItemStack stack)
{
this(stack, true);
}
public ComparableItemStack(ItemStack stack, boolean matchOre)
{
if(stack==null)
throw new RuntimeException("You cannot instantiate a ComparableItemStack with null for an Item!");
this.stack = stack;
if(matchOre)
{
int[] oids = OreDictionary.getOreIDs(stack);
if(oids!=null&&oids.length > 0)
this.oreID = oids[0];
}
}
public ComparableItemStack(String oreName)
{
//this(IEApi.getPreferredOreStack(oreName));
this.oreID = OreDictionary.getOreID(oreName);
}
public ComparableItemStack setUseNBT(boolean useNBT)
{
this.useNBT = useNBT;
return this;
}
public ComparableItemStack setOreID(int oid)
{
this.oreID = oid;
return this;
}
@Override
public String toString()
{
return "ComparableStack: {"+this.stack.toString()+"}; oreID: "+this.oreID+"; checkNBT: "+this.useNBT;
}
@Override
public int hashCode()
{
if(this.oreID!=-1)
return this.oreID;
int hash = (stack.getItemDamage()&0xffff)*31 + stack.getItem().hashCode()*31;
if(this.useNBT && stack.hasTagCompound())
hash += stack.getTagCompound().hashCode()*31;
return hash;
}
@Override
public boolean equals(Object object)
{
if(!(object instanceof ComparableItemStack))
return false;
if(this.oreID!=-1 && ((ComparableItemStack)object).oreID!=-1)
return this.oreID == ((ComparableItemStack)object).oreID;
ItemStack otherStack = ((ComparableItemStack)object).stack;
if(!OreDictionary.itemMatches(stack,otherStack, false))
return false;
if(this.useNBT)
{
if(this.stack.hasTagCompound() != otherStack.hasTagCompound())
return false;
if(!this.stack.hasTagCompound() && !otherStack.hasTagCompound())
return true;
if(!this.stack.getTagCompound().equals(otherStack.getTagCompound()))
return false;
}
return true;
}
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
{
if(this.oreID!=-1)
nbt.setString("oreID", OreDictionary.getOreName(oreID));
else
{
nbt.setTag("stack", stack.writeToNBT(new NBTTagCompound()));
nbt.setBoolean("useNBT", useNBT);
}
return nbt;
}
public static ComparableItemStack readFromNBT(NBTTagCompound nbt)
{
if(nbt.hasKey("oreID"))
return new ComparableItemStack(nbt.getString("oreID"));
else if(nbt.hasKey("stack"))
{
ComparableItemStack comp = new ComparableItemStack(ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("stack")));
comp.useNBT = nbt.getBoolean("useNBT");
return comp;
}
return null;
}
}

View File

@ -0,0 +1,459 @@
package fr.jackcartersmith.orbsat.common.util;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.Vec3d;
/**
* Copyright (C) 2013 Chicken-Bones
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
//This file originally copied from CodeChickenLib, courtesy of Chicken-Bones.
//This is a customized version created by Steven Blom (AtomicBlom) of the Steam and Steel development team.
//Slight adjustments have been made to fit my code.
//And massive adjustments made to work with 1.8. BLARGH!
public class Matrix4
{
//m<row><column>
public double m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33;
public Matrix4()
{
m00 = m11 = m22 = m33 = 1;
}
public Matrix4(double d00, double d01, double d02, double d03,
double d10, double d11, double d12, double d13,
double d20, double d21, double d22, double d23,
double d30, double d31, double d32, double d33)
{
m00 = d00;
m01 = d01;
m02 = d02;
m03 = d03;
m10 = d10;
m11 = d11;
m12 = d12;
m13 = d13;
m20 = d20;
m21 = d21;
m22 = d22;
m23 = d23;
m30 = d30;
m31 = d31;
m32 = d32;
m33 = d33;
}
public Matrix4(Matrix4 mat)
{
set(mat);
}
public Matrix4(Matrix4f mat)
{
m00 = mat.m00;
m01 = mat.m01;
m02 = mat.m02;
m03 = mat.m03;
m10 = mat.m10;
m11 = mat.m11;
m12 = mat.m12;
m13 = mat.m13;
m20 = mat.m20;
m21 = mat.m21;
m22 = mat.m22;
m23 = mat.m23;
m30 = mat.m30;
m31 = mat.m31;
m32 = mat.m32;
m33 = mat.m33;
}
public Matrix4(EnumFacing facing)
{
this();
setIdentity();
translate(.5, .5, .5);
switch(facing)
{
case UP:
rotate(Math.PI/2, 1, 0, 0);
break;
case DOWN:
rotate(-Math.PI/2, 1, 0, 0);
break;
case SOUTH:
rotate(Math.PI, 0, 1, 0);
break;
case EAST:
rotate(-Math.PI/2, 0, 1, 0);
break;
case WEST:
rotate(Math.PI/2, 0, 1, 0);
break;
case NORTH:
}
translate(-.5, -.5, -.5);
}
public Matrix4 setIdentity()
{
m00 = m11 = m22 = m33 = 1;
m01 = m02 = m03 = m10 = m12 = m13 = m20 = m21 = m23 = m30 = m31 = m32 = 0;
return this;
}
public Matrix4 translate(Vector3f vec)
{
m03 += m00 * vec.x + m01 * vec.y + m02 * vec.z;
m13 += m10 * vec.x + m11 * vec.y + m12 * vec.z;
m23 += m20 * vec.x + m21 * vec.y + m22 * vec.z;
m33 += m30 * vec.x + m31 * vec.y + m32 * vec.z;
return this;
}
public Matrix4 translate(double x, double y, double z)
{
m03 += m00 * x + m01 * y + m02 * z;
m13 += m10 * x + m11 * y + m12 * z;
m23 += m20 * x + m21 * y + m22 * z;
m33 += m30 * x + m31 * y + m32 * z;
return this;
}
public Matrix4 scale(Vector3f vec)
{
m00 *= vec.x;
m10 *= vec.x;
m20 *= vec.x;
m30 *= vec.x;
m01 *= vec.y;
m11 *= vec.y;
m21 *= vec.y;
m31 *= vec.y;
m02 *= vec.z;
m12 *= vec.z;
m22 *= vec.z;
m32 *= vec.z;
return this;
}
public Matrix4 scale(double x, double y, double z)
{
m00 *= x;
m10 *= x;
m20 *= x;
m30 *= x;
m01 *= y;
m11 *= y;
m21 *= y;
m31 *= y;
m02 *= z;
m12 *= z;
m22 *= z;
m32 *= z;
return this;
}
public Matrix4 rotate(double angle, Vector3f axis)
{
double c = Math.cos(angle);
double s = Math.sin(angle);
double mc = 1.0f - c;
double xy = axis.x*axis.y;
double yz = axis.y*axis.z;
double xz = axis.x*axis.z;
double xs = axis.x*s;
double ys = axis.y*s;
double zs = axis.z*s;
double f00 = axis.x*axis.x*mc+c;
double f10 = xy*mc+zs;
double f20 = xz*mc-ys;
double f01 = xy*mc-zs;
double f11 = axis.y*axis.y*mc+c;
double f21 = yz*mc+xs;
double f02 = xz*mc+ys;
double f12 = yz*mc-xs;
double f22 = axis.z*axis.z*mc+c;
double t00 = m00 * f00 + m01 * f10 + m02 * f20;
double t10 = m10 * f00 + m11 * f10 + m12 * f20;
double t20 = m20 * f00 + m21 * f10 + m22 * f20;
double t30 = m30 * f00 + m31 * f10 + m32 * f20;
double t01 = m00 * f01 + m01 * f11 + m02 * f21;
double t11 = m10 * f01 + m11 * f11 + m12 * f21;
double t21 = m20 * f01 + m21 * f11 + m22 * f21;
double t31 = m30 * f01 + m31 * f11 + m32 * f21;
m02 = m00 * f02 + m01 * f12 + m02 * f22;
m12 = m10 * f02 + m11 * f12 + m12 * f22;
m22 = m20 * f02 + m21 * f12 + m22 * f22;
m32 = m30 * f02 + m31 * f12 + m32 * f22;
m00 = t00;
m10 = t10;
m20 = t20;
m30 = t30;
m01 = t01;
m11 = t11;
m21 = t21;
m31 = t31;
return this;
}
public Matrix4 rotate(double angle, double x, double y, double z)
{
double c = Math.cos(angle);
double s = Math.sin(angle);
double mc = 1.0f - c;
double xy = x*y;
double yz = y*z;
double xz = x*z;
double xs = x*s;
double ys = y*s;
double zs = z*s;
double f00 = x*x*mc+c;
double f10 = xy*mc+zs;
double f20 = xz*mc-ys;
double f01 = xy*mc-zs;
double f11 = y*y*mc+c;
double f21 = yz*mc+xs;
double f02 = xz*mc+ys;
double f12 = yz*mc-xs;
double f22 = z*z*mc+c;
double t00 = m00 * f00 + m01 * f10 + m02 * f20;
double t10 = m10 * f00 + m11 * f10 + m12 * f20;
double t20 = m20 * f00 + m21 * f10 + m22 * f20;
double t30 = m30 * f00 + m31 * f10 + m32 * f20;
double t01 = m00 * f01 + m01 * f11 + m02 * f21;
double t11 = m10 * f01 + m11 * f11 + m12 * f21;
double t21 = m20 * f01 + m21 * f11 + m22 * f21;
double t31 = m30 * f01 + m31 * f11 + m32 * f21;
m02 = m00 * f02 + m01 * f12 + m02 * f22;
m12 = m10 * f02 + m11 * f12 + m12 * f22;
m22 = m20 * f02 + m21 * f12 + m22 * f22;
m32 = m30 * f02 + m31 * f12 + m32 * f22;
m00 = t00;
m10 = t10;
m20 = t20;
m30 = t30;
m01 = t01;
m11 = t11;
m21 = t21;
m31 = t31;
return this;
}
public Matrix4 leftMultiply(Matrix4 mat)
{
double n00 = m00 * mat.m00 + m10 * mat.m01 + m20 * mat.m02 + m30 * mat.m03;
double n01 = m01 * mat.m00 + m11 * mat.m01 + m21 * mat.m02 + m31 * mat.m03;
double n02 = m02 * mat.m00 + m12 * mat.m01 + m22 * mat.m02 + m32 * mat.m03;
double n03 = m03 * mat.m00 + m13 * mat.m01 + m23 * mat.m02 + m33 * mat.m03;
double n10 = m00 * mat.m10 + m10 * mat.m11 + m20 * mat.m12 + m30 * mat.m13;
double n11 = m01 * mat.m10 + m11 * mat.m11 + m21 * mat.m12 + m31 * mat.m13;
double n12 = m02 * mat.m10 + m12 * mat.m11 + m22 * mat.m12 + m32 * mat.m13;
double n13 = m03 * mat.m10 + m13 * mat.m11 + m23 * mat.m12 + m33 * mat.m13;
double n20 = m00 * mat.m20 + m10 * mat.m21 + m20 * mat.m22 + m30 * mat.m23;
double n21 = m01 * mat.m20 + m11 * mat.m21 + m21 * mat.m22 + m31 * mat.m23;
double n22 = m02 * mat.m20 + m12 * mat.m21 + m22 * mat.m22 + m32 * mat.m23;
double n23 = m03 * mat.m20 + m13 * mat.m21 + m23 * mat.m22 + m33 * mat.m23;
double n30 = m00 * mat.m30 + m10 * mat.m31 + m20 * mat.m32 + m30 * mat.m33;
double n31 = m01 * mat.m30 + m11 * mat.m31 + m21 * mat.m32 + m31 * mat.m33;
double n32 = m02 * mat.m30 + m12 * mat.m31 + m22 * mat.m32 + m32 * mat.m33;
double n33 = m03 * mat.m30 + m13 * mat.m31 + m23 * mat.m32 + m33 * mat.m33;
m00 = n00;
m01 = n01;
m02 = n02;
m03 = n03;
m10 = n10;
m11 = n11;
m12 = n12;
m13 = n13;
m20 = n20;
m21 = n21;
m22 = n22;
m23 = n23;
m30 = n30;
m31 = n31;
m32 = n32;
m33 = n33;
return this;
}
public Matrix4 multiply(Matrix4 mat)
{
double n00 = m00 * mat.m00 + m01 * mat.m10 + m02 * mat.m20 + m03 * mat.m30;
double n01 = m00 * mat.m01 + m01 * mat.m11 + m02 * mat.m21 + m03 * mat.m31;
double n02 = m00 * mat.m02 + m01 * mat.m12 + m02 * mat.m22 + m03 * mat.m32;
double n03 = m00 * mat.m03 + m01 * mat.m13 + m02 * mat.m23 + m03 * mat.m33;
double n10 = m10 * mat.m00 + m11 * mat.m10 + m12 * mat.m20 + m13 * mat.m30;
double n11 = m10 * mat.m01 + m11 * mat.m11 + m12 * mat.m21 + m13 * mat.m31;
double n12 = m10 * mat.m02 + m11 * mat.m12 + m12 * mat.m22 + m13 * mat.m32;
double n13 = m10 * mat.m03 + m11 * mat.m13 + m12 * mat.m23 + m13 * mat.m33;
double n20 = m20 * mat.m00 + m21 * mat.m10 + m22 * mat.m20 + m23 * mat.m30;
double n21 = m20 * mat.m01 + m21 * mat.m11 + m22 * mat.m21 + m23 * mat.m31;
double n22 = m20 * mat.m02 + m21 * mat.m12 + m22 * mat.m22 + m23 * mat.m32;
double n23 = m20 * mat.m03 + m21 * mat.m13 + m22 * mat.m23 + m23 * mat.m33;
double n30 = m30 * mat.m00 + m31 * mat.m10 + m32 * mat.m20 + m33 * mat.m30;
double n31 = m30 * mat.m01 + m31 * mat.m11 + m32 * mat.m21 + m33 * mat.m31;
double n32 = m30 * mat.m02 + m31 * mat.m12 + m32 * mat.m22 + m33 * mat.m32;
double n33 = m30 * mat.m03 + m31 * mat.m13 + m32 * mat.m23 + m33 * mat.m33;
m00 = n00;
m01 = n01;
m02 = n02;
m03 = n03;
m10 = n10;
m11 = n11;
m12 = n12;
m13 = n13;
m20 = n20;
m21 = n21;
m22 = n22;
m23 = n23;
m30 = n30;
m31 = n31;
m32 = n32;
m33 = n33;
return this;
}
public Matrix4 transpose()
{
double n00 = m00;
double n10 = m01;
double n20 = m02;
double n30 = m03;
double n01 = m10;
double n11 = m11;
double n21 = m12;
double n31 = m13;
double n02 = m20;
double n12 = m21;
double n22 = m22;
double n32 = m23;
double n03 = m30;
double n13 = m31;
double n23 = m32;
double n33 = m33;
m00 = n00;
m01 = n01;
m02 = n02;
m03 = n03;
m10 = n10;
m11 = n11;
m12 = n12;
m13 = n13;
m20 = n20;
m21 = n21;
m22 = n22;
m23 = n23;
m30 = n30;
m31 = n31;
m32 = n32;
m33 = n33;
return this;
}
public Matrix4 copy()
{
return new Matrix4(this);
}
public Matrix4 set(Matrix4 mat)
{
m00 = mat.m00;
m01 = mat.m01;
m02 = mat.m02;
m03 = mat.m03;
m10 = mat.m10;
m11 = mat.m11;
m12 = mat.m12;
m13 = mat.m13;
m20 = mat.m20;
m21 = mat.m21;
m22 = mat.m22;
m23 = mat.m23;
m30 = mat.m30;
m31 = mat.m31;
m32 = mat.m32;
m33 = mat.m33;
return this;
}
public void apply(Matrix4 mat)
{
mat.multiply(this);
}
private void mult3x3(Vector3f vec)
{
double x = m00 * vec.x + m01 * vec.y + m02 * vec.z;
double y = m10 * vec.x + m11 * vec.y + m12 * vec.z;
double z = m20 * vec.x + m21 * vec.y + m22 * vec.z;
vec.x = (float)x;
vec.y = (float)y;
vec.z = (float)z;
}
public void apply(Vector3f vec)
{
mult3x3(vec);
vec.x += m03;
vec.y += m13;
vec.z += m23;
}
private Vec3d mult3x3(Vec3d vec)
{
double x = m00 * vec.xCoord + m01 * vec.yCoord + m02 * vec.zCoord;
double y = m10 * vec.xCoord + m11 * vec.yCoord + m12 * vec.zCoord;
double z = m20 * vec.xCoord + m21 * vec.yCoord + m22 * vec.zCoord;
return new Vec3d(x,y,z);
}
public Vec3d apply(Vec3d vec)
{
return mult3x3(vec).addVector(m03, m13, m23);
}
private org.lwjgl.util.vector.Vector3f mult3x3(org.lwjgl.util.vector.Vector3f vec)
{
float x = (float) (m00 * vec.x + m01 * vec.y + m02 * vec.z);
float y = (float) (m10 * vec.x + m11 * vec.y + m12 * vec.z);
float z = (float) (m20 * vec.x + m21 * vec.y + m22 * vec.z);
return new org.lwjgl.util.vector.Vector3f(x, y, z);
}
public org.lwjgl.util.vector.Vector3f apply(org.lwjgl.util.vector.Vector3f vec)
{
org.lwjgl.util.vector.Vector3f vec2 = mult3x3(vec);
vec2.x += m03;
vec2.y += m13;
vec2.z += m23;
return vec2;
}
public Matrix4f toMatrix4f()
{
return new Matrix4f((float)m00,(float)m01,(float)m02,(float)m03, (float)m10,(float)m11,(float)m12,(float)m13, (float)m20,(float)m21,(float)m22,(float)m23, (float)m30,(float)m31,(float)m32,(float)m33);
}
public void fromMatrix4f(Matrix4f mat)
{
m00 = mat.m00; m01 = mat.m01; m02 = mat.m02; m03 = mat.m03;
m10 = mat.m10; m11 = mat.m11; m12 = mat.m12; m13 = mat.m13;
m20 = mat.m20; m21 = mat.m21; m22 = mat.m22; m23 = mat.m23;
m30 = mat.m30; m31 = mat.m31; m32 = mat.m32; m33 = mat.m33;
}
public final void invert()
{
Matrix4f temp = toMatrix4f();
temp.invert();
this.fromMatrix4f(temp);
}
@Override
public String toString()
{
MathContext cont = new MathContext(4, RoundingMode.HALF_UP);
return "["+new BigDecimal(m00, cont)+","+new BigDecimal(m01, cont)+","+new BigDecimal(m02, cont)+","+new BigDecimal(m03, cont)+"]\n"+
"["+new BigDecimal(m10, cont)+","+new BigDecimal(m11, cont)+","+new BigDecimal(m12, cont)+","+new BigDecimal(m13, cont)+"]\n"+
"["+new BigDecimal(m20, cont)+","+new BigDecimal(m21, cont)+","+new BigDecimal(m22, cont)+","+new BigDecimal(m23, cont)+"]\n"+
"["+new BigDecimal(m30, cont)+","+new BigDecimal(m31, cont)+","+new BigDecimal(m32, cont)+","+new BigDecimal(m33, cont)+"]";
}
}

View File

@ -0,0 +1,63 @@
package fr.jackcartersmith.orbsat.models.obj;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import fr.jackcartersmith.orbsat.common.util.OSLogger;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ICustomModelLoader;
import net.minecraftforge.client.model.IModel;
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.client.model.obj.OBJLoader;
import net.minecraftforge.client.model.obj.OBJModel;
public class OSOBJLoader implements ICustomModelLoader{
private IResourceManager manager;
private final Set<String> enabledDomains = new HashSet<String>();
private final Map<ResourceLocation, OSOBJModel> cache = new HashMap<ResourceLocation, OSOBJModel>();
private final Map<ResourceLocation, Exception> errors = new HashMap<ResourceLocation, Exception>();
public static OSOBJLoader instance = new OSOBJLoader();
public void addDomain(String domain)
{
enabledDomains.add(domain.toLowerCase(Locale.ENGLISH));
OSLogger.info("[OrbSAT] Custom OBJLoader: Domain has been added: "+domain.toLowerCase(Locale.ENGLISH));
}
@Override
public boolean accepts(ResourceLocation modelLocation)
{
return enabledDomains.contains(modelLocation.getResourceDomain()) && modelLocation.getResourcePath().endsWith(".obj.ie");
}
@Override
public IModel loadModel(ResourceLocation modelLocation) throws Exception
{
ResourceLocation file = new ResourceLocation(modelLocation.getResourceDomain(), modelLocation.getResourcePath());
if(!cache.containsKey(file))
{
IModel model = OBJLoader.INSTANCE.loadModel(modelLocation);
if(model instanceof OBJModel)
{
OSOBJModel ieobj = new OSOBJModel(((OBJModel)model).getMatLib(), file);
cache.put(modelLocation, ieobj);
}
}
OSOBJModel model = cache.get(file);
if(model == null)
return ModelLoaderRegistry.getMissingModel();
return model;
}
@Override
public void onResourceManagerReload(IResourceManager resourceManager)
{
this.manager = resourceManager;
cache.clear();
errors.clear();
}
}

View File

@ -0,0 +1,96 @@
package fr.jackcartersmith.orbsat.models.obj;
import java.lang.reflect.Field;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModel;
import net.minecraftforge.client.model.obj.OBJModel;
import net.minecraftforge.common.model.IModelState;
public class OSOBJModel extends OBJModel{
public OSOBJModel(MaterialLibrary matLib, ResourceLocation modelLocation)
{
super(matLib, modelLocation);
}
public OSOBJModel(MaterialLibrary matLib, ResourceLocation modelLocation, Object customData)
{
super(matLib, modelLocation);
this.setCustomData(customData);
}
@Override
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter)
{
IBakedModel preBaked = super.bake(state, format, bakedTextureGetter);
//return new OSSmartObjModel(preBaked, this, state, format, OSSmartObjModel.getTexturesForOBJModel(preBaked), null);
return preBaked;
}
@Override
public IModel process(ImmutableMap<String, String> customData)
{
OSOBJModel ret = new OSOBJModel(this.getMatLib(), getResourceLocation(), getCustomData());
return ret;
}
@Override
public IModel retexture(ImmutableMap<String, String> textures)
{
OSOBJModel ret = new OSOBJModel(this.getMatLib().makeLibWithReplacements(textures), getResourceLocation(), getCustomData());
return ret;
}
static Field f_modelLocation;
public ResourceLocation getResourceLocation()
{
try{
if(f_modelLocation==null)
{
f_modelLocation = OBJModel.class.getDeclaredField("modelLocation");
f_modelLocation.setAccessible(true);
}
if(f_modelLocation!=null)
return (ResourceLocation)f_modelLocation.get(this);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
static Field f_customData;
public Object getCustomData()
{
try{
if(f_customData==null)
{
f_customData = OBJModel.class.getDeclaredField("customData");
f_customData.setAccessible(true);
}
if(f_customData!=null)
return f_customData.get(this);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public void setCustomData(Object data)
{
try{
if(f_customData==null)
{
f_customData = OBJModel.class.getDeclaredField("customData");
f_customData.setAccessible(true);
}
if(f_customData!=null)
f_customData.set(this, data);
}catch(Exception e){
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,93 @@
{
"forge_marker": 1,
"defaults":
{
"transform": "forge:default-block",
"model": "orbsat:osSixSides",
"textures": {
"bottom": "orbsat:blocks/device_base",
"top": "orbsat:blocks/device_base",
"north": "orbsat:blocks/device_base",
"south": "orbsat:blocks/device_base",
"west": "orbsat:blocks/device_base",
"east": "orbsat:blocks/device_base",
"sideOff": "orbsat:blocks/device_base",
"sideOn": "orbsat:blocks/device_base"
}
},
"variants": {
"inventory,type=satellite_launcher": [{"textures": {
"bottom": "orbsat:blocks/device_base",
"top": "orbsat:blocks/device_base",
"north": "orbsat:blocks/device_satelliteLauncher_front",
"south": "orbsat:blocks/device_satelliteLauncher_back",
"west": "orbsat:blocks/device_satelliteLauncher_side",
"east": "orbsat:blocks/device_satelliteLauncher_side"}
}],
"inventory,type=satellite_centrale": [{"textures": {
"bottom": "orbsat:blocks/device_base",
"top": "orbsat:blocks/device_base",
"north": "orbsat:blocks/device_base",
"south": "orbsat:blocks/device_base",
"west": "orbsat:blocks/device_base",
"east": "orbsat:blocks/device_base"}
}],
"inventory,type=satellite_assembler": [{
"model": "orbsat:blastfurnace_preheater.obj",
"custom": {"flip-v": true},
"transform": {
"scale": [ 0.1875, 0.1875, 0.1875 ],
"firstperson_righthand": { "scale": [ 0.75, 0.75, 0.75 ], "rotation": [{ "y": 180 }] },
"firstperson_lefthand": { "scale": [ 0.75, 0.75, 0.75 ], "rotation": [{ "y": 180 }] },
"thirdperson_righthand": { "translation": [ 0, 0.09375, -0.171875 ], "rotation": [{ "x": 70 }, { "y": 70 }] },
"thirdperson_lefthand": { "translation": [ 0, 0.09375, -0.171875 ], "rotation": [{ "x": 70 }, { "y": 70 }] },
"fixed": {"scale": [ 2,2,2 ], "translation": [ 0, -0.25, 0 ], "rotation": [{ "y": 0 }]},
"gui": { "translation": [ 0, -0.25, 0 ], "rotation": [{ "x": 30 },{ "y": 135 }], "scale": [ 1.5, 1.5, 1.5 ] }
}
}],
"type=satellite_assembler": {
"model": "orbsat:blastfurnace_preheater.obj",
"custom": { "flip-v": true }
},
"type=satellite_launcher": {"parent":"block/cube_all", "textures": {
"bottom": "orbsat:blocks/device_base",
"top": "orbsat:blocks/device_base",
"north": "orbsat:blocks/device_satelliteLauncher_front",
"south": "orbsat:blocks/device_satelliteLauncher_back",
"west": "orbsat:blocks/device_satelliteLauncher_side",
"east": "orbsat:blocks/device_satelliteLauncher_side",
"sideOff": "#sideOff",
"sideOn": "#sideOff"
}},
"type=satellite_centrale": {"parent":"block/cube_all", "textures": {
"bottom": "orbsat:blocks/device_base",
"top": "orbsat:blocks/device_base",
"north": "orbsat:blocks/device_base",
"south": "orbsat:blocks/device_base",
"west": "orbsat:blocks/device_base",
"east": "orbsat:blocks/device_base"
}},
"facing":
{
"down": { "transform": {
"rotation": {"x": -90 }
}},
"up": { "transform": {
"rotation": {"x": 90 }
}},
"north": { "transform": {
"rotation": {"y": 0 }
}},
"south": { "transform": {
"rotation": {"y": 180 }
}},
"west": { "transform": {
"rotation": {"y": 90 }
}},
"east": { "transform": {
"rotation": {"y": -90 }
}}
}
}
}

View File

@ -0,0 +1,2 @@
newmtl blastfurnace_preheater
map_Ka orbsat:blocks/metalDevice1_blast_furnace_preheater

View File

@ -0,0 +1,266 @@
# Model created by Damien A.W. Hazard
mtllib blastfurnace_preheater.mtl
o preheater
v 0.375000 0.437500 0.937500
v 0.125000 0.437500 0.937500
v 0.375000 0.562500 0.937500
v 0.125000 0.562500 0.937500
v 0.625000 0.437500 0.937500
v 0.875000 0.437500 0.937500
v 0.625000 0.562500 0.937500
v 0.875000 0.562500 0.937500
v 0.750000 0.750000 0.000000
v 0.250000 0.750000 0.000000
v 0.000000 1.000000 0.000000
v 1.000000 1.000000 0.000000
v 0.750000 0.750000 -0.500000
v 0.250000 0.750000 -0.500000
v 0.250000 0.250000 -0.500000
v 0.750000 0.250000 -0.500000
v 0.750000 0.250000 0.000000
v 0.250000 0.250000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 1.000000 1.000000
v 1.000000 -0.000000 1.000000
v 0.000000 0.000000 0.000000
v 0.000000 1.000000 1.000000
v 0.125000 0.875000 1.000000
v 0.875000 0.875000 1.000000
v 0.000000 -0.000000 1.000000
v 0.062500 1.000000 0.937500
v 0.062500 1.000000 0.062500
v 0.125000 0.875000 0.687500
v 0.875000 0.875000 0.687500
v 0.875000 0.125000 1.000000
v 0.125000 0.125000 1.000000
v 0.875000 0.125000 0.687500
v 0.125000 0.125000 0.687500
v 0.937500 1.000000 0.937500
v 0.937500 1.000000 0.062500
v 0.187500 2.875001 0.187500
v 0.187500 2.875001 0.812500
v 0.187500 3.000001 0.812500
v 0.187500 3.000001 0.187500
v 0.812500 2.875001 0.812500
v 0.812500 3.000001 0.812500
v 0.812500 2.875001 0.187500
v 0.812500 3.000001 0.187500
v 0.062500 2.875001 0.937500
v 0.937500 2.875001 0.937500
v 0.062500 2.875001 0.062500
v 0.937500 2.875001 0.062500
v 0.375000 0.375000 1.000000
v 0.625000 0.375000 1.000000
v 0.625000 0.625000 1.000000
v 0.375000 0.625000 1.000000
v 0.625000 0.375000 0.875000
v 0.625000 0.625000 0.875000
v 0.375000 0.625000 0.875000
v 0.375000 0.375000 0.875000
v 0.437500 0.375000 0.937500
v 0.562500 0.375000 0.937500
v 0.562500 0.125000 0.937500
v 0.437500 0.125000 0.937500
v 0.562500 0.875000 0.937500
v 0.437500 0.875000 0.937500
v 0.437500 0.625000 0.937500
v 0.562500 0.625000 0.937500
vt 0.218750 0.406250
vt 0.218750 0.437500
vt 0.156250 0.437500
vt 0.156250 0.406250
vt 0.687500 0.062500
vt 0.562500 0.062500
vt 0.500000 0.000000
vt 0.750000 0.000000
vt 0.937500 0.593750
vt 0.812500 0.593750
vt 0.812500 0.468750
vt 0.937500 0.468750
vt 0.250000 0.000000
vt 0.250000 0.250000
vt 0.500000 0.250000
vt 0.562500 0.187500
vt 0.687500 0.187500
vt 0.750000 0.250000
vt -0.000000 0.250000
vt 0.031250 0.218750
vt 0.218750 0.218750
vt 0.265625 0.015625
vt 0.265625 0.234375
vt 1.000000 0.000000
vt 1.000000 0.250000
vt 0.218750 0.328125
vt 0.031250 0.328125
vt 0.031250 0.250000
vt 0.218750 0.250000
vt -0.000000 0.000000
vt 0.218750 0.031250
vt 0.031250 0.031250
vt 0.484375 0.015625
vt 0.484375 0.234375
vt 0.546875 0.718750
vt 0.703125 0.718750
vt 0.703125 0.750000
vt 0.546875 0.750000
vt 0.703125 0.906250
vt 0.546875 0.906250
vt 0.984375 0.250000
vt 0.984375 0.468750
vt 0.953125 0.437500
vt 0.953125 0.281250
vt 0.765625 0.250000
vt 0.796875 0.281250
vt 0.765625 0.468750
vt 0.796875 0.437500
vt 0.515625 0.250000
vt 0.734375 0.250000
vt 0.734375 0.718750
vt 0.515625 0.718750
vt 0.468750 0.562500
vt 0.406250 0.562500
vt 0.406250 0.500000
vt 0.468750 0.500000
vt 0.500000 0.500000
vt 0.500000 0.562500
vt 0.109375 0.328125
vt 0.140625 0.328125
vt 0.140625 0.390625
vt 0.109375 0.390625
vt 0.031250 0.437500
vt 0.031250 0.406250
vt 0.093750 0.406250
vt 0.093750 0.437500
vt 0.140625 0.515625
vt 0.109375 0.515625
vt 0.109375 0.453125
vt 0.140625 0.453125
usemtl blastfurnace_preheater
f 6/1 8/2 7/3 5/4
f 9/5 10/6 11/7 12/8
f 13/9 14/10 10/11 9/12
f 15/9 16/10 17/11 18/12
f 16/9 13/10 9/11 17/12
f 14/9 15/10 18/11 10/12
f 19/13 12/14 20/15 21/7
f 18/16 17/17 19/18 22/15
f 17/17 9/5 12/8 19/18
f 10/6 18/16 22/15 11/7
f 20/14 23/19 24/20 25/21
f 11/15 22/7 26/13 23/14
f 11/14 23/13 27/22 28/23
f 22/18 19/8 21/24 26/25
f 25/26 24/27 29/28 30/29
f 26/30 21/13 31/31 32/32
f 21/13 20/14 25/21 31/31
f 23/19 26/30 32/32 24/20
f 32/26 31/27 33/28 34/29
f 31/28 25/29 30/26 33/27
f 24/26 32/27 34/28 29/29
f 34/32 33/31 30/21 29/20
f 23/13 20/7 35/33 27/22
f 20/7 12/15 36/34 35/33
f 37/35 38/36 39/37 40/38
f 12/15 11/14 28/23 36/34
f 38/35 41/36 42/37 39/38
f 41/35 43/36 44/37 42/38
f 40/38 39/37 42/39 44/40
f 45/41 46/42 41/43 38/44
f 47/45 45/41 38/44 37/46
f 48/47 47/45 37/46 43/48
f 43/35 37/36 40/37 44/38
f 46/42 48/47 43/48 41/43
f 35/49 36/50 48/51 46/52
f 36/49 28/50 47/51 48/52
f 28/49 27/50 45/51 47/52
f 27/49 35/50 46/51 45/52
f 49/53 50/54 51/55 52/56
f 53/53 54/56 51/57 50/58
f 55/53 56/56 49/57 52/58
f 54/53 55/56 52/57 51/58
f 56/53 53/56 50/57 49/58
f 16/5 15/17 14/16 13/6
f 60/59 59/60 58/61 57/62
f 4/63 2/64 1/65 3/66
f 61/67 62/68 63/69 64/70
o fan
v 0.219210 0.250460 0.847541
v 0.187960 0.281710 0.803347
v 0.250460 0.219210 0.714959
v 0.281710 0.187960 0.759153
v 0.471431 0.440181 0.714959
v 0.502681 0.408931 0.759153
v 0.440181 0.471431 0.847541
v 0.408931 0.502681 0.803347
v 0.749540 0.219210 0.847541
v 0.718290 0.187960 0.803347
v 0.780790 0.250460 0.714959
v 0.812040 0.281710 0.759153
v 0.559819 0.471431 0.714959
v 0.591069 0.502681 0.759153
v 0.528569 0.440181 0.847541
v 0.497319 0.408931 0.803347
v 0.780790 0.749540 0.847541
v 0.812040 0.718290 0.803347
v 0.749540 0.780790 0.714959
v 0.718290 0.812040 0.759153
v 0.528569 0.559819 0.714959
v 0.497319 0.591069 0.759153
v 0.559819 0.528569 0.847541
v 0.591069 0.497319 0.803347
v 0.250460 0.780790 0.847541
v 0.281710 0.812040 0.803347
v 0.219210 0.749540 0.714959
v 0.187960 0.718290 0.759153
v 0.440181 0.528569 0.714959
v 0.408931 0.497319 0.759153
v 0.471431 0.559819 0.847541
v 0.502681 0.591069 0.803347
v 0.411612 0.500000 0.875000
v 0.500000 0.588388 0.875000
v 0.588388 0.500000 0.875000
v 0.500000 0.411612 0.875000
v 0.411612 0.500000 0.687500
v 0.500000 0.411612 0.687500
v 0.588388 0.500000 0.687500
v 0.500000 0.588388 0.687500
vt 0.250000 0.406250
vt 0.250000 0.390625
vt 0.218750 0.390625
vt 0.218750 0.406250
vt 0.218750 0.328125
vt 0.234375 0.328125
vt 0.234375 0.406250
vt 0.250000 0.328125
vt 0.218750 0.296875
vt 0.250000 0.296875
vt 0.250000 0.250000
vt 0.218750 0.250000
usemtl blastfurnace_preheater
f 65/71 66/72 67/73 68/74
f 68/75 67/76 69/77 70/74
f 65/71 68/74 70/75 71/78
f 66/76 65/78 71/71 72/77
f 67/75 66/78 72/71 69/74
f 73/72 74/71 75/74 76/73
f 76/75 75/76 77/77 78/74
f 73/71 76/74 78/75 79/78
f 74/76 73/78 79/71 80/77
f 75/75 74/78 80/71 77/74
f 81/72 82/71 83/74 84/73
f 84/74 83/77 85/76 86/75
f 81/71 84/74 86/75 87/78
f 82/71 81/77 87/76 88/78
f 83/75 82/78 88/71 85/74
f 89/72 90/71 91/74 92/73
f 92/74 91/77 93/76 94/75
f 89/71 92/74 94/75 95/78
f 90/71 89/77 95/76 96/78
f 91/75 90/78 96/71 93/74
f 97/78 98/75 99/79 100/80
f 97/80 101/81 102/82 100/79
f 99/80 103/81 104/82 98/79
f 98/80 104/81 101/82 97/79
f 100/80 102/81 103/82 99/79

View File

@ -0,0 +1,18 @@
{
"elements": [{
"from": [ 0,0,0 ],
"to": [ 16,16,16 ],
"faces": {
"down": { "texture": "#bottom", "uv": [0,0,16,16] },
"up": { "texture": "#top", "uv": [0,0,16,16] },
"north": { "texture": "#north", "uv": [0,0,16,16] },
"south": { "texture": "#south", "uv": [0,0,16,16] },
"west": { "texture": "#west", "uv": [0,0,16,16] },
"east": { "texture": "#east", "uv": [0,0,16,16] }
}
}],
"textures":
{
"particle": "#top"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB