From 74e18f37fc47a8f0fab36558ea1973a753b86e2c Mon Sep 17 00:00:00 2001 From: KitsuShadow Date: Tue, 9 Feb 2016 10:12:44 -0500 Subject: [PATCH] damascus_steel_wasnt_dropping --- bin/com/kitsu/medievalcraft/Main.class | Bin 6946 -> 6946 bytes .../block/crucible/CrucibleWootz.class | Bin 4801 -> 4858 bytes .../java/com/kitsu/medievalcraft/Main.java | 2 +- .../block/crucible/CrucibleWootz.java | 3 +- .../model_loader/AdvancedModelLoader.java | 81 +++++++++++++++ .../model_loader/IModelCustom.java | 17 ++++ .../model_loader/IModelCustomLoader.java | 30 ++++++ .../model_loader/ModelFormatException.java | 33 +++++++ .../medievalcraft/model_loader/obj/Face.java | 92 ++++++++++++++++++ 9 files changed, 255 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/kitsu/medievalcraft/model_loader/AdvancedModelLoader.java create mode 100644 src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustom.java create mode 100644 src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustomLoader.java create mode 100644 src/main/java/com/kitsu/medievalcraft/model_loader/ModelFormatException.java create mode 100644 src/main/java/com/kitsu/medievalcraft/model_loader/obj/Face.java diff --git a/bin/com/kitsu/medievalcraft/Main.class b/bin/com/kitsu/medievalcraft/Main.class index c4f7e9c31180a39aa60bfb3ef6b91678c0f7e66f..65d682061efda1cf1a8a6d87366b9abaaa89564e 100644 GIT binary patch delta 30 mcmZ2vw#aP4R&Gm129{#K)DlJp+sTQ-qLcMl)i?f8lL7#c0SOHN delta 30 mcmZ2vw#aP4R&EPM29{#K)DlJp+sTQ-qLcMl)i?f8lL7#b>In=0 diff --git a/bin/com/kitsu/medievalcraft/block/crucible/CrucibleWootz.class b/bin/com/kitsu/medievalcraft/block/crucible/CrucibleWootz.class index 6b8c2e2445a981d6fa29f43f30ceb6f102ea4bc8..4017a77f6504d15543d93222204307cf44a8c122 100644 GIT binary patch delta 582 zcmaiw%TE(g6vltIop$PU+KyFXz@l*hN@~E=#GP*3*p-Pa@DUfo6e@%k6Iyl0LJWy6 zT-?M33*$mX5g+9-71Wx>-~&Pw{}~fVj3*-zb}sI@zjO0_-@W%VJ2pG4)!)kvAjd|{ zTC@({=dsNbt}0>$x8#m_)v-NXV%p}JUa@{Ub2c-)usF(s%_6>@jvvasW!Yp&;S9Ss z+@5M>Xr$+YTP}>2Y~Jx+VU`DORr2ME!Z?=i%ExHvU-9G7&o*E9s=MqHYIXjyeLn20 zlOhW0WOjkhDb=l)QZwqdZlrp3-AU*PXJ6Y>BV1>q&ZN)XzM8x|j3xCH3BBQD$NN;8 ziz>$z;&OWCZyGiU=_Hp{+E4)vk|7jOQ79bHH6bIQ=Ry&xVu}&kVs?u=;*+n7XI4%V z(!G@RYJk_g!4%V3lIWXzQ{%O4roF}RnKvHsur=bCKJ_UMXVV`tll%GTwM%V!Erx8L zyks)zv$CxcgUG)9PZkMeLE75xv}Taj|1U1O6Suxwx3+!j&iJ~6ak*0aIe^Cz3Y=z; ca}D-0qclyWh=u2fh`nxXbY)>fVj)Iph>C=Sm8FH{O)M;=3vczP zwo|V(-bAplwDLPh#Bnt#D~o&XcTT?VJNKOXUVl-qKYX4P0CeCvt><*LAFB*&{8fK3 z_Zc>@siP5ThC^idnYTvGA+N#VZ{9%g2*(n%L~M3CnwXX#H$|JH9-MNl9D=d$mUz+l8kuJdt&J diff --git a/src/main/java/com/kitsu/medievalcraft/Main.java b/src/main/java/com/kitsu/medievalcraft/Main.java index 02e31e03..a6ba725c 100644 --- a/src/main/java/com/kitsu/medievalcraft/Main.java +++ b/src/main/java/com/kitsu/medievalcraft/Main.java @@ -57,7 +57,7 @@ public class Main { public static final String MODID = "kitsumedievalcraft"; public static final String MODNAME = "ForgeCraft"; - public static final String VERSION = "2.3.8"; + public static final String VERSION = "2.3.9"; public static SimpleNetworkWrapper sNet; diff --git a/src/main/java/com/kitsu/medievalcraft/block/crucible/CrucibleWootz.java b/src/main/java/com/kitsu/medievalcraft/block/crucible/CrucibleWootz.java index 91af878a..396610fa 100644 --- a/src/main/java/com/kitsu/medievalcraft/block/crucible/CrucibleWootz.java +++ b/src/main/java/com/kitsu/medievalcraft/block/crucible/CrucibleWootz.java @@ -84,10 +84,9 @@ public class CrucibleWootz extends CrucibleBase{ if(meta == 2){ world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(Blocks.stone_slab, 1, 0))); world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(ModBlocks.emptyCookedCrucible, 1, 0))); - //world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(ModBlocks.damascusIngot, 1, 0))); + world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(ModBlocks.damascus, 1, 0))); world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(Blocks.glass, 1, 0))); } - } } diff --git a/src/main/java/com/kitsu/medievalcraft/model_loader/AdvancedModelLoader.java b/src/main/java/com/kitsu/medievalcraft/model_loader/AdvancedModelLoader.java new file mode 100644 index 00000000..379a45e7 --- /dev/null +++ b/src/main/java/com/kitsu/medievalcraft/model_loader/AdvancedModelLoader.java @@ -0,0 +1,81 @@ +/* +package com.kitsu.medievalcraft.model_loader; +import java.util.Collection; +import java.util.Map; + +import com.google.common.collect.Maps; + +import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.obj.ObjModelLoader; +import net.minecraftforge.client.model.techne.TechneModelLoader; +import net.minecraftforge.common.ForgeVersion.Status; + + + +/** + * Common interface for advanced model loading from files, based on file suffix + * Model support can be queried through the {@link #getSupportedSuffixes()} method. + * Instances can be created by calling {loadModel(String)} with a class-loadable-path + * + * @author cpw + * + +@SideOnly(Side.CLIENT) +public class AdvancedModelLoader { + private static Map instances = Maps.newHashMap(); + + /** + * Register a new model handler + * @param modelHandler The model handler to register + + public static void registerModelHandler(IModelCustomLoader modelHandler) + { + for (String suffix : modelHandler.getSuffixes()) + { + instances.put(suffix, modelHandler); + } + } + + /** + * Load the model from the supplied classpath resolvable resource name + * @param resource The resource name + * @return A model + * @throws IllegalArgumentException if the resource name cannot be understood + * @throws ModelFormatException if the underlying model handler cannot parse the model format + + public static IModelCustom loadModel(ResourceLocation resource) throws IllegalArgumentException, ModelFormatException + { + String name = resource.getResourcePath(); + int i = name.lastIndexOf('.'); + if (i == -1) + { + FMLLog.severe("The resource name %s is not valid", resource); + throw new IllegalArgumentException("The resource name is not valid"); + } + String suffix = name.substring(i+1); + IModelCustomLoader loader = instances.get(suffix); + if (loader == null) + { + FMLLog.severe("The resource name %s is not supported", resource); + throw new IllegalArgumentException("The resource name is not supported"); + } + + return loader.loadInstance(resource); + } + + public static Collection getSupportedSuffixes() + { + return instances.keySet(); + } + + + static + { + registerModelHandler(new ObjModelLoader()); + registerModelHandler(new TechneModelLoader()); + } +} +*/ \ No newline at end of file diff --git a/src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustom.java b/src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustom.java new file mode 100644 index 00000000..bde5566b --- /dev/null +++ b/src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustom.java @@ -0,0 +1,17 @@ +package com.kitsu.medievalcraft.model_loader; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public interface IModelCustom +{ + String getType(); + @SideOnly(Side.CLIENT) + void renderAll(); + @SideOnly(Side.CLIENT) + void renderOnly(String... groupNames); + @SideOnly(Side.CLIENT) + void renderPart(String partName); + @SideOnly(Side.CLIENT) + void renderAllExcept(String... excludedGroupNames); +} diff --git a/src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustomLoader.java b/src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustomLoader.java new file mode 100644 index 00000000..dd1532e5 --- /dev/null +++ b/src/main/java/com/kitsu/medievalcraft/model_loader/IModelCustomLoader.java @@ -0,0 +1,30 @@ +package com.kitsu.medievalcraft.model_loader; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ModelFormatException; + +/** + * Instances of this class act as factories for their model type + * + * @author cpw + * + */ +public interface IModelCustomLoader { + /** + * Get the main type name for this loader + * @return the type name + */ + String getType(); + /** + * Get resource suffixes this model loader recognizes + * @return a list of suffixes + */ + String[] getSuffixes(); + /** + * Load a model instance from the supplied path + * @param resource The ResourceLocation of the model + * @return A model instance + * @throws ModelFormatException if the model format is not correct + */ + IModelCustom loadInstance(ResourceLocation resource) throws ModelFormatException; +} \ No newline at end of file diff --git a/src/main/java/com/kitsu/medievalcraft/model_loader/ModelFormatException.java b/src/main/java/com/kitsu/medievalcraft/model_loader/ModelFormatException.java new file mode 100644 index 00000000..a7346b04 --- /dev/null +++ b/src/main/java/com/kitsu/medievalcraft/model_loader/ModelFormatException.java @@ -0,0 +1,33 @@ +package com.kitsu.medievalcraft.model_loader; + +/** + * Thrown if there is a problem parsing the model + * + * @author cpw + * + */ +public class ModelFormatException extends RuntimeException { + + private static final long serialVersionUID = 2023547503969671835L; + + public ModelFormatException() + { + super(); + } + + public ModelFormatException(String message, Throwable cause) + { + super(message, cause); + } + + public ModelFormatException(String message) + { + super(message); + } + + public ModelFormatException(Throwable cause) + { + super(cause); + } + +} \ No newline at end of file diff --git a/src/main/java/com/kitsu/medievalcraft/model_loader/obj/Face.java b/src/main/java/com/kitsu/medievalcraft/model_loader/obj/Face.java new file mode 100644 index 00000000..b019d76f --- /dev/null +++ b/src/main/java/com/kitsu/medievalcraft/model_loader/obj/Face.java @@ -0,0 +1,92 @@ +/* +package com.kitsu.medievalcraft.model_loader.obj; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.model.obj.TextureCoordinate; +import net.minecraftforge.client.model.obj.Vertex; + + +public class Face +{ + public Vertex[] vertices; + public Vertex[] vertexNormals; + public Vertex faceNormal; + public TextureCoordinate[] textureCoordinates; + + @SideOnly(Side.CLIENT) + public void addFaceForRender(WorldRenderer worldRenderer) + { + addFaceForRender(worldRenderer, 0.0005F); + } + + @SideOnly(Side.CLIENT) + public void addFaceForRender(WorldRenderer worldRenderer, float textureOffset) + { + if (faceNormal == null) + { + faceNormal = this.calculateFaceNormal(); + } + + //worldRenderer.normal(faceNormal.x, faceNormal.y, faceNormal.z); + + + float averageU = 0F; + float averageV = 0F; + + if ((textureCoordinates != null) && (textureCoordinates.length > 0)) + { + for (int i = 0; i < textureCoordinates.length; ++i) + { + averageU += textureCoordinates[i].u; + averageV += textureCoordinates[i].v; + } + + averageU = averageU / textureCoordinates.length; + averageV = averageV / textureCoordinates.length; + } + + float offsetU, offsetV; + + for (int i = 0; i < vertices.length; ++i) + { + + if ((textureCoordinates != null) && (textureCoordinates.length > 0)) + { + offsetU = textureOffset; + offsetV = textureOffset; + + if (textureCoordinates[i].u > averageU) + { + offsetU = -offsetU; + } + if (textureCoordinates[i].v > averageV) + { + offsetV = -offsetV; + } + + worldRenderer.pos(vertices[i].x, vertices[i].y, vertices[i].z).tex(textureCoordinates[i].u + offsetU, + textureCoordinates[i].v + offsetV); + } + else + { + worldRenderer.pos(vertices[i].x, vertices[i].y, vertices[i].z); + } + } + } + + public Vertex calculateFaceNormal() + { + Vec3 v0 = new Vec3(vertices[1].x - vertices[0].x, vertices[1].y - vertices[0].y, vertices[1].z - vertices[0].z); + //Vec3 v1 = new Vec3(, , ); + //Vec3 v2 = new Vec3(vertices[2].x - vertices[0].x, vertices[2].y - vertices[0].y, vertices[2].z - vertices[0].z); + Vec3 normalVector = null; + + //normalVector = v1.crossProduct(v2).normalize(); + + return new Vertex((float) normalVector.xCoord, (float) normalVector.yCoord, (float) normalVector.zCoord); + } +} +*/ \ No newline at end of file