123
This commit is contained in:
parent
96df8c4ba9
commit
13155cb4da
37 changed files with 572 additions and 588 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;";
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
|
@ -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 {
|
||||
|
64
src/main/java/gregtech/common/render/RenderUtil.java
Normal file
64
src/main/java/gregtech/common/render/RenderUtil.java
Normal 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);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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)
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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 {
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue