diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java index 3bb4a04d..982fa5de 100644 --- a/src/main/java/gregtech/api/GregTech_API.java +++ b/src/main/java/gregtech/api/GregTech_API.java @@ -162,7 +162,7 @@ public class GregTech_API { /** * These Lists are getting executed at their respective timings. Useful if you have to do things right before/after I do them, without having to control the load order. Add your "Commands" in the Constructor or in a static Code Block of your Mods Main Class. These are not Threaded, I just use a native Java Interface for their execution. Implement just the Method run() and everything should work */ - public static List sBeforeGTPreload = new ArrayList(), sAfterGTPreload = new ArrayList(), sBeforeGTLoad = new ArrayList(), sAfterGTLoad = new ArrayList(), sBeforeGTPostload = new ArrayList(), sAfterGTPostload = new ArrayList(), sBeforeGTServerstart = new ArrayList(), sAfterGTServerstart = new ArrayList(), sBeforeGTServerstop = new ArrayList(), sAfterGTServerstop = new ArrayList(), sGTBlockIconload = new ArrayList(), sGTItemIconload = new ArrayList(); + public static List sBeforeGTPreload = new ArrayList(), sAfterGTPreload = new ArrayList(), sBeforeGTLoad = new ArrayList(), sAfterGTLoad = new ArrayList(), sBeforeGTPostload = new ArrayList(), sAfterGTPostload = new ArrayList(), sBeforeGTServerstart = new ArrayList(), sAfterGTServerstart = new ArrayList(), sBeforeGTServerstop = new ArrayList(), sAfterGTServerstop = new ArrayList(), sGTBlockIconload = new ArrayList(), sGTItemIconload = new ArrayList(), sAfterGTIconload = new ArrayList(); /** * The Icon Registers from Blocks and Items. They will get set right before the corresponding Icon Load Phase as executed in the Runnable List above. */ diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java index caf901ef..0ea0bbe8 100644 --- a/src/main/java/gregtech/api/enums/Materials.java +++ b/src/main/java/gregtech/api/enums/Materials.java @@ -1430,6 +1430,13 @@ public enum Materials implements IColorModulationContainer, ISubTagContainer { } } + public int getColorInt() { + return ((mRGBa[3] & 0xFF) << 24) | + ((mRGBa[0] & 0xFF) << 16) | + ((mRGBa[1] & 0xFF) << 8) | + ((mRGBa[2] & 0xFF)); + } + public boolean isRadioactive() { if (mElement != null) return mElement.mHalfLifeSeconds >= 0; for (MaterialStack tMaterial : mMaterialList) if (tMaterial.mMaterial.isRadioactive()) return true; diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 5c0ee3be..58016857 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -554,8 +554,8 @@ public enum OrePrefixes { oreBasalt.mSecondaryMaterial = new MaterialStack(Materials.Basalt, dust.mMaterialAmount); oreMarble.mSecondaryMaterial = new MaterialStack(Materials.Marble, dust.mMaterialAmount); - oreSand.mSecondaryMaterial = new MaterialStack(Materials.Sand, block.mMaterialAmount); - oreGravel.mSecondaryMaterial = new MaterialStack(Materials.Flint, gem.mMaterialAmount); + oreSand.mSecondaryMaterial = new MaterialStack(Materials.SiliconDioxide, dustTiny.mMaterialAmount); + oreGravel.mSecondaryMaterial = new MaterialStack(Materials.Flint, dustTiny.mMaterialAmount); oreNetherrack.mSecondaryMaterial = new MaterialStack(Materials.Netherrack, dust.mMaterialAmount); oreNether.mSecondaryMaterial = new MaterialStack(Materials.Netherrack, dust.mMaterialAmount); diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index 5ab61e77..fe85efbd 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -1,21 +1,28 @@ package gregtech.api.enums; +import com.google.common.collect.ImmutableList; import gregtech.api.GregTech_API; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.objects.GT_SidedTexture; +import gregtech.common.render.RenderUtil; +import gregtech.common.render.data.IIconData; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.EnumMap; + import static gregtech.api.enums.GT_Values.RES_PATH_BLOCK; import static gregtech.api.enums.GT_Values.RES_PATH_ITEM; public class Textures { - public enum BlockIcons implements IIconContainer, Runnable { + public enum BlockIcons implements IIconContainer, Runnable, IIconData { VOID // The Empty Texture , RENDERING_ERROR, PIPE_RESTRICTOR, INSULATION_FULL, INSULATION_TINY, INSULATION_SMALL, INSULATION_MEDIUM, INSULATION_LARGE, INSULATION_HUGE, CFOAM_FRESH, CFOAM_HARDENED, SOLARPANEL, SOLARPANEL_8V, SOLARPANEL_LV, SOLARPANEL_MV, SOLARPANEL_HV, SOLARPANEL_EV, SOLARPANEL_IV, SOLARPANEL_LuV, SOLARPANEL_ZPM, SOLARPANEL_UV, @@ -53,8 +60,8 @@ public class Textures { * Machine Casings by Tier * 0 = 8V, 1 = LV, 2 = MV, 3 = HV, 4 = EV, 5 = IV, 6 = IV, 7 = IV, 8 = IV, 9 = IV */ - public static final IIconContainer[] - MACHINECASINGS_SIDE = new IIconContainer[]{ + public static final BlockIcons[] + MACHINECASINGS_SIDE = new BlockIcons[]{ MACHINE_8V_SIDE, MACHINE_LV_SIDE, MACHINE_MV_SIDE, @@ -72,7 +79,7 @@ public class Textures { MACHINE_MAX_SIDE, MACHINE_MAX_SIDE, }, - MACHINECASINGS_TOP = new IIconContainer[]{ + MACHINECASINGS_TOP = new BlockIcons[]{ MACHINE_8V_TOP, MACHINE_LV_TOP, MACHINE_MV_TOP, @@ -90,7 +97,7 @@ public class Textures { MACHINE_MAX_TOP, MACHINE_MAX_TOP, }, - MACHINECASINGS_BOTTOM = new IIconContainer[]{ + MACHINECASINGS_BOTTOM = new BlockIcons[]{ MACHINE_8V_BOTTOM, MACHINE_LV_BOTTOM, MACHINE_MV_BOTTOM, @@ -108,7 +115,7 @@ public class Textures { MACHINE_MAX_BOTTOM, MACHINE_MAX_BOTTOM, }, - GRANITES = new IIconContainer[]{ + GRANITES = new BlockIcons[]{ GRANITE_BLACK_STONE, GRANITE_BLACK_COBBLE, GRANITE_BLACK_COBBLE_MOSSY, @@ -126,7 +133,7 @@ public class Textures { GRANITE_RED_BRICKS_CHISELED, GRANITE_RED_SMOOTH, }, - CONCRETES = new IIconContainer[]{ + CONCRETES = new BlockIcons[]{ CONCRETE_DARK_STONE, CONCRETE_DARK_COBBLE, CONCRETE_DARK_COBBLE_MOSSY, @@ -144,7 +151,7 @@ public class Textures { CONCRETE_LIGHT_BRICKS_CHISELED, CONCRETE_LIGHT_SMOOTH, }, - STONES = new IIconContainer[]{ + STONES = new BlockIcons[]{ MARBLE_STONE, MARBLE_COBBLE, MARBLE_COBBLE_MOSSY, @@ -162,7 +169,7 @@ public class Textures { BASALT_BRICKS_CHISELED, BASALT_SMOOTH, }, - TURBINE = new IIconContainer[]{ + TURBINE = new BlockIcons[]{ LARGETURBINE_ST1, LARGETURBINE_ST2, LARGETURBINE_ST3, @@ -173,7 +180,7 @@ public class Textures { LARGETURBINE_ST8, LARGETURBINE_ST9 }, - TURBINE_ACTIVE = new IIconContainer[]{ + TURBINE_ACTIVE = new BlockIcons[]{ LARGETURBINE_ST_ACTIVE1, LARGETURBINE_ST_ACTIVE2, LARGETURBINE_ST_ACTIVE3, @@ -184,7 +191,7 @@ public class Textures { LARGETURBINE_ST_ACTIVE8, LARGETURBINE_ST_ACTIVE9 }, - TURBINE1 = new IIconContainer[]{ + TURBINE1 = new BlockIcons[]{ LARGETURBINE_SS1, LARGETURBINE_SS2, LARGETURBINE_SS3, @@ -195,7 +202,7 @@ public class Textures { LARGETURBINE_SS8, LARGETURBINE_SS9 }, - TURBINE_ACTIVE1 = new IIconContainer[]{ + TURBINE_ACTIVE1 = new BlockIcons[]{ LARGETURBINE_SS_ACTIVE1, LARGETURBINE_SS_ACTIVE2, LARGETURBINE_SS_ACTIVE3, @@ -206,7 +213,7 @@ public class Textures { LARGETURBINE_SS_ACTIVE8, LARGETURBINE_SS_ACTIVE9 }, - TURBINE2 = new IIconContainer[]{ + TURBINE2 = new BlockIcons[]{ LARGETURBINE_TI1, LARGETURBINE_TI2, LARGETURBINE_TI3, @@ -217,7 +224,7 @@ public class Textures { LARGETURBINE_TI8, LARGETURBINE_TI9 }, - TURBINE_ACTIVE2 = new IIconContainer[]{ + TURBINE_ACTIVE2 = new BlockIcons[]{ LARGETURBINE_TI_ACTIVE1, LARGETURBINE_TI_ACTIVE2, LARGETURBINE_TI_ACTIVE3, @@ -228,7 +235,7 @@ public class Textures { LARGETURBINE_TI_ACTIVE8, LARGETURBINE_TI_ACTIVE9 }, - TURBINE3 = new IIconContainer[]{ + TURBINE3 = new BlockIcons[]{ LARGETURBINE_TU1, LARGETURBINE_TU2, LARGETURBINE_TU3, @@ -239,7 +246,7 @@ public class Textures { LARGETURBINE_TU8, LARGETURBINE_TU9 }, - TURBINE_ACTIVE3 = new IIconContainer[]{ + TURBINE_ACTIVE3 = new BlockIcons[]{ LARGETURBINE_TU_ACTIVE1, LARGETURBINE_TU_ACTIVE2, LARGETURBINE_TU_ACTIVE3, @@ -250,7 +257,7 @@ public class Textures { LARGETURBINE_TU_ACTIVE8, LARGETURBINE_TU_ACTIVE9 }, - CONNECTED_HULLS = new IIconContainer[]{ + CONNECTED_HULLS = new BlockIcons[]{ CONCRETE_DARK_STONE, FUSIONI_1, FUSIONI_2, @@ -277,7 +284,7 @@ public class Textures { FUSIONII_11, FUSIONII_12, }, - STORAGE_BLOCKS1 = new IIconContainer[]{ + STORAGE_BLOCKS1 = new BlockIcons[]{ BLOCK_ADAMANTIUM, BLOCK_ALUMINIUM, BLOCK_AMERICIUM, @@ -295,7 +302,7 @@ public class Textures { BLOCK_BLUESTEEL, BLOCK_BRASS }, - STORAGE_BLOCKS2 = new IIconContainer[]{ + STORAGE_BLOCKS2 = new BlockIcons[]{ BLOCK_BRONZE, BLOCK_CAESIUM, BLOCK_CERIUM, @@ -313,7 +320,7 @@ public class Textures { BLOCK_DYSPROSIUM, BLOCK_ELECTRUM }, - STORAGE_BLOCKS3 = new IIconContainer[]{ + STORAGE_BLOCKS3 = new BlockIcons[]{ BLOCK_ELECTRUMFLUX, BLOCK_ENDERIUM, BLOCK_ERBIUM, @@ -331,7 +338,7 @@ public class Textures { BLOCK_IRONWOOD, BLOCK_KANTHAL }, - STORAGE_BLOCKS4 = new IIconContainer[]{ + STORAGE_BLOCKS4 = new BlockIcons[]{ BLOCK_KNIGHTMETAL, BLOCK_LANTHANUM, BLOCK_LEAD, @@ -349,7 +356,7 @@ public class Textures { BLOCK_NAQUADAHENRICHED, BLOCK_NAQUADRIA }, - STORAGE_BLOCKS5 = new IIconContainer[]{ + STORAGE_BLOCKS5 = new BlockIcons[]{ BLOCK_NEODYMIUM, BLOCK_NEODYMIUMMAGNETIC, BLOCK_NEUTRONIUM, @@ -367,7 +374,7 @@ public class Textures { BLOCK_PLUTONIUM241, BLOCK_PRASEODYMIUM }, - STORAGE_BLOCKS6 = new IIconContainer[]{ + STORAGE_BLOCKS6 = new BlockIcons[]{ BLOCK_PROMETHIUM, BLOCK_REDALLOY, BLOCK_REDSTEEL, @@ -385,7 +392,7 @@ public class Textures { BLOCK_STEELMAGNETIC, BLOCK_STERLINGSILVER }, - STORAGE_BLOCKS7 = new IIconContainer[]{ + STORAGE_BLOCKS7 = new BlockIcons[]{ BLOCK_SUNNARIUM, BLOCK_TANTALUM, BLOCK_TELLURIUM, @@ -403,7 +410,7 @@ public class Textures { BLOCK_URANIUM, BLOCK_URANIUM235 }, - STORAGE_BLOCKS8 = new IIconContainer[]{ + STORAGE_BLOCKS8 = new BlockIcons[]{ BLOCK_VANADIUM, BLOCK_VANADIUMGALLIUM, BLOCK_WROUGHTIRON, @@ -417,7 +424,7 @@ public class Textures { BLOCK_HSSE, BLOCK_HSSS }, - STORAGE_BLOCKS9 = new IIconContainer[]{ + STORAGE_BLOCKS9 = new BlockIcons[]{ BLOCK_AERCRYSTAL, BLOCK_AMBER, BLOCK_AMETHYST, @@ -435,7 +442,7 @@ public class Textures { BLOCK_IGNISCRYSTAL, BLOCK_JASPER }, - STORAGE_BLOCKS10 = new IIconContainer[]{ + STORAGE_BLOCKS10 = new BlockIcons[]{ BLOCK_LAZURITE, BLOCK_LIGNITE, BLOCK_MONAZITE, @@ -453,7 +460,7 @@ public class Textures { BLOCK_TANZANITE, BLOCK_TERRACRYSTAL }, - STORAGE_BLOCKS11 = new IIconContainer[]{ + STORAGE_BLOCKS11 = new BlockIcons[]{ BLOCK_TOPAZ, BLOCK_VINTEUM, BLOCK_YELLOWGARNET, @@ -543,9 +550,11 @@ public class Textures { } protected TextureAtlasSprite mIcon; + protected EnumMap> mQuadData = new EnumMap<>(EnumFacing.class); BlockIcons() { - GregTech_API.sGTBlockIconload.add(this); + GregTech_API.sGTBlockIconload.add(this::run); + GregTech_API.sAfterGTIconload.add(this::afterRun); } @Override @@ -553,6 +562,8 @@ public class Textures { return mIcon; } + + @Override public TextureAtlasSprite getOverlayIcon() { return null; @@ -563,6 +574,19 @@ public class Textures { mIcon = GregTech_API.sBlockIcons.registerSprite(new ResourceLocation(RES_PATH_BLOCK + "iconsets/" + this)); } + public void afterRun() { + for(EnumFacing facing : EnumFacing.VALUES) { + ImmutableList bakedQuads = ImmutableList.of( + RenderUtil.renderSide(mIcon, facing, 0.0f, 0xffffff)); + mQuadData.put(facing, bakedQuads); + } + } + + @Override + public ImmutableList getQuads(EnumFacing side) { + return mQuadData.get(side); + } + public static class CustomIcon implements IIconContainer, Runnable { @SideOnly(Side.CLIENT) diff --git a/src/main/java/gregtech/api/interfaces/ITexture.java b/src/main/java/gregtech/api/interfaces/ITexture.java index 2ee745ba..839c2b27 100644 --- a/src/main/java/gregtech/api/interfaces/ITexture.java +++ b/src/main/java/gregtech/api/interfaces/ITexture.java @@ -15,4 +15,7 @@ public interface ITexture { public List getQuads(Block aBlock, BlockPos blockPos, EnumFacing side, float offset); public boolean isValidTexture(); + + public boolean needsNonSidedRendering(); + } \ No newline at end of file diff --git a/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java b/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java index bd54f304..c74176f3 100644 --- a/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java +++ b/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java @@ -2,7 +2,7 @@ package gregtech.api.items; import gregtech.api.interfaces.IIconContainer; import gregtech.common.render.items.IItemIconContainerProvider; -import gregtech.common.render.IIconRegister; +import gregtech.common.render.data.IIconRegister; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.inventory.EntityEquipmentSlot; diff --git a/src/main/java/gregtech/api/items/GT_Generic_Item.java b/src/main/java/gregtech/api/items/GT_Generic_Item.java index 77b260c8..8903f264 100644 --- a/src/main/java/gregtech/api/items/GT_Generic_Item.java +++ b/src/main/java/gregtech/api/items/GT_Generic_Item.java @@ -9,7 +9,7 @@ import gregtech.api.util.GT_LanguageManager; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Utility; import gregtech.common.render.items.IItemIconContainerProvider; -import gregtech.common.render.IIconRegister; +import gregtech.common.render.data.IIconRegister; import gregtech.common.render.items.IItemIconProvider; import net.minecraft.block.BlockDispenser; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java index 96a01d86..3f8feede 100644 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java +++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java @@ -1,7 +1,7 @@ package gregtech.api.items; import gregtech.common.render.IItemColorMultiplier; -import gregtech.common.render.IIconRegister; +import gregtech.common.render.data.IIconRegister; import gregtech.common.render.items.IItemIconProvider; import ic2.api.item.IElectricItem; import net.minecraft.client.renderer.texture.TextureAtlasSprite; diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java index 572005f1..78ff6f01 100644 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java +++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java @@ -29,6 +29,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; +import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; @@ -212,6 +213,12 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item implements return rStack; } + @Override + public boolean canHarvestBlock(IBlockState state, ItemStack stack) { + IToolStats toolStats = getToolStats(stack); + return toolStats != null && toolStats.isMinableBlock(state); + } + /** * Called by the Block Harvesting Event within the GT_Proxy */ @@ -444,12 +451,21 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item implements @Override public float getStrVsBlock(ItemStack aStack, IBlockState state) { - if (!isItemStackUsable(aStack)) return 0.0F; - IToolStats tStats = getToolStats(aStack); - if (tStats == null || Math.max(0, getHarvestLevel(aStack, "")) < state.getBlock().getHarvestLevel(state)) return 0.0F; - return tStats.isMinableBlock(state) ? - Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) : - 0.0F; + //defSpeed is default item mining speed divided by 2 + float defSpeed = 0.5f; + + if (isItemStackUsable(aStack)) { + IToolStats toolStats = getToolStats(aStack); + if(toolStats != null && toolStats.isMinableBlock(state)) { + if(getHarvestLevel(aStack, null) > state.getBlock().getHarvestLevel(state)) { + float toolSpeed = toolStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed; + return Math.max(defSpeed, toolSpeed); + } + return defSpeed; + } + return defSpeed; + } + return defSpeed; } @Override @@ -495,8 +511,10 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item implements } public IToolStats getToolStats(ItemStack aStack) { - isItemStackUsable(aStack); - return getToolStatsInternal(aStack); + if(isItemStackUsable(aStack)) { + return getToolStatsInternal(aStack); + } + return null; } private IToolStats getToolStatsInternal(ItemStack aStack) { diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java index 0dd62894..5642e5f5 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java @@ -40,6 +40,8 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile public long mRestRF; public short mOverheat; + private GT_PipeRenderedTexture[][][] mTextures; + public GT_MetaPipeEntity_Cable(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) { super(aID, aName, aNameRegional, 0); mThickNess = aThickNess; @@ -49,9 +51,20 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile mInsulated = aInsulated; mCanShock = aCanShock; mCableLossPerMeter = aCableLossPerMeter; + + GregTech_API.sAfterGTIconload.add(() -> { + mTextures = new GT_PipeRenderedTexture[2][][]; + mTextures[0] = new GT_PipeRenderedTexture[Dyes.VALUES.length + 1][]; + mTextures[1] = new GT_PipeRenderedTexture[Dyes.VALUES.length + 1][]; + + for(int i = 0; i < Dyes.VALUES.length + 1; i++) { + mTextures[0][i] = new GT_PipeRenderedTexture[] {createTexture(false, i)}; + mTextures[1][i] = new GT_PipeRenderedTexture[] {createTexture(true, i)}; + } + }); } - public GT_MetaPipeEntity_Cable(String aName, float aThickNess, Materials aMaterial, long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) { + public GT_MetaPipeEntity_Cable(String aName, float aThickNess, Materials aMaterial, long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock, GT_PipeRenderedTexture[][][] textures) { super(aName, 0); mThickNess = aThickNess; mMaterial = aMaterial; @@ -60,6 +73,31 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile mInsulated = aInsulated; mCanShock = aCanShock; mCableLossPerMeter = aCableLossPerMeter; + mTextures = textures; + } + + public GT_PipeRenderedTexture createTexture(boolean aConnected, int aColorIndex) { + float tThickNess = getThickNess(); + short[] rgba = Dyes.getOrDef(aColorIndex, Dyes.INSULATION); + IIconContainer[] textures = mMaterial.mIconSet.mTextures; + + if (!mInsulated) { + return new GT_PipeRenderedTexture(mThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa); + } + + if (tThickNess < 0.37F) + return new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba); + + if (tThickNess < 0.49F) + return new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba); + + if (tThickNess < 0.74F) + return new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba); + + if (tThickNess < 0.99F) + return new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba); + + return new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba); } @Override @@ -69,7 +107,7 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaPipeEntity_Cable(mName, mThickNess, mMaterial, mCableLossPerMeter, mAmperage, mVoltage, mInsulated, mCanShock); + return new GT_MetaPipeEntity_Cable(mName, mThickNess, mMaterial, mCableLossPerMeter, mAmperage, mVoltage, mInsulated, mCanShock, mTextures); } @Override @@ -85,27 +123,10 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile aConnected = false; } - if (!mInsulated) { - return new ITexture[]{new GT_PipeRenderedTexture(mThickNess, aConnected, mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa)}; + if(aColorIndex < 0 || aColorIndex >= Dyes.VALUES.length) { + aColorIndex = 16; } - - float tThickNess = getThickNess(); - short[] rgba = Dyes.getOrDef(aColorIndex, Dyes.INSULATION); - IIconContainer[] textures = mMaterial.mIconSet.mTextures; - - if (tThickNess < 0.37F) - return new ITexture[]{new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba)}; - - if (tThickNess < 0.49F) - return new ITexture[]{new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba)}; - - if (tThickNess < 0.74F) - return new ITexture[]{new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba)}; - - if (tThickNess < 0.99F) - return new ITexture[]{new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba)}; - - return new ITexture[]{new GT_PipeRenderedTexture(tThickNess, aConnected, textures[TextureSet.INDEX_wire], mMaterial.mRGBa, Textures.BlockIcons.INSULATION_FULL, rgba)}; + return mTextures[aConnected ? 1 : 0][aColorIndex]; } @Override diff --git a/src/main/java/gregtech/api/net/GT_PacketHandler.java b/src/main/java/gregtech/api/net/GT_PacketHandler.java index 0a6d3966..c68fa97f 100644 --- a/src/main/java/gregtech/api/net/GT_PacketHandler.java +++ b/src/main/java/gregtech/api/net/GT_PacketHandler.java @@ -1,9 +1,7 @@ package gregtech.api.net; import gregtech.GT_Mod; -import gregtech.common.blocks.GT_Packet_Ores; import net.minecraft.world.World; -import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; @@ -15,7 +13,6 @@ public class GT_PacketHandler extends SimpleNetworkWrapper { public GT_PacketHandler() { super("gregtech_network"); registerMessage(0, GT_Packet_TileEntity.class, Side.CLIENT); - registerMessage(1, GT_Packet_Ores.class, Side.CLIENT); registerMessage(2, GT_Packet_Sound.class, Side.CLIENT); } diff --git a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java index 7ff90371..e5119fac 100644 --- a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java +++ b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java @@ -48,7 +48,7 @@ public class GT_CopiedBlockTexture implements ITexture { public static TextureAtlasSprite getSide(Block aBlock, int aMeta, EnumFacing side) { if (aBlock instanceof IBlockIconProvider) { IBlockIconProvider iconProvider = ((IBlockIconProvider) aBlock); - return iconProvider.getIcon(FMLClientHandler.instance().getWorldClient(), null, side, aMeta); + return null; } System.out.println("Failed to copy texture of " + aBlock.getRegistryName() + " " + aMeta); return Textures.BlockIcons.RENDERING_ERROR.getIcon(); @@ -72,4 +72,9 @@ public class GT_CopiedBlockTexture implements ITexture { return mBlock != null; } + @Override + public boolean needsNonSidedRendering() { + return false; + } + } \ No newline at end of file diff --git a/src/main/java/gregtech/api/objects/GT_MultiTexture.java b/src/main/java/gregtech/api/objects/GT_MultiTexture.java index 2b742e5b..2685d2da 100644 --- a/src/main/java/gregtech/api/objects/GT_MultiTexture.java +++ b/src/main/java/gregtech/api/objects/GT_MultiTexture.java @@ -38,4 +38,9 @@ public class GT_MultiTexture implements ITexture { return true; } + @Override + public boolean needsNonSidedRendering() { + return false; + } + } \ No newline at end of file diff --git a/src/main/java/gregtech/api/objects/GT_PipeRenderedTexture.java b/src/main/java/gregtech/api/objects/GT_PipeRenderedTexture.java index 07b0a4d4..98c3f50d 100644 --- a/src/main/java/gregtech/api/objects/GT_PipeRenderedTexture.java +++ b/src/main/java/gregtech/api/objects/GT_PipeRenderedTexture.java @@ -161,7 +161,7 @@ public class GT_PipeRenderedTexture implements ITexture { } 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, sprite, side, rgba); + return RenderUtil.renderQuadCustom(x * 16F, y * 16F, z * 16F, width * 16F, height * 16F, sprite, side, rgba); } @Override @@ -169,4 +169,9 @@ public class GT_PipeRenderedTexture implements ITexture { return thickness > 0.0F; } + @Override + public boolean needsNonSidedRendering() { + return false; + } + } diff --git a/src/main/java/gregtech/api/objects/GT_RenderedTexture.java b/src/main/java/gregtech/api/objects/GT_RenderedTexture.java index cc8d7d75..f657b4e4 100644 --- a/src/main/java/gregtech/api/objects/GT_RenderedTexture.java +++ b/src/main/java/gregtech/api/objects/GT_RenderedTexture.java @@ -96,4 +96,9 @@ public class GT_RenderedTexture implements ITexture { return mIconContainer != null; } + @Override + public boolean needsNonSidedRendering() { + return false; + } + } \ No newline at end of file diff --git a/src/main/java/gregtech/api/objects/GT_SidedTexture.java b/src/main/java/gregtech/api/objects/GT_SidedTexture.java index 76c610bb..9a87f418 100644 --- a/src/main/java/gregtech/api/objects/GT_SidedTexture.java +++ b/src/main/java/gregtech/api/objects/GT_SidedTexture.java @@ -79,4 +79,9 @@ public class GT_SidedTexture implements ITexture { mIconContainer[5] != null; } + @Override + public boolean needsNonSidedRendering() { + return false; + } + } \ No newline at end of file diff --git a/src/main/java/gregtech/api/objects/LazyCopiedIconContainer.java b/src/main/java/gregtech/api/objects/LazyCopiedIconContainer.java index 7d990f59..1334ccb7 100644 --- a/src/main/java/gregtech/api/objects/LazyCopiedIconContainer.java +++ b/src/main/java/gregtech/api/objects/LazyCopiedIconContainer.java @@ -1,5 +1,6 @@ package gregtech.api.objects; +import gregtech.api.GregTech_API; import gregtech.api.interfaces.IIconContainer; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureAtlasSprite; @@ -16,7 +17,8 @@ public class LazyCopiedIconContainer implements IIconContainer { @Override public TextureAtlasSprite getIcon() { if(lazyComputedSprite == null) { - lazyComputedSprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(mSpriteName); + lazyComputedSprite = GregTech_API.sBlockIcons.getAtlasSprite(mSpriteName); + System.out.println("Lazy-initialized sprite " + lazyComputedSprite.getIconName() + " " + this); } return lazyComputedSprite; } @@ -25,4 +27,6 @@ public class LazyCopiedIconContainer implements IIconContainer { public TextureAtlasSprite getOverlayIcon() { return null; } + + } diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java index 05e2d79a..092e3769 100644 --- a/src/main/java/gregtech/api/util/GT_ModHandler.java +++ b/src/main/java/gregtech/api/util/GT_ModHandler.java @@ -1390,7 +1390,9 @@ public class GT_ModHandler { ItemStack[] tList = (ItemStack[]) tEntry.output.items.toArray(); if (tList.length == 0) break; ItemStack[] rList = new ItemStack[aOutputSlots.length]; - rRecipeMetaData.setTag("return", tEntry.output.metadata); + if(tEntry.output.metadata != null) { + rRecipeMetaData.setTag("return", tEntry.output.metadata); + } for (byte i = 0; i < aOutputSlots.length && i < tList.length; i++) { if (tList[i] != null) { if (aOutputSlots[i] == null || (GT_Utility.areStacksEqual(tList[i], aOutputSlots[i]) && tList[i].stackSize + aOutputSlots[i].stackSize <= aOutputSlots[i].getMaxStackSize())) { diff --git a/src/main/java/gregtech/api/world/GT_Worldgen_Constants.java b/src/main/java/gregtech/api/world/GT_Worldgen_Constants.java index dba71bd2..3634754f 100644 --- a/src/main/java/gregtech/api/world/GT_Worldgen_Constants.java +++ b/src/main/java/gregtech/api/world/GT_Worldgen_Constants.java @@ -32,7 +32,14 @@ public class GT_Worldgen_Constants { public static Predicate ENDSTONE = input -> input.getBlock() == Blocks.END_STONE; + public static Predicate GRAVEL = input -> + input.getBlock() == Blocks.GRAVEL; + + public static Predicate SAND = input -> + input.getBlock() == Blocks.SANDSTONE; + + public static Predicate ANY = input -> - STONES.apply(input) || NETHERRACK.apply(input) || ENDSTONE.apply(input); + STONES.apply(input) || NETHERRACK.apply(input) || ENDSTONE.apply(input) || GRAVEL.apply(input) || SAND.apply(input); } \ No newline at end of file diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java index 0d18193d..d45026ff 100644 --- a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java +++ b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java @@ -78,37 +78,27 @@ public class GT_Worldgen_GT_Ore_Layer int cZ = aChunkZ - aRandom.nextInt(this.mSize); int eZ = aChunkZ + 16 + aRandom.nextInt(this.mSize); for (int tZ = cZ; tZ <= eZ; tZ++) { + for (int i = tMinY + 3; i < tMinY + 6; i++) { + if ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0)) { + BlockPos blockPos = new BlockPos(tX, i, tZ); + GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mPrimaryMeta, false); + } + } if (this.mSecondaryMeta > 0) { for (int i = tMinY - 1; i < tMinY + 2; i++) { if ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0)) { BlockPos blockPos = new BlockPos(tX, i, tZ); - if(isGenerationAllowed(aWorld, blockPos)) { - GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mSecondaryMeta, false); - } + GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mSecondaryMeta, false); } } } - if ((this.mBetweenMeta > 0) && ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0))) { + if (this.mBetweenMeta > 0 && ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0))) { BlockPos blockPos = new BlockPos(tX, tMinY + 2 + aRandom.nextInt(2), tZ); - if(isGenerationAllowed(aWorld, blockPos)) { - GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mBetweenMeta, false); - } + GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mBetweenMeta, false); } - if (this.mPrimaryMeta > 0) { - for (int i = tMinY + 3; i < tMinY + 6; i++) { - if ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0)) { - BlockPos blockPos = new BlockPos(tX, i, tZ); - if(isGenerationAllowed(aWorld, blockPos)) { - GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mPrimaryMeta, false); - } - } - } - } - if ((this.mSporadicMeta > 0) && ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0))) { + if (this.mSporadicMeta > 0 && ((aRandom.nextInt(Math.max(1, Math.max(Math.abs(cZ - tZ), Math.abs(eZ - tZ)) / this.mDensity)) == 0) || (aRandom.nextInt(Math.max(1, Math.max(Math.abs(cX - tX), Math.abs(eX - tX)) / this.mDensity)) == 0))) { BlockPos blockPos = new BlockPos(tX, tMinY - 1 + aRandom.nextInt(7), tZ); - if(isGenerationAllowed(aWorld, blockPos)) { - GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mSporadicMeta, false); - } + GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mSporadicMeta, false); } } } diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java index 294381d9..d0f336b0 100644 --- a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java +++ b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java @@ -46,9 +46,7 @@ public class GT_Worldgen_GT_Ore_SmallPieces int i = 0; for (int j = Math.max(1, this.mAmount / 2 + aRandom.nextInt(this.mAmount) / 2); i < j; i++) { BlockPos blockPos = new BlockPos(aChunkX + aRandom.nextInt(16), this.mMinY + aRandom.nextInt(Math.max(1, this.mMaxY - this.mMinY)), aChunkZ + aRandom.nextInt(16)); - if(isGenerationAllowed(aWorld, blockPos)) { - GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mMeta, true); - } + GT_TileEntity_Ores.setOreBlock(aWorld, blockPos, this.mMeta, true); } } return true; diff --git a/src/main/java/gregtech/common/GT_Worldgen_Stone.java b/src/main/java/gregtech/common/GT_Worldgen_Stone.java index 025b015a..ba9a6dee 100644 --- a/src/main/java/gregtech/common/GT_Worldgen_Stone.java +++ b/src/main/java/gregtech/common/GT_Worldgen_Stone.java @@ -66,7 +66,7 @@ public class GT_Worldgen_Stone TileEntity tTileEntity = aWorld.getTileEntity(randPos); if ((tTileEntity instanceof GT_TileEntity_Ores)) { if (tTargetedBlock != GregTech_API.sBlockOres1) { - ((GT_TileEntity_Ores) tTileEntity).convertOreBlock(aWorld, eX, eY, eZ); + //((GT_TileEntity_Ores) tTileEntity).convertOreBlock(aWorld, eX, eY, eZ); } ((GT_TileEntity_Ores)tTileEntity).overrideOreBlockMaterial(this.mBlock, (byte) this.mBlockMeta); } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java index 2e4566dc..f6676e7e 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java @@ -1,9 +1,11 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.objects.GT_CopiedBlockTexture; import gregtech.api.util.GT_LanguageManager; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; @@ -53,31 +55,31 @@ public class GT_Block_Casings1 extends GT_Block_Casings_Abstract { @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { if ((aMeta >= 0) && (aMeta < 16)) { switch (aMeta) { case 10: - return Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon(); + return Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getQuads(aSide); case 11: - return Textures.BlockIcons.MACHINE_HEATPROOFCASING.getIcon(); + return Textures.BlockIcons.MACHINE_HEATPROOFCASING.getQuads(aSide); case 12: - return Textures.BlockIcons.RENDERING_ERROR.getIcon(); + return Textures.BlockIcons.RENDERING_ERROR.getQuads(aSide); case 13: - return Textures.BlockIcons.RENDERING_ERROR.getIcon(); + return Textures.BlockIcons.RENDERING_ERROR.getQuads(aSide); case 14: - return Textures.BlockIcons.RENDERING_ERROR.getIcon(); + return Textures.BlockIcons.RENDERING_ERROR.getQuads(aSide); case 15: - return Textures.BlockIcons.MACHINE_COIL_SUPERCONDUCTOR.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_SUPERCONDUCTOR.getQuads(aSide); } if (aSide == EnumFacing.DOWN) { - return Textures.BlockIcons.MACHINECASINGS_BOTTOM[aMeta].getIcon(); + return Textures.BlockIcons.MACHINECASINGS_BOTTOM[aMeta].getQuads(aSide); } if (aSide == EnumFacing.UP) { - return Textures.BlockIcons.MACHINECASINGS_TOP[aMeta].getIcon(); + return Textures.BlockIcons.MACHINECASINGS_TOP[aMeta].getQuads(aSide); } - return Textures.BlockIcons.MACHINECASINGS_SIDE[aMeta].getIcon(); + return Textures.BlockIcons.MACHINECASINGS_SIDE[aMeta].getQuads(aSide); } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java index c10dbda5..62cd5440 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java @@ -1,9 +1,11 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.objects.GT_CopiedBlockTexture; import gregtech.api.util.GT_LanguageManager; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; @@ -58,42 +60,42 @@ public class GT_Block_Casings2 extends GT_Block_Casings_Abstract { @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { switch (aMeta) { case 0: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); case 1: - return Textures.BlockIcons.MACHINE_CASING_FROST_PROOF.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FROST_PROOF.getQuads(aSide); case 2: - return Textures.BlockIcons.MACHINE_CASING_GEARBOX_BRONZE.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_GEARBOX_BRONZE.getQuads(aSide); case 3: - return Textures.BlockIcons.MACHINE_CASING_GEARBOX_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_GEARBOX_STEEL.getQuads(aSide); case 4: - return Textures.BlockIcons.MACHINE_CASING_GEARBOX_TITANIUM.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_GEARBOX_TITANIUM.getQuads(aSide); case 5: - return Textures.BlockIcons.MACHINE_CASING_GEARBOX_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_GEARBOX_TUNGSTENSTEEL.getQuads(aSide); case 6: - return Textures.BlockIcons.MACHINE_CASING_PROCESSOR.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_PROCESSOR.getQuads(aSide); case 7: - return Textures.BlockIcons.MACHINE_CASING_DATA_DRIVE.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_DATA_DRIVE.getQuads(aSide); case 8: - return Textures.BlockIcons.MACHINE_CASING_CONTAINMENT_FIELD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_CONTAINMENT_FIELD.getQuads(aSide); case 9: - return Textures.BlockIcons.MACHINE_CASING_ASSEMBLER.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ASSEMBLER.getQuads(aSide); case 10: - return Textures.BlockIcons.MACHINE_CASING_PUMP.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_PUMP.getQuads(aSide); case 11: - return Textures.BlockIcons.MACHINE_CASING_MOTOR.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_MOTOR.getQuads(aSide); case 12: - return Textures.BlockIcons.MACHINE_CASING_PIPE_BRONZE.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_PIPE_BRONZE.getQuads(aSide); case 13: - return Textures.BlockIcons.MACHINE_CASING_PIPE_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_PIPE_STEEL.getQuads(aSide); case 14: - return Textures.BlockIcons.MACHINE_CASING_PIPE_TITANIUM.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_PIPE_TITANIUM.getQuads(aSide); case 15: - return Textures.BlockIcons.MACHINE_CASING_PIPE_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_PIPE_TUNGSTENSTEEL.getQuads(aSide); } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); } @Override diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java index cde3bc2b..5f72dc6d 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java @@ -1,9 +1,11 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.objects.GT_CopiedBlockTexture; import gregtech.api.util.GT_LanguageManager; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; @@ -53,41 +55,41 @@ public class GT_Block_Casings3 extends GT_Block_Casings_Abstract { @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { switch (aMeta) { case 0: - return Textures.BlockIcons.MACHINE_CASING_STRIPES_A.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_STRIPES_A.getQuads(aSide); case 1: - return Textures.BlockIcons.MACHINE_CASING_STRIPES_B.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_STRIPES_B.getQuads(aSide); case 2: - return Textures.BlockIcons.MACHINE_CASING_RADIOACTIVEHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_RADIOACTIVEHAZARD.getQuads(aSide); case 3: - return Textures.BlockIcons.MACHINE_CASING_BIOHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_BIOHAZARD.getQuads(aSide); case 4: - return Textures.BlockIcons.MACHINE_CASING_EXPLOSIONHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_EXPLOSIONHAZARD.getQuads(aSide); case 5: - return Textures.BlockIcons.MACHINE_CASING_FIREHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FIREHAZARD.getQuads(aSide); case 6: - return Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD.getQuads(aSide); case 7: - return Textures.BlockIcons.MACHINE_CASING_MAGICHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_MAGICHAZARD.getQuads(aSide); case 8: - return Textures.BlockIcons.MACHINE_CASING_FROSTHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FROSTHAZARD.getQuads(aSide); case 9: - return Textures.BlockIcons.MACHINE_CASING_NOISEHAZARD.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_NOISEHAZARD.getQuads(aSide); case 10: - return Textures.BlockIcons.MACHINE_CASING_GRATE.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_GRATE.getQuads(aSide); case 11: - return Textures.BlockIcons.MACHINE_CASING_VENT.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_VENT.getQuads(aSide); case 12: - return Textures.BlockIcons.MACHINE_CASING_RADIATIONPROOF.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_RADIATIONPROOF.getQuads(aSide); case 13: - return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_BRONZE.getIcon() : Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon(); + return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_BRONZE.getQuads(aSide) : Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getQuads(aSide); case 14: - return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_STEEL.getIcon() : Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_STEEL.getQuads(aSide) : Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); case 15: - return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TUNGSTENSTEEL.getIcon() : Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TUNGSTENSTEEL.getQuads(aSide) : Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getQuads(aSide); } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); } } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java index a39204f3..5897c758 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java @@ -1,5 +1,6 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -8,6 +9,7 @@ import gregtech.api.objects.GT_CopiedBlockTexture; import gregtech.api.util.GT_LanguageManager; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -57,63 +59,63 @@ public class GT_Block_Casings4 extends GT_Block_Casings_Abstract { @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { switch (aMeta) { case 0: - return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getQuads(aSide); case 1: - return Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getQuads(aSide); case 2: - return Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getQuads(aSide); case 3: - return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TITANIUM.getIcon() : Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); + return aSide.getIndex() > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TITANIUM.getQuads(aSide) : Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getQuads(aSide); case 4: - return Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW.getQuads(aSide); case 5: - return Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS.getQuads(aSide); case 6: - return Textures.BlockIcons.MACHINE_CASING_FUSION.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FUSION.getQuads(aSide); case 7: - return Textures.BlockIcons.MACHINE_CASING_FUSION_COIL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FUSION_COIL.getQuads(aSide); case 8: - return Textures.BlockIcons.MACHINE_CASING_FUSION_2.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_FUSION_2.getQuads(aSide); case 9: - return Textures.BlockIcons.MACHINE_CASING_TURBINE.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_TURBINE.getQuads(aSide); case 10: - return Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getQuads(aSide); case 11: - return Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getQuads(aSide); case 12: - return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getQuads(aSide); case 13: - return Textures.BlockIcons.MACHINE_CASING_ENGINE_INTAKE.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ENGINE_INTAKE.getQuads(aSide); case 14: - return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getQuads(aSide); case 15: - return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getQuads(aSide); } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); } @SideOnly(Side.CLIENT) - public TextureAtlasSprite getTurbineCasing(int meta, int iconIndex, boolean active) { + public ImmutableList getTurbineCasing(int meta, int iconIndex, boolean active, EnumFacing aSide) { switch (meta) { case 9: - return active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() : Textures.BlockIcons.TURBINE[iconIndex].getIcon(); + return active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getQuads(aSide) : Textures.BlockIcons.TURBINE[iconIndex].getQuads(aSide); case 10: - return active ? Textures.BlockIcons.TURBINE_ACTIVE1[iconIndex].getIcon() : Textures.BlockIcons.TURBINE1[iconIndex].getIcon(); + return active ? Textures.BlockIcons.TURBINE_ACTIVE1[iconIndex].getQuads(aSide) : Textures.BlockIcons.TURBINE1[iconIndex].getQuads(aSide); case 11: - return active ? Textures.BlockIcons.TURBINE_ACTIVE2[iconIndex].getIcon() : Textures.BlockIcons.TURBINE2[iconIndex].getIcon(); + return active ? Textures.BlockIcons.TURBINE_ACTIVE2[iconIndex].getQuads(aSide) : Textures.BlockIcons.TURBINE2[iconIndex].getQuads(aSide); case 12: - return active ? Textures.BlockIcons.TURBINE_ACTIVE3[iconIndex].getIcon() : Textures.BlockIcons.TURBINE3[iconIndex].getIcon(); + return active ? Textures.BlockIcons.TURBINE_ACTIVE3[iconIndex].getQuads(aSide) : Textures.BlockIcons.TURBINE3[iconIndex].getQuads(aSide); default: - return active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() : Textures.BlockIcons.TURBINE[iconIndex].getIcon(); + return active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getQuads(aSide) : Textures.BlockIcons.TURBINE[iconIndex].getQuads(aSide); } } @SideOnly(Side.CLIENT) @Override - public TextureAtlasSprite getIcon(IBlockAccess aWorld, BlockPos pos, EnumFacing aSide, int tMeta) { + public ImmutableList getIcon(IBlockAccess aWorld, BlockPos pos, EnumFacing aSide, int tMeta) { if(pos == null) { return getIcon(aSide, tMeta); } @@ -127,115 +129,115 @@ public class GT_Block_Casings4 extends GT_Block_Casings_Abstract { IMetaTileEntity tMetaTileEntity; if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(aSide == EnumFacing.SOUTH ? 1 : -1, -1, 0)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 0, true); + return getTurbineCasing(tMeta, 0, true, aSide); } - return getTurbineCasing(tMeta, 0, false); + return getTurbineCasing(tMeta, 0, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(aSide == EnumFacing.SOUTH ? 1 : -1, 0, 0)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 3, true); + return getTurbineCasing(tMeta, 3, true, aSide); } - return getTurbineCasing(tMeta, 3, false); + return getTurbineCasing(tMeta, 3, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(aSide == EnumFacing.SOUTH ? 1 : -1, 1, 0)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 6, true); + return getTurbineCasing(tMeta, 6, true, aSide); } - return getTurbineCasing(tMeta, 6, false); + return getTurbineCasing(tMeta, 6, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.down()))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 1, true); + return getTurbineCasing(tMeta, 1, true, aSide); } - return getTurbineCasing(tMeta, 1, false); + return getTurbineCasing(tMeta, 1, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.up()))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 7, true); + return getTurbineCasing(tMeta, 7, true, aSide); } - return getTurbineCasing(tMeta, 7, false); + return getTurbineCasing(tMeta, 7, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(aSide == EnumFacing.NORTH ? 1 : -1, 1, 0)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 8, true); + return getTurbineCasing(tMeta, 8, true, aSide); } - return getTurbineCasing(tMeta, 8, false); + return getTurbineCasing(tMeta, 8, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(aSide == EnumFacing.NORTH ? 1 : -1, 0, 0)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 5, true); + return getTurbineCasing(tMeta, 5, true, aSide); } - return getTurbineCasing(tMeta, 5, false); + return getTurbineCasing(tMeta, 5, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(aSide == EnumFacing.NORTH ? 1 : -1, -1, 0)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 2, true); + return getTurbineCasing(tMeta, 2, true, aSide); } - return getTurbineCasing(tMeta, 2, false); + return getTurbineCasing(tMeta, 2, false, aSide); } } else if ((aSide == EnumFacing.WEST) || (aSide == EnumFacing.EAST)) { TileEntity tTileEntity; Object tMetaTileEntity; if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(0, -1, aSide == EnumFacing.WEST ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 0, true); + return getTurbineCasing(tMeta, 0, true, aSide); } - return getTurbineCasing(tMeta, 0, false); + return getTurbineCasing(tMeta, 0, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(0, 0, aSide == EnumFacing.WEST ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 3, true); + return getTurbineCasing(tMeta, 3, true, aSide); } - return getTurbineCasing(tMeta, 3, false); + return getTurbineCasing(tMeta, 3, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(0, 1, aSide == EnumFacing.WEST ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 6, true); + return getTurbineCasing(tMeta, 6, true, aSide); } - return getTurbineCasing(tMeta, 6, false); + return getTurbineCasing(tMeta, 6, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.down()))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 1, true); + return getTurbineCasing(tMeta, 1, true, aSide); } - return getTurbineCasing(tMeta, 1, false); + return getTurbineCasing(tMeta, 1, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.up()))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 7, true); + return getTurbineCasing(tMeta, 7, true, aSide); } - return getTurbineCasing(tMeta, 7, false); + return getTurbineCasing(tMeta, 7, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(0, 1, aSide == EnumFacing.EAST ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 8, true); + return getTurbineCasing(tMeta, 8, true, aSide); } - return getTurbineCasing(tMeta, 8, false); + return getTurbineCasing(tMeta, 8, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(0, 0, aSide == EnumFacing.EAST ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 5, true); + return getTurbineCasing(tMeta, 5, true, aSide); } - return getTurbineCasing(tMeta, 5, false); + return getTurbineCasing(tMeta, 5, false, aSide); } if ((null != (tTileEntity = aWorld.getTileEntity(pos.add(0, -1, aSide == EnumFacing.EAST ? 1 : -1)))) && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == aSide.getIndex()) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) && ((tMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine))) { if (((IGregTechTileEntity) tTileEntity).isActive()) { - return getTurbineCasing(tMeta, 2, true); + return getTurbineCasing(tMeta, 2, true, aSide); } - return getTurbineCasing(tMeta, 2, false); + return getTurbineCasing(tMeta, 2, false, aSide); } } switch (tMeta) { case 9: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); case 10: - return Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getQuads(aSide); case 11: - return Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getQuads(aSide); case 12: - return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getQuads(aSide); default: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); } } boolean[] tConnectedSides = { @@ -248,247 +250,247 @@ public class GT_Block_Casings4 extends GT_Block_Casings_Abstract { switch (aSide) { case DOWN: if (tConnectedSides[0]) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getQuads(aSide); } if ((!tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getQuads(aSide); } if ((tConnectedSides[4]) && (!tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (!tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getQuads(aSide); } if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getQuads(aSide); } if ((tConnectedSides[4]) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (!tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getQuads(aSide); } if ((!tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getQuads(aSide); } if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((!tConnectedSides[4]) && (!tConnectedSides[2])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getQuads(aSide); } if ((!tConnectedSides[5]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getQuads(aSide); } case UP: if (tConnectedSides[1]) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getQuads(aSide); } if ((!tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getQuads(aSide); } if ((tConnectedSides[4]) && (!tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (!tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getQuads(aSide); } if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getQuads(aSide); } if ((tConnectedSides[4]) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getQuads(aSide); } if ((tConnectedSides[4]) && (tConnectedSides[5]) && (!tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getQuads(aSide); } if ((!tConnectedSides[4]) && (tConnectedSides[5]) && (tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getQuads(aSide); } if ((!tConnectedSides[4]) && (!tConnectedSides[5]) && (!tConnectedSides[2]) && (!tConnectedSides[3])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((!tConnectedSides[2]) && (!tConnectedSides[4])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getQuads(aSide); } if ((!tConnectedSides[3]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getQuads(aSide); } case NORTH: if (tConnectedSides[5]) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getQuads(aSide); } if ((!tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getQuads(aSide); } if ((tConnectedSides[2]) && (!tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (!tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getQuads(aSide); } if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getQuads(aSide); } if ((tConnectedSides[2]) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (!tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getQuads(aSide); } if ((!tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getQuads(aSide); } if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((!tConnectedSides[2]) && (!tConnectedSides[4])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getQuads(aSide); } case SOUTH: if (tConnectedSides[3]) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getQuads(aSide); } if ((!tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getQuads(aSide); } if ((tConnectedSides[2]) && (!tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (!tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getQuads(aSide); } if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getQuads(aSide); } if ((tConnectedSides[2]) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getQuads(aSide); } if ((tConnectedSides[2]) && (tConnectedSides[0]) && (!tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getQuads(aSide); } if ((!tConnectedSides[2]) && (tConnectedSides[0]) && (tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getQuads(aSide); } if ((!tConnectedSides[2]) && (!tConnectedSides[0]) && (!tConnectedSides[4]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((!tConnectedSides[2]) && (!tConnectedSides[4])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getQuads(aSide); } case WEST: if (tConnectedSides[4]) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getQuads(aSide); } if ((!tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getQuads(aSide); } if ((tConnectedSides[0]) && (!tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (!tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getQuads(aSide); } if ((tConnectedSides[0]) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (!tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getQuads(aSide); } if ((!tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getQuads(aSide); } if ((!tConnectedSides[3]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getQuads(aSide); } case EAST: if (tConnectedSides[2]) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 6)].getQuads(aSide); } if ((!tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 5)].getQuads(aSide); } if ((tConnectedSides[0]) && (!tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 2)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (!tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 3)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 4)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 11)].getQuads(aSide); } if ((tConnectedSides[0]) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 8)].getQuads(aSide); } if ((tConnectedSides[0]) && (tConnectedSides[3]) && (!tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 9)].getQuads(aSide); } if ((!tConnectedSides[0]) && (tConnectedSides[3]) && (tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 10)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[3]) && (!tConnectedSides[1]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } if ((!tConnectedSides[0]) && (!tConnectedSides[1])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex)].getQuads(aSide); } if ((!tConnectedSides[3]) && (!tConnectedSides[5])) { - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 1)].getQuads(aSide); } break; } - return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getIcon(); + return Textures.BlockIcons.CONNECTED_HULLS[(tStartIndex + 7)].getQuads(aSide); } public boolean stateAndMetaEquals(IBlockAccess access, BlockPos blockPos, int meta) { diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings5.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings5.java index 7e729296..6ed0bed4 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings5.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings5.java @@ -1,5 +1,7 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; @@ -35,23 +37,23 @@ public class GT_Block_Casings5 extends GT_Block_Casings_Abstract { } @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { switch (aMeta) { case 0: - return Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getQuads(aSide); case 1: - return Textures.BlockIcons.MACHINE_COIL_KANTHAL.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_KANTHAL.getQuads(aSide); case 2: - return Textures.BlockIcons.MACHINE_COIL_NICHROME.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_NICHROME.getQuads(aSide); case 3: - return Textures.BlockIcons.MACHINE_COIL_TUNGSTENSTEEL.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_TUNGSTENSTEEL.getQuads(aSide); case 4: - return Textures.BlockIcons.MACHINE_COIL_HSSG.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_HSSG.getQuads(aSide); case 5: - return Textures.BlockIcons.MACHINE_COIL_NAQUADAH.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_NAQUADAH.getQuads(aSide); case 6: - return Textures.BlockIcons.MACHINE_COIL_NAQUADAHALLOY.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_NAQUADAHALLOY.getQuads(aSide); } - return Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getIcon(); + return Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getQuads(aSide); } } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java b/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java index c590e40c..d046a8a9 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java @@ -1,5 +1,6 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GT_LanguageManager; @@ -7,6 +8,7 @@ import gregtech.api.util.GT_OreDictUnificator; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -63,11 +65,11 @@ public class GT_Block_Concretes extends GT_Block_Stones_Abstract { @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.CONCRETES[aMeta].getIcon(); + return gregtech.api.enums.Textures.BlockIcons.CONCRETES[aMeta].getQuads(aSide); } - return gregtech.api.enums.Textures.BlockIcons.CONCRETES[0].getIcon(); + return gregtech.api.enums.Textures.BlockIcons.CONCRETES[0].getQuads(aSide); } @Override diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Granites.java b/src/main/java/gregtech/common/blocks/GT_Block_Granites.java index 39ca5877..a754b617 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Granites.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Granites.java @@ -1,10 +1,12 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GT_LanguageManager; import gregtech.api.util.GT_OreDictUnificator; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.Entity; import net.minecraft.entity.boss.EntityWither; @@ -62,11 +64,11 @@ public class GT_Block_Granites extends GT_Block_Stones_Abstract { @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon(); + return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getQuads(aSide); } - return gregtech.api.enums.Textures.BlockIcons.GRANITES[0].getIcon(); + return gregtech.api.enums.Textures.BlockIcons.GRANITES[0].getQuads(aSide); } @Override diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java index cb3b2d6b..90168713 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java @@ -13,7 +13,7 @@ import gregtech.api.metatileentity.BaseTileEntity; 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.data.IIconRegister; import gregtech.common.render.blocks.IBlockTextureProvider; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.SoundType; @@ -519,10 +519,20 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo } @Override - @SideOnly(Side.CLIENT) - //for multilayer blocks public BlockRenderLayer getBlockLayer() { return BlockRenderLayer.CUTOUT; } + @Override + public boolean isOpaqueCube(IBlockState state) { + return false; + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { + IGregTechTileEntity tileEntity = getGregTile(blockAccess, pos); + return super.shouldSideBeRendered(blockState, blockAccess, pos, side) || + tileEntity != null && tileEntity instanceof BaseMetaPipeEntity; + } + } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Metal.java b/src/main/java/gregtech/common/blocks/GT_Block_Metal.java index 9b086b1e..cd3a51b0 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Metal.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Metal.java @@ -1,6 +1,9 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; +import gregtech.api.enums.Textures; import gregtech.common.render.blocks.IBlockIconProvider; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.util.EnumFacing; import gregtech.api.enums.Materials; @@ -16,9 +19,9 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class GT_Block_Metal extends GT_Block_Storage implements IBlockIconProvider { public Materials[] mMats; public OrePrefixes mPrefix; - public IIconContainer[] mBlockIcons; + public Textures.BlockIcons[] mBlockIcons; - public GT_Block_Metal(String aName, Materials[] aMats, OrePrefixes aPrefix, IIconContainer[] aBlockIcons) { + public GT_Block_Metal(String aName, Materials[] aMats, OrePrefixes aPrefix, Textures.BlockIcons[] aBlockIcons) { super(GT_Item_Storage.class, aName, Material.IRON); mMats = aMats; mPrefix = aPrefix; @@ -31,11 +34,11 @@ public class GT_Block_Metal extends GT_Block_Storage implements IBlockIconProvid @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aDamage) { + public ImmutableList getIcon(EnumFacing aSide, int aDamage) { if ((aDamage >= 0) && (aDamage < 16) && aDamage < mMats.length) { - return mBlockIcons[aDamage].getIcon(); + return mBlockIcons[aDamage].getQuads(aSide); } - return mBlockIcons[0].getIcon(); + return mBlockIcons[0].getQuads(aSide); } } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores.java index 00816786..f1e7c783 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Ores.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Ores.java @@ -4,9 +4,11 @@ import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; import gregtech.api.objects.GT_CopiedBlockTexture; import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.objects.LazyCopiedIconContainer; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -17,44 +19,50 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; +import java.util.Random; + public class GT_Block_Ores extends GT_Block_Ores_Abstract { - public static final ITexture[] TEXTURES = new ITexture[] { - new GT_RenderedTexture("minecraft:blocks/stone", null), - new GT_RenderedTexture("minecraft:blocks/netherrack", null), - new GT_RenderedTexture("minecraft:blocks/end_stone", null), - new GT_RenderedTexture(Textures.BlockIcons.GRANITE_BLACK_STONE), - new GT_RenderedTexture(Textures.BlockIcons.GRANITE_RED_STONE), - new GT_RenderedTexture(Textures.BlockIcons.MARBLE_STONE), - new GT_RenderedTexture(Textures.BlockIcons.BASALT_STONE), - new GT_RenderedTexture("minecraft:blocks/sand", null), - new GT_RenderedTexture("minecraft:blocks/gravel", null), - new GT_RenderedTexture("minecraft:blocks/stone", null), - new GT_RenderedTexture("minecraft:blocks/stone", null), - new GT_RenderedTexture("minecraft:blocks/stone", null), - new GT_RenderedTexture("minecraft:blocks/stone", null), - new GT_RenderedTexture("minecraft:blocks/stone", null), - new GT_RenderedTexture("minecraft:blocks/stone", null), - new GT_RenderedTexture("minecraft:blocks/stone", null)}; + public static final IIconContainer[] TEXTURES = new IIconContainer[]{ + new LazyCopiedIconContainer("minecraft:blocks/stone"), + new LazyCopiedIconContainer("minecraft:blocks/netherrack"), + new LazyCopiedIconContainer("minecraft:blocks/end_stone"), + Textures.BlockIcons.GRANITE_BLACK_STONE, + Textures.BlockIcons.GRANITE_RED_STONE, + Textures.BlockIcons.MARBLE_STONE, + Textures.BlockIcons.BASALT_STONE, + new LazyCopiedIconContainer("minecraft:blocks/stone_granite"), + new LazyCopiedIconContainer("minecraft:blocks/stone_diorite"), + new LazyCopiedIconContainer("minecraft:blocks/stone_andesite"), + new LazyCopiedIconContainer("minecraft:blocks/gravel"), + new LazyCopiedIconContainer("minecraft:blocks/sandstone_bottom"), + new LazyCopiedIconContainer("minecraft:blocks/stone"), + new LazyCopiedIconContainer("minecraft:blocks/stone"), + new LazyCopiedIconContainer("minecraft:blocks/stone"), + new LazyCopiedIconContainer("minecraft:blocks/stone") + }; public static final Materials[] DROPPED_MATERIALS = { Materials.Stone, Materials.Netherrack, Materials.Endstone, Materials.GraniteBlack, Materials.GraniteRed, Materials.Marble, Materials.Basalt, + Materials.Stone, Materials.Stone, Materials.GraniteBlack, null, null, - Materials.Stone, Materials.Stone, Materials.Stone, Materials.Stone, Materials.Stone, Materials.Stone}; + Materials.Stone, Materials.Stone, Materials.Stone}; public static final OrePrefixes[] PROCESSING_PREFIXES = new OrePrefixes[] { OrePrefixes.ore, OrePrefixes.oreNetherrack, OrePrefixes.oreEndstone, OrePrefixes.oreBlackgranite, OrePrefixes.oreRedgranite, OrePrefixes.oreMarble, OrePrefixes.oreBasalt, + OrePrefixes.ore, OrePrefixes.ore, OrePrefixes.oreBlackgranite, OrePrefixes.oreSand, OrePrefixes.oreGravel, - null, null, null, null, null, null, null}; + null, null, null, null}; public GT_Block_Ores() { super("gt.blockores", Material.ROCK); } + @Override public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { GT_TileEntity_Ores tileEntity_ores = (GT_TileEntity_Ores) world.getTileEntity(pos); @@ -75,7 +83,6 @@ public class GT_Block_Ores extends GT_Block_Ores_Abstract { return GregTech_API.sBlockOres1; } - @Override public OrePrefixes[] getProcessingPrefix() { //Must have 16 entries; an entry can be null to disable automatic recipes. return PROCESSING_PREFIXES; @@ -87,8 +94,13 @@ public class GT_Block_Ores extends GT_Block_Ores_Abstract { } @Override - public ITexture[] getTextureSet() { //Must have 16 entries. + public IIconContainer[] getTextureSet() { //Must have 16 entries. return TEXTURES; } + @Override + public boolean isGravelAlike(int aOreMeta) { + return aOreMeta > 11000; + } + } \ No newline at end of file diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java index d9078233..bd4b4816 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java @@ -1,21 +1,28 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.IIconContainer; 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.common.render.blocks.IBlockIconProvider; +import gregtech.common.render.data.IIconData; +import gregtech.common.render.data.IIconRegister; +import gregtech.common.render.data.IconDataGetter; 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.client.renderer.block.model.BakedQuad; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -28,15 +35,18 @@ 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.Collections; +import java.util.ConcurrentModificationException; import java.util.List; -public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements ITileEntityProvider, IBlockTextureProvider { +public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements ITileEntityProvider, IBlockIconProvider, IIconRegister { + + @SideOnly(Side.CLIENT) + protected TIntObjectMap mGeneratedIconData = new TIntObjectHashMap<>(); protected GT_Block_Ores_Abstract(String aUnlocalizedName, Material aMaterial) { super(GT_Item_Ores.class, aUnlocalizedName, aMaterial); @@ -50,43 +60,28 @@ public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements } boolean hideOres = Loader.isModLoaded("JustEnoughItems") && GT_Mod.gregtechproxy.mHideUnusedOres; - for (int i = 1; i < GregTech_API.sGeneratedMaterials.length; i++) { - - if (GregTech_API.sGeneratedMaterials[i] != null) { - for(int x = 0; x < 16; x++) { - if (isValidForCreativeTab(x)) { - String localizedName = getLocalizedName(GregTech_API.sGeneratedMaterials[i]); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 1000 * x) + ".name", localizedName); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (i + 16000 + 1000 * x) + ".name", "Small " + localizedName); + Materials materials = GregTech_API.sGeneratedMaterials[i]; + if (materials != null && (materials.mTypes & 0x8) != 0) { + OrePrefixes[] processingPrefixes = getProcessingPrefix(); + for (int x = 0; x < processingPrefixes.length; x++) { + ItemStack oreStack = new ItemStack(this, 1, i + 1000 * x); + ItemStack smallOreStack = new ItemStack(this, 1, i + 1000 * x + 16000); + if (processingPrefixes[x] != null) { + GT_OreDictUnificator.registerOre(processingPrefixes[x].get(materials), oreStack); } - } - - if ((GregTech_API.sGeneratedMaterials[i].mTypes & 0x8) != 0) { - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[0] != null ? this.getProcessingPrefix()[0].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i)); - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[1] != null ? this.getProcessingPrefix()[1].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i + 1000)); - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[2] != null ? this.getProcessingPrefix()[2].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i + 2000)); - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[3] != null ? this.getProcessingPrefix()[3].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i + 3000)); - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[4] != null ? this.getProcessingPrefix()[4].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i + 4000)); - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[5] != null ? this.getProcessingPrefix()[5].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i + 5000)); - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[6] != null ? this.getProcessingPrefix()[6].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i + 6000)); - GT_OreDictUnificator.registerOre(this.getProcessingPrefix()[7] != null ? this.getProcessingPrefix()[7].get(GregTech_API.sGeneratedMaterials[i]) : "", new ItemStack(this, 1, i + 7000)); - + String localizedName = getLocalizedName(materials); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (oreStack.getItemDamage()) + ".name", localizedName); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (smallOreStack.getItemDamage()) + ".name", "Small " + localizedName); if (hideOres) { - Item aItem = Item.getItemFromBlock(this); - for(int x = 0; x < 16; x++) { - if(isValidForCreativeTab(x)) { - JEI_Compat.hideItem(new ItemStack(aItem, 1, 1000 * x + i)); - JEI_Compat.hideItem(new ItemStack(aItem, 1, 16000 + 1000 * x + i)); - } - } + JEI_Compat.hideItem(oreStack); + JEI_Compat.hideItem(smallOreStack); } - } } } - } + } public String getLocalizedName(Materials aMaterial) { switch (aMaterial) { @@ -120,12 +115,6 @@ public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements } } - @Override - public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) { - TileEntity tileEntity = worldIn.getTileEntity(pos); - return tileEntity != null && tileEntity.receiveClientEvent(id, param); - } - @Override public String getHarvestTool(IBlockState aMeta) { return aMeta.getValue(METADATA) < 8 ? "pickaxe" : "shovel"; @@ -133,7 +122,7 @@ public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements @Override public int getHarvestLevel(IBlockState aMeta) { - return 2; + return aMeta.getValue(METADATA) % 8; } @Override @@ -151,94 +140,138 @@ public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements return false; } - //public abstract String getUnlocalizedName(); - public String getLocalizedName() { return GT_LanguageManager.getTranslation(getUnlocalizedName() + ".name"); } - @Override - public boolean canBeReplacedByLeaves(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state) { - return true; - } - - @Override - public boolean isVisuallyOpaque() { - return true; - } - - @Override - public boolean hasTileEntity() { - return true; - } - @Override public TileEntity createNewTileEntity(World aWorld, int aMeta) { return new GT_TileEntity_Ores(); } @Override - @SideOnly(Side.CLIENT) - public ITexture[] getTexture(World world, BlockPos blockPos, IExtendedBlockState blockState, EnumFacing side) { - GT_TileEntity_Ores oreTile = (GT_TileEntity_Ores) world.getTileEntity(blockPos); - return oreTile.getTexture(this, (byte) side.getIndex()); + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn) { + GT_TileEntity_Ores tileEntity_ores = (GT_TileEntity_Ores) world.getTileEntity(pos); + if (tileEntity_ores != null) { + tileEntity_ores.broadcastPacketIfNeeded(); + } + } + + + @Override + public ImmutableList getIcon(EnumFacing aSide, int aDamage) { + return null; } @Override - @SideOnly(Side.CLIENT) - public ITexture[] getItemblockTexture(EntityPlayer player, ItemStack itemStack, EnumFacing side) { - int mMetaData = itemStack.getItemDamage(); - Materials aMaterial = GregTech_API.sGeneratedMaterials[(mMetaData % 1000)]; - if (aMaterial != null && mMetaData < 32000) { - return new ITexture[]{ - getTextureSet()[(mMetaData / 1000) % 16], - aMaterial.mOreTextureSet[mMetaData / 16000 == 0 ? 0 : 1]}; + public ImmutableList getIcon(IBlockAccess world, BlockPos pos, EnumFacing aSide, int metadata) { + try { + GT_TileEntity_Ores tileEntity_ores = (GT_TileEntity_Ores) world.getTileEntity(pos); + if (tileEntity_ores != null) { + IIconData iconData = mGeneratedIconData.get(tileEntity_ores.mMetaData); + if (iconData == null) { + return ImmutableList.of(); + } + return iconData.getQuads(aSide); + } + //Dont know how and when it happens + } catch (ConcurrentModificationException dontknowhowandwhenithappens) {} + return ImmutableList.of(); + } + + @Override + public ImmutableList getIcon(EntityPlayer player, ItemStack itemStack, EnumFacing aSide) { + IIconData iconData = mGeneratedIconData.get(itemStack.getItemDamage()); + if(iconData == null) { + return ImmutableList.of(); } - return new ITexture[]{ - GT_Block_Ores.TEXTURES[0], - Materials._NULL.mOreTextureSet[0]}; + return iconData.getQuads(aSide); + } + + @Override + public void registerIcons(IconDataGetter quadGetter) { + System.out.println("Starting ore texture generation"); + for(int i = 1; i < GregTech_API.sGeneratedMaterials.length; i++) { + Materials materials = GregTech_API.sGeneratedMaterials[i]; + if (materials != null && (materials.mTypes & 0x8) != 0) { + IIconContainer[] materialTextures = materials.mIconSet.mTextures; + IIconContainer[] textureSet = getTextureSet(); + for(int j = 0; j < textureSet.length; j++) { + IIconData normalIconData = quadGetter.makeIconData( + textureSet[j], + materialTextures[68], + materials.getColorInt()); + + IIconData smallIconData = quadGetter.makeIconData( + textureSet[j], + materialTextures[67], + materials.getColorInt()); + + mGeneratedIconData.put((i + 1000 * j), normalIconData); + mGeneratedIconData.put((i + 1000 * j + 16000), smallIconData); + } + } + } + System.out.println("Finished ore texture generation"); + } + + private static ThreadLocal STUPID_MOJANGS = new ThreadLocal<>(); + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { + STUPID_MOJANGS.set((GT_TileEntity_Ores) worldIn.getTileEntity(pos)); + super.breakBlock(worldIn, pos, state); } @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { - TileEntity tTileEntity = world.getTileEntity(pos); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - return ((GT_TileEntity_Ores) tTileEntity).getDrops(getDroppedBlock(), fortune); + GT_TileEntity_Ores tTileEntity = (GT_TileEntity_Ores) world.getTileEntity(pos); + if(tTileEntity == null && STUPID_MOJANGS.get() != null) { + tTileEntity = STUPID_MOJANGS.get(); + STUPID_MOJANGS.remove(); + } + if (tTileEntity != null) { + return tTileEntity.getDrops(getDroppedBlock(), fortune); } return Collections.EMPTY_LIST; } - public abstract OrePrefixes[] getProcessingPrefix(); //Must have 17 entries; an entry can be null to disable automatic recipes. + public abstract OrePrefixes[] getProcessingPrefix(); //Must have 16 entries; an entry can be null to disable automatic recipes. public abstract Block getDroppedBlock(); public abstract Materials[] getDroppedDusts(); //Must have 16 entries; can be null. - public abstract ITexture[] getTextureSet(); //Must have 16 entries. + public abstract IIconContainer[] getTextureSet(); //Must have 16 entries. + + public abstract boolean isGravelAlike(int aOreMeta); + + public boolean isValidForCreativeTab(int aOreMeta) { + return aOreMeta < 12000; //|| (metadata > 16000 && metadata < 25000); + } @Override public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { + int validMats = 0; for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) { Materials tMaterial = GregTech_API.sGeneratedMaterials[i]; if (tMaterial != null && (tMaterial.mTypes & 0x8) != 0) { + validMats++; for(byte x = 0; x < 16; x++) { - if(isValidForCreativeTab(x)) { - aList.add(new ItemStack(aItem, 1, 1000 * x + i)); - aList.add(new ItemStack(aItem, 1, 16000 + 1000 * x + i)); + int metadata = 1000 * x + i; + if(isValidForCreativeTab(metadata)) { + aList.add(new ItemStack(aItem, 1, metadata)); + } + metadata = 16000 + 1000 * x + i; + if(isValidForCreativeTab(metadata)) { + aList.add(new ItemStack(aItem, 1, metadata)); } } } } + System.out.println(validMats + " valid ores"); } - public boolean isValidForCreativeTab(int baseBlockType) { - return baseBlockType <= 8; - } @Override @SideOnly(Side.CLIENT) diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB1.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB1.java index dac1af52..de8216e0 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB1.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB1.java @@ -3,6 +3,7 @@ package gregtech.common.blocks; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -30,8 +31,13 @@ public class GT_Block_Ores_UB1 extends GT_Block_Ores_Abstract { } @Override - public ITexture[] getTextureSet() { //Must have 16 entries. + public IIconContainer[] getTextureSet() { //Must have 16 entries. return GT_Block_Ores.TEXTURES; //return new ITexture[]{new GT_CopiedBlockTexture(aUBBlock, 0, 0), new GT_CopiedBlockTexture(aUBBlock, 0, 1), new GT_CopiedBlockTexture(aUBBlock, 0, 2), new GT_CopiedBlockTexture(aUBBlock, 0, 3), new GT_CopiedBlockTexture(aUBBlock, 0, 4), new GT_CopiedBlockTexture(aUBBlock, 0, 5), new GT_CopiedBlockTexture(aUBBlock, 0, 6), new GT_CopiedBlockTexture(aUBBlock, 0, 7), new GT_CopiedBlockTexture(aUBBlock, 0, 0), new GT_CopiedBlockTexture(aUBBlock, 0, 1), new GT_CopiedBlockTexture(aUBBlock, 0, 2), new GT_CopiedBlockTexture(aUBBlock, 0, 3), new GT_CopiedBlockTexture(aUBBlock, 0, 4), new GT_CopiedBlockTexture(aUBBlock, 0, 5), new GT_CopiedBlockTexture(aUBBlock, 0, 6), new GT_CopiedBlockTexture(aUBBlock, 0, 7)}; } + + @Override + public boolean isGravelAlike(int aOreMeta) { + return false; + } } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB2.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB2.java index 3c7ba9ce..2908dd9b 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB2.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB2.java @@ -3,6 +3,7 @@ package gregtech.common.blocks; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; import gregtech.api.objects.GT_CopiedBlockTexture; import net.minecraft.block.Block; @@ -31,8 +32,13 @@ public class GT_Block_Ores_UB2 extends GT_Block_Ores_Abstract { } @Override - public ITexture[] getTextureSet() { //Must have 16 entries. + public IIconContainer[] getTextureSet() { //Must have 16 entries. return GT_Block_Ores.TEXTURES; //return new ITexture[]{new GT_CopiedBlockTexture(aUBBlock, 0, 0), new GT_CopiedBlockTexture(aUBBlock, 0, 1), new GT_CopiedBlockTexture(aUBBlock, 0, 2), new GT_CopiedBlockTexture(aUBBlock, 0, 3), new GT_CopiedBlockTexture(aUBBlock, 0, 4), new GT_CopiedBlockTexture(aUBBlock, 0, 5), new GT_CopiedBlockTexture(aUBBlock, 0, 6), new GT_CopiedBlockTexture(aUBBlock, 0, 7), new GT_CopiedBlockTexture(aUBBlock, 0, 0), new GT_CopiedBlockTexture(aUBBlock, 0, 1), new GT_CopiedBlockTexture(aUBBlock, 0, 2), new GT_CopiedBlockTexture(aUBBlock, 0, 3), new GT_CopiedBlockTexture(aUBBlock, 0, 4), new GT_CopiedBlockTexture(aUBBlock, 0, 5), new GT_CopiedBlockTexture(aUBBlock, 0, 6), new GT_CopiedBlockTexture(aUBBlock, 0, 7)}; } + + @Override + public boolean isGravelAlike(int aOreMeta) { + return false; + } } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB3.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB3.java index 057d7b4c..2f702121 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB3.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Ores_UB3.java @@ -1,5 +1,6 @@ package gregtech.common.blocks; +import gregtech.api.interfaces.IIconContainer; import net.minecraftforge.fml.common.registry.GameRegistry; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; @@ -37,8 +38,13 @@ public class GT_Block_Ores_UB3 extends GT_Block_Ores_Abstract { } @Override - public ITexture[] getTextureSet() { //Must have 16 entries. + public IIconContainer[] getTextureSet() { //Must have 16 entries. return GT_Block_Ores.TEXTURES; //return new ITexture[]{new GT_CopiedBlockTexture(aUBBlock, 0, 0), new GT_CopiedBlockTexture(aUBBlock, 0, 1), new GT_CopiedBlockTexture(aUBBlock, 0, 2), new GT_CopiedBlockTexture(aUBBlock, 0, 3), new GT_CopiedBlockTexture(aUBBlock, 0, 4), new GT_CopiedBlockTexture(aUBBlock, 0, 5), new GT_CopiedBlockTexture(aUBBlock, 0, 6), new GT_CopiedBlockTexture(aUBBlock, 0, 7), new GT_CopiedBlockTexture(aUBBlock, 0, 0), new GT_CopiedBlockTexture(aUBBlock, 0, 1), new GT_CopiedBlockTexture(aUBBlock, 0, 2), new GT_CopiedBlockTexture(aUBBlock, 0, 3), new GT_CopiedBlockTexture(aUBBlock, 0, 4), new GT_CopiedBlockTexture(aUBBlock, 0, 5), new GT_CopiedBlockTexture(aUBBlock, 0, 6), new GT_CopiedBlockTexture(aUBBlock, 0, 7)}; } + + @Override + public boolean isGravelAlike(int aOreMeta) { + return false; + } } \ No newline at end of file diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java b/src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java index 5ea7ac9c..ec71b1ae 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java @@ -1,5 +1,6 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import gregtech.api.GregTech_API; import gregtech.api.enums.ItemList; @@ -14,8 +15,12 @@ import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; import gregtech.common.render.blocks.IBlockIconProvider; +import gregtech.common.render.data.IIconData; +import gregtech.common.render.data.IIconRegister; +import gregtech.common.render.data.IconDataGetter; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; @@ -33,7 +38,9 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; -public class GT_Block_Reinforced extends GT_Generic_Block implements IBlockIconProvider { +public class GT_Block_Reinforced extends GT_Generic_Block implements IBlockIconProvider, IIconRegister { + + private IIconData COAL_BLOCK_ICON_DATA; public GT_Block_Reinforced(String aName) { super(GT_Item_Storage.class, aName, new GT_Material_Reinforced()); @@ -80,28 +87,32 @@ public class GT_Block_Reinforced extends GT_Generic_Block implements IBlockIconP @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { if ((aMeta >= 0) && (aMeta < 16)) { switch (aMeta) { case 0: - return Textures.BlockIcons.BLOCK_BRONZEPREIN.getIcon(); + return Textures.BlockIcons.BLOCK_BRONZEPREIN.getQuads(aSide); case 1: - return Textures.BlockIcons.BLOCK_IRREIN.getIcon(); + return Textures.BlockIcons.BLOCK_IRREIN.getQuads(aSide); case 2: - return Textures.BlockIcons.BLOCK_PLASCRETE.getIcon(); + return Textures.BlockIcons.BLOCK_PLASCRETE.getQuads(aSide); case 3: - return Textures.BlockIcons.BLOCK_TSREIN.getIcon(); + return Textures.BlockIcons.BLOCK_TSREIN.getQuads(aSide); case 4: - return GT_Utility.getTexture("minecraft:blocks/coal_block"); + return COAL_BLOCK_ICON_DATA.getQuads(aSide); case 5: - return Textures.BlockIcons.COVER_WOOD_PLATE.getIcon(); + return Textures.BlockIcons.COVER_WOOD_PLATE.getQuads(aSide); case 6: - return GT_Utility.getTexture("minecraft:blocks/coal_block"); case 7: - return GT_Utility.getTexture("minecraft:blocks/coal_block"); + return COAL_BLOCK_ICON_DATA.getQuads(aSide); } } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getQuads(aSide); + } + + @Override + public void registerIcons(IconDataGetter quadGetter) { + COAL_BLOCK_ICON_DATA = quadGetter.makeIconData("minecraft:blocks/coal_block"); } @Override @@ -180,5 +191,4 @@ public class GT_Block_Reinforced extends GT_Generic_Block implements IBlockIconP aList.add(new ItemStack(aItem, 1, i)); } } - } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Stones.java b/src/main/java/gregtech/common/blocks/GT_Block_Stones.java index 1dee74d9..98e9962d 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Stones.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Stones.java @@ -1,11 +1,13 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; 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.blocks.IBlockIconProvider; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; @@ -65,11 +67,11 @@ public class GT_Block_Stones extends GT_Block_Stones_Abstract implements IBlockI @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.STONES[aMeta].getIcon(); + return gregtech.api.enums.Textures.BlockIcons.STONES[aMeta].getQuads(aSide); } - return gregtech.api.enums.Textures.BlockIcons.STONES[0].getIcon(); + return gregtech.api.enums.Textures.BlockIcons.STONES[0].getQuads(aSide); } } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java index a5d0811a..6f9f8963 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java @@ -1,5 +1,6 @@ package gregtech.common.blocks; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import gregtech.api.GregTech_API; import gregtech.api.enums.*; @@ -12,6 +13,7 @@ import gregtech.common.render.blocks.IBlockIconProvider; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLiving; @@ -103,9 +105,9 @@ public abstract class GT_Block_Stones_Abstract extends GT_Generic_Block implemen @Override @SideOnly(Side.CLIENT) - public TextureAtlasSprite getIcon(EnumFacing aSide, int aMeta) { + public ImmutableList getIcon(EnumFacing aSide, int aMeta) { if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon(); + return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getQuads(aSide); } return null; } diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Ores.java b/src/main/java/gregtech/common/blocks/GT_Item_Ores.java index 52260b6e..02027b6a 100644 --- a/src/main/java/gregtech/common/blocks/GT_Item_Ores.java +++ b/src/main/java/gregtech/common/blocks/GT_Item_Ores.java @@ -41,7 +41,7 @@ public class GT_Item_Ores extends ItemBlock { public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) { short tDamage = (short) getDamage(stack); if (tDamage > 0) { - if (!world.setBlockState(pos, block.getStateFromMeta(GT_TileEntity_Ores.getHarvestData(tDamage)))) { + if (!world.setBlockState(pos, block.getStateFromMeta(GT_TileEntity_Ores.getHarvestData((GT_Block_Ores_Abstract) block, tDamage)))) { return false; } GT_TileEntity_Ores tTileEntity = (GT_TileEntity_Ores) world.getTileEntity(pos); diff --git a/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java b/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java deleted file mode 100644 index 63872103..00000000 --- a/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java +++ /dev/null @@ -1,105 +0,0 @@ -package gregtech.common.blocks; - -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.net.GT_Packet; -import io.netty.buffer.ByteBuf; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.ArrayList; - -public class GT_Packet_Ores extends GT_Packet { - - private ArrayList ores = new ArrayList<>(); - - private static class OreInfo { - private int mX; - private int mZ; - private int mY; - private short mMetaData; - - public OreInfo(BlockPos pos, short metadata) { - mX = pos.getX(); - mY = pos.getY(); - mZ = pos.getZ(); - mMetaData = metadata; - } - - private OreInfo() {} - - public void encode(ByteBuf tOut) { - tOut.writeInt(this.mX); - tOut.writeShort(this.mY); - tOut.writeInt(this.mZ); - tOut.writeShort(this.mMetaData); - } - - public void decode(ByteBuf buf) { - mX = buf.readInt(); - mY = buf.readShort(); - mZ = buf.readInt(); - mMetaData = buf.readShort(); - } - - public static OreInfo decodeNew(ByteBuf buf) { - OreInfo oreInfo = new OreInfo(); - oreInfo.decode(buf); - return oreInfo; - } - - public void process(World aWorld) { - if (aWorld != null && mMetaData > 0) { - BlockPos blockPos = new BlockPos(this.mX, this.mY, this.mZ); - GT_TileEntity_Ores tileEntity_ores = (GT_TileEntity_Ores) aWorld.getTileEntity(blockPos); - if(tileEntity_ores != null) { - tileEntity_ores.mMetaData = mMetaData; - tileEntity_ores.causeChunkUpdate(); - } - } - } - - - } - - public GT_Packet_Ores() {} - - public void addPos(GT_TileEntity_Ores tileEntity_ores) { - ores.add(new OreInfo(tileEntity_ores.getPos(), tileEntity_ores.mMetaData)); - } - - public boolean isEmpty() { - return ores.isEmpty(); - } - - @Override - public void encode(ByteBuf buf) { - buf.writeInt(ores.size()); - for(int i = 0; i < ores.size(); i++) { - ores.get(i).encode(buf); - } - } - - @Override - public void decode(ByteBuf buf) { - int size = buf.readInt(); - for(int i = 0; i < size; i++) { - ores.add(OreInfo.decodeNew(buf)); - } - } - - @Override - public void process(World aWorld) { - for(OreInfo oreInfo : ores) { - oreInfo.process(aWorld); - } - } - -} diff --git a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java index 8e46b5b2..2f52d007 100644 --- a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java +++ b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java @@ -4,47 +4,109 @@ import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ITexturedTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; import gregtech.api.world.GT_Worldgen_Constants; import net.minecraft.block.Block; +import net.minecraft.block.BlockStone; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; import net.minecraft.world.World; +import net.minecraft.world.chunk.storage.AnvilChunkLoader; +import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.List; import java.util.Random; -public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntity { +public class GT_TileEntity_Ores extends TileEntity { + + private static final NBTTagCompound EMPTY_TAG = new NBTTagCompound(); + + static { + EMPTY_TAG.setInteger("y", -1); + } public short mMetaData = 0; public boolean mNatural = false; + private boolean mBlocked = true; + + public static boolean isBlocked(World worldObj, BlockPos pos) { + return isOpaque(worldObj, pos.up()) && + isOpaque(worldObj, pos.down()) && + isOpaque(worldObj, pos.east()) && + isOpaque(worldObj, pos.west()) && + isOpaque(worldObj, pos.south()) && + isOpaque(worldObj, pos.north()); + } + + public void updateBlocked() { + this.mBlocked = isBlocked(worldObj, getPos()); + } + + public boolean isBlocked() { + return mBlocked; + } + + private static boolean isOpaque(World worldObj, BlockPos pos) { + return worldObj.getBlockState(pos).isOpaqueCube(); + } + @Override public NBTTagCompound getUpdateTag() { - //return writeToNBT(new NBTTagCompound()); + updateBlocked(); + if(mBlocked) { + return EMPTY_TAG; + } + NBTTagCompound tagCompound = new NBTTagCompound(); + writeToNBT(tagCompound); + return tagCompound; + } + + @Nullable + @Override + public SPacketUpdateTileEntity getUpdatePacket() { return null; } + public void broadcastPacketIfNeeded() { + updateBlocked(); + if(!mBlocked) { + NBTTagCompound tagCompound = new NBTTagCompound(); + writeNBTInternal(tagCompound); + SPacketUpdateTileEntity packet = new SPacketUpdateTileEntity(getPos(), 0, tagCompound); + if (packet != null) { + AxisAlignedBB box = new AxisAlignedBB(pos, pos).expand(256, 256, 256); + List players = worldObj.getEntitiesWithinAABB(EntityPlayerMP.class, box); + for (EntityPlayerMP entityPlayer : players) { + entityPlayer.connection.sendPacket(packet); + } + } + } + } + @Override public void handleUpdateTag(NBTTagCompound tag) { readNBTInternal(tag); - //causeChunkUpdate(); + } + + @Override + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { + readNBTInternal(pkt.getNbtCompound()); + causeChunkUpdate(); } @Override @@ -72,119 +134,128 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit @SideOnly(Side.CLIENT) public void causeChunkUpdate() { - int minX = pos.getX() - 5; - int minY = pos.getY() - 5; - int minZ = pos.getZ() - 5; - int maxX = pos.getX() + 5; - int maxY = pos.getY() + 5; - int maxZ = pos.getZ() + 5; + int minX = pos.getX(); + int minY = pos.getY() - 1; + int minZ = pos.getZ(); + int maxX = pos.getX(); + int maxY = pos.getY() + 1; + int maxZ = pos.getZ(); Minecraft.getMinecraft().renderGlobal.markBlockRangeForRenderUpdate(minX, minY, minZ, maxX, maxY, maxZ); } - public static byte getHarvestData(short aMetaData) { + public static int getHarvestData(GT_Block_Ores_Abstract aBlock, int aMetaData) { Materials aMaterial = GregTech_API.sGeneratedMaterials[(aMetaData % 1000)]; - byte tByte = aMaterial == null ? 0 : (byte) Math.max((aMetaData % 16000 / 1000 == 3) || (aMetaData % 16000 / 1000 == 4) ? 3 : 0, Math.min(7, aMaterial.mToolQuality - (aMetaData < 16000 ? 0 : 1))); - if(GT_Mod.gregtechproxy.mChangeHarvestLevels ){ - tByte = aMaterial == null ? 0 : (byte) Math.max((aMetaData % 16000 / 1000 == 3) || (aMetaData % 16000 / 1000 == 4) ? GT_Mod.gregtechproxy.mGraniteHavestLevel : 0, Math.min(GT_Mod.gregtechproxy.mMaxHarvestLevel, GT_Mod.gregtechproxy.mHarvestLevel[aMaterial.mMetaItemSubID] - (aMetaData < 16000 ? 0 : 1))); + if(aMaterial != null) { + boolean gravelAlike = aBlock.isGravelAlike(aMetaData); + int toolQuality = Math.max(7, aMaterial.mToolQuality); + return gravelAlike ? 8 + toolQuality : toolQuality; } - return tByte; + return 0; } + public static boolean setOreBlock(World aWorld, BlockPos blockPos, int aMetaData, boolean isSmallOre) { return setOreBlock(aWorld, blockPos.getX(), blockPos.getY(), blockPos.getZ(), aMetaData, isSmallOre, false); } public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean isSmallOre, boolean air) { - if (!air) { - aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1)); - } BlockPos blockPos = new BlockPos(aX, aY, aZ); IBlockState blockState = aWorld.getBlockState(blockPos); + Block tBlock = blockState.getBlock(); int BlockMeta = tBlock.getMetaFromState(blockState); - String BlockName = tBlock.getUnlocalizedName(); - Block tOreBlock = GregTech_API.sBlockOres1; + GT_Block_Ores_Abstract tOreBlock = (GT_Block_Ores_Abstract) GregTech_API.sBlockOres1; aMetaData += isSmallOre ? 16000 : 0; - if ((aMetaData > 0) && ((tBlock != Blocks.AIR) || air)) { - if (BlockName.equals("tile.igneousStone")) { - if (GregTech_API.sBlockOresUb1 != null) { - tOreBlock = GregTech_API.sBlockOresUb1; - aMetaData += (BlockMeta * 1000); - } - } else if (BlockName.equals("tile.metamorphicStone")) { - if (GregTech_API.sBlockOresUb2 != null) { - tOreBlock = GregTech_API.sBlockOresUb2; - aMetaData += (BlockMeta * 1000); - } - } else if (BlockName.equals("tile.sedimentaryStone")) { - if (GregTech_API.sBlockOresUb3 != null) { - tOreBlock = GregTech_API.sBlockOresUb3; - aMetaData += (BlockMeta * 1000); - } - } else if (tBlock == Blocks.NETHERRACK) { - aMetaData += 1000; - } else if(tBlock == Blocks.END_STONE) { - aMetaData += 2000; - } else if(tBlock == GregTech_API.sBlockGranites && BlockMeta == 0) { - aMetaData += 3000; - } else if(tBlock == GregTech_API.sBlockGranites && BlockMeta == 8) { - aMetaData += 4000; - } else if(tBlock == GregTech_API.sBlockStones && BlockMeta == 0) { - aMetaData += 5000; - } else if(tBlock == GregTech_API.sBlockStones && BlockMeta == 8) { - aMetaData += 6000; + if(air && tBlock == Blocks.AIR) { + aMetaData += 0; + } else if(tBlock == Blocks.STONE) { + if(BlockMeta == 0) { + aMetaData += 0; + } else if(BlockMeta == 1) { + aMetaData += 7000; + } else if(BlockMeta == 3) { + aMetaData += 8000; + } else if(BlockMeta == 5) { + aMetaData += 9000; + } else { + return false; } - aWorld.setBlockState(blockPos, tOreBlock.getStateFromMeta(getHarvestData((short) aMetaData)), 0); - TileEntity tTileEntity = aWorld.getTileEntity(blockPos); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - ((GT_TileEntity_Ores) tTileEntity).mMetaData = ((short) aMetaData); - ((GT_TileEntity_Ores) tTileEntity).mNatural = true; - } - return true; + } else if (tBlock == Blocks.NETHERRACK) { + aMetaData += 1000; + } else if (tBlock == Blocks.END_STONE) { + aMetaData += 2000; + } else if (tBlock == Blocks.SAND || tBlock == Blocks.SANDSTONE) { + aMetaData += 11000; + } else if (tBlock == Blocks.GRAVEL) { + aMetaData += 10000; + } else if (tBlock == GregTech_API.sBlockGranites && BlockMeta == 0) { + aMetaData += 3000; + } else if (tBlock == GregTech_API.sBlockGranites && BlockMeta == 8) { + aMetaData += 4000; + } else if (tBlock == GregTech_API.sBlockStones && BlockMeta == 0) { + aMetaData += 5000; + } else if (tBlock == GregTech_API.sBlockStones && BlockMeta == 8) { + aMetaData += 6000; + } else { + return false; } - return false; + + aWorld.setBlockState(blockPos, tOreBlock.getStateFromMeta(getHarvestData(tOreBlock, aMetaData))); + + GT_TileEntity_Ores tTileEntity = (GT_TileEntity_Ores) aWorld.getTileEntity(blockPos); + tTileEntity.mMetaData = ((short) aMetaData); + tTileEntity.mNatural = true; + + return true; } public void overrideOreBlockMaterial(Block aOverridingStoneBlock, byte aOverridingStoneMeta) { - this.mMetaData = ((short) (int) (this.mMetaData % 1000L + this.mMetaData / 16000L * 16000L)); - if (aOverridingStoneBlock.isReplaceableOreGen(worldObj.getBlockState(getPos()), this.worldObj, getPos(), state -> state.getBlock() == Blocks.NETHERRACK)) { - this.mMetaData = ((short) (this.mMetaData + 1000)); - } else if (aOverridingStoneBlock.isReplaceableOreGen(worldObj.getBlockState(getPos()), this.worldObj, getPos(), state -> state.getBlock() == Blocks.END_STONE)) { - this.mMetaData = ((short) (this.mMetaData + 2000)); - } else if (aOverridingStoneBlock.isReplaceableOreGen(worldObj.getBlockState(getPos()), this.worldObj, getPos(), state -> state.getBlock() == GregTech_API.sBlockGranites)) { - if (aOverridingStoneBlock == GregTech_API.sBlockGranites) { - if (aOverridingStoneMeta < 8) { - this.mMetaData = ((short) (this.mMetaData + 3000)); - } else { - this.mMetaData = ((short) (this.mMetaData + 4000)); - } - } else { + /*IBlockState blockState = worldObj.getBlockState(getPos()); + GT_Block_Ores_Abstract tOresBlock = (GT_Block_Ores_Abstract) blockState.getBlock(); + + this.mMetaData = ((short) (int) (this.mMetaData % 1000L + this.mMetaData / 16000L * 16000L)); + if (aOverridingStoneBlock.isReplaceableOreGen(blockState, this.worldObj, getPos(), state -> state.getBlock() == Blocks.NETHERRACK)) { + this.mMetaData = ((short) (this.mMetaData + 1000)); + } else if (aOverridingStoneBlock.isReplaceableOreGen(blockState, this.worldObj, getPos(), state -> state.getBlock() == Blocks.END_STONE)) { + this.mMetaData = ((short) (this.mMetaData + 2000)); + } else if (aOverridingStoneBlock.isReplaceableOreGen(blockState, this.worldObj, getPos(), state -> state.getBlock() == GregTech_API.sBlockGranites)) { + if (aOverridingStoneBlock == GregTech_API.sBlockGranites) { + if (aOverridingStoneMeta < 8) { this.mMetaData = ((short) (this.mMetaData + 3000)); - } - } else if (aOverridingStoneBlock.isReplaceableOreGen(worldObj.getBlockState(getPos()), this.worldObj, getPos(), GT_Worldgen_Constants.ANY)) { - if (aOverridingStoneBlock == GregTech_API.sBlockStones) { - if (aOverridingStoneMeta < 8) { - this.mMetaData = ((short) (this.mMetaData + 5000)); - } else { - this.mMetaData = ((short) (this.mMetaData + 6000)); - } } else { - this.mMetaData = ((short) (this.mMetaData + 5000)); + this.mMetaData = ((short) (this.mMetaData + 4000)); } + } else { + this.mMetaData = ((short) (this.mMetaData + 3000)); } - this.worldObj.setBlockState(getPos(), getBlockType().getStateFromMeta(getHarvestData(this.mMetaData)), 0); + } else { + if (aOverridingStoneBlock == GregTech_API.sBlockStones) { + if (aOverridingStoneMeta < 8) { + this.mMetaData = ((short) (this.mMetaData + 5000)); + } else { + this.mMetaData = ((short) (this.mMetaData + 6000)); + } + } else { + this.mMetaData = ((short) (this.mMetaData + 5000)); + } + } + this.worldObj.setBlockState( + getPos(), + tOresBlock.getStateFromMeta( + getHarvestData(tOresBlock, this.mMetaData)), 0);*/ } - public void convertOreBlock(World aWorld, int aX, int aY, int aZ) { + /*public void convertOreBlock(World aWorld, int aX, int aY, int aZ) { short aMeta = ((short) (int) (this.mMetaData % 1000 + (this.mMetaData / 16000 * 16000))); + aWorld.setBlockState(new BlockPos(aX, aY, aZ), GregTech_API.sBlockOres1.getStateFromMeta(getHarvestData(aMeta))); TileEntity tTileEntity = aWorld.getTileEntity(new BlockPos(aX, aY, aZ)); if (tTileEntity instanceof GT_TileEntity_Ores) { ((GT_TileEntity_Ores) tTileEntity).mMetaData = aMeta; } - } + }*/ public ArrayList getDrops(Block aDroppedOre, int aFortune) { ArrayList rList = new ArrayList<>(); @@ -261,20 +332,4 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit return rList; } - @Override - public ITexture[] getTexture(Block aBlock, byte aSide) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[(this.mMetaData % 1000)]; - if ((aMaterial != null) && (this.mMetaData < 32000)) { - if (aBlock instanceof GT_Block_Ores_Abstract) { - GT_Block_Ores_Abstract oreBlock = (GT_Block_Ores_Abstract) aBlock; - return new ITexture[]{ - oreBlock.getTextureSet()[((this.mMetaData / 1000) % 16)], - aMaterial.mOreTextureSet[this.mMetaData / 16000 == 0 ? 0 : 1]}; - } - } - return new ITexture[]{ - GT_Block_Ores.TEXTURES[0], - Materials._NULL.mOreTextureSet[0]}; - } - } diff --git a/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java b/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java index aa37aa90..dd0065ea 100644 --- a/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java +++ b/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java @@ -1,16 +1,13 @@ package gregtech.common.items; -import gregtech.common.render.IIconRegister; -import net.minecraft.client.renderer.texture.TextureMap; +import gregtech.common.render.data.IIconRegister; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.items.GT_Generic_Item; import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; import gregtech.api.util.GT_ModHandler; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/gregtech/common/items/ItemComb.java b/src/main/java/gregtech/common/items/ItemComb.java index d8e167ea..e227c48c 100644 --- a/src/main/java/gregtech/common/items/ItemComb.java +++ b/src/main/java/gregtech/common/items/ItemComb.java @@ -11,7 +11,7 @@ import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; import gregtech.common.render.IItemColorMultiplier; -import gregtech.common.render.IIconRegister; +import gregtech.common.render.data.IIconRegister; import gregtech.common.render.items.IItemIconProvider; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; diff --git a/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java b/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java index 6bfbcfd9..882101a7 100644 --- a/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java +++ b/src/main/java/gregtech/common/items/armor/ModularArmor_Item.java @@ -2,7 +2,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.data.IIconRegister; import gregtech.common.render.items.IItemIconProvider; import ic2.core.IC2; import net.minecraft.client.Minecraft; diff --git a/src/main/java/gregtech/common/render/GT_BlockRenderer.java b/src/main/java/gregtech/common/render/GT_BlockRenderer.java index 59c70bac..ba7e6fec 100644 --- a/src/main/java/gregtech/common/render/GT_BlockRenderer.java +++ b/src/main/java/gregtech/common/render/GT_BlockRenderer.java @@ -32,12 +32,6 @@ import java.util.List; @SideOnly(Side.CLIENT) public class GT_BlockRenderer { - /** - * Quads cache for standard icon provider blocks - * used for block and itemblock rendering - */ - public static HashMap>> quadsCache = new HashMap<>(); - public static boolean shouldHook(IBlockState blockState) { if(blockState.getBlock() instanceof IBlockIconProvider) { return true; @@ -92,7 +86,7 @@ public class GT_BlockRenderer { } @Override - public TextureAtlasSprite getSideSprite(EnumFacing side, IBlockState state) { + public ImmutableList getSideSprite(EnumFacing side, IBlockState state) { IBlockIconProvider provider = (IBlockIconProvider) block; return provider.getIcon(holder, itemStack, side); } @@ -102,7 +96,7 @@ public class GT_BlockRenderer { private static class IconProviderModel extends AbstractIconProviderModel { @Override - public TextureAtlasSprite getSideSprite(EnumFacing side, IBlockState blockState) { + public ImmutableList getSideSprite(EnumFacing side, IBlockState blockState) { BlockPos pos = ((IExtendedBlockState) blockState).getValue(GT_Generic_Block.BLOCK_POS); IBlockIconProvider provider = (IBlockIconProvider) blockState.getBlock(); return provider.getIcon(Minecraft.getMinecraft().theWorld, pos, side, blockState.getValue(GT_Generic_Block.METADATA)); @@ -116,28 +110,19 @@ public class GT_BlockRenderer { @Override public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { if(side != null) { - TextureAtlasSprite sideIcon = getSideSprite(side, state); - if (sideIcon != null) { - HashMap> quads = quadsCache.get(sideIcon); - if(quads == null) { - quads = new HashMap<>(); - quadsCache.put(sideIcon, quads); - } - ImmutableList faceQuad = quads.get(side); - if(faceQuad == null) { - faceQuad = ImmutableList.of(RenderUtil.renderSide(sideIcon, side, 0.0F, 0xFFFFFF)); - quads.put(side, faceQuad); - } - return faceQuad; + ImmutableList sideIcon = getSideSprite(side, state); + if(sideIcon != null) { + return sideIcon; } } - return Collections.EMPTY_LIST; + return ImmutableList.of(); } - public abstract TextureAtlasSprite getSideSprite(EnumFacing side, IBlockState blockState); + public abstract ImmutableList getSideSprite(EnumFacing side, IBlockState blockState); } + //TODO null-side rendering private static class TextureProviderModel extends AbstractModel { @Override diff --git a/src/main/java/gregtech/common/render/GT_RenderDispatcher.java b/src/main/java/gregtech/common/render/GT_RenderDispatcher.java index de3c3c46..88e6bd9b 100644 --- a/src/main/java/gregtech/common/render/GT_RenderDispatcher.java +++ b/src/main/java/gregtech/common/render/GT_RenderDispatcher.java @@ -6,6 +6,9 @@ import com.google.common.collect.ImmutableMap; import gregtech.api.GregTech_API; import gregtech.common.render.blocks.IBlockIconProvider; import gregtech.common.render.blocks.IBlockTextureProvider; +import gregtech.common.render.data.DefaultDataGetter; +import gregtech.common.render.data.IIconRegister; +import gregtech.common.render.data.IconDataGetter; import gregtech.common.render.items.IItemIconProvider; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -13,6 +16,7 @@ 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.IItemColor; import net.minecraft.client.renderer.color.ItemColors; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -46,6 +50,7 @@ public class GT_RenderDispatcher implements IBakedModel { private static final ModelResourceLocation RESOURCE_LOCATION_BLOCK_TEXTURE = new ModelResourceLocation("gregtech", "IBlockTextureIconProvider"); private static final ModelResourceLocation RESOURCE_LOCATION_BLOCK_ICON = new ModelResourceLocation("gregtech", "IBlockIconProvider"); + private static IconDataGetter DEFAULT_ICON_DATA_GETTER; private ItemStack itemStack; public GT_RenderDispatcher() { @@ -55,7 +60,7 @@ public class GT_RenderDispatcher implements IBakedModel { @SubscribeEvent public void onTextureMapStitch(TextureStitchEvent.Pre pre) { - + DEFAULT_ICON_DATA_GETTER = new DefaultDataGetter(pre.getMap()); ItemColors itemColors = Minecraft.getMinecraft().getItemColors(); BlockColors blockColors = Minecraft.getMinecraft().getBlockColors(); System.out.println("Texture map stitch"); @@ -84,7 +89,7 @@ public class GT_RenderDispatcher implements IBakedModel { Item item = Item.REGISTRY.getObject(itemId); if(item instanceof IIconRegister) { - ((IIconRegister) item).registerIcons(pre.getMap()); + ((IIconRegister) item).registerIcons(DEFAULT_ICON_DATA_GETTER); } if(item instanceof IItemColorMultiplier) { @@ -93,9 +98,12 @@ public class GT_RenderDispatcher implements IBakedModel { } //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); + if(item instanceof ItemBlock) { + ItemBlock itemBlock = (ItemBlock) item; + if(itemBlock.block instanceof IBlockTextureProvider || itemBlock.block instanceof IBlockIconProvider) { + //ITextures pass color as tint index + itemColors.registerItemColorHandler((stack, tintIndex) -> tintIndex, item); + } } } @@ -103,11 +111,10 @@ public class GT_RenderDispatcher implements IBakedModel { Block block = Block.REGISTRY.getObject(blockId); if(block instanceof IIconRegister) { - ((IIconRegister) block).registerIcons(pre.getMap()); + ((IIconRegister) block).registerIcons(DEFAULT_ICON_DATA_GETTER); } - //we don't need color multiplier for standard blocks, only for ITexture-blocks - if(block instanceof IBlockTextureProvider) { + if(block instanceof IBlockTextureProvider || block instanceof IBlockIconProvider) { //ITextures pass color as tint index blockColors.registerBlockColorHandler((state, worldIn, pos, tintIndex) -> tintIndex, block); } @@ -117,6 +124,18 @@ public class GT_RenderDispatcher implements IBakedModel { System.out.println("GT_Mod: Finished Icon Load Phase"); } + @SubscribeEvent + public void onTextureMapStitchFinish(TextureStitchEvent.Post post) { + for(Runnable runnable : GregTech_API.sAfterGTIconload) { + try { + runnable.run(); + } catch (Exception err) { + System.out.println("Failed to call after load on " + runnable); + err.printStackTrace(); + } + } + } + @SubscribeEvent public void onModelsBake(ModelBakeEvent bakeEvent) { System.out.println("Models bake"); diff --git a/src/main/java/gregtech/common/render/blocks/IBlockIconProvider.java b/src/main/java/gregtech/common/render/blocks/IBlockIconProvider.java index fc9e03f7..9adf6518 100644 --- a/src/main/java/gregtech/common/render/blocks/IBlockIconProvider.java +++ b/src/main/java/gregtech/common/render/blocks/IBlockIconProvider.java @@ -1,5 +1,8 @@ package gregtech.common.render.blocks; +import com.google.common.collect.ImmutableList; +import gregtech.common.render.data.IIconRegister; +import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -14,22 +17,22 @@ import net.minecraftforge.fml.relauncher.SideOnly; * 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 IIconRegister * @see TextureAtlasSprite * @see IBlockIconProvider */ public interface IBlockIconProvider { @SideOnly(Side.CLIENT) - TextureAtlasSprite getIcon(EnumFacing aSide, int aDamage); + ImmutableList getIcon(EnumFacing aSide, int aDamage); @SideOnly(Side.CLIENT) - default TextureAtlasSprite getIcon(IBlockAccess world, BlockPos pos, EnumFacing aSide, int metadata) { + default ImmutableList getIcon(IBlockAccess world, BlockPos pos, EnumFacing aSide, int metadata) { return getIcon(aSide, metadata); } @SideOnly(Side.CLIENT) - default TextureAtlasSprite getIcon(EntityPlayer player, ItemStack itemStack, EnumFacing aSide) { + default ImmutableList getIcon(EntityPlayer player, ItemStack itemStack, EnumFacing aSide) { return getIcon(aSide, itemStack.getItemDamage()); } diff --git a/src/main/java/gregtech/common/render/blocks/IBlockTextureProvider.java b/src/main/java/gregtech/common/render/blocks/IBlockTextureProvider.java index 3ecdcf07..be375422 100644 --- a/src/main/java/gregtech/common/render/blocks/IBlockTextureProvider.java +++ b/src/main/java/gregtech/common/render/blocks/IBlockTextureProvider.java @@ -1,6 +1,7 @@ package gregtech.common.render.blocks; import gregtech.api.interfaces.ITexture; +import gregtech.common.render.data.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; @@ -15,7 +16,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; * have custom rendering behaviour defined in {@link ITexture}s * * @see ITexture - * @see gregtech.common.render.IIconRegister + * @see IIconRegister * @see IBlockIconProvider */ public interface IBlockTextureProvider { diff --git a/src/main/java/gregtech/common/render/data/DefaultDataGetter.java b/src/main/java/gregtech/common/render/data/DefaultDataGetter.java new file mode 100644 index 00000000..799611c1 --- /dev/null +++ b/src/main/java/gregtech/common/render/data/DefaultDataGetter.java @@ -0,0 +1,42 @@ +package gregtech.common.render.data; + +import gregtech.api.interfaces.IIconContainer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; + +public class DefaultDataGetter implements IconDataGetter { + + private TextureMap textureMap; + + public DefaultDataGetter(TextureMap textureMap) { + this.textureMap = textureMap; + } + + @Override + public IIconData makeIconData(Object... iconPaths) { + //register sprites and replacing strings and resource locations with them + Object[] parsedData = new Object[iconPaths.length]; + for(int i = 0; i < iconPaths.length; i++) { + Object object = iconPaths[i]; + if(object instanceof String) { + String path = (String) object; + TextureAtlasSprite atlasSprite = textureMap.registerSprite(new ResourceLocation(path)); + parsedData[i] = atlasSprite; + } else if(object instanceof ResourceLocation) { + ResourceLocation path = (ResourceLocation) object; + TextureAtlasSprite atlasSprite = textureMap.registerSprite(path); + parsedData[i] = atlasSprite; + } else { + parsedData[i] = object; + } + } + return new DefaultQuadData(parsedData); + } + + @Override + public TextureMap getMap() { + return textureMap; + } + +} diff --git a/src/main/java/gregtech/common/render/data/DefaultQuadData.java b/src/main/java/gregtech/common/render/data/DefaultQuadData.java new file mode 100644 index 00000000..be0745ed --- /dev/null +++ b/src/main/java/gregtech/common/render/data/DefaultQuadData.java @@ -0,0 +1,55 @@ +package gregtech.common.render.data; + +import com.google.common.collect.ImmutableList; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.IIconContainer; +import gregtech.common.render.RenderUtil; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; + +import java.util.EnumMap; + +public class DefaultQuadData implements IIconData, Runnable { + + private EnumMap> quads = new EnumMap<>(EnumFacing.class); + private Object[] iconData; + + + public DefaultQuadData(Object... iconData) { + this.iconData = iconData; + GregTech_API.sAfterGTIconload.add(this); + } + + @Override + public ImmutableList getQuads(EnumFacing side) { + return quads.get(side); + } + + @Override + public void run() { + for (EnumFacing enumFacing : EnumFacing.VALUES) { + ImmutableList.Builder builder = ImmutableList.builder(); + float offset = 0f; + for (int i = 0; i < iconData.length; i++) { + if (iconData[i] instanceof TextureAtlasSprite || iconData[i] instanceof IIconContainer) { + TextureAtlasSprite sprite = iconData[i] instanceof TextureAtlasSprite ? + (TextureAtlasSprite) iconData[i] : + ((IIconContainer) iconData[i]).getIcon(); + int color = 0x0ffffff; + if(iconData.length > i + 1 && iconData[i + 1] instanceof Integer) { + color = (Integer) iconData[i + 1]; i++; + } + builder.add(RenderUtil.renderSide(sprite, enumFacing, offset, color)); + offset += 0.001f; + } else { + String typeTag = iconData[i] == null ? "null" : iconData[i].getClass().getName(); + throw new IllegalArgumentException("Illegal type at index " + i + ": " + typeTag); + } + } + quads.put(enumFacing, builder.build()); + } + } + +} diff --git a/src/main/java/gregtech/common/render/data/IIconData.java b/src/main/java/gregtech/common/render/data/IIconData.java new file mode 100644 index 00000000..a8f5e44f --- /dev/null +++ b/src/main/java/gregtech/common/render/data/IIconData.java @@ -0,0 +1,12 @@ +package gregtech.common.render.data; + +import com.google.common.collect.ImmutableList; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; + +public interface IIconData { + + ImmutableList getQuads(EnumFacing side); + +} diff --git a/src/main/java/gregtech/common/render/IIconRegister.java b/src/main/java/gregtech/common/render/data/IIconRegister.java similarity index 67% rename from src/main/java/gregtech/common/render/IIconRegister.java rename to src/main/java/gregtech/common/render/data/IIconRegister.java index 0dfea849..068c567a 100644 --- a/src/main/java/gregtech/common/render/IIconRegister.java +++ b/src/main/java/gregtech/common/render/data/IIconRegister.java @@ -1,4 +1,4 @@ -package gregtech.common.render; +package gregtech.common.render.data; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraftforge.fml.relauncher.Side; @@ -17,6 +17,11 @@ import net.minecraftforge.fml.relauncher.SideOnly; public interface IIconRegister { @SideOnly(Side.CLIENT) - void registerIcons(TextureMap textureMap); + default void registerIcons(IconDataGetter quadGetter) { + registerIcons(quadGetter.getMap()); + } + + @Deprecated //TODO split to item register and block register + default void registerIcons(TextureMap textureMap) {} } diff --git a/src/main/java/gregtech/common/render/data/IconDataGetter.java b/src/main/java/gregtech/common/render/data/IconDataGetter.java new file mode 100644 index 00000000..6eb541c2 --- /dev/null +++ b/src/main/java/gregtech/common/render/data/IconDataGetter.java @@ -0,0 +1,10 @@ +package gregtech.common.render.data; + +import net.minecraft.client.renderer.texture.TextureMap; + +public interface IconDataGetter { + + IIconData makeIconData(Object... iconData); + TextureMap getMap(); + +} diff --git a/src/main/java/gregtech/common/render/items/IItemIconProvider.java b/src/main/java/gregtech/common/render/items/IItemIconProvider.java index a28caf82..9a3d52c6 100644 --- a/src/main/java/gregtech/common/render/items/IItemIconProvider.java +++ b/src/main/java/gregtech/common/render/items/IItemIconProvider.java @@ -1,5 +1,6 @@ package gregtech.common.render.items; +import gregtech.common.render.data.IIconRegister; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; @@ -12,7 +13,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; * 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 IIconRegister * @see TextureAtlasSprite * @see IItemIconContainerProvider */