From cccc3e6852b8d315c594345887464e3d00e9432a Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Sun, 18 Jun 2017 11:03:00 +0200 Subject: [PATCH] Testing OBJ renderer Attempt to integrate OBJ render to world, very difficult with blockstate to understand, code failure commit --- .../fr/jackcartersmith/orbsat/OSBlocks.java | 6 +- .../orbsat/block/BlockType_Devices.java | 27 ++ .../orbsat/client/ClientProxy.java | 11 +- .../common/util/ComparableItemStack.java | 109 +++++ .../orbsat/common/util/Matrix4.java | 459 ++++++++++++++++++ .../orbsat/models/obj/OSOBJLoader.java | 63 +++ .../orbsat/models/obj/OSOBJModel.java | 96 ++++ .../assets/orbsat/blockstates/devices.json | 93 ++++ .../models/block/blastfurnace_preheater.mtl | 2 + .../models/block/blastfurnace_preheater.obj | 266 ++++++++++ .../orbsat/models/block/osSixSides.json | 18 + .../orbsat/textures/blocks/device_base.png | Bin 0 -> 299 bytes ....png => device_satelliteLauncher_back.png} | Bin ...png => device_satelliteLauncher_front.png} | Bin ....png => device_satelliteLauncher_side.png} | Bin .../metalDevice1_blast_furnace_preheater.png | Bin 0 -> 4257 bytes .../assets/orbsat/textures/items/railgun.png | Bin 5188 -> 0 bytes 17 files changed, 1143 insertions(+), 7 deletions(-) create mode 100644 src/main/java/fr/jackcartersmith/orbsat/block/BlockType_Devices.java create mode 100644 src/main/java/fr/jackcartersmith/orbsat/common/util/ComparableItemStack.java create mode 100644 src/main/java/fr/jackcartersmith/orbsat/common/util/Matrix4.java create mode 100644 src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJLoader.java create mode 100644 src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJModel.java create mode 100644 src/main/resources/assets/orbsat/blockstates/devices.json create mode 100644 src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.mtl create mode 100644 src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.obj create mode 100644 src/main/resources/assets/orbsat/models/block/osSixSides.json create mode 100644 src/main/resources/assets/orbsat/textures/blocks/device_base.png rename src/main/resources/assets/orbsat/textures/blocks/{solarPanelSides.png => device_satelliteLauncher_back.png} (100%) rename src/main/resources/assets/orbsat/textures/blocks/{solarPanelAdvTop.png => device_satelliteLauncher_front.png} (100%) rename src/main/resources/assets/orbsat/textures/blocks/{solarPanelAdvSides.png => device_satelliteLauncher_side.png} (100%) create mode 100644 src/main/resources/assets/orbsat/textures/blocks/metalDevice1_blast_furnace_preheater.png delete mode 100644 src/main/resources/assets/orbsat/textures/items/railgun.png diff --git a/src/main/java/fr/jackcartersmith/orbsat/OSBlocks.java b/src/main/java/fr/jackcartersmith/orbsat/OSBlocks.java index 14914a1..7dcce3b 100644 --- a/src/main/java/fr/jackcartersmith/orbsat/OSBlocks.java +++ b/src/main/java/fr/jackcartersmith/orbsat/OSBlocks.java @@ -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); } } diff --git a/src/main/java/fr/jackcartersmith/orbsat/block/BlockType_Devices.java b/src/main/java/fr/jackcartersmith/orbsat/block/BlockType_Devices.java new file mode 100644 index 0000000..ecca28d --- /dev/null +++ b/src/main/java/fr/jackcartersmith/orbsat/block/BlockType_Devices.java @@ -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; + } +} diff --git a/src/main/java/fr/jackcartersmith/orbsat/client/ClientProxy.java b/src/main/java/fr/jackcartersmith/orbsat/client/ClientProxy.java index a44e8c0..a90f359 100644 --- a/src/main/java/fr/jackcartersmith/orbsat/client/ClientProxy.java +++ b/src/main/java/fr/jackcartersmith/orbsat/client/ClientProxy.java @@ -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) { diff --git a/src/main/java/fr/jackcartersmith/orbsat/common/util/ComparableItemStack.java b/src/main/java/fr/jackcartersmith/orbsat/common/util/ComparableItemStack.java new file mode 100644 index 0000000..e833685 --- /dev/null +++ b/src/main/java/fr/jackcartersmith/orbsat/common/util/ComparableItemStack.java @@ -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; + } +} diff --git a/src/main/java/fr/jackcartersmith/orbsat/common/util/Matrix4.java b/src/main/java/fr/jackcartersmith/orbsat/common/util/Matrix4.java new file mode 100644 index 0000000..ce07812 --- /dev/null +++ b/src/main/java/fr/jackcartersmith/orbsat/common/util/Matrix4.java @@ -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 + 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)+"]"; + } +} + diff --git a/src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJLoader.java b/src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJLoader.java new file mode 100644 index 0000000..1e11270 --- /dev/null +++ b/src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJLoader.java @@ -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 enabledDomains = new HashSet(); + private final Map cache = new HashMap(); + private final Map errors = new HashMap(); + 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(); + } +} diff --git a/src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJModel.java b/src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJModel.java new file mode 100644 index 0000000..b4e1ad3 --- /dev/null +++ b/src/main/java/fr/jackcartersmith/orbsat/models/obj/OSOBJModel.java @@ -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 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 customData) + { + OSOBJModel ret = new OSOBJModel(this.getMatLib(), getResourceLocation(), getCustomData()); + return ret; + } + + @Override + public IModel retexture(ImmutableMap 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(); + } + } +} diff --git a/src/main/resources/assets/orbsat/blockstates/devices.json b/src/main/resources/assets/orbsat/blockstates/devices.json new file mode 100644 index 0000000..c8a908e --- /dev/null +++ b/src/main/resources/assets/orbsat/blockstates/devices.json @@ -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 } + }} + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.mtl b/src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.mtl new file mode 100644 index 0000000..a0868df --- /dev/null +++ b/src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.mtl @@ -0,0 +1,2 @@ +newmtl blastfurnace_preheater +map_Ka orbsat:blocks/metalDevice1_blast_furnace_preheater \ No newline at end of file diff --git a/src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.obj b/src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.obj new file mode 100644 index 0000000..14a795a --- /dev/null +++ b/src/main/resources/assets/orbsat/models/block/blastfurnace_preheater.obj @@ -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 \ No newline at end of file diff --git a/src/main/resources/assets/orbsat/models/block/osSixSides.json b/src/main/resources/assets/orbsat/models/block/osSixSides.json new file mode 100644 index 0000000..aca4a24 --- /dev/null +++ b/src/main/resources/assets/orbsat/models/block/osSixSides.json @@ -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" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/orbsat/textures/blocks/device_base.png b/src/main/resources/assets/orbsat/textures/blocks/device_base.png new file mode 100644 index 0000000000000000000000000000000000000000..d721a0a6dbb087c1bed250c79bc6d0ff09da0670 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpx|9k z7srr_Te*|H`Hm{^Fc-T`>)FYv&oVo9Eok^$>=Tu}*7o_G@3rq=@A@W@%+7pX zF8bSz&BxWZtvRLcFsEQkbD@FydI{kVHs?34;4v0!RMDIxl%hTLGs%GpE&%gg$c}8Z5g7cTI v7xo+f8(e6gx_n~s&$YIdEEYGU0^hK|@%Hyo4SneX^eBU;tDnm{r-UW|hckQW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/orbsat/textures/blocks/solarPanelSides.png b/src/main/resources/assets/orbsat/textures/blocks/device_satelliteLauncher_back.png similarity index 100% rename from src/main/resources/assets/orbsat/textures/blocks/solarPanelSides.png rename to src/main/resources/assets/orbsat/textures/blocks/device_satelliteLauncher_back.png diff --git a/src/main/resources/assets/orbsat/textures/blocks/solarPanelAdvTop.png b/src/main/resources/assets/orbsat/textures/blocks/device_satelliteLauncher_front.png similarity index 100% rename from src/main/resources/assets/orbsat/textures/blocks/solarPanelAdvTop.png rename to src/main/resources/assets/orbsat/textures/blocks/device_satelliteLauncher_front.png diff --git a/src/main/resources/assets/orbsat/textures/blocks/solarPanelAdvSides.png b/src/main/resources/assets/orbsat/textures/blocks/device_satelliteLauncher_side.png similarity index 100% rename from src/main/resources/assets/orbsat/textures/blocks/solarPanelAdvSides.png rename to src/main/resources/assets/orbsat/textures/blocks/device_satelliteLauncher_side.png diff --git a/src/main/resources/assets/orbsat/textures/blocks/metalDevice1_blast_furnace_preheater.png b/src/main/resources/assets/orbsat/textures/blocks/metalDevice1_blast_furnace_preheater.png new file mode 100644 index 0000000000000000000000000000000000000000..9bf0eb72ea01515afd3928bfb72dd4811f2fd695 GIT binary patch literal 4257 zcmXw7c|26@`#v+aAvEOGWFMj#Tck83F_JA}zOQwx&1-vwCfUQtP>r!qDqD!DtRY#` zSQNQZM&`{nuwCG>GHA`JEP6*yT|x+l@OWl_H)%_2A{IoUAQDQ7JTW0 z+yD{va%2f#XO+8|d-#2y6(g~|_WS?0!^pJ#vrj@s3a*hEiDk|Im4PAo(GL>|tA~H=B(71RmzW>tUbkyP8J=qWj9Lqq&Y4T!W zQaZP|1K;gy9~=}v3Xw`#Kc7)Vp8dHvl&$|RWK|+r`hqqT0Q5E(T=_I8K-F}o&i&q6 ze*EOg#8B9-04b!&Wk(UYy;9Q;relW#q|+_i(9UG(xb@w&T_yrS(71HzC|0>L6*u2= z`d!D*pFb@xu{`t|p8~14#(02{!KdF=RT^lgv=W}Zh95e`9rmN|+D68ulvbV4#Mg-| z-{vSD12JPbwmw(cUf{*KFCp1M!Y_xF7_b6sKY=gi5VRtKfaSGRXY{7D@tl;=&yR+tS8z~ z*E>g^WhO~FxVk3L2A{NO@*3N$fKTUR#Bv?O5a%&gIheIUTdi-c2o7g>Sd9Msxu%vD zSNS3Lqrc z%6nBIl4j}DRBc_>$dN&C5P7eildWasxr2h>A251(Ss|2_d;h z$HoR$L(;zN)OkZv^nbsY%V|f%X$YpVb=ovKF03~j(dl#pm|@clb9@{ePi7E*pAMx^ zRJU5yD2on`HzOkh-_ps^^S03rQ!;}hxvN!oe*x}PBt;&Mg(n~p1P~11=J$DHaNZh% z9#rBj+Zy>B)kbK=A8H{r0)-+)wEGM76^hCsPw2k3Rxx;BJm>T9;>!A5%z;3T4lgP;Q0BRXv{A147+9ihU_;8&(Sjop|2x9jR4vM-)EEcnx zzWLNT1$3^i;g2O@jQ`u+KpD?R-j6z(X1~u%ie)4H;IdXHs{QY}+lYY|!g2CvneYEv z3)jGRBuhj7ApSQEU->*QLSV=wnWV*Q$6jM_S`k4Ku8x_gcsVQ#g|-=eXK!y00kW)p z2pii~=sS&#v9`7!X1aL|35*l%Pp@(|7MFMrBE$d6`sA-xu4>_ZFzPaRTLb5_%1?T0 z-4{@o7cL6Jy(b~NT zVMDk(MyiqClM=IcR4Ew`mR0{nj?{z*$=)q0*q+6%m5teG<#TX$?x=O!tC_N$@iB*& zd!XJ2UVF-%pO=qVSXi6Dn);aMCnew{8irvy?@4z3e*UQzNzUf~1jC2vj+X!4`SHQl z+FZmqjgZ>hCsX|f@(eNRm|!|2;grn7b9GGELC z5NeQzIYGCZW-Q~=Xrhvmk`)rp2TLk@D?9AvVTa=Jx0K?*=I;qR+Y2cs5Ck7IsU93cunxrF3)hrruExM58{-yQXG) zKJ;CwfIODr$Eng|@KpZJ+gevj+-ocwqPz1k0$#4IOw=fFo;DrsdX=jhq7~m5Da4cI zxsQ2}vC5qE%=I`4t{FLFGWbG*YsHcs)zrT>Njk^YdItW^#4|h3?|s2-1##BDUT;J6HoVapY9p-?Tz^*D`KXP;l~EfYpYsN zO-LrQd-X32Q*rVXdA2wW*Fju)oWlcxf+{W+-1R67Ok6Gwc~Y1xLjD`@Mp2+SL7kd=S?B*qnxNr{INIQQd2=+1Fw!?x zg?gdZ@tIYjJ-(zIe^b0(0U%1Pmo%f$NI$PmRBU=gr)sLoVpm#;>%O^1wGa_rRN3}_E=p6?N_?M!PgzOrBr7HdVnIY!6bG{ht5tn1kq6z zrbvz6Gbr@H;iDMiPL8!0&!BD;bjmw6bG=|@blwGCQ`J8AU$@g)1q$B!Q~WS?G4 zjEOi19QY2^h#oqHr)SA&N^tb|&;F@O&gaN}>5x}1hsCdE;?KG;=(BqLX`U0NOBqRV z*CNX-1Aob8Nlj+OYx7cZH`febE+xjz!NDc9eGZO=S;Ma?@zZD^n8($f8GCKewV2

