From 2d6573309d8d24905370e9ecbcf5d8d8d6390d91 Mon Sep 17 00:00:00 2001 From: Justin Aquadro Date: Sat, 5 Mar 2016 01:07:52 -0500 Subject: [PATCH] Handle edge cases where pack blocks could return a null icon --- build.gradle | 2 +- .../storagedrawers/block/BlockDrawers.java | 7 +-- .../block/pack/BlockDrawersPack.java | 47 +++++++++++++++++++ .../block/pack/BlockSortingDrawersPack.java | 47 +++++++++++++++++++ 4 files changed, 99 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index a41d614..4622de2 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { apply plugin: 'forge' -version = "1.7.10-1.9.4" +version = "1.7.10-1.9.5" group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "StorageDrawers" diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java b/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java index 2a989ad..398cb8e 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java +++ b/src/com/jaquadro/minecraft/storagedrawers/block/BlockDrawers.java @@ -703,14 +703,14 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH @SideOnly(Side.CLIENT) public IIcon getIconTrim (int meta) { - meta %= iconTrim.length; + meta = (meta < 0 || meta >= iconTrim.length) ? 0 : meta; return iconTrim[meta]; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon (int side, int meta) { - meta %= iconSide.length; + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; switch (side) { case 0: @@ -757,7 +757,8 @@ public class BlockDrawers extends BlockContainer implements IExtendedBlockClickH @SideOnly(Side.CLIENT) protected IIcon getIcon (IBlockAccess blockAccess, int x, int y, int z, int side, int level) { - int meta = blockAccess.getBlockMetadata(x, y, z) % iconSide.length; + int meta = blockAccess.getBlockMetadata(x, y, z); + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; TileEntityDrawers tile = getTileEntity(blockAccess, x, y, z); if (tile == null || side == tile.getDirection()) { diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockDrawersPack.java b/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockDrawersPack.java index 1ea4e89..9786743 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockDrawersPack.java +++ b/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockDrawersPack.java @@ -3,6 +3,7 @@ package com.jaquadro.minecraft.storagedrawers.block.pack; import com.jaquadro.minecraft.storagedrawers.StorageDrawers; import com.jaquadro.minecraft.storagedrawers.api.pack.*; import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers; +import com.jaquadro.minecraft.storagedrawers.core.ModBlocks; import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -11,6 +12,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import java.util.List; @@ -56,6 +58,51 @@ public class BlockDrawersPack extends BlockDrawers implements IPackBlock } } + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon (int side, int meta) { + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; + if (!resolver.isValidMetaValue(meta)) + getSimilarBlock().getIcon(side, meta); + + return super.getIcon(side, meta); + } + + @Override + @SideOnly(Side.CLIENT) + protected IIcon getIcon (IBlockAccess blockAccess, int x, int y, int z, int side, int level) { + int meta = blockAccess.getBlockMetadata(x, y, z); + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; + if (!resolver.isValidMetaValue(meta)) + getSimilarBlock().getIcon(side, meta); + + return super.getIcon(blockAccess, x, y, z, side, level); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconTrim (int meta) { + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; + if (!resolver.isValidMetaValue(meta)) + getSimilarBlock().getIconTrim(meta); + + return super.getIconTrim(meta); + } + + private BlockDrawers getSimilarBlock () { + if (drawerCount == 1 && !halfDepth) + return ModBlocks.fullDrawers1; + if (drawerCount == 2 && !halfDepth) + return ModBlocks.fullDrawers2; + if (drawerCount == 4 && !halfDepth) + return ModBlocks.fullDrawers4; + if (drawerCount == 2 && halfDepth) + return ModBlocks.halfDrawers2; + if (drawerCount == 4 && halfDepth) + return ModBlocks.halfDrawers4; + return ModBlocks.fullDrawers1; + } + @Override @SideOnly(Side.CLIENT) public void registerBlockIcons (IIconRegister register) { diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockSortingDrawersPack.java b/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockSortingDrawersPack.java index f4879b3..7d8e8bd 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockSortingDrawersPack.java +++ b/src/com/jaquadro/minecraft/storagedrawers/block/pack/BlockSortingDrawersPack.java @@ -3,6 +3,7 @@ package com.jaquadro.minecraft.storagedrawers.block.pack; import com.jaquadro.minecraft.storagedrawers.StorageDrawers; import com.jaquadro.minecraft.storagedrawers.api.pack.*; import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs; +import com.jaquadro.minecraft.storagedrawers.integration.RefinedRelocation; import com.jaquadro.minecraft.storagedrawers.integration.refinedrelocation.BlockSortingDrawers; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -11,6 +12,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import java.util.List; @@ -56,6 +58,51 @@ public class BlockSortingDrawersPack extends BlockSortingDrawers implements IPac } } + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon (int side, int meta) { + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; + if (!resolver.isValidMetaValue(meta)) + getSimilarBlock().getIcon(side, meta); + + return super.getIcon(side, meta); + } + + @Override + @SideOnly(Side.CLIENT) + protected IIcon getIcon (IBlockAccess blockAccess, int x, int y, int z, int side, int level) { + int meta = blockAccess.getBlockMetadata(x, y, z); + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; + if (!resolver.isValidMetaValue(meta)) + getSimilarBlock().getIcon(side, meta); + + return super.getIcon(blockAccess, x, y, z, side, level); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconTrim (int meta) { + meta = (meta < 0 || meta >= iconSide.length) ? 0 : meta; + if (!resolver.isValidMetaValue(meta)) + getSimilarBlock().getIconTrim(meta); + + return super.getIconTrim(meta); + } + + private BlockSortingDrawers getSimilarBlock () { + if (drawerCount == 1 && !halfDepth) + return RefinedRelocation.fullDrawers1; + if (drawerCount == 2 && !halfDepth) + return RefinedRelocation.fullDrawers2; + if (drawerCount == 4 && !halfDepth) + return RefinedRelocation.fullDrawers4; + if (drawerCount == 2 && halfDepth) + return RefinedRelocation.halfDrawers2; + if (drawerCount == 4 && halfDepth) + return RefinedRelocation.halfDrawers4; + return RefinedRelocation.fullDrawers1; + } + @Override @SideOnly(Side.CLIENT) public void registerBlockIcons (IIconRegister register) {