Some models and render stuff compiles

This commit is contained in:
covers1624
2020-06-02 11:59:29 +09:30
parent 7483314190
commit d32dbfd3c8
14 changed files with 207 additions and 230 deletions
@@ -26,6 +26,7 @@ import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.ILightReader;
import appeng.api.implementations.tiles.IColorableTile; import appeng.api.implementations.tiles.IColorableTile;
import appeng.api.util.AEColor; import appeng.api.util.AEColor;
@@ -40,7 +41,7 @@ public class ColorableTileBlockColor implements IBlockColor
public static final ColorableTileBlockColor INSTANCE = new ColorableTileBlockColor(); public static final ColorableTileBlockColor INSTANCE = new ColorableTileBlockColor();
@Override @Override
public int colorMultiplier( BlockState state, @Nullable IBlockReader worldIn, @Nullable BlockPos pos, int tintIndex ) public int getColor( BlockState state, @Nullable ILightReader worldIn, @Nullable BlockPos pos, int tintIndex )
{ {
AEColor color = AEColor.TRANSPARENT; // Default to a neutral color AEColor color = AEColor.TRANSPARENT; // Default to a neutral color
@@ -19,12 +19,12 @@
package appeng.client.render; package appeng.client.render;
import javax.vecmath.Matrix4f; import com.mojang.blaze3d.matrix.MatrixStack;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
@@ -38,10 +38,10 @@ public abstract class DelegateBakedModel implements IBakedModel
} }
@Override @Override
public Pair<? extends IBakedModel, Matrix4f> handlePerspective( ItemCameraTransforms.TransformType type ) public IBakedModel handlePerspective( ItemCameraTransforms.TransformType cameraTransformType, MatrixStack mat )
{ {
Pair<? extends IBakedModel, Matrix4f> pair = this.baseModel.handlePerspective( type ); baseModel.handlePerspective( cameraTransformType, mat );
return Pair.of( this, pair.getValue() ); return this;
} }
@Override @Override
@@ -20,6 +20,7 @@ package appeng.client.render;
import java.util.List; import java.util.List;
import java.util.Random;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -27,8 +28,8 @@ import com.google.common.collect.ImmutableList;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
@@ -48,7 +49,7 @@ public class DummyFluidBakedModel implements IBakedModel
} }
@Override @Override
public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, long rand ) public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, Random rand )
{ {
return this.quads; return this.quads;
} }
@@ -65,6 +66,12 @@ public class DummyFluidBakedModel implements IBakedModel
return false; return false;
} }
@Override
public boolean func_230044_c_()
{
return false;
}
@Override @Override
public boolean isBuiltInRenderer() public boolean isBuiltInRenderer()
{ {
@@ -21,19 +21,18 @@ package appeng.client.render;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Random;
import java.util.function.Function; import java.util.function.Function;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.TransformationMatrix;
import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.fluid.Fluids; import net.minecraft.fluid.Fluids;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -41,8 +40,7 @@ import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.model.ItemLayerModel; import net.minecraftforge.client.model.ItemLayerModel;
import net.minecraft.fluid.Fluid; import net.minecraftforge.fluids.FluidAttributes;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import appeng.fluids.items.FluidDummyItem; import appeng.fluids.items.FluidDummyItem;
@@ -55,19 +53,17 @@ import appeng.fluids.items.FluidDummyItem;
*/ */
public class DummyFluidDispatcherBakedModel extends DelegateBakedModel public class DummyFluidDispatcherBakedModel extends DelegateBakedModel
{ {
private final VertexFormat format;
private final Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter; private final Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter;
public DummyFluidDispatcherBakedModel( IBakedModel baseModel, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter ) public DummyFluidDispatcherBakedModel( IBakedModel baseModel, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter )
{ {
super( baseModel ); super( baseModel );
this.format = format;
this.bakedTextureGetter = bakedTextureGetter; this.bakedTextureGetter = bakedTextureGetter;
} }
// This is never used. See the item override list below. // This is never used. See the item override list below.
@Override @Override
public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, long rand ) public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, Random rand )
{ {
return Collections.emptyList(); return Collections.emptyList();
} }
@@ -78,6 +74,12 @@ public class DummyFluidDispatcherBakedModel extends DelegateBakedModel
return this.getBaseModel().isGui3d(); return this.getBaseModel().isGui3d();
} }
@Override
public boolean func_230044_c_()
{
return getBaseModel().func_230044_c_();
}
@Override @Override
public boolean isBuiltInRenderer() public boolean isBuiltInRenderer()
{ {
@@ -87,10 +89,10 @@ public class DummyFluidDispatcherBakedModel extends DelegateBakedModel
@Override @Override
public ItemOverrideList getOverrides() public ItemOverrideList getOverrides()
{ {
return new ItemOverrideList( Collections.emptyList() ) return new ItemOverrideList()
{ {
@Override @Override
public IBakedModel handleItemState( IBakedModel originalModel, ItemStack stack, World world, LivingEntity entity ) public IBakedModel getModelWithOverrides( IBakedModel originalModel, ItemStack stack, World world, LivingEntity entity )
{ {
if( !( stack.getItem() instanceof FluidDummyItem ) ) if( !( stack.getItem() instanceof FluidDummyItem ) )
{ {
@@ -105,13 +107,14 @@ public class DummyFluidDispatcherBakedModel extends DelegateBakedModel
fluidStack = new FluidStack( Fluids.WATER, FluidAttributes.BUCKET_VOLUME ); fluidStack = new FluidStack( Fluids.WATER, FluidAttributes.BUCKET_VOLUME );
} }
TextureAtlasSprite sprite = DummyFluidDispatcherBakedModel.this.bakedTextureGetter.apply( fluidStack.getFluid().getStill( fluidStack ) ); FluidAttributes attributes = fluidStack.getFluid().getAttributes();
TextureAtlasSprite sprite = DummyFluidDispatcherBakedModel.this.bakedTextureGetter.apply( attributes.getStillTexture( fluidStack ) );
if( sprite == null ) if( sprite == null )
{ {
return new DummyFluidBakedModel( ImmutableList.of() ); return new DummyFluidBakedModel( ImmutableList.of() );
} }
return new DummyFluidBakedModel( ItemLayerModel.getQuadsForSprite( 0, sprite, DummyFluidDispatcherBakedModel.this.format, Optional.empty() ) ); return new DummyFluidBakedModel( ItemLayerModel.getQuadsForSprite( 0, sprite, TransformationMatrix.identity() ) );
} }
}; };
} }
@@ -78,7 +78,7 @@ public class DummyFluidItemModel implements IModel
{ {
IBakedModel bakedBaseModel = this.getBaseModel().bake( state, format, bakedTextureGetter ); IBakedModel bakedBaseModel = this.getBaseModel().bake( state, format, bakedTextureGetter );
return new DummyFluidDispatcherBakedModel( bakedBaseModel, format, bakedTextureGetter ); return new DummyFluidDispatcherBakedModel( bakedBaseModel, bakedTextureGetter );
} }
@Override @Override
@@ -22,15 +22,18 @@ package appeng.client.render;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Random;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraftforge.client.model.data.EmptyModelData;
import net.minecraftforge.client.model.data.IModelData;
import appeng.client.render.cablebus.FacadeBuilder; import appeng.client.render.cablebus.FacadeBuilder;
@@ -55,7 +58,13 @@ public class FacadeBakedItemModel extends DelegateBakedModel
} }
@Override @Override
public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, long rand ) public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, Random rand )
{
return getQuads( state, side, rand, EmptyModelData.INSTANCE );
}
@Override
public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, Random rand, IModelData data )
{ {
if( side != null ) if( side != null )
{ {
@@ -65,7 +74,7 @@ public class FacadeBakedItemModel extends DelegateBakedModel
{ {
quads = new ArrayList<>(); quads = new ArrayList<>();
quads.addAll( this.facadeBuilder.buildFacadeItemQuads( this.textureStack, Direction.NORTH ) ); quads.addAll( this.facadeBuilder.buildFacadeItemQuads( this.textureStack, Direction.NORTH ) );
quads.addAll( this.getBaseModel().getQuads( state, side, rand ) ); quads.addAll( this.getBaseModel().getQuads( state, side, rand, data ) );
quads = Collections.unmodifiableList( quads ); quads = Collections.unmodifiableList( quads );
} }
return quads; return quads;
@@ -77,6 +86,12 @@ public class FacadeBakedItemModel extends DelegateBakedModel
return false; return false;
} }
@Override
public boolean func_230044_c_()
{
return false;
}
@Override @Override
public boolean isBuiltInRenderer() public boolean isBuiltInRenderer()
{ {
@@ -22,21 +22,21 @@ package appeng.client.render;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Random;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.world.World; import net.minecraft.world.World;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import appeng.client.render.cablebus.FacadeBuilder; import appeng.client.render.cablebus.FacadeBuilder;
import appeng.items.parts.ItemFacade; import appeng.items.parts.ItemFacade;
@@ -48,20 +48,18 @@ import appeng.items.parts.ItemFacade;
*/ */
public class FacadeDispatcherBakedModel extends DelegateBakedModel public class FacadeDispatcherBakedModel extends DelegateBakedModel
{ {
private final VertexFormat format;
private final FacadeBuilder facadeBuilder; private final FacadeBuilder facadeBuilder;
private final Int2ObjectMap<FacadeBakedItemModel> cache = new Int2ObjectArrayMap<>(); private final Int2ObjectMap<FacadeBakedItemModel> cache = new Int2ObjectArrayMap<>();
public FacadeDispatcherBakedModel( IBakedModel baseModel, VertexFormat format, FacadeBuilder facadeBuilder ) public FacadeDispatcherBakedModel( IBakedModel baseModel, FacadeBuilder facadeBuilder )
{ {
super( baseModel ); super( baseModel );
this.format = format;
this.facadeBuilder = facadeBuilder; this.facadeBuilder = facadeBuilder;
} }
// This is never used. See the item override list below. // This is never used. See the item override list below.
@Override @Override
public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, long rand ) public List<BakedQuad> getQuads( @Nullable BlockState state, @Nullable Direction side, Random rand )
{ {
return Collections.emptyList(); return Collections.emptyList();
} }
@@ -72,6 +70,12 @@ public class FacadeDispatcherBakedModel extends DelegateBakedModel
return this.getBaseModel().isGui3d(); return this.getBaseModel().isGui3d();
} }
@Override
public boolean func_230044_c_()
{
return false;
}
@Override @Override
public boolean isBuiltInRenderer() public boolean isBuiltInRenderer()
{ {
@@ -81,10 +85,10 @@ public class FacadeDispatcherBakedModel extends DelegateBakedModel
@Override @Override
public ItemOverrideList getOverrides() public ItemOverrideList getOverrides()
{ {
return new ItemOverrideList( Collections.emptyList() ) return new ItemOverrideList()
{ {
@Override @Override
public IBakedModel handleItemState( IBakedModel originalModel, ItemStack stack, World world, LivingEntity entity ) public IBakedModel getModelWithOverrides( IBakedModel originalModel, ItemStack stack, World world, LivingEntity entity )
{ {
if( !( stack.getItem() instanceof ItemFacade ) ) if( !( stack.getItem() instanceof ItemFacade ) )
{ {
@@ -95,13 +99,13 @@ public class FacadeDispatcherBakedModel extends DelegateBakedModel
ItemStack textureItem = itemFacade.getTextureItem( stack ); ItemStack textureItem = itemFacade.getTextureItem( stack );
int hash = Objects.hash( textureItem.getItem().getRegistryName(), textureItem.getMetadata(), textureItem.getTag() ); int hash = Objects.hash( textureItem.getItem().getRegistryName(), textureItem.getTag() );
FacadeBakedItemModel model = FacadeDispatcherBakedModel.this.cache.get( hash ); FacadeBakedItemModel model = FacadeDispatcherBakedModel.this.cache.get( hash );
if( model == null ) if( model == null )
{ {
model = new FacadeBakedItemModel(FacadeDispatcherBakedModel.this.getBaseModel(), textureItem, FacadeDispatcherBakedModel.this.facadeBuilder); model = new FacadeBakedItemModel( FacadeDispatcherBakedModel.this.getBaseModel(), textureItem, FacadeDispatcherBakedModel.this.facadeBuilder );
FacadeDispatcherBakedModel.this.cache.put(hash, model); FacadeDispatcherBakedModel.this.cache.put( hash, model );
} }
return model; return model;
} }
@@ -74,7 +74,7 @@ public class FacadeItemModel implements IModel
IBakedModel bakedBaseModel = this.getBaseModel().bake( state, format, bakedTextureGetter ); IBakedModel bakedBaseModel = this.getBaseModel().bake( state, format, bakedTextureGetter );
FacadeBuilder facadeBuilder = new FacadeBuilder(); FacadeBuilder facadeBuilder = new FacadeBuilder();
return new FacadeDispatcherBakedModel( bakedBaseModel, format, facadeBuilder ); return new FacadeDispatcherBakedModel( bakedBaseModel, facadeBuilder );
} }
@Override @Override
@@ -19,12 +19,14 @@
package appeng.client.render; package appeng.client.render;
import javax.vecmath.Matrix4f; import com.mojang.blaze3d.matrix.MatrixStack;
import javax.vecmath.Vector3f;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Matrix4f;
import net.minecraft.client.renderer.Quaternion;
import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.Vector4f;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraftforge.common.model.TRSRTransformation; import net.minecraft.util.math.Vec3i;
/** /**
@@ -74,15 +76,19 @@ public enum FacingToRotation
// @formatter:on // @formatter:on
private final Vector3f rot; private final Vector3f rot;
private final Quaternion xRot;
private final Quaternion yRot;
private final Quaternion zRot;
private final Matrix4f mat; private final Matrix4f mat;
private FacingToRotation( Vector3f rot ) private FacingToRotation( Vector3f rot )
{ {
this.rot = rot; this.rot = rot;
this.mat = TRSRTransformation this.mat = new Matrix4f();
.toVecmath( new org.lwjgl.util.vector.Matrix4f().rotate( (float) Math.toRadians( rot.x ), new org.lwjgl.util.vector.Vector3f( 1, 0, 0 ) ) this.mat.setIdentity();
.rotate( (float) Math.toRadians( rot.y ), new org.lwjgl.util.vector.Vector3f( 0, 1, 0 ) ) this.mat.mul( xRot = Vector3f.XP.rotationDegrees( rot.getX() ) );
.rotate( (float) Math.toRadians( rot.z ), new org.lwjgl.util.vector.Vector3f( 0, 0, 1 ) ) ); this.mat.mul( yRot = Vector3f.YP.rotationDegrees( rot.getY() ) );
this.mat.mul( zRot = Vector3f.ZP.rotationDegrees( rot.getZ() ) );
} }
public Vector3f getRot() public Vector3f getRot()
@@ -95,16 +101,19 @@ public enum FacingToRotation
return new Matrix4f( this.mat ); return new Matrix4f( this.mat );
} }
public void glRotateCurrentMat() public void push( MatrixStack mStack )
{ {
GlStateManager.rotate( this.rot.x, 1, 0, 0 ); mStack.rotate( xRot );
GlStateManager.rotate( this.rot.y, 0, 1, 0 ); mStack.rotate( yRot );
GlStateManager.rotate( this.rot.z, 0, 0, 1 ); mStack.rotate( zRot );
} }
public Direction rotate( Direction facing ) public Direction rotate( Direction facing )
{ {
return TRSRTransformation.rotate( this.mat, facing ); Vec3i dir = facing.getDirectionVec();
Vector4f vec = new Vector4f( dir.getX(), dir.getY(), dir.getZ(), 1 );
vec.transform( mat );
return Direction.getFacingFromVector( vec.getX(), vec.getY(), vec.getZ() );
} }
public Direction resultingRotate( Direction facing ) public Direction resultingRotate( Direction facing )
@@ -123,5 +132,4 @@ public enum FacingToRotation
{ {
return values()[forward.ordinal() * 6 + up.ordinal()]; return values()[forward.ordinal() * 6 + up.ordinal()];
} }
}
}
@@ -21,21 +21,22 @@ package appeng.client.render;
import java.util.Random; import java.util.Random;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.GLAllocation;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.world.ClientWorld;
import net.minecraftforge.client.IRenderHandler; import net.minecraftforge.client.IRenderHandler;
public class SpatialSkyRender extends IRenderHandler //TODO https://github.com/MinecraftForge/MinecraftForge/pull/6537
public class SpatialSkyRender implements IRenderHandler
{ {
private static final SpatialSkyRender INSTANCE = new SpatialSkyRender(); private static final SpatialSkyRender INSTANCE = new SpatialSkyRender();
@@ -46,25 +47,26 @@ public class SpatialSkyRender extends IRenderHandler
public SpatialSkyRender() public SpatialSkyRender()
{ {
this.dspList = GLAllocation.generateDisplayLists( 1 ); this.dspList = GL11.glGenLists( 1 );
} }
public static IRenderHandler getInstance() //FIXME, Do not use this until the above PR is merged.
{ // public static IRenderHandler getInstance()
return INSTANCE; // {
} // return INSTANCE;
// }
@Override @Override
public void render(final float partialTicks, final ClientWorld world, final Minecraft mc ) public void render( final int ticks, final float partialTicks, final ClientWorld world, final Minecraft mc )
{ {
final long now = System.currentTimeMillis(); final long now = System.currentTimeMillis();
if( now - this.cycle > 2000 ) if( now - this.cycle > 2000 )
{ {
this.cycle = now; this.cycle = now;
GlStateManager.glNewList( this.dspList, GL11.GL_COMPILE ); GL11.glNewList( this.dspList, GL11.GL_COMPILE );
this.renderTwinkles(); this.renderTwinkles();
GlStateManager.glEndList(); GL11.glEndList();
} }
float fade = now - this.cycle; float fade = now - this.cycle;
@@ -72,7 +74,7 @@ public class SpatialSkyRender extends IRenderHandler
fade = 0.15f * ( 1.0f - Math.abs( ( fade - 1.0f ) * ( fade - 1.0f ) ) ); fade = 0.15f * ( 1.0f - Math.abs( ( fade - 1.0f ) * ( fade - 1.0f ) ) );
GlStateManager.disableFog(); GlStateManager.disableFog();
GlStateManager.disableAlpha(); GlStateManager.disableAlphaTest();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
GlStateManager.depthMask( false ); GlStateManager.depthMask( false );
RenderSystem.color4f( 0.0f, 0.0f, 0.0f, 1.0f ); RenderSystem.color4f( 0.0f, 0.0f, 0.0f, 1.0f );
@@ -87,30 +89,30 @@ public class SpatialSkyRender extends IRenderHandler
if( i == 1 ) if( i == 1 )
{ {
GlStateManager.rotate( 90.0F, 1.0F, 0.0F, 0.0F ); GlStateManager.rotatef( 90.0F, 1.0F, 0.0F, 0.0F );
} }
if( i == 2 ) if( i == 2 )
{ {
GlStateManager.rotate( -90.0F, 1.0F, 0.0F, 0.0F ); GlStateManager.rotatef( -90.0F, 1.0F, 0.0F, 0.0F );
} }
if( i == 3 ) if( i == 3 )
{ {
GlStateManager.rotate( 180.0F, 1.0F, 0.0F, 0.0F ); GlStateManager.rotatef( 180.0F, 1.0F, 0.0F, 0.0F );
} }
if( i == 4 ) if( i == 4 )
{ {
GlStateManager.rotate( 90.0F, 0.0F, 0.0F, 1.0F ); GlStateManager.rotatef( 90.0F, 0.0F, 0.0F, 1.0F );
} }
if( i == 5 ) if( i == 5 )
{ {
GlStateManager.rotate( -90.0F, 0.0F, 0.0F, 1.0F ); GlStateManager.rotatef( -90.0F, 0.0F, 0.0F, 1.0F );
} }
GlStateManager.disableTexture2D(); GlStateManager.disableTexture();
VertexBuffer.begin( GL11.GL_QUADS, DefaultVertexFormats.POSITION ); VertexBuffer.begin( GL11.GL_QUADS, DefaultVertexFormats.POSITION );
VertexBuffer.pos( -100.0D, -100.0D, -100.0D ).endVertex(); VertexBuffer.pos( -100.0D, -100.0D, -100.0D ).endVertex();
VertexBuffer.pos( -100.0D, -100.0D, 100.0D ).endVertex(); VertexBuffer.pos( -100.0D, -100.0D, 100.0D ).endVertex();
@@ -126,21 +128,21 @@ public class SpatialSkyRender extends IRenderHandler
if( fade > 0.0f ) if( fade > 0.0f )
{ {
GlStateManager.disableFog(); GlStateManager.disableFog();
GlStateManager.disableAlpha(); GlStateManager.disableAlphaTest();
RenderSystem.enableBlend(); RenderSystem.enableBlend();
GlStateManager.disableTexture2D(); GlStateManager.disableTexture();
GlStateManager.depthMask( false ); GlStateManager.depthMask( false );
OpenGlHelper.glBlendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0 ); GlStateManager.blendFuncSeparate( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0 );
RenderHelper.disableStandardItemLighting(); RenderHelper.disableStandardItemLighting();
RenderSystem.color4f( fade, fade, fade, 1.0f ); RenderSystem.color4f( fade, fade, fade, 1.0f );
GlStateManager.callList( this.dspList ); GL11.glCallList( this.dspList );
} }
GlStateManager.depthMask( true ); GlStateManager.depthMask( true );
RenderSystem.enableBlend(); RenderSystem.enableBlend();
GlStateManager.enableAlpha(); GlStateManager.enableAlphaTest();
RenderSystem.enableTexture(); RenderSystem.enableTexture();
GlStateManager.enableFog(); GlStateManager.enableFog();
@@ -19,15 +19,11 @@
package appeng.client.render; package appeng.client.render;
import net.minecraft.client.Minecraft; import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Vector3f;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import appeng.api.storage.data.IAEItemStack;
import appeng.util.IWideReadableNumberConverter; import appeng.util.IWideReadableNumberConverter;
import appeng.util.ReadableNumberConverter; import appeng.util.ReadableNumberConverter;
@@ -44,9 +40,9 @@ public class TesrRenderHelper
* Move the current coordinate system to the center of the given block face, assuming that the origin is currently * Move the current coordinate system to the center of the given block face, assuming that the origin is currently
* at the center of a block. * at the center of a block.
*/ */
public static void moveToFace( Direction face ) public static void moveToFace( MatrixStack mStack, Direction face )
{ {
GlStateManager.translate( face.getXOffset() * 0.50, face.getYOffset() * 0.50, face.getZOffset() * 0.50 ); mStack.translate( face.getXOffset() * 0.50, face.getYOffset() * 0.50, face.getZOffset() * 0.50 );
} }
/** /**
@@ -54,39 +50,39 @@ public class TesrRenderHelper
* the given face as if it was * the given face as if it was
* a 2D canvas. * a 2D canvas.
*/ */
public static void rotateToFace( Direction face, byte spin ) public static void rotateToFace( MatrixStack mStack, Direction face, byte spin )
{ {
switch( face ) switch( face )
{ {
case UP: case UP:
GlStateManager.scale( 1.0f, -1.0f, 1.0f ); mStack.scale( 1.0f, -1.0f, 1.0f );
GlStateManager.rotate( 90.0f, 1.0f, 0.0f, 0.0f ); mStack.rotate( Vector3f.XP.rotationDegrees( 90.0F ) );
GlStateManager.rotate( spin * 90.0F, 0, 0, 1 ); mStack.rotate( Vector3f.ZP.rotationDegrees( spin * 90.0F ) );
break; break;
case DOWN: case DOWN:
GlStateManager.scale( 1.0f, -1.0f, 1.0f ); mStack.scale( 1.0f, -1.0f, 1.0f );
GlStateManager.rotate( -90.0f, 1.0f, 0.0f, 0.0f ); mStack.rotate( Vector3f.XP.rotationDegrees( -90.0F ) );
GlStateManager.rotate( spin * -90.0F, 0, 0, 1 ); mStack.rotate( Vector3f.ZP.rotationDegrees( spin * -90.0F ) );
break; break;
case EAST: case EAST:
GlStateManager.scale( -1.0f, -1.0f, -1.0f ); mStack.scale( -1.0f, -1.0f, -1.0f );
GlStateManager.rotate( -90.0f, 0.0f, 1.0f, 0.0f ); mStack.rotate( Vector3f.YP.rotationDegrees( -90.0F ) );
break; break;
case WEST: case WEST:
GlStateManager.scale( -1.0f, -1.0f, -1.0f ); mStack.scale( -1.0f, -1.0f, -1.0f );
GlStateManager.rotate( 90.0f, 0.0f, 1.0f, 0.0f ); mStack.rotate( Vector3f.YP.rotationDegrees( 90.0F ) );
break; break;
case NORTH: case NORTH:
GlStateManager.scale( -1.0f, -1.0f, -1.0f ); mStack.scale( -1.0f, -1.0f, -1.0f );
break; break;
case SOUTH: case SOUTH:
GlStateManager.scale( -1.0f, -1.0f, -1.0f ); mStack.scale( -1.0f, -1.0f, -1.0f );
GlStateManager.rotate( 180.0f, 0.0f, 1.0f, 0.0f ); mStack.rotate( Vector3f.YP.rotationDegrees( 180.0F ) );
break; break;
default: default:
@@ -94,53 +90,53 @@ public class TesrRenderHelper
} }
} }
/** //TODO, A different approach will have to be used for this from TESRs, -covers, i have ideas.
* Render an item in 2D. // /**
*/ // * Render an item in 2D.
public static void renderItem2d( ItemStack itemStack, float scale ) // */
{ // public static void renderItem2d( ItemStack itemStack, float scale )
if( !itemStack.isEmpty() ) // {
{ // if( !itemStack.isEmpty() )
OpenGlHelper.setLightmapTextureCoords( OpenGlHelper.lightmapTexUnit, 240.f, 240.0f ); // {
// RenderSystem.glMultiTexCoord2f( GL13.GL_TEXTURE22, 240.f, 240.0f );
GlStateManager.pushMatrix(); //
// RenderSystem.pushMatrix();
// The Z-scaling by 0.0001 causes the model to be visually "flattened" //
// This cannot replace a proper projection, but it's cheap and gives the desired // // The Z-scaling by 0.0001 causes the model to be visually "flattened"
// effect at least from head-on // // This cannot replace a proper projection, but it's cheap and gives the desired
GlStateManager.scale( scale / 32.0f, scale / 32.0f, 0.0001f ); // // effect at least from head-on
// Position the item icon at the top middle of the panel // RenderSystem.scaled( scale / 32.0f, scale / 32.0f, 0.0001f );
GlStateManager.translate( -8, -11, 0 ); // // Position the item icon at the top middle of the panel
// RenderSystem.translated( -8, -11, 0 );
RenderItem renderItem = Minecraft.getInstance().getRenderItem(); //
renderItem.renderItemAndEffectIntoGUI( itemStack, 0, 0 ); // ItemRenderer renderItem = Minecraft.getInstance().getItemRenderer();
// renderItem.renderItemAndEffectIntoGUI( itemStack, 0, 0 );
GlStateManager.popMatrix(); //
} // RenderSystem.popMatrix();
} // }
// }
/** //
* Render an item in 2D and the given text below it. // /**
* // * Render an item in 2D and the given text below it.
* @param spacing Specifies how far apart the item and the item stack amount are rendered. // *
*/ // * @param spacing Specifies how far apart the item and the item stack amount are rendered.
public static void renderItem2dWithAmount( IAEItemStack itemStack, float itemScale, float spacing ) // */
{ // public static void renderItem2dWithAmount( IAEItemStack itemStack, float itemScale, float spacing )
final ItemStack renderStack = itemStack.asItemStackRepresentation(); // {
// final ItemStack renderStack = itemStack.asItemStackRepresentation();
TesrRenderHelper.renderItem2d( renderStack, itemScale ); //
// TesrRenderHelper.renderItem2d( renderStack, itemScale );
final long stackSize = itemStack.getStackSize(); //
final String renderedStackSize = NUMBER_CONVERTER.toWideReadableForm( stackSize ); // final long stackSize = itemStack.getStackSize();
// final String renderedStackSize = NUMBER_CONVERTER.toWideReadableForm( stackSize );
// Render the item count //
final FontRenderer fr = Minecraft.getInstance().fontRenderer; // // Render the item count
final int width = fr.getStringWidth( renderedStackSize ); // final FontRenderer fr = Minecraft.getInstance().fontRenderer;
GlStateManager.translate( 0.0f, spacing, 0 ); // final int width = fr.getStringWidth( renderedStackSize );
GlStateManager.scale( 1.0f / 62.0f, 1.0f / 62.0f, 1.0f / 62.0f ); // RenderSystem.translated( 0.0f, spacing, 0 );
GlStateManager.translate( -0.5f * width, 0.0f, 0.5f ); // RenderSystem.scaled( 1.0f / 62.0f, 1.0f / 62.0f, 1.0f / 62.0f );
fr.drawString( renderedStackSize, 0, 0, 0 ); // RenderSystem.translated( -0.5f * width, 0.0f, 0.5f );
// fr.drawString( renderedStackSize, 0, 0, 0 );
} //
// }
} }
@@ -1,69 +0,0 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 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.
*
* Applied Energistics 2 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 Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.client.render;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraftforge.common.ForgeModContainer;
import net.minecraftforge.fml.client.FMLClientHandler;
/**
* Utility for managing extended Vertex Formats without having to re-clone existing vertex formats over and over again.
*/
public final class VertexFormats
{
// Standard item format extended with lightmap coordinates
private static final VertexFormat itemFormatWithLightMap = new VertexFormat( DefaultVertexFormats.ITEM ).addElement( DefaultVertexFormats.TEX_2S );
private VertexFormats()
{
}
public static VertexFormat getFormatWithLightMap( VertexFormat format )
{
// Do not use this when Optifine is present or if the vanilla lighting pipeline is used
if( FMLClientHandler.instance().hasOptifine() || !ForgeModContainer.forgeLightPipelineEnabled )
{
return format;
}
VertexFormat result;
if( format == DefaultVertexFormats.BLOCK )
{
result = DefaultVertexFormats.BLOCK;
}
else if( format == DefaultVertexFormats.ITEM )
{
result = itemFormatWithLightMap;
}
else if( !format.hasUvOffset( 1 ) )
{
result = new VertexFormat( format );
result.addElement( DefaultVertexFormats.TEX_2S );
}
else
{
result = format; // Already has the needed UV, so keep it
}
return result;
}
}
@@ -64,6 +64,7 @@ import net.minecraft.client.renderer.model.ItemOverride;
import net.minecraft.client.renderer.model.ItemTransformVec3f; import net.minecraft.client.renderer.model.ItemTransformVec3f;
import net.minecraft.client.renderer.model.ModelBakery; import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.resources.IResource; import net.minecraft.resources.IResource;
import net.minecraft.resources.IResourceManager; import net.minecraft.resources.IResourceManager;
@@ -351,7 +352,7 @@ public enum UVLModelLoader implements ICustomModelLoader
Pair<Float, Float> brightness = UVLModelWrapper.this.uvlightmap.get( face ); Pair<Float, Float> brightness = UVLModelWrapper.this.uvlightmap.get( face );
if( brightness != null ) if( brightness != null )
{ {
VertexFormat newFormat = VertexFormats.getFormatWithLightMap( quad.getFormat() ); VertexFormat newFormat = DefaultVertexFormats.BLOCK;
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder( newFormat ); UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder( newFormat );
VertexLighterFlat trans = new VertexLighterFlat( Minecraft.getInstance().getBlockColors() ) VertexLighterFlat trans = new VertexLighterFlat( Minecraft.getInstance().getBlockColors() )
{ {
@@ -392,4 +393,4 @@ public enum UVLModelLoader implements ICustomModelLoader
boolean ae2_uvl_marker = false; boolean ae2_uvl_marker = false;
} }
} }
+9
View File
@@ -24,20 +24,29 @@ import appeng.api.config.PowerMultiplier;
import appeng.api.config.SecurityPermissions; import appeng.api.config.SecurityPermissions;
import appeng.api.definitions.IItemDefinition; import appeng.api.definitions.IItemDefinition;
import appeng.api.implementations.items.IAEWrench; import appeng.api.implementations.items.IAEWrench;
import appeng.api.networking.IGrid;
import appeng.api.networking.IGridNode; import appeng.api.networking.IGridNode;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.energy.IEnergySource; import appeng.api.networking.energy.IEnergySource;
import appeng.api.networking.security.IActionHost; import appeng.api.networking.security.IActionHost;
import appeng.api.networking.security.IActionSource; import appeng.api.networking.security.IActionSource;
import appeng.api.networking.storage.IStorageGrid;
import appeng.api.storage.IMEInventory; import appeng.api.storage.IMEInventory;
import appeng.api.storage.IMEMonitorHandlerReceiver;
import appeng.api.storage.IStorageChannel;
import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IAEStack; import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IItemList;
import appeng.api.util.DimensionalCoord; import appeng.api.util.DimensionalCoord;
import appeng.core.AEConfig;
import appeng.core.AELog;
import appeng.core.Api; import appeng.core.Api;
import appeng.core.features.AEFeature; import appeng.core.features.AEFeature;
import appeng.core.stats.AeStats; import appeng.core.stats.AeStats;
import appeng.fluids.util.AEFluidStack; import appeng.fluids.util.AEFluidStack;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.me.GridNode;
import appeng.util.helpers.ItemComparisonHelper; import appeng.util.helpers.ItemComparisonHelper;
import appeng.util.item.AEItemStack; import appeng.util.item.AEItemStack;