From ba4c2d6b207d6e0572e48a75ad610f3b6220f31a Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Fri, 21 Apr 2017 13:56:42 +0200 Subject: [PATCH 1/8] Fix NPE when teleporting inside block --- .../v17/wrapper/block/forward/FWBlock.java | 24 +++---------------- .../v17/wrapper/item/ItemWrapperMethods.java | 8 +++---- .../mc/forge/v17/wrapper/render/BWModel.java | 6 +++-- .../mc/forge/v18/wrapper/render/BWModel.java | 6 +++-- .../v18/wrapper/render/FWEmptyModel.java | 5 ---- 5 files changed, 14 insertions(+), 35 deletions(-) diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java index 391cfd7a6..aced065ed 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java @@ -27,6 +27,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IIconRegister; @@ -218,31 +219,12 @@ public TileEntity createTileEntity(World world, int metadata) { @Override public IIcon getIcon(IBlockAccess access, int x, int y, int z, int side) { - //TODO: Fill in something - /* - Block blockInstance = getBlockInstance(access, new Vector3D(x, y, z)); - Optional opRenderer = blockInstance.components.getOp(StaticBlockRenderer.class); - if (opRenderer.isPresent()) { - Optional texture = opRenderer.components.get().texture.apply(Direction.values()[side]); - if (texture.isPresent()) { - return RenderUtility.instance.getIcon(texture.components.get()); - } - }*/ - return null; + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("missingno"); } @Override public IIcon getIcon(int side, int meta) { - //TODO: Fill in something - /* - Optional opRenderer = block.components.getOp(StaticBlockRenderer.class); - if (opRenderer.isPresent()) { - Optional texture = opRenderer.components.get().texture.apply(Direction.values()[side]); - if (texture.isPresent()) { - return RenderUtility.instance.getIcon(texture.components.get()); - } - }*/ - return null; + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("missingno"); } @Override diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java index 9b9d80f55..03f6569f3 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java @@ -20,19 +20,17 @@ package nova.core.wrapper.mc.forge.v17.wrapper.item; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.client.IItemRenderer; -import nova.core.component.renderer.DynamicRenderer; import nova.core.component.renderer.Renderer; -import nova.core.component.renderer.StaticRenderer; import nova.core.item.Item; import nova.core.item.ItemFactory; import nova.core.util.Direction; -import nova.core.wrapper.mc.forge.v17.render.RenderUtility; import nova.core.wrapper.mc.forge.v17.wrapper.entity.backward.BWEntity; import nova.core.wrapper.mc.forge.v17.wrapper.render.BWModel; import nova.internal.core.Game; @@ -74,11 +72,11 @@ default ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlaye } default IIcon getIconFromDamage(int p_77617_1_) { - return null; + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("missingno"); } default IIcon getIcon(ItemStack itemStack, int pass) { - return null; + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("missingno"); } @Override diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/BWModel.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/BWModel.java index a8cd9c070..73271d8e0 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/BWModel.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/BWModel.java @@ -43,9 +43,11 @@ public class BWModel extends MeshModel { /** * Completes this rendering for a block. + * + * @param access The world instance. */ - public void render(IBlockAccess blockAccess) { - render(Optional.of(blockAccess), Optional.empty()); + public void render(IBlockAccess access) { + render(Optional.of(access), Optional.empty()); } public void render() { diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/BWModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/BWModel.java index d8abf65f4..84c7fe8fc 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/BWModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/BWModel.java @@ -42,9 +42,11 @@ public class BWModel extends MeshModel { /** * Completes this rendering for a block. + * + * @param access The world instance. */ - public void render(IBlockAccess blockAccess) { - render(Optional.of(blockAccess), Optional.empty()); + public void render(IBlockAccess access) { + render(Optional.of(access), Optional.empty()); } public void render() { diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWEmptyModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWEmptyModel.java index 2ba60ef6e..7676d7719 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWEmptyModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWEmptyModel.java @@ -53,9 +53,4 @@ public ISmartItemModel handleItemState(ItemStack stack) { public List getGeneralQuads() { return Collections.emptyList(); } - - @Override - public TextureAtlasSprite getTexture() { - return null; - } } From 70f0dab8f06587358d93af159ac800bef114a1ad Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Fri, 21 Apr 2017 21:18:06 +0200 Subject: [PATCH 2/8] Don't crash on missing model, display broken texture cube instead --- .../mc/forge/v17/render/RenderUtility.java | 3 +- .../mc/forge/v18/render/RenderUtility.java | 6 +--- .../nova/core/render/model/MeshModel.java | 9 +++-- .../render/model/TechneModelProvider.java | 6 +++- .../model/WavefrontObjectModelProvider.java | 5 ++- src/main/java/nova/core/util/ModelUtil.java | 34 +++++++++++++++++++ 6 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 src/main/java/nova/core/util/ModelUtil.java diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java index 26085bc67..4cb873212 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java @@ -31,7 +31,6 @@ import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.TextureStitchEvent; -import net.minecraftforge.client.model.ModelFormatException; import nova.core.render.texture.Texture; import nova.core.wrapper.mc.forge.v17.launcher.ForgeLoadable; import nova.core.wrapper.mc.forge.v17.wrapper.assets.AssetConverter; @@ -177,7 +176,7 @@ public void preInit(FMLPreInitializationEvent event) { IResource res = Minecraft.getMinecraft().getResourceManager().getResource(resource); m.load(res.getInputStream()); } catch (IOException e) { - throw new ModelFormatException("IO Exception reading model format", e); + Game.logger().warn("IO Exception reading model format", e); } }); } diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java index a878336c3..f96caac91 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java @@ -23,9 +23,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.block.model.FaceBakery; -import net.minecraft.client.renderer.block.model.ItemModelGenerator; -import net.minecraft.client.renderer.block.model.ModelBlock; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.IResource; import net.minecraft.client.resources.model.ModelResourceLocation; @@ -38,7 +35,6 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import nova.core.component.renderer.Renderer; import nova.core.component.renderer.StaticRenderer; import nova.core.item.ItemFactory; import nova.core.render.texture.Texture; @@ -229,7 +225,7 @@ public void preInit(FMLPreInitializationEvent event) { IResource res = Minecraft.getMinecraft().getResourceManager().getResource(resource); m.load(res.getInputStream()); } catch (IOException e) { - throw new RuntimeException("IO Exception reading model format", e); + Game.logger().warn("IO Exception reading model format", e); } }); } diff --git a/src/main/java/nova/core/render/model/MeshModel.java b/src/main/java/nova/core/render/model/MeshModel.java index 88613a39d..f7a816f35 100644 --- a/src/main/java/nova/core/render/model/MeshModel.java +++ b/src/main/java/nova/core/render/model/MeshModel.java @@ -56,8 +56,9 @@ public MeshModel(String name) { * * @param texture The texture */ - public void bind(Texture texture) { + public MeshModel bind(Texture texture) { faces.forEach(f -> f.texture = Optional.of(texture)); + return this; } /** @@ -65,12 +66,13 @@ public void bind(Texture texture) { * * @param texture to be used to as for this model and sub-models. */ - public void bindAll(Texture texture) { + public MeshModel bindAll(Texture texture) { bind(texture); stream() .filter(m -> m instanceof MeshModel) .map(m -> (MeshModel) m) .forEach(m -> m.bindAll(texture)); + return this; } /** @@ -78,8 +80,9 @@ public void bindAll(Texture texture) { * * @param Face - The finished masterpiece. */ - public void drawFace(Face Face) { + public MeshModel drawFace(Face Face) { faces.add(Face); + return this; } @Override diff --git a/src/main/java/nova/core/render/model/TechneModelProvider.java b/src/main/java/nova/core/render/model/TechneModelProvider.java index 053335cbb..93d586534 100755 --- a/src/main/java/nova/core/render/model/TechneModelProvider.java +++ b/src/main/java/nova/core/render/model/TechneModelProvider.java @@ -21,6 +21,7 @@ import nova.core.render.RenderException; import nova.core.render.pipeline.BlockRenderPipeline; import nova.core.render.pipeline.CubeTextureCoordinates; +import nova.core.util.ModelUtil; import nova.core.util.math.MatrixStack; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.commons.math3.geometry.euclidean.twod.Vector2D; @@ -32,6 +33,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; + import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -55,6 +57,7 @@ public class TechneModelProvider extends ModelProvider { //A map of all models generated with their names private final MeshModel model = new MeshModel(); + private boolean loaded = false; /** * Creates new ModelProvider @@ -249,11 +252,12 @@ public void load(InputStream stream) { } catch (Exception e) { e.printStackTrace(); } + this.loaded = true; } @Override public MeshModel getModel() { - return model.clone(); + return this.loaded ? model.clone() : ModelUtil.getMissingModel(); } @Override diff --git a/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java b/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java index 899486d27..e3feed715 100755 --- a/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java +++ b/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java @@ -21,6 +21,7 @@ package nova.core.render.model; import nova.core.render.RenderException; +import nova.core.util.ModelUtil; import nova.core.util.math.Vector3DUtil; import nova.internal.core.Game; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; @@ -58,6 +59,7 @@ public class WavefrontObjectModelProvider extends ModelProvider { private ArrayList vertices = new ArrayList<>(); private ArrayList textureCoordinates = new ArrayList<>(); private ArrayList vertexNormals = new ArrayList<>(); + private boolean loaded = false; /** * Creates new ModelProvider @@ -122,6 +124,7 @@ public void load(InputStream stream) { } finally { this.cleanUp(); } + this.loaded = true; } private void cleanUp() { @@ -132,7 +135,7 @@ private void cleanUp() { @Override public MeshModel getModel() { - return model.clone(); + return this.loaded ? model.clone() : ModelUtil.getMissingModel(); } @Override diff --git a/src/main/java/nova/core/util/ModelUtil.java b/src/main/java/nova/core/util/ModelUtil.java new file mode 100644 index 000000000..ba33f4e20 --- /dev/null +++ b/src/main/java/nova/core/util/ModelUtil.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017 NOVA, All rights reserved. + * This library is free software, licensed under GNU Lesser General Public License version 3 + * + * This file is part of NOVA. + * + * NOVA 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 3 + * of the License, or (at your option) any later version. + * + * NOVA 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 NOVA. If not, see . + */ +package nova.core.util; + +import nova.core.render.model.MeshModel; +import nova.core.render.pipeline.BlockRenderPipeline; +import nova.core.render.texture.Texture; + +/** + * @author ExE Boss + */ +public class ModelUtil { + + public static MeshModel getMissingModel() { + return BlockRenderPipeline.drawCube(new MeshModel()).bind(new Texture("nova", "null")); + } +} From 18bdb5081407affc720cc850224492aa711fda93 Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Fri, 21 Apr 2017 21:24:38 +0200 Subject: [PATCH 3/8] Fix broken Direction.NORTH/SOUTH.rotation --- src/main/java/nova/core/util/Direction.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/nova/core/util/Direction.java b/src/main/java/nova/core/util/Direction.java index a8df6b1ca..0f9d70b20 100755 --- a/src/main/java/nova/core/util/Direction.java +++ b/src/main/java/nova/core/util/Direction.java @@ -65,8 +65,11 @@ public enum Direction { if (vector.equals(Vector3D.ZERO)) { this.rotation = Rotation.IDENTITY; - } else { + } else if (z == 0) { this.rotation = new Rotation(Vector3DUtil.FORWARD, vector); + } else { + // For some odd reason, the rotation must be reversed when dealing with NORTH/SOUTH + this.rotation = new Rotation(Vector3DUtil.FORWARD, vector.scalarMultiply(-1)); } } From 7db02af993d0e2678ffc40cec181c0884bfdd8be Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Sun, 23 Apr 2017 21:04:33 +0200 Subject: [PATCH 4/8] Add support for special nova:* textures --- .../mc/forge/v17/render/RenderUtility.java | 6 + .../mc/forge/v18/render/RenderUtility.java | 6 + .../java/nova/core/render/RenderManager.java | 23 ++++ .../render/model/TechneModelProvider.java | 8 +- .../model/WavefrontObjectModelProvider.java | 9 +- src/main/java/nova/core/util/ModelUtil.java | 34 ------ .../nova/core/render/RenderManagerTest.java | 104 ++++++++++++++++++ 7 files changed, 147 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/nova/core/util/ModelUtil.java create mode 100644 src/test/java/nova/core/render/RenderManagerTest.java diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java index 4cb873212..2b657a606 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java @@ -109,6 +109,12 @@ public static void enableLightmap() { } public IIcon getIcon(Texture texture) { + if ("nova".equals(texture.domain)) { + switch (texture.name) { + case "null": return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(null); + } + } + if (iconMap.containsKey(texture)) { return iconMap.get(texture); } diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java index f96caac91..ebcd07105 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java @@ -123,6 +123,12 @@ public static void enableLightmap() { } public TextureAtlasSprite getTexture(Texture texture) { + if ("nova".equals(texture.domain)) { + switch (texture.name) { + case "null": return Minecraft.getMinecraft().getTextureMapBlocks().getMissingSprite(); + } + } + if (textureMap.containsKey(texture)) { return textureMap.get(texture); } diff --git a/src/main/java/nova/core/render/RenderManager.java b/src/main/java/nova/core/render/RenderManager.java index 2ada7f9ec..bd2904a85 100644 --- a/src/main/java/nova/core/render/RenderManager.java +++ b/src/main/java/nova/core/render/RenderManager.java @@ -20,7 +20,9 @@ package nova.core.render; +import nova.core.render.model.MeshModel; import nova.core.render.model.ModelProvider; +import nova.core.render.pipeline.BlockRenderPipeline; import nova.core.render.texture.BlockTexture; import nova.core.render.texture.EntityTexture; import nova.core.render.texture.ItemTexture; @@ -37,6 +39,8 @@ */ public class RenderManager extends Manager { + private static final Texture MISSING_TEXTURE = new Texture("nova", "null"); + public final Registry blockTextures = new Registry<>(); public final Registry itemTextures = new Registry<>(); public final Registry entityTextures = new Registry<>(); @@ -72,6 +76,16 @@ public EntityTexture registerTexture(EntityTexture texture) { return texture; } + /** + * Gets the missing texture. + * Will show up as a purple and black checkerboard. + * + * @return The missing texture ({@code nova:null}). + */ + public Texture getMissingTexture() { + return MISSING_TEXTURE; + } + public ModelProvider registerModel(ModelProvider modelProvider) { Optional modelProviderCheck = modelProviders.get(modelProvider.getID()); if (modelProviderCheck.isPresent()) { @@ -82,6 +96,15 @@ public ModelProvider registerModel(ModelProvider modelProvider) { return modelProvider; } + /** + * Gets the missing model. + * + * @return A cube with the missing texture. + */ + public MeshModel getMissingModel() { + return BlockRenderPipeline.drawCube(new MeshModel()).bind(getMissingTexture()); + } + @Override public void init() { Game.events().publish(new Init(this)); diff --git a/src/main/java/nova/core/render/model/TechneModelProvider.java b/src/main/java/nova/core/render/model/TechneModelProvider.java index 93d586534..f1309ef7f 100755 --- a/src/main/java/nova/core/render/model/TechneModelProvider.java +++ b/src/main/java/nova/core/render/model/TechneModelProvider.java @@ -21,8 +21,8 @@ import nova.core.render.RenderException; import nova.core.render.pipeline.BlockRenderPipeline; import nova.core.render.pipeline.CubeTextureCoordinates; -import nova.core.util.ModelUtil; import nova.core.util.math.MatrixStack; +import nova.internal.core.Game; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.commons.math3.geometry.euclidean.twod.Vector2D; import org.w3c.dom.Document; @@ -122,7 +122,7 @@ public void load(InputStream stream) { Node shape = shapes.item(i); NamedNodeMap shapeAttributes = shape.getAttributes(); if (shapeAttributes == null) { - throw new RenderException("Shape #" + (i + 1) + " in " + this.name + " has no attributes"); + throw new RenderException("Shape #" + (i + 1) + " in " + domain + this.name + " has no attributes"); } Node name = shapeAttributes.getNamedItem("name"); @@ -141,7 +141,7 @@ public void load(InputStream stream) { } if (shapeType != null && !cubeIDs.contains(shapeType)) { - System.out.println("Model shape [" + shapeName + "] in " + this.name + " is not a cube, ignoring"); + Game.logger().warn("Model shape [{}] in {}:{} is not a cube, ignoring", shapeName, domain, this.name); continue; } @@ -257,7 +257,7 @@ public void load(InputStream stream) { @Override public MeshModel getModel() { - return this.loaded ? model.clone() : ModelUtil.getMissingModel(); + return this.loaded ? model.clone() : Game.render().getMissingModel(); } @Override diff --git a/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java b/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java index e3feed715..7d3e6504c 100755 --- a/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java +++ b/src/main/java/nova/core/render/model/WavefrontObjectModelProvider.java @@ -21,7 +21,6 @@ package nova.core.render.model; import nova.core.render.RenderException; -import nova.core.util.ModelUtil; import nova.core.util.math.Vector3DUtil; import nova.internal.core.Game; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; @@ -135,7 +134,7 @@ private void cleanUp() { @Override public MeshModel getModel() { - return this.loaded ? model.clone() : ModelUtil.getMissingModel(); + return this.loaded ? model.clone() : Game.render().getMissingModel(); } @Override @@ -276,7 +275,7 @@ private Vector3D getVertex(int index) { try { return vertices.get(index < 0 ? index + textureCoordinates.size() : index - 1); } catch (IndexOutOfBoundsException e) { - System.err.println("[OBJ]: Can't get vertex " + index + "! Is this model corrupted?"); + Game.logger().error("[OBJ]: {}:{} - Can't get vertex {}! Is this model corrupted?", domain, name, index); return Vector3D.ZERO; } } @@ -285,7 +284,7 @@ private Vector2D getTexVec(int index) { try { return textureCoordinates.get(index < 0 ? index + textureCoordinates.size() : index - 1); } catch (IndexOutOfBoundsException e) { - System.err.println("[OBJ]: Can't get textureCoordinate " + index + "! Is this model corrupted?"); + Game.logger().error("[OBJ]: {}:{} - Can't get textureCoordinate {}! Is this model corrupted?", domain, name, index); return Vector2D.ZERO; } } @@ -294,7 +293,7 @@ private Vector3D getNormal(int index) { try { return vertexNormals.get(index < 0 ? index + textureCoordinates.size() : index - 1); } catch (IndexOutOfBoundsException e) { - System.err.println("[OBJ]: Can't get vertexNormal " + index + "! Is this model corrupted?"); + Game.logger().error("[OBJ]: {}:{} - Can't get vertexNormal {}! Is this model corrupted?", domain, name, index); return Vector3D.ZERO; } } diff --git a/src/main/java/nova/core/util/ModelUtil.java b/src/main/java/nova/core/util/ModelUtil.java deleted file mode 100644 index ba33f4e20..000000000 --- a/src/main/java/nova/core/util/ModelUtil.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2017 NOVA, All rights reserved. - * This library is free software, licensed under GNU Lesser General Public License version 3 - * - * This file is part of NOVA. - * - * NOVA 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 3 - * of the License, or (at your option) any later version. - * - * NOVA 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 NOVA. If not, see . - */ -package nova.core.util; - -import nova.core.render.model.MeshModel; -import nova.core.render.pipeline.BlockRenderPipeline; -import nova.core.render.texture.Texture; - -/** - * @author ExE Boss - */ -public class ModelUtil { - - public static MeshModel getMissingModel() { - return BlockRenderPipeline.drawCube(new MeshModel()).bind(new Texture("nova", "null")); - } -} diff --git a/src/test/java/nova/core/render/RenderManagerTest.java b/src/test/java/nova/core/render/RenderManagerTest.java new file mode 100644 index 000000000..38113fc97 --- /dev/null +++ b/src/test/java/nova/core/render/RenderManagerTest.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2017 NOVA, All rights reserved. + * This library is free software, licensed under GNU Lesser General Public License version 3 + * + * This file is part of NOVA. + * + * NOVA 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 3 + * of the License, or (at your option) any later version. + * + * NOVA 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 NOVA. If not, see . + */ + +package nova.core.render; + +import nova.core.render.model.Model; +import nova.core.render.model.ModelProvider; +import nova.core.render.texture.BlockTexture; +import nova.core.render.texture.EntityTexture; +import nova.core.render.texture.ItemTexture; +import nova.core.render.texture.Texture; +import org.assertj.core.api.Condition; +import org.junit.Before; +import org.junit.Test; + +import java.io.InputStream; + +import static nova.testutils.NovaAssertions.assertThat; + +/** + * @author ExE Boss + */ +public class RenderManagerTest { + + public RenderManagerTest() { + } + + private RenderManager renderManager; + + @Before + public void setUp() { + renderManager = new RenderManager(); + } + + @Test + public void testRegisterBlockTexture() { + BlockTexture texture1 = renderManager.registerTexture(new BlockTexture("nova", "test")); + BlockTexture texture2 = renderManager.registerTexture(new BlockTexture("nova", "test")); + assertThat(texture1).is(new Condition<>(tex -> tex == texture2, "%s (same instance)", texture2)); + } + + @Test + public void testRegisterEntityTexture() { + EntityTexture texture1 = renderManager.registerTexture(new EntityTexture("nova", "test")); + EntityTexture texture2 = renderManager.registerTexture(new EntityTexture("nova", "test")); + assertThat(texture1).is(new Condition<>(tex -> tex == texture2, "%s (same instance)", texture2)); + } + + @Test + public void testRegisterItemTexture() { + ItemTexture texture1 = renderManager.registerTexture(new ItemTexture("nova", "test")); + ItemTexture texture2 = renderManager.registerTexture(new ItemTexture("nova", "test")); + assertThat(texture1).is(new Condition<>(tex -> tex == texture2, "%s (same instance)", texture2)); + } + + @Test + public void testGetMissingTexture() { + assertThat(renderManager.getMissingTexture()).isEqualTo(new Texture("nova", "null")); + } + + @Test + public void testRegisterModel() { + ItemTexture texture1 = renderManager.registerTexture(new ItemTexture("nova", "test")); + ItemTexture texture2 = renderManager.registerTexture(new ItemTexture("nova", "test")); + assertThat(texture1).is(new Condition<>(tex -> tex == texture2, "%s (same instance)", texture2)); + } + + public class FakeModelProvider extends ModelProvider { + + public FakeModelProvider(String domain, String name) { + super(domain, name); + } + + @Override + public void load(InputStream stream) {} + + @Override + public Model getModel() { + return renderManager.getMissingModel(); + } + + @Override + public String getType() { + return "test"; + } + } +} From a32a4a82b9b7c7b12fa1e60cb5f494d77316f70e Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Sun, 23 Apr 2017 21:48:26 +0200 Subject: [PATCH 5/8] Refactor wrapper render package --- .../wrapper/mc/forge/v17/launcher/ClientProxy.java | 2 +- .../mc/forge/v17/wrapper/block/forward/FWBlock.java | 2 +- .../v17/wrapper/block/forward/FWTileRenderer.java | 4 ++-- .../v17/wrapper/entity/forward/FWEntityFX.java | 2 +- .../wrapper/entity/forward/FWEntityRenderer.java | 6 +++--- .../forge/v17/wrapper/item/ItemWrapperMethods.java | 2 +- .../v17/{ => wrapper}/render/RenderUtility.java | 2 +- .../v17/wrapper/render/{ => backward}/BWModel.java | 8 ++++---- .../wrapper/mc/forge/v18/launcher/ClientProxy.java | 2 +- .../v18/wrapper/block/forward/FWTileRenderer.java | 4 ++-- .../v18/wrapper/entity/forward/FWEntityFX.java | 2 +- .../wrapper/entity/forward/FWEntityRenderer.java | 6 +++--- .../v18/{ => wrapper}/render/RenderUtility.java | 10 +++++----- .../v18/wrapper/render/{ => backward}/BWModel.java | 8 ++++---- .../wrapper/render/{ => forward}/FWEmptyModel.java | 3 +-- .../render/{ => forward}/FWSmartBlockModel.java | 3 ++- .../render/{ => forward}/FWSmartItemModel.java | 6 +++--- .../wrapper/render/{ => forward}/FWSmartModel.java | 13 +++++++------ src/main/java/nova/core/render/model/MeshModel.java | 9 ++++++--- 19 files changed, 49 insertions(+), 45 deletions(-) rename minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/{ => wrapper}/render/RenderUtility.java (99%) rename minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/{ => backward}/BWModel.java (96%) rename minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/{ => wrapper}/render/RenderUtility.java (96%) rename minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/{ => backward}/BWModel.java (95%) rename minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/{ => forward}/FWEmptyModel.java (93%) rename minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/{ => forward}/FWSmartBlockModel.java (96%) rename minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/{ => forward}/FWSmartItemModel.java (92%) rename minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/{ => forward}/FWSmartModel.java (92%) diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/launcher/ClientProxy.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/launcher/ClientProxy.java index bf22027a1..660eec04e 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/launcher/ClientProxy.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/launcher/ClientProxy.java @@ -39,7 +39,7 @@ import nova.core.entity.EntityFactory; import nova.core.language.LanguageManager; import nova.core.wrapper.mc.forge.v17.NovaMinecraftPreloader; -import nova.core.wrapper.mc.forge.v17.render.RenderUtility; +import nova.core.wrapper.mc.forge.v17.wrapper.render.RenderUtility; import nova.core.wrapper.mc.forge.v17.wrapper.block.forward.FWBlock; import nova.core.wrapper.mc.forge.v17.wrapper.block.forward.FWTile; import nova.core.wrapper.mc.forge.v17.wrapper.block.forward.FWTileRenderer; diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java index aced065ed..537073d19 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWBlock.java @@ -58,7 +58,7 @@ import nova.core.util.math.MatrixStack; import nova.core.util.shape.Cuboid; import nova.core.wrapper.mc.forge.v17.util.WrapperEvent; -import nova.core.wrapper.mc.forge.v17.wrapper.render.BWModel; +import nova.core.wrapper.mc.forge.v17.wrapper.render.backward.BWModel; import nova.internal.core.Game; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.lwjgl.opengl.GL11; diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWTileRenderer.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWTileRenderer.java index abb893449..f6dc094e4 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWTileRenderer.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/block/forward/FWTileRenderer.java @@ -26,8 +26,8 @@ import net.minecraft.tileentity.TileEntity; import nova.core.block.Block; import nova.core.component.renderer.DynamicRenderer; -import nova.core.wrapper.mc.forge.v17.render.RenderUtility; -import nova.core.wrapper.mc.forge.v17.wrapper.render.BWModel; +import nova.core.wrapper.mc.forge.v17.wrapper.render.RenderUtility; +import nova.core.wrapper.mc.forge.v17.wrapper.render.backward.BWModel; import java.util.Optional; diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityFX.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityFX.java index fe5c44288..d7d91d505 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityFX.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityFX.java @@ -33,7 +33,7 @@ import nova.core.entity.Entity; import nova.core.entity.EntityFactory; import nova.core.util.shape.Cuboid; -import nova.core.wrapper.mc.forge.v17.render.RenderUtility; +import nova.core.wrapper.mc.forge.v17.wrapper.render.RenderUtility; import nova.core.wrapper.mc.forge.v17.util.WrapperEvent; import nova.internal.core.Game; diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityRenderer.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityRenderer.java index a113dcfd5..d2f96b5ef 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityRenderer.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/entity/forward/FWEntityRenderer.java @@ -26,8 +26,8 @@ import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; import nova.core.component.renderer.DynamicRenderer; -import nova.core.wrapper.mc.forge.v17.render.RenderUtility; -import nova.core.wrapper.mc.forge.v17.wrapper.render.BWModel; +import nova.core.wrapper.mc.forge.v17.wrapper.render.RenderUtility; +import nova.core.wrapper.mc.forge.v17.wrapper.render.backward.BWModel; import org.lwjgl.opengl.GL11; import java.util.Optional; @@ -65,7 +65,7 @@ public static void render(Entity wrapper, nova.core.entity.Entity entity, double } Tessellator.instance.startDrawingQuads(); - model.render(Optional.of(RenderManager.instance)); + model.render(RenderManager.instance); Tessellator.instance.draw(); if (model.blendSFactor > 0 && model.blendDFactor > 0) { diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java index 03f6569f3..1ce713e23 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java @@ -32,7 +32,7 @@ import nova.core.item.ItemFactory; import nova.core.util.Direction; import nova.core.wrapper.mc.forge.v17.wrapper.entity.backward.BWEntity; -import nova.core.wrapper.mc.forge.v17.wrapper.render.BWModel; +import nova.core.wrapper.mc.forge.v17.wrapper.render.backward.BWModel; import nova.internal.core.Game; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.lwjgl.opengl.GL11; diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/RenderUtility.java similarity index 99% rename from minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java rename to minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/RenderUtility.java index 2b657a606..be1010c85 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/render/RenderUtility.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/RenderUtility.java @@ -18,7 +18,7 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v17.render; +package nova.core.wrapper.mc.forge.v17.wrapper.render; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/BWModel.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/backward/BWModel.java similarity index 96% rename from minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/BWModel.java rename to minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/backward/BWModel.java index 73271d8e0..67cf6c0d6 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/BWModel.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/render/backward/BWModel.java @@ -18,7 +18,7 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v17.wrapper.render; +package nova.core.wrapper.mc.forge.v17.wrapper.render.backward; import net.minecraft.block.Block; import net.minecraft.client.renderer.Tessellator; @@ -30,8 +30,8 @@ import nova.core.render.texture.EntityTexture; import nova.core.render.texture.Texture; import nova.core.util.math.Vector3DUtil; -import nova.core.wrapper.mc.forge.v17.render.RenderUtility; import nova.core.wrapper.mc.forge.v17.wrapper.assets.AssetConverter; +import nova.core.wrapper.mc.forge.v17.wrapper.render.RenderUtility; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import java.util.Optional; @@ -54,8 +54,8 @@ public void render() { render(Optional.empty(), Optional.empty()); } - public void render(Optional entityRenderManager) { - render(Optional.empty(), entityRenderManager); + public void render(RenderManager entityRenderManager) { + render(Optional.empty(), Optional.of(entityRenderManager)); } public void render(Optional access, Optional entityRenderManager) { diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/launcher/ClientProxy.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/launcher/ClientProxy.java index eace4d8a5..6f23bf4bd 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/launcher/ClientProxy.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/launcher/ClientProxy.java @@ -43,7 +43,7 @@ import nova.core.entity.EntityFactory; import nova.core.language.LanguageManager; import nova.core.wrapper.mc.forge.v18.NovaMinecraftPreloader; -import nova.core.wrapper.mc.forge.v18.render.RenderUtility; +import nova.core.wrapper.mc.forge.v18.wrapper.render.RenderUtility; import nova.core.wrapper.mc.forge.v18.wrapper.block.forward.FWBlock; import nova.core.wrapper.mc.forge.v18.wrapper.block.forward.FWTile; import nova.core.wrapper.mc.forge.v18.wrapper.block.forward.FWTileRenderer; diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/block/forward/FWTileRenderer.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/block/forward/FWTileRenderer.java index d470b2d9e..678734ce1 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/block/forward/FWTileRenderer.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/block/forward/FWTileRenderer.java @@ -26,8 +26,8 @@ import net.minecraft.tileentity.TileEntity; import nova.core.block.Block; import nova.core.component.renderer.DynamicRenderer; -import nova.core.wrapper.mc.forge.v18.render.RenderUtility; -import nova.core.wrapper.mc.forge.v18.wrapper.render.BWModel; +import nova.core.wrapper.mc.forge.v18.wrapper.render.RenderUtility; +import nova.core.wrapper.mc.forge.v18.wrapper.render.backward.BWModel; import java.util.Optional; diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityFX.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityFX.java index c5ed00c67..a2d169bdd 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityFX.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityFX.java @@ -34,7 +34,7 @@ import nova.core.entity.Entity; import nova.core.entity.EntityFactory; import nova.core.util.shape.Cuboid; -import nova.core.wrapper.mc.forge.v18.render.RenderUtility; +import nova.core.wrapper.mc.forge.v18.wrapper.render.RenderUtility; import nova.core.wrapper.mc.forge.v18.util.WrapperEvent; import nova.internal.core.Game; diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityRenderer.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityRenderer.java index 75a85749a..a92c2f642 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityRenderer.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/entity/forward/FWEntityRenderer.java @@ -27,8 +27,8 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.client.FMLClientHandler; import nova.core.component.renderer.DynamicRenderer; -import nova.core.wrapper.mc.forge.v18.render.RenderUtility; -import nova.core.wrapper.mc.forge.v18.wrapper.render.BWModel; +import nova.core.wrapper.mc.forge.v18.wrapper.render.RenderUtility; +import nova.core.wrapper.mc.forge.v18.wrapper.render.backward.BWModel; import org.lwjgl.opengl.GL11; import java.util.Optional; @@ -70,7 +70,7 @@ public static void render(Entity wrapper, nova.core.entity.Entity entity, double } Tessellator.getInstance().getWorldRenderer().startDrawingQuads(); - model.render(Optional.of(Minecraft.getMinecraft().getRenderManager())); + model.render(Minecraft.getMinecraft().getRenderManager()); Tessellator.getInstance().draw(); if (model.blendSFactor > 0 && model.blendDFactor > 0) { diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/RenderUtility.java similarity index 96% rename from minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java rename to minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/RenderUtility.java index ebcd07105..d83071da9 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/render/RenderUtility.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/RenderUtility.java @@ -18,7 +18,7 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v18.render; +package nova.core.wrapper.mc.forge.v18.wrapper.render; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; @@ -44,9 +44,9 @@ import nova.core.wrapper.mc.forge.v18.wrapper.item.FWItem; import nova.core.wrapper.mc.forge.v18.wrapper.item.ItemConverter; import nova.core.wrapper.mc.forge.v18.wrapper.item.ItemWrapperMethods; -import nova.core.wrapper.mc.forge.v18.wrapper.render.FWEmptyModel; -import nova.core.wrapper.mc.forge.v18.wrapper.render.FWSmartBlockModel; -import nova.core.wrapper.mc.forge.v18.wrapper.render.FWSmartItemModel; +import nova.core.wrapper.mc.forge.v18.wrapper.render.forward.FWEmptyModel; +import nova.core.wrapper.mc.forge.v18.wrapper.render.forward.FWSmartBlockModel; +import nova.core.wrapper.mc.forge.v18.wrapper.render.forward.FWSmartItemModel; import nova.internal.core.Game; import org.apache.commons.math3.geometry.euclidean.twod.Vector2D; import org.lwjgl.opengl.GL11; @@ -231,7 +231,7 @@ public void preInit(FMLPreInitializationEvent event) { IResource res = Minecraft.getMinecraft().getResourceManager().getResource(resource); m.load(res.getInputStream()); } catch (IOException e) { - Game.logger().warn("IO Exception reading model format", e); + Game.logger().warn("IO Exception reading model", e); } }); } diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/BWModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/backward/BWModel.java similarity index 95% rename from minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/BWModel.java rename to minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/backward/BWModel.java index 84c7fe8fc..c472e76de 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/BWModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/backward/BWModel.java @@ -18,7 +18,7 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v18.wrapper.render; +package nova.core.wrapper.mc.forge.v18.wrapper.render.backward; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; @@ -29,7 +29,7 @@ import nova.core.render.model.MeshModel; import nova.core.render.texture.EntityTexture; import nova.core.render.texture.Texture; -import nova.core.wrapper.mc.forge.v18.render.RenderUtility; +import nova.core.wrapper.mc.forge.v18.wrapper.render.RenderUtility; import nova.core.wrapper.mc.forge.v18.wrapper.assets.AssetConverter; import java.util.Optional; @@ -53,8 +53,8 @@ public void render() { render(Optional.empty(), Optional.empty()); } - public void render(Optional entityRenderManager) { - render(Optional.empty(), entityRenderManager); + public void render(RenderManager entityRenderManager) { + render(Optional.empty(), Optional.of(entityRenderManager)); } public void render(Optional access, Optional entityRenderManager) { diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWEmptyModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWEmptyModel.java similarity index 93% rename from minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWEmptyModel.java rename to minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWEmptyModel.java index 7676d7719..1a58eeee5 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWEmptyModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWEmptyModel.java @@ -18,11 +18,10 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v18.wrapper.render; +package nova.core.wrapper.mc.forge.v18.wrapper.render.forward; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraftforge.client.model.IFlexibleBakedModel; import net.minecraftforge.client.model.ISmartBlockModel; diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartBlockModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartBlockModel.java similarity index 96% rename from minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartBlockModel.java rename to minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartBlockModel.java index 0c9da02c2..c6285b207 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartBlockModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartBlockModel.java @@ -18,8 +18,9 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v18.wrapper.render; +package nova.core.wrapper.mc.forge.v18.wrapper.render.forward; +import nova.core.wrapper.mc.forge.v18.wrapper.render.backward.BWModel; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartItemModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartItemModel.java similarity index 92% rename from minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartItemModel.java rename to minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartItemModel.java index 4c7108957..a5f046381 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartItemModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartItemModel.java @@ -18,10 +18,10 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v18.wrapper.render; +package nova.core.wrapper.mc.forge.v18.wrapper.render.forward; +import nova.core.wrapper.mc.forge.v18.wrapper.render.backward.BWModel; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.block.model.ItemTransformVec3f; import net.minecraft.item.ItemStack; import net.minecraftforge.client.model.IFlexibleBakedModel; @@ -46,7 +46,7 @@ public FWSmartItemModel(Item item) { super(); this.item = item; // Change the default transforms to the default Item transforms - this.itemCameraTransforms = new ItemCameraTransforms( + this.itemCameraTransforms = new net.minecraft.client.renderer.block.model.ItemCameraTransforms( new ItemTransformVec3f(new Vector3f(0, -90, 130), new Vector3f(0, 1f / 24f, -2.75f / 16f), new Vector3f(0.9f, 0.9f, 0.9f)), // Third Person new ItemTransformVec3f(new Vector3f(0, -135, 25/*-135/*-25*/), new Vector3f(0, 0.25f, 0.125f/*0.5f, 0.25f*/), new Vector3f(1.7f, 1.7f, 1.7f)), // First Person ItemTransformVec3f.DEFAULT, // Head diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartModel.java similarity index 92% rename from minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartModel.java rename to minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartModel.java index f69d0f247..b4e6d3594 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/FWSmartModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartModel.java @@ -18,12 +18,11 @@ * along with NOVA. If not, see . */ -package nova.core.wrapper.mc.forge.v18.wrapper.render; +package nova.core.wrapper.mc.forge.v18.wrapper.render.forward; import com.google.common.primitives.Ints; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.renderer.vertex.VertexFormat; @@ -34,8 +33,8 @@ import nova.core.render.model.Vertex; import nova.core.util.Direction; import nova.core.util.math.MathUtil; -import nova.core.wrapper.mc.forge.v18.render.RenderUtility; import nova.core.wrapper.mc.forge.v18.wrapper.DirectionConverter; +import nova.core.wrapper.mc.forge.v18.wrapper.render.RenderUtility; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import java.util.Arrays; @@ -44,6 +43,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; + /** * Generates a smart model based on a NOVA Model * @author Calclavia @@ -55,7 +55,8 @@ public abstract class FWSmartModel implements IFlexibleBakedModel { protected final VertexFormat format; // Default item transforms. Can be changed in subclasses. @SuppressWarnings("deprecation") - protected ItemCameraTransforms itemCameraTransforms = ItemCameraTransforms.DEFAULT; + protected net.minecraft.client.renderer.block.model.ItemCameraTransforms itemCameraTransforms = + net.minecraft.client.renderer.block.model.ItemCameraTransforms.DEFAULT; protected FWSmartModel(VertexFormat format) { this.format = format; @@ -152,8 +153,8 @@ public TextureAtlasSprite getTexture() { } @Override - @SuppressWarnings("deprecation") - public ItemCameraTransforms getItemCameraTransforms() { + @Deprecated + public net.minecraft.client.renderer.block.model.ItemCameraTransforms getItemCameraTransforms() { return itemCameraTransforms; } } diff --git a/src/main/java/nova/core/render/model/MeshModel.java b/src/main/java/nova/core/render/model/MeshModel.java index f7a816f35..a6998f8df 100644 --- a/src/main/java/nova/core/render/model/MeshModel.java +++ b/src/main/java/nova/core/render/model/MeshModel.java @@ -54,7 +54,8 @@ public MeshModel(String name) { /** * Binds all the faces and all child models with this texture. * - * @param texture The texture + * @param texture The texture to be used to as for this model. + * @return This instance. */ public MeshModel bind(Texture texture) { faces.forEach(f -> f.texture = Optional.of(texture)); @@ -64,7 +65,8 @@ public MeshModel bind(Texture texture) { /** * Binds the texture to the model, and all its children. * - * @param texture to be used to as for this model and sub-models. + * @param texture The texture to be used to as for this model and sub-models. + * @return This instance. */ public MeshModel bindAll(Texture texture) { bind(texture); @@ -78,7 +80,8 @@ public MeshModel bindAll(Texture texture) { /** * Finish drawing the {@link Face} by adding it into the list of faces. * - * @param Face - The finished masterpiece. + * @param Face The finished masterpiece. + * @return This instance. */ public MeshModel drawFace(Face Face) { faces.add(Face); From 7a6457038b0534fb689c09b03dedaaebf1ed30ed Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Sun, 23 Apr 2017 22:45:27 +0200 Subject: [PATCH 6/8] Fix 1.7 item rendering orientation in GUIs --- .../v17/wrapper/item/ItemWrapperMethods.java | 17 +++++++++++++---- .../java/nova/core/util/math/MatrixStack.java | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java index 1ce713e23..1829290c3 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java @@ -51,6 +51,7 @@ public interface ItemWrapperMethods extends IItemRenderer { ItemFactory getItemFactory(); + @SuppressWarnings({"unchecked", "rawtypes"}) default void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) { Item item = Game.natives().toNova(itemStack); item.setCount(itemStack.stackSize).events.publish(new Item.TooltipEvent(Optional.of(new BWEntity(player)), list)); @@ -81,7 +82,7 @@ default IIcon getIcon(ItemStack itemStack, int pass) { @Override default boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type) { - return item.getItem() == this && getIcon(item, 0) == null; + return item.getItem() == this; } @Override @@ -98,9 +99,17 @@ default void renderItem(IItemRenderer.ItemRenderType type, ItemStack itemStack, GL11.glPushMatrix(); Tessellator.instance.startDrawingQuads(); BWModel model = new BWModel(); - model.matrix.rotate(Direction.UP.toVector(), 1 / 4 * Math.PI); - model.matrix.rotate(Direction.EAST.toVector(), 1 / 6 * Math.PI); - model.matrix.scale(1.6, 1.6, 1.6); + switch (type) { + case EQUIPPED: + break; + case EQUIPPED_FIRST_PERSON: + break; + case INVENTORY: + model.matrix.rotate(Direction.DOWN.toVector(), Math.PI / 4); + model.matrix.rotate(Direction.EAST.toVector(), Math.PI / 6); + model.matrix.scale(1.6, 1.6, 1.6); + break; + } item.components.getSet(Renderer.class).forEach(r -> r.onRender.accept(model)); model.render(); Tessellator.instance.draw(); diff --git a/src/main/java/nova/core/util/math/MatrixStack.java b/src/main/java/nova/core/util/math/MatrixStack.java index de9db256f..19344c895 100755 --- a/src/main/java/nova/core/util/math/MatrixStack.java +++ b/src/main/java/nova/core/util/math/MatrixStack.java @@ -42,6 +42,7 @@ public MatrixStack() { * Clone construcotr of MatrixStack * @param clone instance to be cloned */ + @SuppressWarnings("unchecked") public MatrixStack(MatrixStack clone) { //noinspection unchecked this.stack = (Stack) clone.stack.clone(); From 4cf2e7212bd8044690d3012a8c47b3f1ab31d9a2 Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Mon, 24 Apr 2017 21:02:40 +0200 Subject: [PATCH 7/8] Make Texture fields into getters + Minor item wrapper rendering adjustments --- .../mc/forge/v17/wrapper/item/FWItem.java | 26 +++----------- .../forge/v17/wrapper/item/FWItemBlock.java | 26 +++----------- .../v17/wrapper/item/ItemWrapperMethods.java | 15 ++------ .../mc/forge/v18/wrapper/item/FWItem.java | 9 ++--- .../forge/v18/wrapper/item/FWItemBlock.java | 9 ++--- .../v18/wrapper/item/ItemWrapperMethods.java | 4 +-- .../render/pipeline/BlockRenderPipeline.java | 7 ++-- .../render/pipeline/ItemRenderPipeline.java | 36 +++++++++---------- .../nova/core/render/texture/Texture.java | 18 ++++++++-- 9 files changed, 59 insertions(+), 91 deletions(-) diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java index 3fe40567e..5fc8c3ac0 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java @@ -20,10 +20,8 @@ package nova.core.wrapper.mc.forge.v17.wrapper.item; -import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; import net.minecraft.world.World; import nova.core.item.ItemFactory; @@ -47,8 +45,9 @@ public ItemFactory getItemFactory() { } @Override - public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) { - ItemWrapperMethods.super.addInformation(itemStack, player, list, p_77624_4_); + @SuppressWarnings({"unchecked", "rawtypes"}) + public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean advanced) { + ItemWrapperMethods.super.addInformation(itemStack, player, list, advanced); } @Override @@ -62,23 +61,8 @@ public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer } @Override - public IIcon getIconFromDamage(int p_77617_1_) { - return ItemWrapperMethods.super.getIconFromDamage(p_77617_1_); - } - - @Override - public IIcon getIcon(ItemStack itemStack, int pass) { - return ItemWrapperMethods.super.getIcon(itemStack, pass); - } - - @Override - public int getColorFromItemStack(ItemStack p_82790_1_, int p_82790_2_) { - return ItemWrapperMethods.super.getColorFromItemStack(p_82790_1_, p_82790_2_); - } - - @Override - public void registerIcons(IIconRegister ir) { - + public int getColorFromItemStack(ItemStack stack, int layer) { + return ItemWrapperMethods.super.getColorFromItemStack(stack, layer); } @Override diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java index 66ade96cd..559ffd9b2 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java @@ -20,10 +20,8 @@ package nova.core.wrapper.mc.forge.v17.wrapper.item; -import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; import net.minecraft.world.World; import nova.core.item.ItemFactory; import nova.core.wrapper.mc.forge.v17.wrapper.block.forward.FWBlock; @@ -45,8 +43,9 @@ public ItemFactory getItemFactory() { } @Override - public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) { - ItemWrapperMethods.super.addInformation(itemStack, player, list, p_77624_4_); + @SuppressWarnings({"unchecked", "rawtypes"}) + public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean advanced) { + ItemWrapperMethods.super.addInformation(itemStack, player, list, advanced); } @Override @@ -60,23 +59,8 @@ public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer } @Override - public IIcon getIconFromDamage(int p_77617_1_) { - return ItemWrapperMethods.super.getIconFromDamage(p_77617_1_); - } - - @Override - public IIcon getIcon(ItemStack itemStack, int pass) { - return ItemWrapperMethods.super.getIcon(itemStack, pass); - } - - @Override - public int getColorFromItemStack(ItemStack p_82790_1_, int p_82790_2_) { - return ItemWrapperMethods.super.getColorFromItemStack(p_82790_1_, p_82790_2_); - } - - @Override - public void registerIcons(IIconRegister ir) { - + public int getColorFromItemStack(ItemStack stack, int layer) { + return ItemWrapperMethods.super.getColorFromItemStack(stack, layer); } @Override diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java index 1829290c3..41922654f 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java @@ -20,11 +20,9 @@ package nova.core.wrapper.mc.forge.v17.wrapper.item; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.client.IItemRenderer; import nova.core.component.renderer.Renderer; @@ -51,8 +49,7 @@ public interface ItemWrapperMethods extends IItemRenderer { ItemFactory getItemFactory(); - @SuppressWarnings({"unchecked", "rawtypes"}) - default void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) { + default void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean advanced) { Item item = Game.natives().toNova(itemStack); item.setCount(itemStack.stackSize).events.publish(new Item.TooltipEvent(Optional.of(new BWEntity(player)), list)); getItemFactory().save(item); @@ -72,14 +69,6 @@ default ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlaye return ItemConverter.instance().updateMCItemStack(itemStack, item); } - default IIcon getIconFromDamage(int p_77617_1_) { - return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("missingno"); - } - - default IIcon getIcon(ItemStack itemStack, int pass) { - return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("missingno"); - } - @Override default boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type) { return item.getItem() == this; @@ -118,7 +107,7 @@ default void renderItem(IItemRenderer.ItemRenderType type, ItemStack itemStack, } } - default int getColorFromItemStack(ItemStack itemStack, int p_82790_2_) { + default int getColorFromItemStack(ItemStack itemStack, int layer) { return ((Item) Game.natives().toNova(itemStack)).colorMultiplier().argb(); } } diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItem.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItem.java index 98959ee54..5f87704ab 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItem.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItem.java @@ -47,8 +47,9 @@ public ItemFactory getItemFactory() { } @Override - public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) { - ItemWrapperMethods.super.addInformation(itemStack, player, list, p_77624_4_); + @SuppressWarnings({"unchecked", "rawtypes"}) + public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean advanced) { + ItemWrapperMethods.super.addInformation(itemStack, player, list, advanced); } @Override @@ -62,8 +63,8 @@ public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer } @Override - public int getColorFromItemStack(ItemStack p_82790_1_, int p_82790_2_) { - return ItemWrapperMethods.super.getColorFromItemStack(p_82790_1_, p_82790_2_); + public int getColorFromItemStack(ItemStack stack, int layer) { + return ItemWrapperMethods.super.getColorFromItemStack(stack, layer); } @Override diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItemBlock.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItemBlock.java index 8c35f97e3..0cfd9f7f2 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItemBlock.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/FWItemBlock.java @@ -45,8 +45,9 @@ public ItemFactory getItemFactory() { } @Override - public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) { - ItemWrapperMethods.super.addInformation(itemStack, player, list, p_77624_4_); + @SuppressWarnings({"unchecked", "rawtypes"}) + public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean advanced) { + ItemWrapperMethods.super.addInformation(itemStack, player, list, advanced); } @Override @@ -60,8 +61,8 @@ public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPl } @Override - public int getColorFromItemStack(ItemStack p_82790_1_, int p_82790_2_) { - return ItemWrapperMethods.super.getColorFromItemStack(p_82790_1_, p_82790_2_); + public int getColorFromItemStack(ItemStack stack, int layer) { + return ItemWrapperMethods.super.getColorFromItemStack(stack, layer); } @Override diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/ItemWrapperMethods.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/ItemWrapperMethods.java index 9ae26ea0b..d4d19f743 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/ItemWrapperMethods.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/item/ItemWrapperMethods.java @@ -41,7 +41,7 @@ public interface ItemWrapperMethods { ItemFactory getItemFactory(); - default void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean p_77624_4_) { + default void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean advanced) { Item item = Game.natives().toNova(itemStack); item.setCount(itemStack.stackSize).events.publish(new Item.TooltipEvent(Optional.of(new BWEntity(player)), list)); getItemFactory().save(item); @@ -61,7 +61,7 @@ default ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlaye return ItemConverter.instance().updateMCItemStack(itemStack, item); } - default int getColorFromItemStack(ItemStack itemStack, int p_82790_2_) { + default int getColorFromItemStack(ItemStack itemStack, int layer) { return ((Item) Game.natives().toNova(itemStack)).colorMultiplier().argb(); } } diff --git a/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java b/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java index 2873a8909..546012bb1 100644 --- a/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java +++ b/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java @@ -20,7 +20,6 @@ package nova.core.render.pipeline; -import nova.core.component.ComponentMap; import nova.core.component.ComponentProvider; import nova.core.component.misc.Collider; import nova.core.render.Color; @@ -45,8 +44,7 @@ */ public class BlockRenderPipeline extends RenderPipeline { - @SuppressWarnings("rawtypes") - public final ComponentProvider componentProvider; + public final ComponentProvider componentProvider; /** * Called to get the texture of this block for a certain side. @@ -77,8 +75,7 @@ public class BlockRenderPipeline extends RenderPipeline { */ public Function colorMultiplier = (dir) -> Color.white; - @SuppressWarnings({"rawtypes", "unchecked"}) - public BlockRenderPipeline(ComponentProvider componentProvider) { + public BlockRenderPipeline(ComponentProvider componentProvider) { this.componentProvider = componentProvider; bounds = () -> this.componentProvider.components.getOp(Collider.class).map(c -> c.boundingBox.get()).orElse(Cuboid.ONE); consumer = model -> model.addChild(draw(new MeshModel())); diff --git a/src/main/java/nova/core/render/pipeline/ItemRenderPipeline.java b/src/main/java/nova/core/render/pipeline/ItemRenderPipeline.java index a1f915d4e..8053d139b 100644 --- a/src/main/java/nova/core/render/pipeline/ItemRenderPipeline.java +++ b/src/main/java/nova/core/render/pipeline/ItemRenderPipeline.java @@ -43,7 +43,7 @@ */ public class ItemRenderPipeline extends RenderPipeline { - public final ComponentProvider componentProvider; + public final ComponentProvider componentProvider; /** * Called to get the texture of this item. @@ -64,7 +64,7 @@ public class ItemRenderPipeline extends RenderPipeline { */ public Supplier colorMultiplier = () -> Color.white; - public ItemRenderPipeline(ComponentProvider componentProvider) { + public ItemRenderPipeline(ComponentProvider componentProvider) { this.componentProvider = componentProvider; size = () -> new Vector2D(1, 1); consumer = model -> model.addChild(draw(new MeshModel())); @@ -166,7 +166,7 @@ public MeshModel draw(MeshModel model) { return model; } - public static Face drawBack( + private static Face drawBack( MeshModel model, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, @@ -176,8 +176,8 @@ public static Face drawBack( Vector2D maxUV; if (texture.isPresent()) { - minUV = texture.get().minUV; - maxUV = texture.get().maxUV; + minUV = texture.get().minUV(); + maxUV = texture.get().maxUV(); } else { minUV = Vector2D.ZERO; maxUV = Vector2DUtil.ONE; @@ -199,7 +199,7 @@ public static Face drawBack( return back; } - public static Face drawFront( + private static Face drawFront( MeshModel model, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, @@ -209,8 +209,8 @@ public static Face drawFront( Vector2D maxUV; if (texture.isPresent()) { - minUV = texture.get().minUV; - maxUV = texture.get().maxUV; + minUV = texture.get().minUV(); + maxUV = texture.get().maxUV(); } else { minUV = Vector2D.ZERO; maxUV = Vector2DUtil.ONE; @@ -232,7 +232,7 @@ public static Face drawFront( return front; } - public static Set drawUpAndDown( + private static Set drawUpAndDown( MeshModel model, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, @@ -243,13 +243,13 @@ public static Set drawUpAndDown( Vector2D dimensions; if (texture.isPresent()) { - minUV = texture.get().minUV; - maxUV = texture.get().maxUV; - dimensions = texture.get().dimension; + minUV = texture.get().minUV(); + maxUV = texture.get().maxUV(); + dimensions = texture.get().dimension(); } else { minUV = Vector2D.ZERO; maxUV = Vector2DUtil.ONE; - dimensions = new Vector2D(1, 1); + dimensions = Vector2DUtil.ONE; } Set faces = new HashSet<>(); @@ -290,7 +290,7 @@ public static Set drawUpAndDown( return faces; } - public static Set drawLeftAndRight( + private static Set drawLeftAndRight( MeshModel model, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, @@ -301,13 +301,13 @@ public static Set drawLeftAndRight( Vector2D dimensions; if (texture.isPresent()) { - minUV = texture.get().minUV; - maxUV = texture.get().maxUV; - dimensions = texture.get().dimension; + minUV = texture.get().minUV(); + maxUV = texture.get().maxUV(); + dimensions = texture.get().dimension(); } else { minUV = Vector2D.ZERO; maxUV = Vector2DUtil.ONE; - dimensions = new Vector2D(1, 1); + dimensions = Vector2DUtil.ONE; } Set faces = new HashSet<>(); diff --git a/src/main/java/nova/core/render/texture/Texture.java b/src/main/java/nova/core/render/texture/Texture.java index b9035078a..f779d0b24 100644 --- a/src/main/java/nova/core/render/texture/Texture.java +++ b/src/main/java/nova/core/render/texture/Texture.java @@ -31,9 +31,9 @@ */ public class Texture extends Asset implements Identifiable { - public final Vector2D dimension; - public final Vector2D minUV; - public final Vector2D maxUV; + private Vector2D dimension; + private Vector2D minUV; + private Vector2D maxUV; @SuppressWarnings("deprecation") public Texture(String domain, String name) { @@ -51,6 +51,18 @@ public Texture(String domain, String name) { this.maxUV = maxUV; } + public Vector2D dimension() { + return dimension; + } + + public Vector2D minUV() { + return minUV; + } + + public Vector2D maxUV() { + return maxUV; + } + @Override public String path() { return "textures/" + addDefaultSuffix(super.path(), "png"); From 6b344ed00056f1a2fe28490de05706a298625ed4 Mon Sep 17 00:00:00 2001 From: ExE Boss Date: Wed, 26 Apr 2017 16:48:46 +0200 Subject: [PATCH 8/8] (Mostly) Fix 1.8 ambient occlusion --- .../mc/forge/v17/wrapper/item/FWItem.java | 4 +++ .../forge/v17/wrapper/item/FWItemBlock.java | 4 +++ .../v17/wrapper/item/ItemWrapperMethods.java | 31 ++++++++++++------- .../render/forward/FWSmartBlockModel.java | 10 +++--- .../render/forward/FWSmartItemModel.java | 9 +++--- .../wrapper/render/forward/FWSmartModel.java | 11 ++++++- .../nova/core/render/model/ModelProvider.java | 5 +++ .../render/pipeline/BlockRenderPipeline.java | 14 +++++++++ 8 files changed, 66 insertions(+), 22 deletions(-) diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java index 5fc8c3ac0..8c6ab588e 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItem.java @@ -20,6 +20,7 @@ package nova.core.wrapper.mc.forge.v17.wrapper.item; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -65,6 +66,9 @@ public int getColorFromItemStack(ItemStack stack, int layer) { return ItemWrapperMethods.super.getColorFromItemStack(stack, layer); } + @Override + public void registerIcons(IIconRegister ir) {} + @Override public String getUnlocalizedName() { return getItemFactory().getUnlocalizedName(); diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java index 559ffd9b2..a15b35226 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/FWItemBlock.java @@ -20,6 +20,7 @@ package nova.core.wrapper.mc.forge.v17.wrapper.item; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -63,6 +64,9 @@ public int getColorFromItemStack(ItemStack stack, int layer) { return ItemWrapperMethods.super.getColorFromItemStack(stack, layer); } + @Override + public void registerIcons(IIconRegister ir) {} + @Override public String getUnlocalizedName() { return getItemFactory().getUnlocalizedName(); diff --git a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java index 41922654f..5fdc7e757 100644 --- a/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java +++ b/minecraft/1.7/src/main/java/nova/core/wrapper/mc/forge/v17/wrapper/item/ItemWrapperMethods.java @@ -28,6 +28,9 @@ import nova.core.component.renderer.Renderer; import nova.core.item.Item; import nova.core.item.ItemFactory; +import nova.core.render.model.MeshModel; +import nova.core.render.pipeline.BlockRenderPipeline; +import nova.core.render.pipeline.StaticCubeTextureCoordinates; import nova.core.util.Direction; import nova.core.wrapper.mc.forge.v17.wrapper.entity.backward.BWEntity; import nova.core.wrapper.mc.forge.v17.wrapper.render.backward.BWModel; @@ -88,17 +91,23 @@ default void renderItem(IItemRenderer.ItemRenderType type, ItemStack itemStack, GL11.glPushMatrix(); Tessellator.instance.startDrawingQuads(); BWModel model = new BWModel(); - switch (type) { - case EQUIPPED: - break; - case EQUIPPED_FIRST_PERSON: - break; - case INVENTORY: - model.matrix.rotate(Direction.DOWN.toVector(), Math.PI / 4); - model.matrix.rotate(Direction.EAST.toVector(), Math.PI / 6); - model.matrix.scale(1.6, 1.6, 1.6); - break; - } + // TODO: Fix this + if (this instanceof FWItem) + switch (type) { + case EQUIPPED: + break; + case EQUIPPED_FIRST_PERSON: +// model.matrix.scale(1.7, 1.7, 1.7); +// model.matrix.translate(0, 1, 0.125); +// model.matrix.rotate(Direction.DOWN.toVector(), Math.PI * 5 / 4); +// model.matrix.rotate(Direction.NORTH.toVector(), Math.PI / 3); + break; + case INVENTORY: + model.matrix.rotate(Direction.DOWN.toVector(), Math.PI / 4); + model.matrix.rotate(Direction.EAST.toVector(), Math.PI / 6); + model.matrix.scale(1.6, 1.6, 1.6); + break; + } item.components.getSet(Renderer.class).forEach(r -> r.onRender.accept(model)); model.render(); Tessellator.instance.draw(); diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartBlockModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartBlockModel.java index c6285b207..8681526ab 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartBlockModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartBlockModel.java @@ -23,8 +23,6 @@ import nova.core.wrapper.mc.forge.v18.wrapper.render.backward.BWModel; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.block.model.ItemTransformVec3f; import net.minecraft.item.ItemStack; import net.minecraftforge.client.model.IFlexibleBakedModel; import net.minecraftforge.client.model.ISmartBlockModel; @@ -64,9 +62,11 @@ public FWSmartBlockModel(Block block, Optional item) { this.block = block; this.item = item; // Change the default transforms to the default full Block transforms - this.itemCameraTransforms = new ItemCameraTransforms( - new ItemTransformVec3f(new Vector3f(10, -45, 170), new Vector3f(0, 0.09375f, -0.171875f), new Vector3f(0.375f, 0.375f, 0.375f)), // Third Person - ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT); + this.itemCameraTransforms = new net.minecraft.client.renderer.block.model.ItemCameraTransforms( + new net.minecraft.client.renderer.block.model.ItemTransformVec3f(new Vector3f(10, -45, 170), new Vector3f(0, 0.09375f, -0.171875f), new Vector3f(0.375f, 0.375f, 0.375f)), // Third Person + net.minecraft.client.renderer.block.model.ItemTransformVec3f.DEFAULT, // First Person + net.minecraft.client.renderer.block.model.ItemTransformVec3f.DEFAULT, // Head + net.minecraft.client.renderer.block.model.ItemTransformVec3f.DEFAULT);// GUI } //Block rendering diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartItemModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartItemModel.java index a5f046381..1dd6dd1b5 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartItemModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartItemModel.java @@ -22,7 +22,6 @@ import nova.core.wrapper.mc.forge.v18.wrapper.render.backward.BWModel; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemTransformVec3f; import net.minecraft.item.ItemStack; import net.minecraftforge.client.model.IFlexibleBakedModel; import net.minecraftforge.client.model.ISmartItemModel; @@ -47,10 +46,10 @@ public FWSmartItemModel(Item item) { this.item = item; // Change the default transforms to the default Item transforms this.itemCameraTransforms = new net.minecraft.client.renderer.block.model.ItemCameraTransforms( - new ItemTransformVec3f(new Vector3f(0, -90, 130), new Vector3f(0, 1f / 24f, -2.75f / 16f), new Vector3f(0.9f, 0.9f, 0.9f)), // Third Person - new ItemTransformVec3f(new Vector3f(0, -135, 25/*-135/*-25*/), new Vector3f(0, 0.25f, 0.125f/*0.5f, 0.25f*/), new Vector3f(1.7f, 1.7f, 1.7f)), // First Person - ItemTransformVec3f.DEFAULT, // Head - new ItemTransformVec3f(new Vector3f(-30, 135, 0), new Vector3f(), new Vector3f(1.6F, 1.6F, 1.6F))); // GUI + new net.minecraft.client.renderer.block.model.ItemTransformVec3f(new Vector3f(0, -90, 130), new Vector3f(0, 1f / 24f, -2.75f / 16f), new Vector3f(0.9f, 0.9f, 0.9f)), // Third Person + new net.minecraft.client.renderer.block.model.ItemTransformVec3f(new Vector3f(0, -135, 25/*-135/*-25*/), new Vector3f(0, 0.25f, 0.125f/*0.5f, 0.25f*/), new Vector3f(1.7f, 1.7f, 1.7f)), // First Person + net.minecraft.client.renderer.block.model.ItemTransformVec3f.DEFAULT, // Head + new net.minecraft.client.renderer.block.model.ItemTransformVec3f(new Vector3f(-30, 135, 0), new Vector3f(), new Vector3f(1.6F, 1.6F, 1.6F))); // GUI } //Item rendering diff --git a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartModel.java b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartModel.java index b4e6d3594..e2e9a623f 100644 --- a/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartModel.java +++ b/minecraft/1.8/src/main/java/nova/core/wrapper/mc/forge/v18/wrapper/render/forward/FWSmartModel.java @@ -107,10 +107,19 @@ protected List modelToQuads(Model modelIn) { // Do what Minecraft Forge does when rendering Wavefront OBJ models with triangles vertexData.add(vertexData.get(vertexData.size() - 1)); + Direction dir = Direction.fromVector(face.normal); + if (dir == Direction.SOUTH || dir == Direction.WEST) { + int[] vtxd = vertexData.remove(vertexData.size() - 1); + vertexData.add(0, vtxd); + } else { + int[] vtxd = vertexData.remove(0); + vertexData.add(vtxd); + } + int[] data = Ints.concat(vertexData.toArray(new int[][] {})); //TODO: The facing might be wrong // format.getNextOffset() is in byte count per vertex, and we are deling with ints, so we don't need to multiply by 4 return new BakedQuad(Arrays.copyOf(data, MathUtil.min(data.length, format.getNextOffset())), - -1, DirectionConverter.instance().toNative(Direction.fromVector(face.normal))); + -1, DirectionConverter.instance().toNative(dir)); } ); } diff --git a/src/main/java/nova/core/render/model/ModelProvider.java b/src/main/java/nova/core/render/model/ModelProvider.java index eac3ce8c3..d1549e3a5 100755 --- a/src/main/java/nova/core/render/model/ModelProvider.java +++ b/src/main/java/nova/core/render/model/ModelProvider.java @@ -21,6 +21,7 @@ package nova.core.render.model; import nova.core.util.Asset; +import nova.internal.core.Game; import java.io.InputStream; @@ -56,4 +57,8 @@ public ModelProvider(String domain, String name) { public String path() { return "models/" + addDefaultSuffix(super.path(), getType()); } + + protected static final MeshModel getMissingModel() { + return Game.render().getMissingModel(); + } } diff --git a/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java b/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java index 546012bb1..9de4c4002 100644 --- a/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java +++ b/src/main/java/nova/core/render/pipeline/BlockRenderPipeline.java @@ -420,6 +420,20 @@ public static Face drawEast( return east; } + /** + * Creates a face of the model in a specified direction + * + * @param dir The direction of the face to make + * @param model The model to use + * @param cuboid The cuboid where the model applies to + * @param textureCoordinates Texture coordinates to render + * @return The face of the model in that dirction + */ + public static Face drawDir(Direction dir, MeshModel model, + Cuboid cuboid, CubeTextureCoordinates textureCoordinates) { + return drawDir(dir, model, cuboid.min.getX(), cuboid.min.getY(), cuboid.min.getZ(), cuboid.max.getX(), cuboid.max.getY(), cuboid.max.getZ(), textureCoordinates); + } + /** * Creates a face of the model in a specified direction *