mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
finished fallout config, some call list performance tests
This commit is contained in:
parent
d011ada90d
commit
fca57450ac
@ -1,5 +1,6 @@
|
||||
package com.hbm.blocks.generic;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
@ -28,6 +29,7 @@ import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompressedStreamTools;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
@ -129,6 +131,11 @@ public class BlockStorageCrate extends BlockContainer {
|
||||
|
||||
if(!nbt.hasNoTags()) {
|
||||
drop.stackTagCompound = nbt;
|
||||
|
||||
try {
|
||||
byte[] abyte = CompressedStreamTools.compress(nbt);
|
||||
//System.out.println("size: " + abyte.length); //TODO: test capacity, make sure size is <20% of maximum allowed payload
|
||||
} catch(IOException e) { }
|
||||
}
|
||||
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop));
|
||||
|
||||
@ -6,6 +6,7 @@ import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.IBlockMulti;
|
||||
import com.hbm.blocks.ILookOverlay;
|
||||
import com.hbm.blocks.ITooltipProvider;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.tool.ItemLock;
|
||||
import com.hbm.lib.RefStrings;
|
||||
@ -29,11 +30,12 @@ import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
||||
|
||||
public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILookOverlay {
|
||||
public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILookOverlay, ITooltipProvider {
|
||||
|
||||
@SideOnly(Side.CLIENT) private IIcon[] iconTop;
|
||||
@SideOnly(Side.CLIENT) private IIcon[] iconSide;
|
||||
@ -262,4 +264,17 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
|
||||
|
||||
ILookOverlay.printGeneric(event, title, full ? 0xffff00 : 0x00ffff, full ? 0x404000 : 0x004040, text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
|
||||
|
||||
if(!stack.hasTagCompound()) return;
|
||||
|
||||
ItemStack type = ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot1"));
|
||||
|
||||
if(type != null) {
|
||||
list.add(EnumChatFormatting.GOLD + type.getDisplayName());
|
||||
list.add("x" + String.format("%,d", stack.stackTagCompound.getInteger("stack")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@ -155,7 +156,7 @@ public class FalloutConfigJSON {
|
||||
|
||||
try {
|
||||
JsonObject json = gson.fromJson(new FileReader(config), JsonObject.class);
|
||||
JsonArray recipes = json.get("recipes").getAsJsonArray();
|
||||
JsonArray recipes = json.get("entries").getAsJsonArray();
|
||||
List<FalloutEntry> conf = new ArrayList();
|
||||
|
||||
for(JsonElement recipe : recipes) {
|
||||
@ -163,7 +164,9 @@ public class FalloutConfigJSON {
|
||||
}
|
||||
return conf;
|
||||
|
||||
} catch(Exception ex) { }
|
||||
} catch(Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
@ -274,6 +277,9 @@ public class FalloutConfigJSON {
|
||||
if(obj.has("matchesMeta")) entry.mM(obj.get("matchesMeta").getAsInt());
|
||||
if(obj.has("mustBeOpaque")) entry.mO(obj.get("mustBeOpaque").getAsBoolean());
|
||||
if(obj.has("matchesMaterial")) entry.mMa(matNames.get(obj.get("mustBeOpaque").getAsString()));
|
||||
|
||||
if(obj.has("primarySubstitution")) entry.prim(readMetaArray(obj.get("primarySubstitution")));
|
||||
if(obj.has("secondarySubstitutions")) entry.sec(readMetaArray(obj.get("secondarySubstitutions")));
|
||||
|
||||
return entry;
|
||||
}
|
||||
@ -294,8 +300,26 @@ public class FalloutConfigJSON {
|
||||
writer.setIndent(" ");
|
||||
}
|
||||
|
||||
private static Triplet<Block, Integer, Integer>[] readMetaArray(JsonObject obj) {
|
||||
return null; //TODO
|
||||
private static Triplet<Block, Integer, Integer>[] readMetaArray(JsonElement jsonElement) {
|
||||
|
||||
if(!jsonElement.isJsonArray()) return null;
|
||||
|
||||
JsonArray array = jsonElement.getAsJsonArray();
|
||||
Triplet<Block, Integer, Integer>[] metaArray = new Triplet[array.size()];
|
||||
|
||||
for(int i = 0; i < metaArray.length; i++) {
|
||||
JsonElement metaBlock = array.get(i);
|
||||
|
||||
if(!metaBlock.isJsonArray()) {
|
||||
throw new IllegalStateException("Could not read meta block " + metaBlock.toString());
|
||||
}
|
||||
|
||||
JsonArray mBArray = metaBlock.getAsJsonArray();
|
||||
|
||||
metaArray[i] = new Triplet(Block.blockRegistry.getObject(mBArray.get(0).getAsString()), mBArray.get(1).getAsInt(), mBArray.get(2).getAsInt());
|
||||
}
|
||||
|
||||
return metaArray;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -15,12 +15,11 @@ public class S_Face {
|
||||
public Vertex[] vertexNormals;
|
||||
public Vertex faceNormal;
|
||||
public TextureCoordinate[] textureCoordinates;
|
||||
|
||||
/*public S_Face copy() {
|
||||
S_Face f = new S_Face();
|
||||
|
||||
return f;
|
||||
}*/
|
||||
private boolean smoothing;
|
||||
|
||||
public S_Face(boolean smoothing) {
|
||||
this.smoothing = smoothing;
|
||||
}
|
||||
|
||||
public void addFaceForRender(Tessellator tessellator) {
|
||||
addFaceForRender(tessellator, 0.0F);
|
||||
@ -32,7 +31,9 @@ public class S_Face {
|
||||
this.faceNormal = calculateFaceNormal();
|
||||
}
|
||||
|
||||
tessellator.setNormal(this.faceNormal.x, this.faceNormal.y, this.faceNormal.z);
|
||||
if(!this.smoothing) {
|
||||
tessellator.setNormal(this.faceNormal.x, this.faceNormal.y, this.faceNormal.z);
|
||||
}
|
||||
|
||||
float averageU = 0.0F;
|
||||
float averageV = 0.0F;
|
||||
@ -48,25 +49,25 @@ public class S_Face {
|
||||
averageV /= this.textureCoordinates.length;
|
||||
}
|
||||
|
||||
for (int i = 0; i < this.vertices.length; i++) {
|
||||
|
||||
if ((this.textureCoordinates != null) && (this.textureCoordinates.length > 0)) {
|
||||
|
||||
for(int i = 0; i < this.vertices.length; i++) {
|
||||
|
||||
if((this.textureCoordinates != null) && (this.textureCoordinates.length > 0)) {
|
||||
|
||||
float offsetU = textureOffset;
|
||||
float offsetV = textureOffset;
|
||||
|
||||
if (this.textureCoordinates[i].u > averageU) {
|
||||
|
||||
if(this.textureCoordinates[i].u > averageU) {
|
||||
offsetU = -offsetU;
|
||||
}
|
||||
if (this.textureCoordinates[i].v > averageV) {
|
||||
if(this.textureCoordinates[i].v > averageV) {
|
||||
offsetV = -offsetV;
|
||||
}
|
||||
if ((this.vertexNormals != null) && (i < this.vertexNormals.length)) {
|
||||
if(this.smoothing && (this.vertexNormals != null) && (i < this.vertexNormals.length)) {
|
||||
tessellator.setNormal(this.vertexNormals[i].x, this.vertexNormals[i].y, this.vertexNormals[i].z);
|
||||
}
|
||||
|
||||
|
||||
tessellator.addVertexWithUV(this.vertices[i].x, this.vertices[i].y, this.vertices[i].z, this.textureCoordinates[i].u + offsetU, this.textureCoordinates[i].v + offsetV);
|
||||
|
||||
|
||||
} else {
|
||||
tessellator.addVertex(this.vertices[i].x, this.vertices[i].y, this.vertices[i].z);
|
||||
}
|
||||
|
||||
@ -1,79 +0,0 @@
|
||||
package com.hbm.render.loader;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraftforge.client.model.IModelCustom;
|
||||
import net.minecraftforge.client.model.obj.Vertex;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public abstract class S_ModelCustom implements IModelCustom {
|
||||
|
||||
public float min = 100000.0F;
|
||||
public float minX = 100000.0F;
|
||||
public float minY = 100000.0F;
|
||||
public float minZ = 100000.0F;
|
||||
public float max = -100000.0F;
|
||||
public float maxX = -100000.0F;
|
||||
public float maxY = -100000.0F;
|
||||
public float maxZ = -100000.0F;
|
||||
public float size = 0.0F;
|
||||
public float sizeX = 0.0F;
|
||||
public float sizeY = 0.0F;
|
||||
public float sizeZ = 0.0F;
|
||||
|
||||
public void checkMinMax(Vertex v) {
|
||||
if (v.x < this.minX) {
|
||||
this.minX = v.x;
|
||||
}
|
||||
if (v.y < this.minY) {
|
||||
this.minY = v.y;
|
||||
}
|
||||
if (v.z < this.minZ) {
|
||||
this.minZ = v.z;
|
||||
}
|
||||
if (v.x > this.maxX) {
|
||||
this.maxX = v.x;
|
||||
}
|
||||
if (v.y > this.maxY) {
|
||||
this.maxY = v.y;
|
||||
}
|
||||
if (v.z > this.maxZ) {
|
||||
this.maxZ = v.z;
|
||||
}
|
||||
}
|
||||
|
||||
public void checkMinMaxFinal() {
|
||||
if (this.minX < this.min) {
|
||||
this.min = this.minX;
|
||||
}
|
||||
if (this.minY < this.min) {
|
||||
this.min = this.minY;
|
||||
}
|
||||
if (this.minZ < this.min) {
|
||||
this.min = this.minZ;
|
||||
}
|
||||
if (this.maxX > this.max) {
|
||||
this.max = this.maxX;
|
||||
}
|
||||
if (this.maxY > this.max) {
|
||||
this.max = this.maxY;
|
||||
}
|
||||
if (this.maxZ > this.max) {
|
||||
this.max = this.maxZ;
|
||||
}
|
||||
this.sizeX = (this.maxX - this.minX);
|
||||
this.sizeY = (this.maxY - this.minY);
|
||||
this.sizeZ = (this.maxZ - this.minZ);
|
||||
this.size = (this.max - this.min);
|
||||
}
|
||||
|
||||
public abstract boolean containsPart(String paramString);
|
||||
|
||||
public abstract void renderAll(int paramInt1, int paramInt2);
|
||||
|
||||
public abstract void renderAllLine(int paramInt1, int paramInt2);
|
||||
|
||||
public abstract int getVertexNum();
|
||||
|
||||
public abstract int getFaceNum();
|
||||
}
|
||||
@ -1,633 +0,0 @@
|
||||
package com.hbm.render.loader;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.resources.IResource;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.ModelFormatException;
|
||||
import net.minecraftforge.client.model.obj.TextureCoordinate;
|
||||
import net.minecraftforge.client.model.obj.Vertex;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class S_WavefrontObject extends S_ModelCustom
|
||||
{
|
||||
private static Pattern vertexPattern = Pattern.compile("(v( (\\-){0,1}\\d+\\.\\d+){3,4} *\\n)|(v( (\\-){0,1}\\d+\\.\\d+){3,4} *$)");
|
||||
private static Pattern vertexNormalPattern = Pattern.compile("(vn( (\\-){0,1}\\d+\\.\\d+){3,4} *\\n)|(vn( (\\-){0,1}\\d+\\.\\d+){3,4} *$)");
|
||||
private static Pattern textureCoordinatePattern = Pattern.compile("(vt( (\\-){0,1}\\d+\\.\\d+){2,3} *\\n)|(vt( (\\-){0,1}\\d+\\.\\d+){2,3} *$)");
|
||||
private static Pattern face_V_VT_VN_Pattern = Pattern.compile("(f( \\d+/\\d+/\\d+){3,4} *\\n)|(f( \\d+/\\d+/\\d+){3,4} *$)");
|
||||
private static Pattern face_V_VT_Pattern = Pattern.compile("(f( \\d+/\\d+){3,4} *\\n)|(f( \\d+/\\d+){3,4} *$)");
|
||||
private static Pattern face_V_VN_Pattern = Pattern.compile("(f( \\d+//\\d+){3,4} *\\n)|(f( \\d+//\\d+){3,4} *$)");
|
||||
private static Pattern face_V_Pattern = Pattern.compile("(f( \\d+){3,4} *\\n)|(f( \\d+){3,4} *$)");
|
||||
private static Pattern groupObjectPattern = Pattern.compile("([go]( [-\\$\\w\\d]+) *\\n)|([go]( [-\\$\\w\\d]+) *$)");
|
||||
private static Matcher vertexMatcher;
|
||||
private static Matcher vertexNormalMatcher;
|
||||
private static Matcher textureCoordinateMatcher;
|
||||
private static Matcher face_V_VT_VN_Matcher;
|
||||
private static Matcher face_V_VT_Matcher;
|
||||
private static Matcher face_V_VN_Matcher;
|
||||
private static Matcher face_V_Matcher;
|
||||
private static Matcher groupObjectMatcher;
|
||||
public ArrayList<Vertex> vertices = new ArrayList();
|
||||
public ArrayList<Vertex> vertexNormals = new ArrayList();
|
||||
public ArrayList<TextureCoordinate> textureCoordinates = new ArrayList();
|
||||
public ArrayList<S_GroupObject> groupObjects = new ArrayList();
|
||||
private S_GroupObject currentS_GroupObject;
|
||||
private String fileName;
|
||||
|
||||
public S_WavefrontObject(ResourceLocation resource)
|
||||
throws ModelFormatException
|
||||
{
|
||||
this.fileName = resource.toString();
|
||||
try
|
||||
{
|
||||
IResource res = Minecraft.getMinecraft().getResourceManager().getResource(resource);
|
||||
loadObjModel(res.getInputStream());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new ModelFormatException("IO Exception reading model format", e);
|
||||
}
|
||||
}
|
||||
|
||||
public S_WavefrontObject(String fileName, URL resource)
|
||||
throws ModelFormatException
|
||||
{
|
||||
this.fileName = fileName;
|
||||
try
|
||||
{
|
||||
loadObjModel(resource.openStream());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new ModelFormatException("IO Exception reading model format", e);
|
||||
}
|
||||
}
|
||||
|
||||
public S_WavefrontObject(String filename, InputStream inputStream)
|
||||
throws ModelFormatException
|
||||
{
|
||||
this.fileName = filename;
|
||||
loadObjModel(inputStream);
|
||||
}
|
||||
|
||||
public boolean containsPart(String partName)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
if (partName.equalsIgnoreCase(groupObject.name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void loadObjModel(InputStream inputStream)
|
||||
throws ModelFormatException
|
||||
{
|
||||
BufferedReader reader = null;
|
||||
|
||||
String currentLine = null;
|
||||
int lineCount = 0;
|
||||
try
|
||||
{
|
||||
reader = new BufferedReader(new InputStreamReader(inputStream));
|
||||
while ((currentLine = reader.readLine()) != null)
|
||||
{
|
||||
lineCount++;
|
||||
currentLine = currentLine.replaceAll("\\s+", " ").trim();
|
||||
if ((!currentLine.startsWith("#")) && (currentLine.length() != 0)) {
|
||||
if (currentLine.startsWith("v "))
|
||||
{
|
||||
Vertex vertex = parseVertex(currentLine, lineCount);
|
||||
if (vertex != null)
|
||||
{
|
||||
checkMinMax(vertex);
|
||||
this.vertices.add(vertex);
|
||||
}
|
||||
}
|
||||
else if (currentLine.startsWith("vn "))
|
||||
{
|
||||
Vertex vertex = parseVertexNormal(currentLine, lineCount);
|
||||
if (vertex != null) {
|
||||
this.vertexNormals.add(vertex);
|
||||
}
|
||||
}
|
||||
else if (currentLine.startsWith("vt "))
|
||||
{
|
||||
TextureCoordinate textureCoordinate = parseTextureCoordinate(currentLine, lineCount);
|
||||
if (textureCoordinate != null) {
|
||||
this.textureCoordinates.add(textureCoordinate);
|
||||
}
|
||||
}
|
||||
else if (currentLine.startsWith("f "))
|
||||
{
|
||||
if (this.currentS_GroupObject == null) {
|
||||
this.currentS_GroupObject = new S_GroupObject("Default");
|
||||
}
|
||||
S_Face face = parseFace(currentLine, lineCount);
|
||||
if (face != null) {
|
||||
this.currentS_GroupObject.faces.add(face);
|
||||
}
|
||||
}
|
||||
else if (((currentLine.startsWith("g ") | currentLine.startsWith("o "))) &&
|
||||
|
||||
(currentLine.charAt(2) == '$'))
|
||||
{
|
||||
S_GroupObject group = parseS_GroupObject(currentLine, lineCount);
|
||||
if (group != null) {
|
||||
if (this.currentS_GroupObject != null) {
|
||||
this.groupObjects.add(this.currentS_GroupObject);
|
||||
}
|
||||
}
|
||||
this.currentS_GroupObject = group;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.groupObjects.add(this.currentS_GroupObject); return;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new ModelFormatException("IO Exception reading model format", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
checkMinMaxFinal();
|
||||
try
|
||||
{
|
||||
reader.close();
|
||||
}
|
||||
catch (IOException e) {}
|
||||
try
|
||||
{
|
||||
inputStream.close();
|
||||
}
|
||||
catch (IOException e) {}
|
||||
}
|
||||
}
|
||||
|
||||
public void renderAll()
|
||||
{
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
if (this.currentS_GroupObject != null) {
|
||||
tessellator.startDrawing(this.currentS_GroupObject.glDrawingMode);
|
||||
} else {
|
||||
tessellator.startDrawing(4);
|
||||
}
|
||||
tessellateAll(tessellator);
|
||||
|
||||
tessellator.draw();
|
||||
}
|
||||
|
||||
public void tessellateAll(Tessellator tessellator)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
groupObject.render(tessellator);
|
||||
}
|
||||
}
|
||||
|
||||
public void renderOnly(String... groupNames)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
for (String groupName : groupNames) {
|
||||
if (groupName.equalsIgnoreCase(groupObject.name)) {
|
||||
groupObject.render();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void tessellateOnly(Tessellator tessellator, String... groupNames)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
for (String groupName : groupNames) {
|
||||
if (groupName.equalsIgnoreCase(groupObject.name)) {
|
||||
groupObject.render(tessellator);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void renderPart(String partName)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
if (partName.equalsIgnoreCase(groupObject.name)) {
|
||||
groupObject.render();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void tessellatePart(Tessellator tessellator, String partName)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
if (partName.equalsIgnoreCase(groupObject.name)) {
|
||||
groupObject.render(tessellator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void renderAllExcept(String... excludedGroupNames)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects)
|
||||
{
|
||||
boolean skipPart = false;
|
||||
for (String excludedGroupName : excludedGroupNames) {
|
||||
if (excludedGroupName.equalsIgnoreCase(groupObject.name)) {
|
||||
skipPart = true;
|
||||
}
|
||||
}
|
||||
if (!skipPart) {
|
||||
groupObject.render();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void tessellateAllExcept(Tessellator tessellator, String... excludedGroupNames)
|
||||
{
|
||||
for (S_GroupObject groupObject : this.groupObjects)
|
||||
{
|
||||
boolean exclude = false;
|
||||
for (String excludedGroupName : excludedGroupNames) {
|
||||
if (excludedGroupName.equalsIgnoreCase(groupObject.name)) {
|
||||
exclude = true;
|
||||
}
|
||||
}
|
||||
if (!exclude) {
|
||||
groupObject.render(tessellator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Vertex parseVertex(String line, int lineCount)
|
||||
throws ModelFormatException
|
||||
{
|
||||
Vertex vertex = null;
|
||||
if (isValidVertexLine(line))
|
||||
{
|
||||
line = line.substring(line.indexOf(" ") + 1);
|
||||
String[] tokens = line.split(" ");
|
||||
try
|
||||
{
|
||||
if (tokens.length == 2) {
|
||||
return new Vertex(Float.parseFloat(tokens[0]), Float.parseFloat(tokens[1]));
|
||||
}
|
||||
if (tokens.length == 3) {
|
||||
return new Vertex(Float.parseFloat(tokens[0]), Float.parseFloat(tokens[1]), Float.parseFloat(tokens[2]));
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
throw new ModelFormatException(String.format("Number formatting error at line %d", new Object[] { Integer.valueOf(lineCount) }), e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Incorrect format");
|
||||
}
|
||||
return vertex;
|
||||
}
|
||||
|
||||
private Vertex parseVertexNormal(String line, int lineCount)
|
||||
throws ModelFormatException
|
||||
{
|
||||
Vertex vertexNormal = null;
|
||||
if (isValidVertexNormalLine(line))
|
||||
{
|
||||
line = line.substring(line.indexOf(" ") + 1);
|
||||
String[] tokens = line.split(" ");
|
||||
try
|
||||
{
|
||||
if (tokens.length == 3) {
|
||||
return new Vertex(Float.parseFloat(tokens[0]), Float.parseFloat(tokens[1]), Float.parseFloat(tokens[2]));
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
throw new ModelFormatException(String.format("Number formatting error at line %d", new Object[] { Integer.valueOf(lineCount) }), e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Incorrect format");
|
||||
}
|
||||
return vertexNormal;
|
||||
}
|
||||
|
||||
private TextureCoordinate parseTextureCoordinate(String line, int lineCount)
|
||||
throws ModelFormatException
|
||||
{
|
||||
TextureCoordinate textureCoordinate = null;
|
||||
if (isValidTextureCoordinateLine(line))
|
||||
{
|
||||
line = line.substring(line.indexOf(" ") + 1);
|
||||
String[] tokens = line.split(" ");
|
||||
try
|
||||
{
|
||||
if (tokens.length == 2) {
|
||||
return new TextureCoordinate(Float.parseFloat(tokens[0]), 1.0F - Float.parseFloat(tokens[1]));
|
||||
}
|
||||
if (tokens.length == 3) {
|
||||
return new TextureCoordinate(Float.parseFloat(tokens[0]), 1.0F - Float.parseFloat(tokens[1]), Float.parseFloat(tokens[2]));
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
throw new ModelFormatException(String.format("Number formatting error at line %d", new Object[] { Integer.valueOf(lineCount) }), e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Incorrect format");
|
||||
}
|
||||
return textureCoordinate;
|
||||
}
|
||||
|
||||
private S_Face parseFace(String line, int lineCount)
|
||||
throws ModelFormatException
|
||||
{
|
||||
S_Face face = null;
|
||||
if (isValidFaceLine(line))
|
||||
{
|
||||
face = new S_Face();
|
||||
|
||||
String trimmedLine = line.substring(line.indexOf(" ") + 1);
|
||||
String[] tokens = trimmedLine.split(" ");
|
||||
String[] subTokens = null;
|
||||
if (tokens.length == 3)
|
||||
{
|
||||
if (this.currentS_GroupObject.glDrawingMode == -1) {
|
||||
this.currentS_GroupObject.glDrawingMode = 4;
|
||||
} else if (this.currentS_GroupObject.glDrawingMode != 4) {
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Invalid number of points for face (expected 4, found " + tokens.length + ")");
|
||||
}
|
||||
}
|
||||
else if (tokens.length == 4) {
|
||||
if (this.currentS_GroupObject.glDrawingMode == -1) {
|
||||
this.currentS_GroupObject.glDrawingMode = 7;
|
||||
} else if (this.currentS_GroupObject.glDrawingMode != 7) {
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Invalid number of points for face (expected 3, found " + tokens.length + ")");
|
||||
}
|
||||
}
|
||||
if (isValidFace_V_VT_VN_Line(line))
|
||||
{
|
||||
face.vertices = new Vertex[tokens.length];
|
||||
face.textureCoordinates = new TextureCoordinate[tokens.length];
|
||||
face.vertexNormals = new Vertex[tokens.length];
|
||||
for (int i = 0; i < tokens.length; i++)
|
||||
{
|
||||
subTokens = tokens[i].split("/");
|
||||
|
||||
face.vertices[i] = ((Vertex)this.vertices.get(Integer.parseInt(subTokens[0]) - 1));
|
||||
face.textureCoordinates[i] = ((TextureCoordinate)this.textureCoordinates.get(Integer.parseInt(subTokens[1]) - 1));
|
||||
face.vertexNormals[i] = ((Vertex)this.vertexNormals.get(Integer.parseInt(subTokens[2]) - 1));
|
||||
}
|
||||
face.faceNormal = face.calculateFaceNormal();
|
||||
}
|
||||
else if (isValidFace_V_VT_Line(line))
|
||||
{
|
||||
face.vertices = new Vertex[tokens.length];
|
||||
face.textureCoordinates = new TextureCoordinate[tokens.length];
|
||||
for (int i = 0; i < tokens.length; i++)
|
||||
{
|
||||
subTokens = tokens[i].split("/");
|
||||
|
||||
face.vertices[i] = ((Vertex)this.vertices.get(Integer.parseInt(subTokens[0]) - 1));
|
||||
face.textureCoordinates[i] = ((TextureCoordinate)this.textureCoordinates.get(Integer.parseInt(subTokens[1]) - 1));
|
||||
}
|
||||
face.faceNormal = face.calculateFaceNormal();
|
||||
}
|
||||
else if (isValidFace_V_VN_Line(line))
|
||||
{
|
||||
face.vertices = new Vertex[tokens.length];
|
||||
face.vertexNormals = new Vertex[tokens.length];
|
||||
for (int i = 0; i < tokens.length; i++)
|
||||
{
|
||||
subTokens = tokens[i].split("//");
|
||||
|
||||
face.vertices[i] = ((Vertex)this.vertices.get(Integer.parseInt(subTokens[0]) - 1));
|
||||
face.vertexNormals[i] = ((Vertex)this.vertexNormals.get(Integer.parseInt(subTokens[1]) - 1));
|
||||
}
|
||||
face.faceNormal = face.calculateFaceNormal();
|
||||
}
|
||||
else if (isValidFace_V_Line(line))
|
||||
{
|
||||
face.vertices = new Vertex[tokens.length];
|
||||
for (int i = 0; i < tokens.length; i++) {
|
||||
face.vertices[i] = ((Vertex)this.vertices.get(Integer.parseInt(tokens[i]) - 1));
|
||||
}
|
||||
face.faceNormal = face.calculateFaceNormal();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Incorrect format");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Incorrect format");
|
||||
}
|
||||
return face;
|
||||
}
|
||||
|
||||
private S_GroupObject parseS_GroupObject(String line, int lineCount)
|
||||
throws ModelFormatException
|
||||
{
|
||||
S_GroupObject group = null;
|
||||
if (isValidS_GroupObjectLine(line))
|
||||
{
|
||||
String trimmedLine = line.substring(line.indexOf(" ") + 1);
|
||||
if (trimmedLine.length() > 0) {
|
||||
group = new S_GroupObject(trimmedLine);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ModelFormatException("Error parsing entry ('" + line + "'" + ", line " + lineCount + ") in file '" + this.fileName + "' - Incorrect format");
|
||||
}
|
||||
return group;
|
||||
}
|
||||
|
||||
private static boolean isValidVertexLine(String line)
|
||||
{
|
||||
if (vertexMatcher != null) {
|
||||
vertexMatcher.reset();
|
||||
}
|
||||
vertexMatcher = vertexPattern.matcher(line);
|
||||
return vertexMatcher.matches();
|
||||
}
|
||||
|
||||
private static boolean isValidVertexNormalLine(String line)
|
||||
{
|
||||
if (vertexNormalMatcher != null) {
|
||||
vertexNormalMatcher.reset();
|
||||
}
|
||||
vertexNormalMatcher = vertexNormalPattern.matcher(line);
|
||||
return vertexNormalMatcher.matches();
|
||||
}
|
||||
|
||||
private static boolean isValidTextureCoordinateLine(String line)
|
||||
{
|
||||
if (textureCoordinateMatcher != null) {
|
||||
textureCoordinateMatcher.reset();
|
||||
}
|
||||
textureCoordinateMatcher = textureCoordinatePattern.matcher(line);
|
||||
return textureCoordinateMatcher.matches();
|
||||
}
|
||||
|
||||
private static boolean isValidFace_V_VT_VN_Line(String line)
|
||||
{
|
||||
if (face_V_VT_VN_Matcher != null) {
|
||||
face_V_VT_VN_Matcher.reset();
|
||||
}
|
||||
face_V_VT_VN_Matcher = face_V_VT_VN_Pattern.matcher(line);
|
||||
return face_V_VT_VN_Matcher.matches();
|
||||
}
|
||||
|
||||
private static boolean isValidFace_V_VT_Line(String line)
|
||||
{
|
||||
if (face_V_VT_Matcher != null) {
|
||||
face_V_VT_Matcher.reset();
|
||||
}
|
||||
face_V_VT_Matcher = face_V_VT_Pattern.matcher(line);
|
||||
return face_V_VT_Matcher.matches();
|
||||
}
|
||||
|
||||
private static boolean isValidFace_V_VN_Line(String line)
|
||||
{
|
||||
if (face_V_VN_Matcher != null) {
|
||||
face_V_VN_Matcher.reset();
|
||||
}
|
||||
face_V_VN_Matcher = face_V_VN_Pattern.matcher(line);
|
||||
return face_V_VN_Matcher.matches();
|
||||
}
|
||||
|
||||
private static boolean isValidFace_V_Line(String line)
|
||||
{
|
||||
if (face_V_Matcher != null) {
|
||||
face_V_Matcher.reset();
|
||||
}
|
||||
face_V_Matcher = face_V_Pattern.matcher(line);
|
||||
return face_V_Matcher.matches();
|
||||
}
|
||||
|
||||
private static boolean isValidFaceLine(String line)
|
||||
{
|
||||
return (isValidFace_V_VT_VN_Line(line)) || (isValidFace_V_VT_Line(line)) || (isValidFace_V_VN_Line(line)) || (isValidFace_V_Line(line));
|
||||
}
|
||||
|
||||
private static boolean isValidS_GroupObjectLine(String line)
|
||||
{
|
||||
if (groupObjectMatcher != null) {
|
||||
groupObjectMatcher.reset();
|
||||
}
|
||||
groupObjectMatcher = groupObjectPattern.matcher(line);
|
||||
return groupObjectMatcher.matches();
|
||||
}
|
||||
|
||||
public String getType()
|
||||
{
|
||||
return "obj";
|
||||
}
|
||||
|
||||
public void renderAllLine(int startLine, int maxLine)
|
||||
{
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
|
||||
tessellator.startDrawing(1);
|
||||
|
||||
renderAllLine(tessellator, startLine, maxLine);
|
||||
|
||||
tessellator.draw();
|
||||
}
|
||||
|
||||
public void renderAllLine(Tessellator tessellator, int startLine, int maxLine)
|
||||
{
|
||||
int lineCnt = 0;
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
if (groupObject.faces.size() > 0) {
|
||||
for (S_Face face : groupObject.faces) {
|
||||
for (int i = 0; i < face.vertices.length / 3; i++)
|
||||
{
|
||||
Vertex v1 = face.vertices[(i * 3 + 0)];
|
||||
Vertex v2 = face.vertices[(i * 3 + 1)];
|
||||
Vertex v3 = face.vertices[(i * 3 + 2)];
|
||||
|
||||
lineCnt++;
|
||||
if (lineCnt > maxLine) {
|
||||
return;
|
||||
}
|
||||
tessellator.addVertex(v1.x, v1.y, v1.z);
|
||||
tessellator.addVertex(v2.x, v2.y, v2.z);
|
||||
|
||||
lineCnt++;
|
||||
if (lineCnt > maxLine) {
|
||||
return;
|
||||
}
|
||||
tessellator.addVertex(v2.x, v2.y, v2.z);
|
||||
tessellator.addVertex(v3.x, v3.y, v3.z);
|
||||
|
||||
lineCnt++;
|
||||
if (lineCnt > maxLine) {
|
||||
return;
|
||||
}
|
||||
tessellator.addVertex(v3.x, v3.y, v3.z);
|
||||
tessellator.addVertex(v1.x, v1.y, v1.z);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getVertexNum()
|
||||
{
|
||||
return this.vertices.size();
|
||||
}
|
||||
|
||||
public int getFaceNum()
|
||||
{
|
||||
return getVertexNum() / 3;
|
||||
}
|
||||
|
||||
public void renderAll(int startFace, int maxFace)
|
||||
{
|
||||
if (startFace < 0) {
|
||||
startFace = 0;
|
||||
}
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
|
||||
tessellator.startDrawing(4);
|
||||
|
||||
renderAll(tessellator, startFace, maxFace);
|
||||
|
||||
tessellator.draw();
|
||||
}
|
||||
|
||||
public void renderAll(Tessellator tessellator, int startFace, int maxLine)
|
||||
{
|
||||
int faceCnt = 0;
|
||||
for (S_GroupObject groupObject : this.groupObjects) {
|
||||
if (groupObject.faces.size() > 0) {
|
||||
for (S_Face face : groupObject.faces)
|
||||
{
|
||||
faceCnt++;
|
||||
if (faceCnt >= startFace)
|
||||
{
|
||||
if (faceCnt > maxLine) {
|
||||
return;
|
||||
}
|
||||
face.addFaceForRender(tessellator);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hbm.render;
|
||||
package com.hbm.render.loader;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -6,9 +6,6 @@ import java.util.List;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.render.loader.HFRWavefrontObject;
|
||||
import com.hbm.render.loader.S_GroupObject;
|
||||
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraftforge.client.model.IModelCustom;
|
||||
import net.minecraftforge.client.model.obj.GroupObject;
|
||||
@ -11,7 +11,7 @@ import com.hbm.animloader.AnimationWrapper;
|
||||
import com.hbm.animloader.AnimationWrapper.EndResult;
|
||||
import com.hbm.animloader.AnimationWrapper.EndType;
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.render.WavefrontObjDisplayList;
|
||||
import com.hbm.render.loader.WavefrontObjDisplayList;
|
||||
import com.hbm.tileentity.DoorDecl;
|
||||
import com.hbm.tileentity.TileEntityDoorGeneric;
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import org.lwjgl.opengl.GL11;
|
||||
import com.hbm.animloader.AnimatedModel;
|
||||
import com.hbm.animloader.Animation;
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.render.WavefrontObjDisplayList;
|
||||
import com.hbm.render.loader.WavefrontObjDisplayList;
|
||||
import com.hbm.util.BobMathUtil;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user