Testing OBJ renderer
Attempt to integrate OBJ render to world, very difficult with blockstate to understand, code failure commit
@ -1,13 +1,15 @@
|
|||||||
package fr.jackcartersmith.orbsat;
|
package fr.jackcartersmith.orbsat;
|
||||||
|
|
||||||
import fr.jackcartersmith.orbsat.block.BlockOSBase;
|
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.material.Material;
|
||||||
import net.minecraft.block.properties.PropertyEnum;
|
import net.minecraft.block.properties.PropertyEnum;
|
||||||
|
|
||||||
public class OSBlocks {
|
public class OSBlocks {
|
||||||
public static BlockOSBase satelliteLauncher;
|
public static BlockOSBase devices;
|
||||||
|
|
||||||
public static void init(){
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ import fr.jackcartersmith.orbsat.OSRefs;
|
|||||||
import fr.jackcartersmith.orbsat.block.OSBlockInterface.IOSMetaBlock;
|
import fr.jackcartersmith.orbsat.block.OSBlockInterface.IOSMetaBlock;
|
||||||
import fr.jackcartersmith.orbsat.common.CommonProxy;
|
import fr.jackcartersmith.orbsat.common.CommonProxy;
|
||||||
import fr.jackcartersmith.orbsat.item.ItemOSBase;
|
import fr.jackcartersmith.orbsat.item.ItemOSBase;
|
||||||
|
import fr.jackcartersmith.orbsat.models.obj.OSOBJLoader;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.ItemMeshDefinition;
|
import net.minecraft.client.renderer.ItemMeshDefinition;
|
||||||
@ -15,18 +16,18 @@ import net.minecraft.item.Item;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.client.model.ModelLoader;
|
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;
|
import net.minecraftforge.fml.common.registry.GameData;
|
||||||
|
|
||||||
public class ClientProxy extends CommonProxy{
|
public class ClientProxy extends CommonProxy{
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerRender(){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preInit(){
|
public void preInit(){
|
||||||
Minecraft.getMinecraft().getFramebuffer().enableStencil();//Enabling FBO stencils
|
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)
|
for(Block block : OSRefs.registeredOSBlocks)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
459
src/main/java/fr/jackcartersmith/orbsat/common/util/Matrix4.java
Normal 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)+"]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
93
src/main/resources/assets/orbsat/blockstates/devices.json
Normal 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 }
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
newmtl blastfurnace_preheater
|
||||||
|
map_Ka orbsat:blocks/metalDevice1_blast_furnace_preheater
|
@ -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
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
BIN
src/main/resources/assets/orbsat/textures/blocks/device_base.png
Normal file
After Width: | Height: | Size: 299 B |
Before Width: | Height: | Size: 602 B After Width: | Height: | Size: 602 B |
Before Width: | Height: | Size: 630 B After Width: | Height: | Size: 630 B |
Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 540 B |
After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 5.1 KiB |