Java 类net.minecraftforge.client.model.obj.GroupObject 实例源码
项目:EnderIOAddons
文件:RendererFrameworkMachine.java
@Override
protected Collection<GroupObject> getModel(Block block, int metadata) {
List<GroupObject> result = new ArrayList<GroupObject>();
if (renderFrameInItem(block, metadata)) {
result.addAll(super.getModel(block, metadata));
}
String controllerName = getControllerInItemName(block, metadata);
if (controllerName != null) {
result.add(controller.get(controllerName + "Active"));
}
if (renderAllTanksInItem(block, metadata)) {
for (GroupObject groupObject : tanks) {
result.add(groupObject);
}
} else if (renderOneTankInItem(block, metadata)) {
result.add(tanks[TankSlot.FRONT_LEFT.ordinal()]);
}
return result;
}
项目:EnderIOAddons
文件:TechneMachineRenderer.java
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
setFacingDir(ForgeDirection.SOUTH);
TechneUtil.vt = this.vt;
IIcon icon = getModelIcon(block, metadata);
Tessellator.instance.startDrawingQuads();
Tessellator.instance.setColorOpaque_F(1, 1, 1);
Tessellator.instance.addTranslation(0, -0.47f, 0);
for (GroupObject go : getModel(block, metadata)) {
if (go instanceof GroupObjectWithIcon) {
TechneUtil.renderWithIcon(go, ((GroupObjectWithIcon) go).getControllerTexture(), renderer.overrideBlockTexture, Tessellator.instance, null, 0, 0,
0, vt, true);
} else {
TechneUtil.renderWithIcon(go, icon, renderer.overrideBlockTexture, Tessellator.instance, null, 0, 0, 0, vt, true);
}
}
Tessellator.instance.addTranslation(0, 0.47f, 0);
Tessellator.instance.draw();
TechneUtil.vt = null;
}
项目:Chisel-2
文件:RenderAutoChisel.java
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
Tessellator tes = Tessellator.instance;
IIcon icon = renderer.hasOverrideBlockTexture() ? renderer.overrideBlockTexture : block.getIcon(0, 0);
tes.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tes.setColorOpaque_F(1, 1, 1);
tes.addTranslation(x, y, z + 1);
for (GroupObject go : model.groupObjects) {
for (Face f : go.faces) {
Vertex n = f.faceNormal;
tes.setNormal(n.x, n.y, n.z);
for (int i = 0; i < f.vertices.length; i++) {
Vertex vert = f.vertices[i];
TextureCoordinate t = f.textureCoordinates[i];
if (!renderer.hasOverrideBlockTexture()) {
tes.addVertexWithUV(vert.x, vert.y, vert.z, icon.getInterpolatedU(t.u * 16), icon.getInterpolatedV(t.v * 16));
} else {
tes.addVertexWithUV(vert.x, vert.y, vert.z, icon.getInterpolatedU((t.u * 64) % 16), icon.getInterpolatedV((t.v * 64) % 16));
}
}
}
}
tes.addTranslation(-x, -y, -z - 1);
return true;
}
项目:LambdaLib
文件:PartedModelHelper.java
public static Collection<CustomPartedModel> loadObjModelParts(WavefrontObject obj) {
List<CustomPartedModel> ret = new ArrayList();
for(GroupObject go : obj.groupObjects) {
ret.add(new CustomPartedModel(obj, go.name));
}
return ret;
}
项目:EnderCore
文件:TechneUtil.java
/**
* Use this to convert TechneModel to it's static representation
*/
@SuppressWarnings("unchecked")
public static Map<String, GroupObject> bakeModel(TechneModel model, float scale, Matrix4f m, boolean rotateYFirst) {
Map<String, ModelRenderer> parts = (Map<String, ModelRenderer>) ObfuscationReflectionHelper.getPrivateValue(TechneModel.class, model, "parts");
Map<String, GroupObject> res = Maps.newHashMap();
for (Map.Entry<String, ModelRenderer> e : parts.entrySet()) {
GroupObject obj = bakeModel(e.getValue(), model, scale, m, rotateYFirst).get(0);
res.put(e.getKey(), obj);
}
return res;
}
项目:EnderCore
文件:TechneUtil.java
public static void renderInventoryBlock(Collection<GroupObject> model, IIcon icon, Block block, int metadata, RenderBlocks rb) {
tes.startDrawingQuads();
tes.setColorOpaque_F(1, 1, 1);
tes.addTranslation(0, -0.47f, 0);
renderWithIcon(model, icon, rb.overrideBlockTexture, tes, vt);
tes.addTranslation(0, 0.47f, 0);
tes.draw();
resetVT();
}
项目:EnderCore
文件:TechneUtil.java
public static void renderInventoryBlock(GroupObject model, Block block, int metadata, RenderBlocks rb) {
IIcon icon = getIconFor(block, metadata);
tes.startDrawingQuads();
tes.setColorOpaque_F(1, 1, 1);
tes.addTranslation(0, -0.47f, 0);
renderWithIcon(model, icon, rb.overrideBlockTexture, tes, null, 0, 0, 0, vt, true);
tes.addTranslation(0, 0.47f, 0);
tes.draw();
resetVT();
}
项目:EnderCore
文件:TechneUtil.java
public static boolean renderWorldBlock(Collection<GroupObject> model, IIcon icon, IBlockAccess world, int x, int y, int z, Block block, RenderBlocks rb) {
if (icon == null) {
return false;
}
tes.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tes.setColorOpaque_F(1, 1, 1);
tes.addTranslation(x + .5F, y + 0.0375f, z + .5F);
renderWithIcon(model, icon, rb.overrideBlockTexture, tes, world, x, y, z, vt);
tes.addTranslation(-x - .5F, -y - 0.0375f, -z - .5F);
resetVT();
return true;
}
项目:EnderCore
文件:TechneUtil.java
public static boolean renderWorldBlock(GroupObject model, IBlockAccess world, int x, int y, int z, Block block, RenderBlocks rb) {
IIcon icon = getIconFor(block, world, x, y, z);
tes.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tes.setColorOpaque_F(1, 1, 1);
tes.addTranslation(x + .5F, y + 0.0375f, z + .5F);
renderWithIcon(model, icon, rb.overrideBlockTexture, tes, world, x, y, z, vt, true);
tes.addTranslation(-x - .5F, -y - 0.0375f, -z - .5F);
resetVT();
return true;
}
项目:EnderIOAddons
文件:RendererIHopper.java
public RendererIHopper(@Nonnull RendererFrameworkMachine frameRenderer) {
this.frameRenderer = frameRenderer;
GroupObject controllerActive = new GroupObjectWithIcon(frameRenderer.getControllerPart(5), BlockIHopper.getBlock());
GroupObject controllerPassive = new GroupObjectWithIcon(frameRenderer.getControllerPart(6), BlockIHopper.getBlock());
frameRenderer.registerController(BlockIHopper.getBlock().getControllerModelName(),
controllerActive, controllerPassive);
}
项目:EnderIOAddons
文件:RendererCobbleworks.java
public RendererCobbleworks(@Nonnull RendererFrameworkMachine frameRenderer) {
this.frameRenderer = frameRenderer;
GroupObject controllerActive = new GroupObjectWithIcon(frameRenderer.getControllerPart(1), BlockCobbleworks.getBlock());
GroupObject controllerPassive = new GroupObjectWithIcon(frameRenderer.getControllerPart(2), BlockCobbleworks.getBlock());
frameRenderer.registerController(BlockCobbleworks.getBlock().getControllerModelName(),
controllerActive, controllerPassive);
}
项目:EnderIOAddons
文件:RendererWaterworks.java
public RendererWaterworks(@Nonnull RendererFrameworkMachine frameRenderer) {
this.frameRenderer = frameRenderer;
GroupObject controllerActive = new GroupObjectWithIcon(frameRenderer.getControllerPart(3), BlockWaterworks.getBlock());
GroupObject controllerPassive = new GroupObjectWithIcon(frameRenderer.getControllerPart(2), BlockWaterworks.getBlock());
frameRenderer.registerController(BlockWaterworks.getBlock().getControllerModelName(),
controllerActive, controllerPassive);
}
项目:EnderIOAddons
文件:RendererTcom.java
public RendererTcom(@Nonnull RendererFrameworkMachine frameRenderer) {
this.frameRenderer = frameRenderer;
@SuppressWarnings("null")
GroupObject controllerPassive = new GroupObjectWithIcon(frameRenderer.getControllerPart(4), BlockTcom.blockTcom);
frameRenderer.registerController(BlockTcom.blockTcom.getControllerModelName(), controllerPassive, controllerPassive);
}
项目:EnderIOAddons
文件:TechneMachineRenderer.java
@SuppressWarnings("unchecked")
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
T te = (T) world.getTileEntity(x, y, z);
if (te != null) {
setFacingDir(te.getFacingDir());
overlay.setTile(te);
}
TechneUtil.vt = this.vt;
IIcon icon = getModelIcon(world, x, y, z, block);
Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
Tessellator.instance.setColorOpaque_F(1, 1, 1);
Tessellator.instance.addTranslation(x + .5F, y + 0.0375f, z + .5F);
for (GroupObject go : getModel(world, x, y, z)) {
if (go instanceof GroupObjectWithIcon) {
TechneUtil.renderWithIcon(go, ((GroupObjectWithIcon) go).getControllerTexture(), renderer.overrideBlockTexture, Tessellator.instance, world, x, y,
z, vt, true);
} else {
TechneUtil.renderWithIcon(go, icon, renderer.overrideBlockTexture, Tessellator.instance, world, x, y, z, vt, true);
}
}
Tessellator.instance.addTranslation(-x - .5F, -y - 0.0375f, -z - .5F);
TechneUtil.vt = null;
if (renderer.overrideBlockTexture == null) {
ccr.renderBlock(world, block, x, y, z, overlay);
}
return true;
}
项目:EnderCore
文件:TechneModelRenderer.java
public TechneModelRenderer(Map<String, GroupObject> model, int renderId) {
this(model, renderId, null);
}
项目:EnderCore
文件:TechneModelRenderer.java
public TechneModelRenderer(Map<String, GroupObject> model, int renderId, VertexTransform vt) {
this.model = model;
this.renderId = renderId;
this.vt = vt;
}
项目:EnderCore
文件:TechneModelRenderer.java
protected Collection<GroupObject> getModel(Block block, int metadata) {
return model.values();
}
项目:EnderCore
文件:TechneModelRenderer.java
protected Collection<GroupObject> getModel(IBlockAccess world, int x, int y, int z) {
return model.values();
}
项目:EnderCore
文件:TechneUtil.java
public static List<GroupObject> bakeModel(ModelRenderer model, TechneModel supermodel) {
return bakeModel(model, supermodel, 1);
}
项目:EnderCore
文件:TechneUtil.java
public static List<GroupObject> bakeModel(ModelRenderer model, TechneModel supermodel, float scale) {
return bakeModel(model, supermodel, scale, new Matrix4f());
}
项目:EnderCore
文件:TechneUtil.java
public static List<GroupObject> bakeModel(ModelRenderer model, TechneModel supermodel, float scale, Matrix4f matrix) {
return bakeModel(model, supermodel, scale, matrix, false);
}
项目:EnderCore
文件:TechneUtil.java
public static Map<String, GroupObject> bakeModel(TechneModel model) {
return bakeModel(model, 1);
}
项目:EnderCore
文件:TechneUtil.java
public static Map<String, GroupObject> bakeModel(TechneModel model, float scale) {
return bakeModel(model, scale, new Matrix4f());
}
项目:EnderCore
文件:TechneUtil.java
public static Map<String, GroupObject> bakeModel(TechneModel model, float scale, Matrix4f m) {
return bakeModel(model, scale, m, false);
}
项目:EnderCore
文件:TechneUtil.java
public static Map<String, GroupObject> getModel(String modid, String modelPath) {
TechneModel tm = (TechneModel) modelLoader.loadInstance(new ResourceLocation(modid.toLowerCase(Locale.US), modelPath + ".tcn"));
return TechneUtil.bakeModel(tm, 1f / 16, new Matrix4f().scale(new Vector3f(-1, -1, 1)));
}
项目:EnderCore
文件:TechneUtil.java
public static Collection<GroupObject> getModelAll(String modid, String modelPath) {
TechneModel tm = (TechneModel) modelLoader.loadInstance(new ResourceLocation(modid.toLowerCase(Locale.US), modelPath + ".tcn"));
return TechneUtil.bakeModel(tm, 1f / 16, new Matrix4f().scale(new Vector3f(-1, -1, 1))).values();
}
项目:EnderCore
文件:TechneUtil.java
public static void renderWithIcon(Collection<GroupObject> model, IIcon icon, IIcon override, Tessellator tes) {
renderWithIcon(model, icon, override, tes, null);
}
项目:EnderCore
文件:TechneUtil.java
public static void renderWithIcon(Collection<GroupObject> model, IIcon icon, IIcon override, Tessellator tes, VertexTransform vt) {
renderWithIcon(model, icon, override, tes, null, 0, 0, 0, vt);
}
项目:EnderCore
文件:TechneUtil.java
public static void renderWithIcon(Collection<GroupObject> model, IIcon icon, IIcon override, Tessellator tes, IBlockAccess world, int x, int y, int z) {
renderWithIcon(model, icon, override, tes, world, x, y, z, null);
}
项目:EnderCore
文件:TechneUtil.java
public static void renderWithIcon(Collection<GroupObject> model, IIcon icon, IIcon override, Tessellator tes, IBlockAccess world, int x, int y, int z,
VertexTransform vt) {
renderWithIcon(model, icon, override, tes, world, x, y, z, vt, true);
}
项目:EnderCore
文件:TechneUtil.java
public static void renderWithIcon(Collection<GroupObject> model, IIcon icon, IIcon override, Tessellator tes, IBlockAccess world, int x, int y, int z,
VertexTransform vt, boolean isbrh) {
for (GroupObject go : model) {
renderWithIcon(go, icon, override, tes, world, x, y, z, vt, isbrh);
}
}
项目:EnderCore
文件:TechneUtil.java
public static void renderWithIcon(GroupObject go, IIcon icon, IIcon override, Tessellator tes, IBlockAccess world, int x, int y, int z, VertexTransform vt,
boolean isbrh) {
for (Face f : go.faces) {
Vertex n = f.faceNormal;
tes.setNormal(n.x, n.y, n.z);
ForgeDirection normal = getNormalFor(n);
ForgeDirection right = normal.getRotation(ForgeDirection.DOWN);
if (normal == right) {
right = ForgeDirection.EAST;
}
ForgeDirection down = normal.getRotation(right.getOpposite());
if (isbrh && world != null && world.getBlock(x, y, z).getLightOpacity() > 0) {
int bx = x + normal.offsetX;
int by = y + normal.offsetY;
int bz = z + normal.offsetZ;
tes.setBrightness(world.getBlock(bx, by, bz).getMixedBrightnessForBlock(world, bx, by, bz));
}
for (int i = 0; i < f.vertices.length; i++) {
Vertex vert = f.vertices[i];
Vector3d v = new Vector3d(vert);
Vector3d tv = new Vector3d(v);
tv.add(0.5, 0, 0.5);
if (vt != null) {
vt.apply(v);
// TODO BLECH
if (vt instanceof VertexRotationFacing) {
normal = ((VertexRotationFacing) vt).rotate(normal);
}
if (vt instanceof VertexTransformComposite) {
for (VertexTransform xform : ((VertexTransformComposite) vt).xforms) {
if (xform instanceof VertexRotationFacing) {
normal = ((VertexRotationFacing) xform).rotate(normal);
}
}
}
}
if (isbrh) {
int c = (int) (0xFF * RenderUtil.getColorMultiplierForFace(normal));
tes.setColorOpaque(c, c, c);
}
if (override != null) {
double interpX = Math.abs(tv.x * right.offsetX + tv.y * right.offsetY + tv.z * right.offsetZ);
double interpY = Math.abs(tv.x * down.offsetX + tv.y * down.offsetY + tv.z * down.offsetZ);
// Handles verts outside block bounds. Modulo fails at 1.0.
while (interpX > 1) {
interpX--;
}
while (interpY > 1) {
interpY--;
}
if (normal == ForgeDirection.SOUTH || normal == ForgeDirection.WEST) {
interpX = 1 - interpX;
}
if (normal != ForgeDirection.UP && normal != ForgeDirection.DOWN) {
interpY = 1 - interpY;
}
tes.addVertexWithUV(v.x, v.y, v.z, override.getInterpolatedU(interpX * 16), override.getInterpolatedV(interpY * 16));
} else {
TextureCoordinate t = f.textureCoordinates[i];
tes.addVertexWithUV(v.x, v.y, v.z, getInterpolatedU(icon, t.u), getInterpolatedV(icon, t.v));
}
}
}
}
项目:EnderCore
文件:TechneUtil.java
public static void renderInventoryBlock(Collection<GroupObject> model, Block block, int metadata, RenderBlocks rb) {
renderInventoryBlock(model, getIconFor(block, metadata), block, metadata, rb);
}
项目:EnderCore
文件:TechneUtil.java
public static boolean renderWorldBlock(Collection<GroupObject> model, IBlockAccess world, int x, int y, int z, Block block, RenderBlocks rb) {
IIcon icon = getIconFor(block, world, x, y, z);
return renderWorldBlock(model, icon, world, x, y, z, block, rb);
}
项目:EnderIOAddons
文件:GroupObjectWithIcon.java
public GroupObjectWithIcon(GroupObject go, @Nonnull ITextureProvider textureProvider) {
this.name = go.name;
this.glDrawingMode = go.glDrawingMode;
this.faces = go.faces;
this.textureProvider = textureProvider;
}
项目:EnderIOAddons
文件:RendererFrameworkMachine.java
@Nullable
public GroupObject extractModelPart(@Nonnull String name) {
return model.remove(name);
}
项目:EnderIOAddons
文件:RendererFrameworkMachine.java
@Nullable
public GroupObject getControllerPart(int id) {
return contr[id - 1];
}
项目:EnderIOAddons
文件:RendererFrameworkMachine.java
public void registerController(@Nonnull String name, @Nonnull GroupObject active, @Nonnull GroupObject inactive) {
controller.put(name, inactive);
controller.put(name + "Active", active);
}
项目:EnderIOAddons
文件:RendererFrameworkMachine.java
@Override
protected Collection<GroupObject> getModel(IBlockAccess world, int x, int y, int z) {
List<GroupObject> result = new ArrayList<GroupObject>(super.getModel(world, x, y, z));
TileEntity te = world != null ? world.getTileEntity(x, y, z) : null;
IFrameworkMachine frameworkMachine = te instanceof IFrameworkMachine ? (IFrameworkMachine) te : null;
AbstractMachineEntity machineEntity = te instanceof AbstractMachineEntity ? (AbstractMachineEntity) te : null;
if (frameworkMachine != null && machineEntity != null) {
if (frameworkMachine.hasController()) {
if (machineEntity.isActive()) {
result.add(controller.get(frameworkMachine.getControllerModelName() + "Active"));
} else {
result.add(controller.get(frameworkMachine.getControllerModelName()));
}
}
boolean stem1 = false, stem2 = false;
for (TankSlot tankSlot : TankSlot.values()) {
tankSlot = notnullJ(tankSlot, "enum.values()[i]");
if (frameworkMachine.hasTank(tankSlot)) {
int i = tankSlot.ordinal();
result.add(tanks[i]);
result.add(valves[i]);
switch (tankSlot) {
case FRONT_LEFT:
case BACK_LEFT:
stem1 = true;
break;
case FRONT_RIGHT:
case BACK_RIGHT:
stem2 = true;
break;
}
}
}
if (stem1) {
result.add(stems[0]);
}
if (stem2) {
result.add(stems[1]);
}
}
return result;
}