This commit is contained in:
Dragon2488 2016-10-02 11:15:33 +07:00
parent 96df8c4ba9
commit 13155cb4da
37 changed files with 572 additions and 588 deletions

View file

@ -1,7 +1,7 @@
package gregtech.api.items;
import gregtech.api.interfaces.IIconContainer;
import gregtech.common.render.newitems.IItemIconContainerProvider;
import gregtech.common.render.items.IItemIconContainerProvider;
import gregtech.common.render.IIconRegister;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;

View file

@ -1,7 +1,6 @@
package gregtech.api.items;
import gregtech.api.util.GT_LanguageManager;
import gregtech.common.blocks.GT_Block_Machines;
import gregtech.common.blocks.UnlistedBlockPosProperty;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
@ -12,9 +11,6 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
@ -23,8 +19,6 @@ import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import static gregtech.api.enums.GT_Values.W;
@ -39,12 +33,15 @@ public abstract class GT_Generic_Block extends Block {
super(aMaterial);
setUnlocalizedName(mUnlocalizedName = aName);
GameRegistry.registerBlock(this, aItemClass, getUnlocalizedName());
GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + W + ".name", "Any Sub Block of this one");
GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + W + ".name", "Unnamed");
}
@Override
protected BlockStateContainer createBlockState() {
return new ExtendedBlockState.Builder(this).add(METADATA).add(BLOCK_POS).build();
return new ExtendedBlockState.Builder(this)
.add(METADATA)
.add(BLOCK_POS)
.build();
}
@Override
@ -62,38 +59,14 @@ public abstract class GT_Generic_Block extends Block {
return ((IExtendedBlockState) state).withProperty(BLOCK_POS, pos);
}
@Override
public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) {
return getExtendedState(state, worldIn, pos);
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
return new ItemStack(this, 1, state.getValue(METADATA));
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
@SideOnly(Side.CLIENT)
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) {
if(this instanceof GT_Block_Machines) {
return true; //Machines and wires should always render all sides;
}
//for anything else fallback to default implementation;
return super.shouldSideBeRendered(blockState, blockAccess, pos, side);
}
@Override
public String getUnlocalizedName() {
return mUnlocalizedName;
}
}

View file

@ -8,9 +8,9 @@ import gregtech.api.util.GT_Config;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.newitems.IItemIconContainerProvider;
import gregtech.common.render.items.IItemIconContainerProvider;
import gregtech.common.render.IIconRegister;
import gregtech.common.render.newitems.IItemIconProvider;
import gregtech.common.render.items.IItemIconProvider;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
@ -26,10 +26,8 @@ import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry;

View file