!NbT> zL~>6etg-M~rwR`pgs{qSgfQ|U_8wqVOnfo*etR1OE&?HH2}Ly6T4PT`;um&!UL5=` zhZQ5cxw(nC{SA&`=TjlUE~krcb9C4W(UrAV;0a-?wPV!vU66z7(c?+40*Y&|Fw_)g!_K@4l5Q*KlxG^tI6xc5kn9V z!uOKBQ@s>DcQ|$?5^-W-i49bVRsbF4%$8~ zEv<^MDnL71AzV6?Ow0aBz9$pWH6obl;go5g=~+94lQ&Bj*!x{mTYFB-lfQz-94VE3 zrfN}lb2&1EPjv_MW7;Eg?e{?4iUk#(i%*yYzl);G?&`Pcx&^-ED?;m4cFPb51UWKQ zPnH|frU6<|Psc{K8VP)_u9iiOGwM{$0I41&{|&+RrTq9>XTLAnH!0l$rTTk;(VLPc zS5?!sx5n?Od7mQBrkTjJ?rgGiU)YH8B+Fc+^gKEp=nEO;VRm*B=R5eF8*cIVX6c$M z7k6wekIiV-p(r^!HM~6wIRp<62sl*-*0_O9CWzFxtq5>8P4DQT3 zSG{@#`ZD_`0l9skyZ958=_3bel{c~y3t>4ys_N?3BO)YnH0_r;yHRlLtCkl1>q4V< z%X!pQRcAjH7^PNEN~srf|62rljCU+n=7EygT}<+fqn-*8e{uE)J}?%3_o+)m^OwzQ zdAdBmmfh?l3}*Ig7u40&v9MT>5p{^B$Plh%*-Oby>n)Puc};9JjANz_db%+d*KM1t zod+9c7j#J$H@O}C4Fio zELs`^$!D!EfL0jaa=0#3Y5Z}yb~L%i0X^MK&`xzSD32#Hm5*=e_3!isOt$#` z=b88_3jO*@L2qURK=sTiA~GLg49cms$3+PX&|$e?iyr>OJDW3=bAx_6?{`pXm zb$d%O%E;)uZX%|XUrkc&xne!NR^3FeO@Ko|aejoRK;=kj5;4E|Ow!1$N*4jZ$MVgM z{(dNY`=G)<(EMeOx~KFo4Oj8{4LiYK;;_!`Ky?4%UwXgB2?5U7F4LwY{NY4mg;#mU zTFd$_Jh(+1hxO%ZLouJhqMsp@$sLyw1!Y^nz$cl9qg_9yjaPHO4)lKU6w)oNc^{+%=zvP5mpPJKX8Ryo-bbv3>F;gLeVdZEbu=t`j_f>Oz%nJRhLuu8T z#+g8Dz?n|o8FdPjD3y|9>Or;j{gj@gAvh3FS65z{agvz+FgRYX-w-W5z$J4jT2SQO z#K6ZQgC0&n(cS*@%aBEPQvJwXb~q+_4?`CXcFe)zRXWQ)~WRqQ2zE@^D@$WEV zLDv=6T_W+C?h_hw-o9&d+Ba;J6EMP6wm#uiJi?{!T(42c=K%k`um6?Jo?(x&RtqS2 zu7V`wXx0zC>nKu5z;}eq_Z{kp$%6+2F-=zw!YY$@XK{^dMOD-AQ?8T3OJY(ve$- z6w!nNzoMTJZ$&OLl$#W=rY`0x#j`WPk1l-o-vTTW*WYqnO;T6po%cVZ5^fOxGETdo z!wgqsftZ{$d)3@b4X9i8A!gClg%UjON56C9X*=#3*6NVf+A_VgYnG1DkpN)D_wnTv zpJBQWNCH&P7{Jj8}8CzYhz`Ec4KZO7P;s5{u literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/orbsat/textures/items/railgun.png b/src/main/resources/assets/orbsat/textures/items/railgun.png deleted file mode 100644 index e519a83bdb3753b22270fa62c23208590b76d9c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5188 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