@ -1,8 +1,8 @@
package gregtech.api.items;
import gregtech.common.render.IColorMultiplier;
import gregtech.common.render.IItemColorMultiplier;
import gregtech.common.render.IIconRegister;
import gregtech.common.render.newitems.IItemIconProvider;
import gregtech.common.render.items.IItemIconProvider;
import ic2.api.item.IElectricItem;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
@ -10,7 +10,6 @@ import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import gregtech.api.GregTech_API;
@ -51,7 +50,7 @@ import static gregtech.api.enums.GT_Values.*;
* <p/>
* These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike Item.
*/
public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements IElectricItem, IItemIconProvider, IIconRegister, IColorMultiplier {
public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements IElectricItem, IItemIconProvider, IIconRegister, IItemColorMultiplier {
/**
* All instances of this Item Class are listed here.
* This gets used to register the Renderer to all Items of this Type, if useStandardMetaItemRenderer() returns true.

View file

@ -13,8 +13,8 @@ import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.IColorMultiplier;
import gregtech.common.render.newitems.IItemIconProvider;
import gregtech.common.render.IItemColorMultiplier;
import gregtech.common.render.items.IItemIconProvider;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
@ -64,7 +64,7 @@ import java.util.Random;
//@Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft"),
//@Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = "EnderIO")
})
public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item implements IDamagableItem, IToolGrafter, IItemIconProvider, IColorMultiplier {//, IToolGrafter, IToolCrowbar, IToolWrench, ITool {
public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item implements IDamagableItem, IToolGrafter, IItemIconProvider, IItemColorMultiplier {//, IToolGrafter, IToolCrowbar, IToolWrench, ITool {
/**
* All instances of this Item Class are listed here.
* This gets used to register the Renderer to all Items of this Type, if useStandardMetaItemRenderer() returns true.

View file

@ -2,12 +2,11 @@ package gregtech.api.objects;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.common.render.newblocks.IBlockIconProvider;
import gregtech.common.render.newblocks.RenderUtil;
import gregtech.common.render.blocks.IBlockIconProvider;
import gregtech.common.render.RenderUtil;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.client.FMLClientHandler;
@ -58,12 +57,14 @@ public class GT_CopiedBlockTexture implements ITexture {
@Override
@SideOnly(Side.CLIENT)
public List<BakedQuad> getQuads(Block aBlock, BlockPos blockPos, EnumFacing side, float offset) {
TextureAtlasSprite sprite = getSide(mBlock, mMeta, EnumFacing.VALUES[mSide]);
if(sprite != null) {
BakedQuad quad = RenderUtil.renderSide(DefaultVertexFormats.BLOCK, sprite, side, -1, offset, mRGBa, false);
return Collections.singletonList(quad);
if(side != null) {
TextureAtlasSprite sprite = getSide(mBlock, mMeta, EnumFacing.VALUES[mSide]);
if(sprite != null) {
BakedQuad quad = RenderUtil.renderSide(sprite, side, offset, mRGBa);
return Collections.singletonList(quad);
}
}
return Collections.emptyList();
return Collections.EMPTY_LIST;
}
@Override

View file

@ -1,23 +1,23 @@
package gregtech.api.objects;
import com.google.common.collect.Lists;
import com.google.common.collect.ImmutableList;
import gregtech.api.interfaces.IIconContainer;
import gregtech.api.interfaces.ITexture;
import gregtech.common.render.newblocks.RenderUtil;
import gregtech.common.render.RenderUtil;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumMap;
import java.util.List;
public class GT_PipeRenderedTexture implements ITexture {
private EnumMap<EnumFacing, ImmutableList<BakedQuad>> sidedQuads;
private float thickness;
private boolean connected;
private TextureAtlasSprite connectedSprite;
@ -36,6 +36,7 @@ public class GT_PipeRenderedTexture implements ITexture {
if(rgbaInsulation != null) {
this.rgbaInsulation = GT_RenderedTexture.makeColor(rgbaInsulation);
}
generate9();
}
public GT_PipeRenderedTexture(float thickness, boolean connected, IIconContainer sprite, short[] rgba) {
@ -47,14 +48,28 @@ public class GT_PipeRenderedTexture implements ITexture {
}
@Override
public List<BakedQuad> getQuads(Block aBlock, BlockPos blockPos, EnumFacing side, float offset) {
float wireOffset = (1.0F - thickness) / 2f;
public List<BakedQuad> getQuads(Block aBlock, BlockPos blockPos, EnumFacing renderSide, float offset) {
if(renderSide != null) {
return sidedQuads.get(renderSide);
}
return Collections.EMPTY_LIST;
}
private void generate9() {
sidedQuads = new EnumMap<>(EnumFacing.class);
for(EnumFacing side : EnumFacing.VALUES) {
sidedQuads.put(side, generateSide(side));
}
}
private ImmutableList<BakedQuad> generateSide(EnumFacing side) {
float wireOffset = (1.0F - thickness) / 2f;
switch (side) {
case UP:
if(!connected) {
BakedQuad quad = makeQuad(insulationSprite, wireOffset, wireOffset + thickness, wireOffset, thickness, thickness, EnumFacing.UP, rgbaInsulation);
return Lists.newArrayList(quad);
return ImmutableList.of(quad);
} else {
BakedQuad north = makeQuad(insulationSprite, wireOffset, wireOffset + thickness, wireOffset, thickness, wireOffset, EnumFacing.NORTH, rgbaInsulation);
BakedQuad south = makeQuad(insulationSprite, wireOffset, wireOffset + thickness, wireOffset + thickness, thickness, wireOffset, EnumFacing.SOUTH, rgbaInsulation);
@ -64,12 +79,12 @@ public class GT_PipeRenderedTexture implements ITexture {
BakedQuad up = makeQuad(connectedSprite, wireOffset, 1f, wireOffset, thickness, thickness, EnumFacing.UP, rgbaConnection);
return Lists.newArrayList(north, south, west, east, up);
return ImmutableList.of(north, south, west, east, up);
}
case DOWN:
if(!connected) {
BakedQuad quad = makeQuad(insulationSprite, wireOffset, wireOffset, wireOffset, thickness, thickness, EnumFacing.DOWN, rgbaInsulation);
return Lists.newArrayList(quad);
return ImmutableList.of(quad);
} else {
BakedQuad north = makeQuad(insulationSprite, wireOffset, 0f, wireOffset, thickness, wireOffset, EnumFacing.NORTH, rgbaInsulation);
BakedQuad south = makeQuad(insulationSprite, wireOffset, 0f, wireOffset + thickness, thickness, wireOffset, EnumFacing.SOUTH, rgbaInsulation);
@ -79,12 +94,12 @@ public class GT_PipeRenderedTexture implements ITexture {
BakedQuad down = makeQuad(connectedSprite, wireOffset, 0f, wireOffset, thickness, thickness, EnumFacing.DOWN, rgbaConnection);
return Lists.newArrayList(north, south, west, east, down);
return ImmutableList.of(north, south, west, east, down);
}
case EAST:
if(!connected) {
BakedQuad quad = makeQuad(insulationSprite, wireOffset, wireOffset, wireOffset, thickness, thickness, EnumFacing.WEST, rgbaInsulation);
return Lists.newArrayList(quad);
return ImmutableList.of(quad);
} else {
BakedQuad down = makeQuad(insulationSprite, wireOffset + thickness, wireOffset, wireOffset, wireOffset, thickness, EnumFacing.DOWN, rgbaInsulation);
BakedQuad up = makeQuad(insulationSprite, wireOffset + thickness, wireOffset + thickness, wireOffset, wireOffset, thickness, EnumFacing.UP, rgbaInsulation);
@ -94,12 +109,12 @@ public class GT_PipeRenderedTexture implements ITexture {
BakedQuad end = makeQuad(connectedSprite, 1f, wireOffset, wireOffset, thickness, thickness, EnumFacing.EAST, rgbaConnection);
return Lists.newArrayList(down, up, north, south, end);
return ImmutableList.of(down, up, north, south, end);
}
case WEST:
if(!connected) {
BakedQuad quad = makeQuad(insulationSprite, wireOffset + thickness, wireOffset, wireOffset, thickness, thickness, EnumFacing.EAST, rgbaInsulation);
return Lists.newArrayList(quad);
return ImmutableList.of(quad);
} else {
BakedQuad down = makeQuad(insulationSprite, 0f, wireOffset, wireOffset, wireOffset, thickness, EnumFacing.DOWN, rgbaInsulation);
BakedQuad up = makeQuad(insulationSprite, 0f, wireOffset + thickness, wireOffset, wireOffset, thickness, EnumFacing.UP, rgbaInsulation);
@ -109,12 +124,12 @@ public class GT_PipeRenderedTexture implements ITexture {
BakedQuad end = makeQuad(connectedSprite, 0f, wireOffset, wireOffset, thickness, thickness, EnumFacing.WEST, rgbaConnection);
return Lists.newArrayList(down, up, north, south, end);
return ImmutableList.of(down, up, north, south, end);
}
case NORTH:
if(!connected) {
BakedQuad quad = makeQuad(insulationSprite, wireOffset, wireOffset, wireOffset, thickness, thickness, EnumFacing.NORTH, rgbaInsulation);
return Lists.newArrayList(quad);
return ImmutableList.of(quad);
} else {
BakedQuad down = makeQuad(insulationSprite, wireOffset, wireOffset, 0f, thickness, wireOffset, EnumFacing.DOWN, rgbaInsulation);
BakedQuad up = makeQuad(insulationSprite, wireOffset, wireOffset + thickness, 0f, thickness, wireOffset, EnumFacing.UP, rgbaInsulation);
@ -124,12 +139,12 @@ public class GT_PipeRenderedTexture implements ITexture {
BakedQuad end = makeQuad(connectedSprite, wireOffset, wireOffset, 0f, thickness, thickness, EnumFacing.NORTH, rgbaConnection);
return Lists.newArrayList(down, up, end, east, west);
return ImmutableList.of(down, up, end, east, west);
}
case SOUTH:
if(!connected) {
BakedQuad quad = makeQuad(insulationSprite, wireOffset, wireOffset, wireOffset + thickness, thickness, thickness, EnumFacing.SOUTH, rgbaInsulation);
return Lists.newArrayList(quad);
return ImmutableList.of(quad);
} else {
BakedQuad down = makeQuad(insulationSprite, wireOffset, wireOffset, wireOffset + thickness, thickness, wireOffset, EnumFacing.DOWN, rgbaInsulation);
BakedQuad up = makeQuad(insulationSprite, wireOffset, wireOffset + thickness, wireOffset + thickness, thickness, wireOffset, EnumFacing.UP, rgbaInsulation);
@ -139,14 +154,14 @@ public class GT_PipeRenderedTexture implements ITexture {
BakedQuad end = makeQuad(connectedSprite, wireOffset, wireOffset, 1f, thickness, thickness, EnumFacing.SOUTH, rgbaConnection);
return Lists.newArrayList(down, up, end, east, west);
return ImmutableList.of(down, up, end, east, west);
}
}
return Collections.emptyList();
throw new IllegalArgumentException();
}
public BakedQuad makeQuad(TextureAtlasSprite sprite, float x, float y, float z, float width, float height, EnumFacing side, int rgba) {
return RenderUtil.renderQuadCustom(x, y, z, width, height, DefaultVertexFormats.BLOCK, sprite, side, -1, rgba, true);
return RenderUtil.renderQuadCustom(x, y, z, width, height, sprite, side, rgba);
}
@Override

View file

@ -3,20 +3,17 @@ package gregtech.api.objects;
import com.google.common.collect.ImmutableList;
import gregtech.api.interfaces.IIconContainer;
import gregtech.api.interfaces.ITexture;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.newblocks.RenderUtil;
import gregtech.common.render.RenderUtil;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.awt.*;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
@ -25,7 +22,7 @@ public class GT_RenderedTexture implements ITexture {
private final IIconContainer mIconContainer;
public int mRGBa = -1;
private HashMap<Integer, HashMap<EnumFacing, ImmutableList<BakedQuad>>> cache = new HashMap<>();
private HashMap<Integer, EnumMap<EnumFacing, ImmutableList<BakedQuad>>> cache = new HashMap<>();
public GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa) {
mIconContainer = aIcon;
@ -66,9 +63,9 @@ public class GT_RenderedTexture implements ITexture {
@SideOnly(Side.CLIENT)
public List<BakedQuad> getQuads(Block aBlock, BlockPos blockPos, EnumFacing side, float offset) {
int offsetKey = offset2key(offset);
HashMap<EnumFacing, ImmutableList<BakedQuad>> offsetCache = cache.get(offsetKey);
EnumMap<EnumFacing, ImmutableList<BakedQuad>> offsetCache = cache.get(offsetKey);
if(offsetCache == null) {
offsetCache = new HashMap<>();
offsetCache = new EnumMap<>(EnumFacing.class);
cache.put(offsetKey, offsetCache);
}
ImmutableList<BakedQuad> quads = offsetCache.get(side);
@ -79,15 +76,15 @@ public class GT_RenderedTexture implements ITexture {
return quads;
}
public ImmutableList<BakedQuad> generate9(EnumFacing side, float offset) {
private ImmutableList<BakedQuad> generate9(EnumFacing side, float offset) {
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
TextureAtlasSprite sprite = mIconContainer.getIcon();
TextureAtlasSprite overlay = mIconContainer.getOverlayIcon();
if(sprite != null) {
quads.add(RenderUtil.renderSide(DefaultVertexFormats.BLOCK, sprite, side, -1, offset, mRGBa, false));
quads.add(RenderUtil.renderSide(sprite, side, offset, mRGBa));
}
if(overlay != null) {
quads.add(RenderUtil.renderSide(DefaultVertexFormats.BLOCK, overlay, side, -1, offset + 0.01F, mRGBa, false));
quads.add(RenderUtil.renderSide(overlay, side, offset + 0.01F, mRGBa));
}
return quads.build();
}

View file

@ -16,6 +16,9 @@ import java.util.*;
import java.util.List;
public class GT_SidedTexture implements ITexture {
private EnumMap<EnumFacing, ITexture> sidedTextures;
private final IIconContainer[] mIconContainer;
public int mRGBa;
@ -23,6 +26,15 @@ public class GT_SidedTexture implements ITexture {
if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture");
mIconContainer = new IIconContainer[]{aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5};
mRGBa = makeColor(aRGBa);
generate9();
}
private void generate9() {
sidedTextures = new EnumMap<>(EnumFacing.class);
for(EnumFacing side : EnumFacing.VALUES) {
GT_RenderedTexture texture = new GT_RenderedTexture(mIconContainer[side.getIndex()], mRGBa);
sidedTextures.put(side, texture);
}
}
private int makeColor(short[] rgba) {
@ -50,8 +62,10 @@ public class GT_SidedTexture implements ITexture {
@Override
@SideOnly(Side.CLIENT)
public List<BakedQuad> getQuads(Block aBlock, BlockPos blockPos, EnumFacing side, float offset) {
return new GT_RenderedTexture(mIconContainer[side.getIndex()], mRGBa)
.getQuads(aBlock, blockPos, side, offset);
if(side != null) {
return sidedTextures.get(side).getQuads(aBlock, blockPos, side, offset);
}
return Collections.emptyList();
}
@Override

View file

@ -14,7 +14,7 @@ import java.util.Map;
public class ASM implements IFMLLoadingPlugin, IClassTransformer {
private static final String OBF_METHOD_NAME = "func_178125_b";
private static final String BLOCK_RENDERER = "gregtech/common/render/newblocks/BlockRenderer";
private static final String BLOCK_RENDERER = "gregtech/common/render/GT_BlockRenderer";
private static final String SHOULD_HOOK_DESC = "(Lnet/minecraft/block/state/IBlockState;)Z";
private static final String HOOK_DESC = "(Lnet/minecraft/block/state/IBlockState;)Lnet/minecraft/client/renderer/block/model/IBakedModel;";

View file

@ -7,16 +7,14 @@ package gregtech.common;
import gregtech.api.GregTech_API;
import gregtech.api.enums.*;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Utility;
import gregtech.common.entities.GT_Entity_Arrow;
import gregtech.common.entities.GT_Entity_Arrow_Potion;
import gregtech.common.render.GT_CapeRenderer;
import gregtech.common.render.GT_Renderer_Entity_Arrow;
import gregtech.common.render.newitems.GT_IIconProvider_Item_Model;
import gregtech.common.render.entity.GT_CapeRenderer;
import gregtech.common.render.entity.GT_Renderer_Entity_Arrow;
import gregtech.common.render.GT_RenderDispatcher;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.IReloadableResourceManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextComponentString;
@ -177,7 +175,7 @@ public class GT_Client extends GT_Proxy
Textures.ItemIcons.BUTCHERYKNIFE.getClass();
TextureSet.SET_DIAMOND.getClass();
new GT_IIconProvider_Item_Model();
new GT_RenderDispatcher();
}
public void run() {

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import gregtech.api.GregTech_API;
import gregtech.api.items.GT_Generic_Block;
import gregtech.api.util.GT_LanguageManager;
import gregtech.common.render.newblocks.IBlockIconProvider;
import gregtech.common.render.blocks.IBlockIconProvider;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockStateContainer;
@ -47,11 +47,6 @@ public abstract class GT_Block_Casings_Abstract extends GT_Generic_Block impleme
return 2;
}
@Override
protected BlockStateContainer createBlockState() {
return super.createBlockState();
}
@Override
public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) {
return Blocks.IRON_BLOCK.getBlockHardness(blockState, worldIn, pos);

View file

@ -14,7 +14,7 @@ import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.IIconRegister;
import gregtech.common.render.newblocks.ITextureBlockIconProvider;
import gregtech.common.render.blocks.IBlockTextureProvider;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.IBlockState;
@ -30,6 +30,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.AxisAlignedBB;
@ -49,10 +50,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Random;
@SuppressWarnings("deprecation")
public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlock, ITileEntityProvider, IIconRegister, ITextureBlockIconProvider {
public static ThreadLocal<IGregTechTileEntity> mTemporaryTileEntity = new ThreadLocal<>();
public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlock, ITileEntityProvider, IIconRegister, IBlockTextureProvider {
public GT_Block_Machines() {
super(GT_Item_Machines.class, "gt.blockmachines", new GT_Material_Machines());
@ -327,7 +325,6 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo
if ((tTileEntity instanceof IGregTechTileEntity)) {
IGregTechTileEntity tGregTechTileEntity = (IGregTechTileEntity) tTileEntity;
Random tRandom = new Random();
mTemporaryTileEntity.set(tGregTechTileEntity);
for (int i = 0; i < tGregTechTileEntity.getSizeInventory(); i++) {
ItemStack tItem = tGregTechTileEntity.getStackInSlot(i);
if ((tItem != null) && (tItem.stackSize > 0) && (tGregTechTileEntity.isValidSlot(i))) {
@ -358,12 +355,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo
if(gregTechTileEntity != null) {
return gregTechTileEntity.getDrops();
}
if(mTemporaryTileEntity.get() != null) {
IGregTechTileEntity tempTile = mTemporaryTileEntity.get();
mTemporaryTileEntity.remove();
return tempTile.getDrops();
}
return Collections.emptyList();
return Collections.EMPTY_LIST;
}
@Override
@ -526,4 +518,11 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo
return false;
}
@Override
@SideOnly(Side.CLIENT)
//for multilayer blocks
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
}

View file

@ -1,10 +1,8 @@
package gregtech.common.blocks;
import gregtech.common.render.newblocks.IBlockIconProvider;
import mezz.jei.Internal;
import gregtech.common.render.blocks.IBlockIconProvider;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fml.common.Loader;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.interfaces.IIconContainer;

View file

@ -1,17 +1,5 @@
package gregtech.common.blocks;
import gregtech.api.enums.TextureSet;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.newblocks.ITextureBlockIconProvider;
import gregtech.jei.JEI_Compat;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.Explosion;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.fml.common.Loader;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Materials;
@ -21,26 +9,34 @@ import gregtech.api.items.GT_Generic_Block;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.common.render.blocks.IBlockTextureProvider;
import gregtech.jei.JEI_Compat;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements ITileEntityProvider, ITextureBlockIconProvider {
private static final ITexture[] EMPTY = new ITexture[0];
public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements ITileEntityProvider, IBlockTextureProvider {
protected GT_Block_Ores_Abstract(String aUnlocalizedName, Material aMaterial) {
super(GT_Item_Ores.class, aUnlocalizedName, aMaterial);
@ -189,11 +185,8 @@ public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements
@Override
@SideOnly(Side.CLIENT)
public ITexture[] getTexture(World world, BlockPos blockPos, IExtendedBlockState blockState, EnumFacing side) {
if (!GT_Utility.isOpaqueBlock(world, blockPos.offset(side))) {
GT_TileEntity_Ores oreTile = (GT_TileEntity_Ores) world.getTileEntity(blockPos);
return oreTile.getTexture(this, (byte) side.getIndex());
}
return EMPTY;
GT_TileEntity_Ores oreTile = (GT_TileEntity_Ores) world.getTileEntity(blockPos);
return oreTile.getTexture(this, (byte) side.getIndex());
}
@Override
@ -217,7 +210,7 @@ public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements
if ((tTileEntity instanceof GT_TileEntity_Ores)) {
return ((GT_TileEntity_Ores) tTileEntity).getDrops(getDroppedBlock(), fortune);
}
return Collections.emptyList();
return Collections.EMPTY_LIST;
}
public abstract OrePrefixes[] getProcessingPrefix(); //Must have 17 entries; an entry can be null to disable automatic recipes.
@ -247,4 +240,11 @@ public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements
return baseBlockType <= 8;
}
@Override
@SideOnly(Side.CLIENT)
//for multilayer blocks
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
}

View file

@ -13,25 +13,17 @@ import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.newblocks.IBlockIconProvider;
import ic2.core.block.EntityIC2Explosive;
import ic2.core.block.EntityItnt;
import gregtech.common.render.blocks.IBlockIconProvider;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockAccess;
@ -39,7 +31,6 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nullable;
import java.util.List;
public class GT_Block_Reinforced extends GT_Generic_Block implements IBlockIconProvider {

View file

@ -4,7 +4,7 @@ import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.common.render.newblocks.IBlockIconProvider;
import gregtech.common.render.blocks.IBlockIconProvider;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.init.Blocks;

View file

@ -8,7 +8,7 @@ import gregtech.api.items.GT_Generic_Block;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.newblocks.IBlockIconProvider;
import gregtech.common.render.blocks.IBlockIconProvider;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;

View file

@ -35,27 +35,16 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit
public short mMetaData = 0;
public boolean mNatural = false;
@Nullable
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
return new SPacketUpdateTileEntity(this.pos, -1, this.getUpdateTag());
}
@Override
public NBTTagCompound getUpdateTag() {
return writeToNBT(new NBTTagCompound());
}
@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
readFromNBT(pkt.getNbtCompound());
causeChunkUpdate();
//return writeToNBT(new NBTTagCompound());
return null;
}
@Override
public void handleUpdateTag(NBTTagCompound tag) {
readNBTInternal(tag);
causeChunkUpdate();
//causeChunkUpdate();
}
@Override

View file

@ -4,7 +4,7 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.enums.ItemList;
import gregtech.api.items.GT_Generic_Item;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.IColorMultiplier;
import gregtech.common.render.IItemColorMultiplier;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
@ -19,7 +19,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.List;
public class GT_FluidDisplayItem extends GT_Generic_Item implements IColorMultiplier {
public class GT_FluidDisplayItem extends GT_Generic_Item implements IItemColorMultiplier {
public GT_FluidDisplayItem() {
super("GregTech_FluidDisplay", "Fluid Display", null);
ItemList.Display_Fluid.set(this);

View file

@ -10,10 +10,9 @@ import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.common.render.IColorMultiplier;
import gregtech.common.render.IItemColorMultiplier;
import gregtech.common.render.IIconRegister;
import gregtech.common.render.newitems.IItemIconProvider;
import net.minecraft.client.renderer.color.IItemColor;
import gregtech.common.render.items.IItemIconProvider;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.creativetab.CreativeTabs;
@ -28,7 +27,7 @@ import java.util.List;
import static gregtech.api.enums.GT_Values.MOD_ID;
public class ItemComb extends Item implements IItemIconProvider, IIconRegister, IColorMultiplier {
public class ItemComb extends Item implements IItemIconProvider, IIconRegister, IItemColorMultiplier {
@SideOnly(Side.CLIENT)
private TextureAtlasSprite itemIcon, secondIcon;

View file

@ -3,7 +3,7 @@ package gregtech.common.items.armor;
import gregtech.api.damagesources.GT_DamageSources;
import gregtech.api.enums.GT_Values;
import gregtech.common.render.IIconRegister;
import gregtech.common.render.newitems.IItemIconProvider;
import gregtech.common.render.items.IItemIconProvider;
import ic2.core.IC2;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;

View file

@ -1,21 +1,19 @@
package gregtech.common.render.newblocks;
package gregtech.common.render;
import com.google.common.collect.ImmutableList;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.items.GT_Generic_Block;
import gregtech.common.render.newitems.ModelUtil;
import gregtech.common.render.blocks.IBlockIconProvider;
import gregtech.common.render.blocks.IBlockTextureProvider;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@ -32,7 +30,7 @@ import java.util.HashMap;
import java.util.List;
@SideOnly(Side.CLIENT)
public class BlockRenderer {
public class GT_BlockRenderer {
/**
* Quads cache for standard icon provider blocks
@ -44,8 +42,8 @@ public class BlockRenderer {
if(blockState.getBlock() instanceof IBlockIconProvider) {
return true;
}
if(blockState.getBlock() instanceof ITextureBlockIconProvider) {
return true;
if(blockState.getBlock() instanceof IBlockTextureProvider) {
return true;
}
return false;
}
@ -54,21 +52,30 @@ public class BlockRenderer {
if(blockState.getBlock() instanceof IBlockIconProvider) {
return ICON_PROVIDER;
}
if(blockState.getBlock() instanceof ITextureBlockIconProvider) {
if(blockState.getBlock() instanceof IBlockTextureProvider) {
return TEXTURE_PROVIDER;
}
return null;
}
private static final IconProviderModel ICON_PROVIDER = new IconProviderModel();
private static final TextureProviderModel TEXTURE_PROVIDER = new TextureProviderModel();
public static final IconProviderModel ICON_PROVIDER = new IconProviderModel();
public static final TextureProviderModel TEXTURE_PROVIDER = new TextureProviderModel();
public static IBakedModel getItemBlockModel(Block block, ItemStack stack, EntityLivingBase entity) {
if(block instanceof IBlockTextureProvider) {
return GT_BlockRenderer.makeTextureProviderItemblock(stack, entity);
} else if(block instanceof IBlockIconProvider) {
return GT_BlockRenderer.makeIconProviderItemblock(stack, entity);
} else {
return null;
}
}
public static IBakedModel makeTextureProviderItemblock(ItemStack stack, EntityLivingBase holder) {
private static IBakedModel makeTextureProviderItemblock(ItemStack stack, EntityLivingBase holder) {
return new ItemblockTextureProviderModel(stack, holder instanceof EntityPlayer ? (EntityPlayer) holder : null);
}
public static IBakedModel makeIconProviderItemblock(ItemStack stack, EntityLivingBase holder) {
private static IBakedModel makeIconProviderItemblock(ItemStack stack, EntityLivingBase holder) {
return new ItemblockIconProviderModel(stack, holder instanceof EntityPlayer ? (EntityPlayer) holder : null);
}
@ -118,13 +125,13 @@ public class BlockRenderer {
}
ImmutableList<BakedQuad> faceQuad = quads.get(side);
if(faceQuad == null) {
faceQuad = ImmutableList.of(RenderUtil.renderSide(DefaultVertexFormats.BLOCK, sideIcon, side, -1, 0.0F, -1, false));
faceQuad = ImmutableList.of(RenderUtil.renderSide(sideIcon, side, 0.0F, 0xFFFFFF));
quads.put(side, faceQuad);
}
return faceQuad;
}
}
return Collections.emptyList();
return Collections.EMPTY_LIST;
}
public abstract TextureAtlasSprite getSideSprite(EnumFacing side, IBlockState blockState);
@ -139,7 +146,7 @@ public class BlockRenderer {
ArrayList<BakedQuad> quads = new ArrayList<>();
IExtendedBlockState blockState = (IExtendedBlockState) state;
BlockPos pos = blockState.getValue(GT_Generic_Block.BLOCK_POS);
ITextureBlockIconProvider provider = (ITextureBlockIconProvider) blockState.getBlock();
IBlockTextureProvider provider = (IBlockTextureProvider) blockState.getBlock();
ITexture[] textures = provider.getTexture(Minecraft.getMinecraft().theWorld, pos, blockState, side);
for (int i = 0; i < textures.length; i++) {
if(textures[i] != null) {
@ -148,7 +155,7 @@ public class BlockRenderer {
}
return quads;
}
return Collections.emptyList();
return Collections.EMPTY_LIST;
}
}
@ -169,7 +176,7 @@ public class BlockRenderer {
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
if(side != null) {
ArrayList<BakedQuad> quads = new ArrayList<>();
ITextureBlockIconProvider provider = (ITextureBlockIconProvider) block;
IBlockTextureProvider provider = (IBlockTextureProvider) block;
ITexture[] textures = provider.getItemblockTexture(holder, itemStack, side);
for (int i = 0; i < textures.length; i++) {
if(textures[i] != null) {
@ -178,7 +185,7 @@ public class BlockRenderer {
}
return quads;
}
return Collections.emptyList();
return Collections.EMPTY_LIST;
}
}
@ -187,7 +194,7 @@ public class BlockRenderer {
@Override
public boolean isAmbientOcclusion() {
return false;
return true;
}
@Override

View file

@ -1,20 +1,18 @@
package gregtech.common.render.newitems;
package gregtech.common.render;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import gregtech.api.GregTech_API;
import gregtech.common.render.IColorMultiplier;
import gregtech.common.render.IIconRegister;
import gregtech.common.render.newblocks.BlockRenderer;
import gregtech.common.render.newblocks.IBlockIconProvider;
import gregtech.common.render.newblocks.ITextureBlockIconProvider;
import gregtech.common.render.blocks.IBlockIconProvider;
import gregtech.common.render.blocks.IBlockTextureProvider;
import gregtech.common.render.items.IItemIconProvider;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemModelMesher;
import net.minecraft.client.renderer.block.model.*;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.renderer.color.ItemColors;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
@ -25,11 +23,10 @@ import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.pipeline.UnpackedBakedQuad;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.model.TRSRTransformation;
@ -42,25 +39,29 @@ import javax.vecmath.Vector4f;
import java.util.*;
@SideOnly(Side.CLIENT)
public class GT_IIconProvider_Item_Model implements IBakedModel {
public class GT_RenderDispatcher implements IBakedModel {
private static final ModelResourceLocation RESOURCE_LOCATION = new ModelResourceLocation("gregtech", "IItemIconProvider");
private ItemStack itemStack;
private VertexFormat vertexFormat;
private static final ModelResourceLocation RESOURCE_LOCATION_BLOCK_TEXTURE = new ModelResourceLocation("gregtech", "IBlockTextureIconProvider");
private static final ModelResourceLocation RESOURCE_LOCATION_BLOCK_ICON = new ModelResourceLocation("gregtech", "IBlockIconProvider");
public GT_IIconProvider_Item_Model() {
private ItemStack itemStack;
public GT_RenderDispatcher() {
MinecraftForge.EVENT_BUS.register(this);
setupItemModels();
this.vertexFormat = DefaultVertexFormats.ITEM;
setupModels();
}
@SubscribeEvent
public void onTextureMapStitch(TextureStitchEvent.Pre pre) {
ItemColors itemColors = Minecraft.getMinecraft().getItemColors();
BlockColors blockColors = Minecraft.getMinecraft().getBlockColors();
System.out.println("Texture map stitch");
System.out.println("GT_Mod: Starting Item Icon Load Phase");
System.out.println("GT_Mod: Starting Icon Load Phase");
GregTech_API.sBlockIcons = pre.getMap();
for (Runnable tRunnable : GregTech_API.sGTItemIconload) {
try {
tRunnable.run();
@ -69,6 +70,7 @@ public class GT_IIconProvider_Item_Model implements IBakedModel {
e.printStackTrace();
}
}
for (Runnable tRunnable : GregTech_API.sGTBlockIconload) {
try {
tRunnable.run();
@ -77,22 +79,41 @@ public class GT_IIconProvider_Item_Model implements IBakedModel {
e.printStackTrace();
}
}
for(ResourceLocation itemId : Item.REGISTRY.getKeys()) {
Item item = Item.REGISTRY.getObject(itemId);
if(item instanceof IIconRegister) {
((IIconRegister) item).registerIcons(pre.getMap());
}
if(item instanceof IColorMultiplier) {
IColorMultiplier colorMultiplier = (IColorMultiplier) item;
if(item instanceof IItemColorMultiplier) {
IItemColorMultiplier colorMultiplier = (IItemColorMultiplier) item;
itemColors.registerItemColorHandler(colorMultiplier::getColorFromItemstack, item);
}
//we don't need color multiplier for standard blocks, only for ITexture-blocks
if(item instanceof ItemBlock && ((ItemBlock) item).block instanceof IBlockTextureProvider) {
//ITextures pass color as tint index
itemColors.registerItemColorHandler((stack, tintIndex) -> tintIndex, item);
}
}
for(ResourceLocation blockId : Block.REGISTRY.getKeys()) {
Block block = Block.REGISTRY.getObject(blockId);
if(block instanceof IIconRegister) {
((IIconRegister) block).registerIcons(pre.getMap());
}
//we don't need color multiplier for standard blocks, only for ITexture-blocks
if(block instanceof IBlockTextureProvider) {
//ITextures pass color as tint index
blockColors.registerBlockColorHandler((state, worldIn, pos, tintIndex) -> tintIndex, block);
}
}
System.out.println("GT_Mod: Finished Icon Load Phase");
}
@ -100,18 +121,50 @@ public class GT_IIconProvider_Item_Model implements IBakedModel {
public void onModelsBake(ModelBakeEvent bakeEvent) {
System.out.println("Models bake");
bakeEvent.getModelRegistry().putObject(RESOURCE_LOCATION, this);
bakeEvent.getModelRegistry().putObject(RESOURCE_LOCATION_BLOCK_ICON, GT_BlockRenderer.ICON_PROVIDER);
bakeEvent.getModelRegistry().putObject(RESOURCE_LOCATION_BLOCK_TEXTURE, GT_BlockRenderer.TEXTURE_PROVIDER);
registerBlockModels();
}
public static void setupItemModels() {
public static void setupModels() {
ItemModelMesher itemModelMesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
for(ResourceLocation itemId : Item.REGISTRY.getKeys()) {
Item item = Item.REGISTRY.getObject(itemId);
if(item instanceof IItemIconProvider || (item instanceof ItemBlock && (
Block.getBlockFromItem(item) instanceof IBlockIconProvider ||
Block.getBlockFromItem(item) instanceof ITextureBlockIconProvider))) {
Block.getBlockFromItem(item) instanceof IBlockTextureProvider))) {
for (int i = 0; i < Short.MAX_VALUE; i++) {
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, i, RESOURCE_LOCATION);
itemModelMesher.register(item, i, RESOURCE_LOCATION);
}
}
}
}
public void registerBlockModels() {
for(ResourceLocation blockId : Block.REGISTRY.getKeys()) {
Block block = Block.REGISTRY.getObject(blockId);
if(block instanceof IBlockTextureProvider) {
ImmutableMap.Builder<IBlockState, ModelResourceLocation> stateMap = ImmutableMap.builder();
for(IBlockState blockState : block.getBlockState().getValidStates()) {
stateMap.put(blockState, RESOURCE_LOCATION_BLOCK_TEXTURE);
}
ImmutableMap<IBlockState, ModelResourceLocation> immutableStateMap = stateMap.build();
ModelLoader.setCustomStateMapper(block, block2 -> immutableStateMap);
}
else if(block instanceof IBlockIconProvider) {
ImmutableMap.Builder<IBlockState, ModelResourceLocation> stateMap = ImmutableMap.builder();
for(IBlockState blockState : block.getBlockState().getValidStates()) {
stateMap.put(blockState, RESOURCE_LOCATION_BLOCK_ICON);
}
ImmutableMap<IBlockState, ModelResourceLocation> immutableStateMap = stateMap.build();
ModelLoader.setCustomStateMapper(block, block2 -> immutableStateMap);
}
}
}
@ -128,14 +181,52 @@ public class GT_IIconProvider_Item_Model implements IBakedModel {
for(int i = 0; i < iconProvider.getRenderPasses(itemStack) + 1; i++) {
TextureAtlasSprite atlasSprite = iconProvider.getIcon(itemStack, i);
if(atlasSprite != null) {
resultQuads.addAll(getQuadsForSprite(i, atlasSprite, vertexFormat, Optional.absent()));
resultQuads.addAll(getQuadsForSprite(i, atlasSprite, DefaultVertexFormats.ITEM, Optional.absent()));
}
}
return resultQuads;
}
return Collections.emptyList();
return Collections.EMPTY_LIST;
}
@Override
public ItemOverrideList getOverrides() {
return new ItemOverrideList(Collections.EMPTY_LIST) {
@Override
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
if(stack.getItem() instanceof ItemBlock) {
Block block = Block.getBlockFromItem(stack.getItem());
return GT_BlockRenderer.getItemBlockModel(block, stack, entity);
} else {
GT_RenderDispatcher.this.itemStack = stack;
return GT_RenderDispatcher.this;
}
}
};
}
@Override
public ItemCameraTransforms getItemCameraTransforms() {
if(itemStack != null) {
IItemIconProvider iconProvider = (IItemIconProvider) itemStack.getItem();
return iconProvider.isHandheld(itemStack) ?
ModelUtil.HANDHELD_TRANSFORMS :
ModelUtil.DEFAULT_TRANSFORMS;
}
return ItemCameraTransforms.DEFAULT;
}
@Override
public TextureAtlasSprite getParticleTexture() {
if(itemStack != null) {
IItemIconProvider iconProvider = (IItemIconProvider) itemStack.getItem();
return iconProvider.getIcon(itemStack, 0);
}
return null;
}
@Override
public boolean isAmbientOcclusion() {
return false;
@ -151,48 +242,13 @@ public class GT_IIconProvider_Item_Model implements IBakedModel {
return false;
}
@Override
public TextureAtlasSprite getParticleTexture() {
if(itemStack != null) {
IItemIconProvider iconProvider = (IItemIconProvider) itemStack.getItem();
return iconProvider.getIcon(itemStack, 0);
}
return null;
}
@Override
public ItemCameraTransforms getItemCameraTransforms() {
if(itemStack != null) {
IItemIconProvider iconProvider = (IItemIconProvider) itemStack.getItem();
return iconProvider.isHandheld(itemStack) ? ModelUtil.HANDHELD_TRANSFORMS : ModelUtil.DEFAULT_TRANSFORMS;
}
return ItemCameraTransforms.DEFAULT;
}
@Override
public ItemOverrideList getOverrides() {
return new ItemOverrideList(Collections.<ItemOverride>emptyList()) {
@Override
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
if(stack.getItem() instanceof ItemBlock) {
Block block = Block.getBlockFromItem(stack.getItem());
if(block instanceof ITextureBlockIconProvider) {
return BlockRenderer.makeTextureProviderItemblock(stack, entity);
} else if(block instanceof IBlockIconProvider) {
return BlockRenderer.makeIconProviderItemblock(stack, entity);
} else {
return null;
}
}
///////////////////////////////////////////////////////////////////////
//ITEM RENDERING STUFF
///////////////////////////////////////////////////////////////////////
GT_IIconProvider_Item_Model.this.itemStack = stack;
return GT_IIconProvider_Item_Model.this;
}
};
}
public static ImmutableList<BakedQuad> getQuadsForSprite(int tint, TextureAtlasSprite sprite, VertexFormat format, Optional<TRSRTransformation> transform)
{
public static ImmutableList<BakedQuad> getQuadsForSprite(int tint, TextureAtlasSprite sprite, VertexFormat format, Optional<TRSRTransformation> transform) {
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
int uMax = sprite.getIconWidth();
@ -414,6 +470,9 @@ public class GT_IIconProvider_Item_Model implements IBakedModel {
break;
}
}
}
}

View file

@ -4,6 +4,16 @@ import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Implement on blocks and items to access texture map and allow icon registration
* You can register you own sprite using:
*
* TextureAtlasSprite icon = textureMap.registerSprite(ResourceLocation)
*
* @see TextureMap
* @see net.minecraft.client.renderer.texture.TextureAtlasSprite
* @see gregtech.common.render.items.IItemIconProvider
*/
public interface IIconRegister {
@SideOnly(Side.CLIENT)

View file

@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IColorMultiplier {
public interface IItemColorMultiplier {
@SideOnly(Side.CLIENT)
int getColorFromItemstack(ItemStack stack, int tintIndex);

View file

@ -1,4 +1,4 @@
package gregtech.common.render.newitems;
package gregtech.common.render;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
@ -11,6 +11,9 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Simple util for gathering transforms from external model jsons
*/
@SideOnly(Side.CLIENT)
public class ModelUtil {

View file

@ -0,0 +1,64 @@
package gregtech.common.render;
import net.minecraft.client.renderer.block.model.*;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.util.vector.Vector3f;
/**
* Util for easy rendering quads based on side and with custom size
*/
@SideOnly(Side.CLIENT)
public class RenderUtil {
private static FaceBakery FACE_BAKERY = new FaceBakery();
private static BlockFaceUV DEFAULT_UV = new BlockFaceUV(new float[] {0F, 0F, 16F, 16F}, 0);
public static BakedQuad renderSide(TextureAtlasSprite sprite, EnumFacing side, float offset, int color) {
switch (side) {
case DOWN:
return renderQuadCustom(0F, 0F - offset, 0F, 16F, 16F, sprite, side, color);
case UP:
return renderQuadCustom(0F, 16F + offset, 0F, 16F, 16F, sprite, side, color);
case WEST:
return renderQuadCustom(0F - offset, 0F, 0F, 16F, 16F, sprite, side, color);
case EAST:
return renderQuadCustom(16F + offset, 0F, 0F, 16F, 16F, sprite, side, color);
case NORTH:
return renderQuadCustom(0F, 0F, 0F - offset, 16F, 16F, sprite, side, color);
case SOUTH:
return renderQuadCustom(0F, 0F, 16F + offset, 16F, 16F, sprite, side, color);
default:
throw new IllegalArgumentException();
}
}
public static BakedQuad renderQuadCustom(float x, float y, float z, float width, float height, TextureAtlasSprite sprite, EnumFacing side, int color) {
Vector3f from = new Vector3f(x, y, z);
Vector3f to;
switch (side) {
case DOWN:
case UP:
to = new Vector3f(x + width, y, z + height);
break;
case WEST:
case EAST:
to = new Vector3f(x, y + width, z + height);
break;
case NORTH:
case SOUTH:
to = new Vector3f(x + width, y + height, z);
break;
default:
to = new Vector3f(x, y, z);
}
return FACE_BAKERY.makeBakedQuad(from, to,
new BlockPartFace(side, color, sprite.getIconName(), DEFAULT_UV),
sprite, side, ModelRotation.X0_Y0, null, false, true);
}
}

View file

@ -1,4 +1,4 @@
package gregtech.common.render.newblocks;
package gregtech.common.render.blocks;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.entity.player.EntityPlayer;
@ -9,6 +9,15 @@ import net.minecraft.world.IBlockAccess;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Implement on simple blocks which have only 1 sprite on each side
* For simple behavior just implement on block class and override {@link IBlockIconProvider#getIcon(EnumFacing, int)}
* If you care about {@link BlockPos} or @{@link ItemStack}, you can override getIcon based on them
*
* @see gregtech.common.render.IIconRegister
* @see TextureAtlasSprite
* @see IBlockIconProvider
*/
public interface IBlockIconProvider {
@SideOnly(Side.CLIENT)

View file

@ -0,0 +1,30 @@
package gregtech.common.render.blocks;
import gregtech.api.interfaces.ITexture;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Implement on blocks which care about {@link BlockPos} or {@link ItemStack} AND
* have custom rendering behaviour defined in {@link ITexture}s
*
* @see ITexture
* @see gregtech.common.render.IIconRegister
* @see IBlockIconProvider
*/
public interface IBlockTextureProvider {
@SideOnly(Side.CLIENT)
ITexture[] getTexture(World world, BlockPos blockPos, IExtendedBlockState blockState, EnumFacing side);
@SideOnly(Side.CLIENT)
ITexture[] getItemblockTexture(EntityPlayer player, ItemStack itemStack, EnumFacing side);
}

View file

@ -1,90 +1,90 @@
package gregtech.common.render;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.Collection;
@SideOnly(Side.CLIENT)
public class GT_CapeRenderer extends RenderPlayer {
private final ResourceLocation[] mCapes = {new ResourceLocation("gregtech:textures/BrainTechCape.png"), new ResourceLocation("gregtech:textures/GregTechCape.png"), new ResourceLocation("gregtech:textures/MrBrainCape.png"), new ResourceLocation("gregtech:textures/GregoriusCape.png")};
private final Collection<String> mCapeList;
public GT_CapeRenderer(Collection<String> aCapeList) {
super(Minecraft.getMinecraft().getRenderManager());
this.mCapeList = aCapeList;
}
public void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent) {
/*AbstractClientPlayer aPlayer = (AbstractClientPlayer) aEvent.getEntityPlayer();
if (GT_Utility.getFullInvisibility(aPlayer)) {
aEvent.setCanceled(true);
return;
}
float aPartialTicks = aEvent.partialRenderTick;
if (aPlayer.isInvisible()) {
return;
}
if (GT_Utility.getPotion(aPlayer, Integer.valueOf(Potion.invisibility.id).intValue())) {
return;
}
try {
ResourceLocation tResource = null;
if (aPlayer.getDisplayName().equalsIgnoreCase("Friedi4321")) {
tResource = this.mCapes[0];
}
if (this.mCapeList.contains(aPlayer.getDisplayName().toLowerCase())) {
tResource = this.mCapes[1];
}
if (aPlayer.getDisplayName().equalsIgnoreCase("Mr_Brain")) {
tResource = this.mCapes[2];
}
if (aPlayer.getDisplayName().equalsIgnoreCase("GregoriusT")) {
tResource = this.mCapes[3];
}
if ((tResource != null) && (!aPlayer.getHideCape())) {
bindTexture(tResource);
GL11.glPushMatrix();
GL11.glTranslatef(0.0F, 0.0F, 0.125F);
double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks);
double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks);
double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks);
float f6 = aPlayer.prevRenderYawOffset + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks;
double d3 = MathHelper.sin(f6 * 3.141593F / 180.0F);
double d4 = -MathHelper.cos(f6 * 3.141593F / 180.0F);
float f7 = (float) d1 * 10.0F;
float f8 = (float) (d0 * d3 + d2 * d4) * 100.0F;
float f9 = (float) (d0 * d4 - d2 * d3) * 100.0F;
if (f7 < -6.0F) {
f7 = -6.0F;
}
if (f7 > 32.0F) {
f7 = 32.0F;
}
if (f8 < 0.0F) {
f8 = 0.0F;
}
float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks;
f7 += MathHelper.sin((aPlayer.prevDistanceWalkedModified + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F) * 32.0F * f10;
if (aPlayer.isSneaking()) {
f7 += 25.0F;
}
GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
((ModelBiped) this.mainModel).renderCloak(0.0625F);
GL11.glPopMatrix();
}
} catch (Throwable e) {
if (GT_Values.D1) {
e.printStackTrace(GT_Log.err);
}
}*/
}
}
package gregtech.common.render.entity;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.Collection;
@SideOnly(Side.CLIENT)
public class GT_CapeRenderer extends RenderPlayer {
private final ResourceLocation[] mCapes = {new ResourceLocation("gregtech:textures/BrainTechCape.png"), new ResourceLocation("gregtech:textures/GregTechCape.png"), new ResourceLocation("gregtech:textures/MrBrainCape.png"), new ResourceLocation("gregtech:textures/GregoriusCape.png")};
private final Collection<String> mCapeList;
public GT_CapeRenderer(Collection<String> aCapeList) {
super(Minecraft.getMinecraft().getRenderManager());
this.mCapeList = aCapeList;
}
public void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent) {
/*AbstractClientPlayer aPlayer = (AbstractClientPlayer) aEvent.getEntityPlayer();
if (GT_Utility.getFullInvisibility(aPlayer)) {
aEvent.setCanceled(true);
return;
}
float aPartialTicks = aEvent.partialRenderTick;
if (aPlayer.isInvisible()) {
return;
}
if (GT_Utility.getPotion(aPlayer, Integer.valueOf(Potion.invisibility.id).intValue())) {
return;
}
try {
ResourceLocation tResource = null;
if (aPlayer.getDisplayName().equalsIgnoreCase("Friedi4321")) {
tResource = this.mCapes[0];
}
if (this.mCapeList.contains(aPlayer.getDisplayName().toLowerCase())) {
tResource = this.mCapes[1];
}
if (aPlayer.getDisplayName().equalsIgnoreCase("Mr_Brain")) {
tResource = this.mCapes[2];
}
if (aPlayer.getDisplayName().equalsIgnoreCase("GregoriusT")) {
tResource = this.mCapes[3];
}
if ((tResource != null) && (!aPlayer.getHideCape())) {
bindTexture(tResource);
GL11.glPushMatrix();
GL11.glTranslatef(0.0F, 0.0F, 0.125F);
double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks);
double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks);
double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks);
float f6 = aPlayer.prevRenderYawOffset + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks;
double d3 = MathHelper.sin(f6 * 3.141593F / 180.0F);
double d4 = -MathHelper.cos(f6 * 3.141593F / 180.0F);
float f7 = (float) d1 * 10.0F;
float f8 = (float) (d0 * d3 + d2 * d4) * 100.0F;
float f9 = (float) (d0 * d4 - d2 * d3) * 100.0F;
if (f7 < -6.0F) {
f7 = -6.0F;
}
if (f7 > 32.0F) {
f7 = 32.0F;
}
if (f8 < 0.0F) {
f8 = 0.0F;
}
float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks;
f7 += MathHelper.sin((aPlayer.prevDistanceWalkedModified + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F) * 32.0F * f10;
if (aPlayer.isSneaking()) {
f7 += 25.0F;
}
GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
((ModelBiped) this.mainModel).renderCloak(0.0625F);
GL11.glPopMatrix();
}
} catch (Throwable e) {
if (GT_Values.D1) {
e.printStackTrace(GT_Log.err);
}
}*/
}
}

View file

@ -1,28 +1,28 @@
package gregtech.common.render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraft.client.renderer.entity.RenderArrow;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GT_Renderer_Entity_Arrow extends RenderArrow {
private final ResourceLocation mTexture;
public GT_Renderer_Entity_Arrow(Class<? extends Entity> aArrowClass, String aTextureName, RenderManager renderManager) {
super(renderManager);
this.mTexture = new ResourceLocation("gregtech:textures/entity/" + aTextureName + ".png");
RenderingRegistry.registerEntityRenderingHandler(aArrowClass, this);
}
@Override
protected ResourceLocation getEntityTexture(Entity entity) {
return this.mTexture;
}
}
package gregtech.common.render.entity;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraft.client.renderer.entity.RenderArrow;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GT_Renderer_Entity_Arrow extends RenderArrow {
private final ResourceLocation mTexture;
public GT_Renderer_Entity_Arrow(Class<? extends Entity> aArrowClass, String aTextureName, RenderManager renderManager) {
super(renderManager);
this.mTexture = new ResourceLocation("gregtech:textures/entity/" + aTextureName + ".png");
RenderingRegistry.registerEntityRenderingHandler(aArrowClass, this);
}
@Override
protected ResourceLocation getEntityTexture(Entity entity) {
return this.mTexture;
}
}

View file

@ -1,4 +1,4 @@
package gregtech.common.render.newitems;
package gregtech.common.render.items;
import gregtech.api.interfaces.IIconContainer;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
@ -6,6 +6,12 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Simple multilayer implementation of {@link IItemIconProvider} for {@link IIconContainer} icons
*
* @see IIconContainer
* @see IItemIconProvider
*/
@SideOnly(Side.CLIENT)
public interface IItemIconContainerProvider extends IItemIconProvider {

View file

@ -0,0 +1,43 @@
package gregtech.common.render.items;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Implement on items which need either simple or advanced rendering
* If you need simple behavior, implement {@link IItemIconProvider#getIcon(ItemStack, int)}
*
* If you need multilayer, you can override {@link IItemIconProvider#getRenderPasses(ItemStack)}
* If you need handheld item, return true in {@link IItemIconProvider#isHandheld(ItemStack)}
*
* @see gregtech.common.render.IIconRegister
* @see TextureAtlasSprite
* @see IItemIconContainerProvider
*/
public interface IItemIconProvider {
@SideOnly(Side.CLIENT)
TextureAtlasSprite getIcon(ItemStack stack, int pass);
/**
* Returns amount of additional render passes needed for item
* @param stack item stack
* @return 0 if dont need multilayer rendering, amount of layers otherwise
*/
@SideOnly(Side.CLIENT)
default int getRenderPasses(ItemStack stack) {
return 0;
}
/**
* @param stack item stack
* @return true in item is handheld
*/
@SideOnly(Side.CLIENT)
default boolean isHandheld(ItemStack stack) {
return false;
}
}

View file

@ -1,21 +0,0 @@
package gregtech.common.render.newblocks;
import gregtech.api.interfaces.ITexture;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface ITextureBlockIconProvider {
@SideOnly(Side.CLIENT)
public ITexture[] getTexture(World world, BlockPos blockPos, IExtendedBlockState blockState, EnumFacing side);
@SideOnly(Side.CLIENT)
public ITexture[] getItemblockTexture(EntityPlayer player, ItemStack itemStack, EnumFacing side);
}

View file

@ -1,169 +0,0 @@
package gregtech.common.render.newblocks;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.pipeline.UnpackedBakedQuad;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderUtil {
public static BakedQuad renderSide(VertexFormat vertexFormat, TextureAtlasSprite sprite, EnumFacing side, int tint, float offset, int color, boolean hideSiding) {
switch (side) {
case NORTH:
return buildQuad(vertexFormat, hideSiding ? null : EnumFacing.NORTH, sprite, tint,
0, 0, -offset, sprite.getMaxU(), sprite.getMaxV(),
0, 1, -offset, sprite.getMaxU(), sprite.getMinV(),
1, 1, -offset, sprite.getMinU(), sprite.getMinV(),
1, 0, -offset, sprite.getMinU(), sprite.getMaxV(),
color);
case SOUTH:
return buildQuad(vertexFormat, hideSiding ? null : EnumFacing.SOUTH, sprite, tint,
1, 0, 1 + offset, sprite.getMinU(), sprite.getMaxV(),
1, 1, 1 + offset, sprite.getMinU(), sprite.getMinV(),
0, 1, 1 + offset, sprite.getMaxU(), sprite.getMinV(),
0, 0, 1 + offset, sprite.getMaxU(), sprite.getMaxV(),
color);
case WEST:
return buildQuad(vertexFormat, hideSiding ? null : EnumFacing.WEST, sprite, tint,
-offset, 0, 1, sprite.getMaxU(), sprite.getMaxV(),
-offset, 1, 1 , sprite.getMaxU(), sprite.getMinV(),
-offset, 1, 0, sprite.getMinU(), sprite.getMinV(),
-offset, 0, 0, sprite.getMinU(), sprite.getMaxV(),
color);
case EAST:
return buildQuad(vertexFormat, hideSiding ? null : EnumFacing.EAST, sprite, tint,
1 + offset, 0, 0, sprite.getMaxU(), sprite.getMaxV(),
1 + offset, 1, 0 , sprite.getMaxU(), sprite.getMinV(),
1 + offset, 1, 1, sprite.getMinU(), sprite.getMinV(),
1 + offset, 0, 1, sprite.getMinU(), sprite.getMaxV(),
color);
case DOWN:
return buildQuad(vertexFormat, hideSiding ? null : EnumFacing.DOWN, sprite, tint,
0, -offset, 0, sprite.getMinU(), sprite.getMinV(),
1, -offset, 0, sprite.getMaxU(), sprite.getMinV(),
1, -offset, 1, sprite.getMaxU(), sprite.getMaxV(),
0, -offset, 1, sprite.getMinU(), sprite.getMaxV(),
color);
case UP:
return buildQuad(vertexFormat, hideSiding ? null : EnumFacing.UP, sprite, tint,
0, 1 + offset, 1, sprite.getMinU(), sprite.getMaxV(),
1, 1 + offset, 1, sprite.getMaxU(), sprite.getMaxV(),
1, 1 + offset, 0, sprite.getMaxU(), sprite.getMinV(),
0, 1 + offset, 0, sprite.getMinU(), sprite.getMinV(),
color);
default:
System.out.println("Can't render side " + side);
throw new IllegalArgumentException();
}
}
public static BakedQuad renderQuadCustom(float x, float y, float z, float width, float height, VertexFormat vertexFormat, TextureAtlasSprite sprite, EnumFacing side, int tint, int color, boolean hide) {
//float spriteCut = Math.min((width + height) / 2.0F, 1.0F); TODO
switch (side) {
case NORTH:
return buildQuad(vertexFormat, EnumFacing.NORTH, sprite, tint,
x, y, z, sprite.getMaxU(), sprite.getMaxV(),
x, y + height, z, sprite.getMaxU(), sprite.getMinV(),
x + width, y + height, z, sprite.getMinU(), sprite.getMinV(),
x + width, y, z, sprite.getMinU(), sprite.getMaxV(),
color);
case SOUTH:
return buildQuad(vertexFormat, EnumFacing.SOUTH, sprite, tint,
x + width, y, z, sprite.getMinU(), sprite.getMaxV(),
x + width, y + height, z, sprite.getMinU(), sprite.getMinV(),
x, y + height, z, sprite.getMaxU(), sprite.getMinV(),
x, y, z, sprite.getMaxU(), sprite.getMaxV(),
color);
case WEST:
return buildQuad(vertexFormat, EnumFacing.WEST, sprite, tint,
x, y, z + height, sprite.getMaxU(), sprite.getMaxV(),
x, y + width, z + height, sprite.getMaxU(), sprite.getMinV(),
x, y + width, z, sprite.getMinU(), sprite.getMinV(),
x, y, z, sprite.getMinU(), sprite.getMaxV(),
color);
case EAST:
return buildQuad(vertexFormat, EnumFacing.EAST, sprite, tint,
x, y, z, sprite.getMaxU(), sprite.getMaxV(),
x, y + width, z, sprite.getMaxU(), sprite.getMinV(),
x, y + width, z + height, sprite.getMinU(), sprite.getMinV(),
x, y, z + height, sprite.getMinU(), sprite.getMaxV(),
color);
case DOWN:
return buildQuad(vertexFormat, EnumFacing.DOWN, sprite, tint,
x, y, z, sprite.getMinU(), sprite.getMinV(),
x + width, y, z, sprite.getMaxU(), sprite.getMinV(),
x + width, y, z + height, sprite.getMaxU(), sprite.getMaxV(),
x, y, z + height, sprite.getMinU(), sprite.getMaxV(),
color);
case UP:
return buildQuad(vertexFormat, hide ? null : EnumFacing.UP, sprite, tint,
x, y, z + height, sprite.getMinU(), sprite.getMaxV(),
x + width, y, z + height, sprite.getMaxU(), sprite.getMaxV(),
x + width, y, z, sprite.getMaxU(), sprite.getMinV(),
x, y, z, sprite.getMinU(), sprite.getMinV(),
color);
default:
System.out.println("Can't render side " + side);
return null;
}
}
private static BakedQuad buildQuad(
VertexFormat format, EnumFacing side, TextureAtlasSprite sprite, int tint,
float x0, float y0, float z0, float u0, float v0,
float x1, float y1, float z1, float u1, float v1,
float x2, float y2, float z2, float u2, float v2,
float x3, float y3, float z3, float u3, float v3, int color)
{
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(format);
builder.setQuadTint(tint);
builder.setQuadOrientation(side);
builder.setTexture(sprite);
putVertex(builder, format, side, x0, y0, z0, u0, v0, color);
putVertex(builder, format, side, x1, y1, z1, u1, v1, color);
putVertex(builder, format, side, x2, y2, z2, u2, v2, color);
putVertex(builder, format, side, x3, y3, z3, u3, v3, color);
return builder.build();
}
private static void putVertex(UnpackedBakedQuad.Builder builder, VertexFormat format, EnumFacing side, float x, float y, float z, float u, float v, int color) {
for(int e = 0; e < format.getElementCount(); e++)
{
switch(format.getElement(e).getUsage())
{
case POSITION:
builder.put(e, x, y, z, 1);
break;
case COLOR:
if(color == -1) {
builder.put(e, 1f, 1f, 1f, 1f);
} else {
builder.put(e,
((color >> 16) & 0xFF) / 255.0F,
((color >> 8) & 0xFF) / 255.0F,
((color) & 0xFF) / 255.0F, 1f);
}
break;
case UV: if(format.getElement(e).getIndex() == 0)
{
builder.put(e, u, v, 0f, 1f);
break;
}
case NORMAL:
builder.put(e, 0.0F, 0.0F, 1.0F, 0.0F);
break;
default:
builder.put(e);
break;
}
}
}
}

View file

@ -1,23 +0,0 @@
package gregtech.common.render.newitems;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IItemIconProvider {
@SideOnly(Side.CLIENT)
TextureAtlasSprite getIcon(ItemStack stack, int pass);
@SideOnly(Side.CLIENT)
default int getRenderPasses(ItemStack stack) {
return 0;
}
@SideOnly(Side.CLIENT)
default boolean isHandheld(ItemStack stack) {
return false;
}
}