Skip to content

Commit a80a7b6

Browse files
committedMay 9, 2016
Moved block coloring to new, non-client-side-only interface.
1 parent 5605297 commit a80a7b6

File tree

9 files changed

+67
-26
lines changed

9 files changed

+67
-26
lines changed
 

‎src/main/java/pl/asie/computronics/ClientProxy.java

+24-14
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package pl.asie.computronics;
22

33
import net.minecraft.block.Block;
4+
import net.minecraft.block.state.IBlockState;
45
import net.minecraft.client.Minecraft;
56
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
67
import net.minecraft.client.renderer.color.IBlockColor;
78
import net.minecraft.client.renderer.color.IItemColor;
89
import net.minecraft.item.Item;
10+
import net.minecraft.item.ItemStack;
911
import net.minecraft.util.math.BlockPos;
12+
import net.minecraft.world.IBlockAccess;
1013
import net.minecraftforge.client.model.ModelLoader;
1114
import net.minecraftforge.common.MinecraftForge;
1215
import net.minecraftforge.fml.common.Optional;
@@ -18,13 +21,14 @@
1821
import pl.asie.computronics.oc.client.UpgradeRenderer;
1922
import pl.asie.computronics.reference.Mods;
2023
import pl.asie.computronics.util.boom.SelfDestruct;
24+
import pl.asie.computronics.util.internal.IBlockWithColor;
25+
import pl.asie.computronics.util.internal.IItemWithColor;
2126
import pl.asie.computronics.util.sound.Audio;
2227
import pl.asie.lib.network.Packet;
2328

2429
import java.io.IOException;
2530
import java.util.ArrayList;
26-
import java.util.HashMap;
27-
import java.util.Map;
31+
import java.util.List;
2832

2933
public class ClientProxy extends CommonProxy {
3034

@@ -48,8 +52,8 @@ public void registerEntities() {
4852

4953
@Override
5054
public void registerItemModel(Item item, int meta, String name) {
51-
if(item instanceof IItemColor) {
52-
coloredItems.put(((IItemColor) item), item);
55+
if(item instanceof IItemWithColor) {
56+
coloredItems.add(item);
5357
}
5458
if(name.contains("#")) {
5559
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(name.split("#")[0], name.split("#")[1]));
@@ -60,14 +64,14 @@ public void registerItemModel(Item item, int meta, String name) {
6064

6165
@Override
6266
public void registerItemModel(Block block, int meta, String name) {
63-
if(block instanceof IBlockColor) {
64-
coloredBlocks.put(((IBlockColor) block), block);
67+
if(block instanceof IBlockWithColor) {
68+
coloredBlocks.add(block);
6569
}
6670
super.registerItemModel(block, meta, name);
6771
}
6872

69-
private final Map<IItemColor, Item> coloredItems = new HashMap<IItemColor, Item>();
70-
private final Map<IBlockColor, Block> coloredBlocks = new HashMap<IBlockColor, Block>();
73+
private final List<Item> coloredItems = new ArrayList<Item>();
74+
private final List<Block> coloredBlocks = new ArrayList<Block>();
7175

7276
@Override
7377
public void init() {
@@ -77,12 +81,18 @@ public void init() {
7781
}
7882

7983
private void registerColors() {
80-
for(Map.Entry<IItemColor, Item> entry : coloredItems.entrySet()) {
81-
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(entry.getKey(), entry.getValue());
82-
}
83-
for(Map.Entry<IBlockColor, Block> entry : coloredBlocks.entrySet()) {
84-
Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler(entry.getKey(), entry.getValue());
85-
}
84+
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(new IItemColor() {
85+
@Override
86+
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
87+
return stack.getItem() instanceof IItemWithColor ? ((IItemWithColor) stack.getItem()).getColorFromItemstack(stack, tintIndex) : 0xFFFFFFFF;
88+
}
89+
}, coloredItems.toArray(new Item[coloredItems.size()]));
90+
Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler(new IBlockColor() {
91+
@Override
92+
public int colorMultiplier(IBlockState state, IBlockAccess worldIn, BlockPos pos, int tintIndex) {
93+
return state.getBlock() instanceof IBlockWithColor ? ((IBlockWithColor) state.getBlock()).colorMultiplier(state, worldIn, pos, tintIndex) : 0xFFFFFFFF;
94+
}
95+
}, coloredBlocks.toArray(new Block[coloredBlocks.size()]));
8696
}
8797

8898
public void registerRenderers() {

‎src/main/java/pl/asie/computronics/block/BlockAudioCable.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import net.minecraft.block.properties.PropertyBool;
55
import net.minecraft.block.state.BlockStateContainer;
66
import net.minecraft.block.state.IBlockState;
7-
import net.minecraft.client.renderer.color.IBlockColor;
87
import net.minecraft.entity.player.EntityPlayer;
98
import net.minecraft.item.EnumDyeColor;
109
import net.minecraft.item.ItemStack;
@@ -21,13 +20,14 @@
2120
import pl.asie.computronics.Computronics;
2221
import pl.asie.computronics.oc.manual.IBlockWithDocumentation;
2322
import pl.asie.computronics.tile.TileAudioCable;
23+
import pl.asie.computronics.util.internal.IBlockWithColor;
2424
import pl.asie.lib.block.BlockBase;
2525
import pl.asie.lib.util.ColorUtils;
2626
import pl.asie.lib.util.internal.IColorable;
2727

2828
import static pl.asie.lib.util.WorldUtils.notifyBlockUpdate;
2929

30-
public class BlockAudioCable extends BlockBase implements IBlockWithDocumentation, IBlockColor {
30+
public class BlockAudioCable extends BlockBase implements IBlockWithDocumentation, IBlockWithColor {
3131

3232
private int connectionMask = 0x3f;
3333
private int ImmibisMicroblocks_TransformableBlockMarker;

‎src/main/java/pl/asie/computronics/block/BlockPeripheral.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import net.minecraft.block.Block;
44
import net.minecraft.block.material.Material;
55
import net.minecraft.block.state.IBlockState;
6-
import net.minecraft.client.renderer.color.IBlockColor;
76
import net.minecraft.entity.player.EntityPlayer;
87
import net.minecraft.item.EnumDyeColor;
98
import net.minecraft.item.ItemStack;
@@ -21,6 +20,7 @@
2120
import pl.asie.computronics.oc.manual.IBlockWithDocumentation;
2221
import pl.asie.computronics.reference.Mods;
2322
import pl.asie.computronics.tile.TileEntityPeripheralBase;
23+
import pl.asie.computronics.util.internal.IBlockWithColor;
2424
import pl.asie.lib.block.BlockBase;
2525
import pl.asie.lib.util.ColorUtils;
2626
import pl.asie.lib.util.ColorUtils.Color;
@@ -31,7 +31,7 @@
3131
@Optional.InterfaceList({
3232
@Optional.Interface(iface = "pl.asie.computronics.oc.block.IComputronicsEnvironmentBlock", modid = Mods.OpenComputers)
3333
})
34-
public abstract class BlockPeripheral extends BlockBase implements IComputronicsEnvironmentBlock, IBlockWithDocumentation, IBlockColor {
34+
public abstract class BlockPeripheral extends BlockBase implements IComputronicsEnvironmentBlock, IBlockWithDocumentation, IBlockWithColor {
3535

3636
public BlockPeripheral(String documentationName, Rotation rotation) {
3737
super(Material.IRON, Computronics.instance, rotation);

‎src/main/java/pl/asie/computronics/integration/tis3d/item/ItemModules.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import li.cil.tis3d.api.machine.Face;
55
import li.cil.tis3d.api.module.Module;
66
import li.cil.tis3d.api.module.ModuleProvider;
7-
import net.minecraft.client.renderer.color.IItemColor;
87
import net.minecraft.creativetab.CreativeTabs;
98
import net.minecraft.item.Item;
109
import net.minecraft.item.ItemStack;
@@ -19,14 +18,15 @@
1918
import pl.asie.computronics.item.ItemMultipleComputronics;
2019
import pl.asie.computronics.reference.Config;
2120
import pl.asie.computronics.reference.Mods;
21+
import pl.asie.computronics.util.internal.IItemWithColor;
2222

2323
import java.awt.*;
2424
import java.util.List;
2525

2626
/**
2727
* @author Vexatos
2828
*/
29-
public class ItemModules extends ItemMultipleComputronics implements ModuleProvider, IModuleWithDocumentation, IItemColor {
29+
public class ItemModules extends ItemMultipleComputronics implements ModuleProvider, IModuleWithDocumentation, IItemWithColor {
3030

3131
public ItemModules() {
3232
super(Mods.Computronics, new String[] {

‎src/main/java/pl/asie/computronics/item/ItemOpenComputers.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import li.cil.oc.api.network.Environment;
1616
import li.cil.oc.api.network.EnvironmentHost;
1717
import li.cil.oc.api.network.ManagedEnvironment;
18-
import net.minecraft.client.renderer.color.IItemColor;
1918
import net.minecraft.creativetab.CreativeTabs;
2019
import net.minecraft.entity.player.EntityPlayer;
2120
import net.minecraft.item.ItemStack;
@@ -41,6 +40,7 @@
4140
import pl.asie.computronics.reference.Config;
4241
import pl.asie.computronics.reference.Mods;
4342
import pl.asie.computronics.util.OCUtils;
43+
import pl.asie.computronics.util.internal.IItemWithColor;
4444

4545
import java.awt.*;
4646
import java.util.List;
@@ -52,7 +52,7 @@
5252
@Optional.Interface(iface = "li.cil.oc.api.driver.item.HostAware", modid = Mods.OpenComputers),
5353
@Optional.Interface(iface = "li.cil.oc.api.driver.item.UpgradeRenderer", modid = Mods.OpenComputers)
5454
})
55-
public class ItemOpenComputers extends ItemMultipleComputronics implements Item, EnvironmentProvider, HostAware, UpgradeRenderer, IItemWithDocumentation, IItemColor {
55+
public class ItemOpenComputers extends ItemMultipleComputronics implements Item, EnvironmentProvider, HostAware, UpgradeRenderer, IItemWithDocumentation, IItemWithColor {
5656

5757
public ItemOpenComputers() {
5858
super(Mods.Computronics, new String[] {

‎src/main/java/pl/asie/computronics/item/ItemTape.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import dan200.computercraft.api.filesystem.IMount;
44
import dan200.computercraft.api.media.IMedia;
55
import dan200.computercraft.api.media.IMediaProvider;
6-
import net.minecraft.client.renderer.color.IItemColor;
76
import net.minecraft.creativetab.CreativeTabs;
87
import net.minecraft.entity.Entity;
98
import net.minecraft.entity.player.EntityPlayer;
@@ -23,6 +22,7 @@
2322
import pl.asie.computronics.reference.Mods;
2423
import pl.asie.computronics.tape.TapeStorage;
2524
import pl.asie.computronics.util.StringUtil;
25+
import pl.asie.computronics.util.internal.IItemWithColor;
2626
import pl.asie.lib.util.color.ItemColorizer;
2727

2828
import java.util.List;
@@ -31,7 +31,7 @@
3131
@Optional.Interface(iface = "dan200.computercraft.api.media.IMediaProvider", modid = Mods.ComputerCraft),
3232
@Optional.Interface(iface = "dan200.computercraft.api.media.IMedia", modid = Mods.ComputerCraft)
3333
})
34-
public class ItemTape extends Item implements IItemTapeStorage, IMedia, IMediaProvider, IItemWithDocumentation, IItemColor {
34+
public class ItemTape extends Item implements IItemTapeStorage, IMedia, IMediaProvider, IItemWithDocumentation, IItemWithColor {
3535

3636
public static final int L_SECOND = 4096;
3737
public static final int L_MINUTE = 4096 * 60;

‎src/main/java/pl/asie/computronics/item/block/ComputronicsItemBlock.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package pl.asie.computronics.item.block;
22

33
import net.minecraft.block.Block;
4-
import net.minecraft.client.renderer.color.IItemColor;
54
import net.minecraft.entity.player.EntityPlayer;
65
import net.minecraft.item.ItemBlock;
76
import net.minecraft.item.ItemStack;
87
import net.minecraftforge.fml.relauncher.Side;
98
import net.minecraftforge.fml.relauncher.SideOnly;
9+
import pl.asie.computronics.util.internal.IItemWithColor;
1010

1111
import java.util.List;
1212

13-
public class ComputronicsItemBlock extends ItemBlock implements IItemColor {
13+
public class ComputronicsItemBlock extends ItemBlock implements IItemWithColor {
1414

1515
private IBlockWithSpecialText specialBlock;
1616
private IBlockWithDifferentColors coloredBlock;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package pl.asie.computronics.util.internal;
2+
3+
import net.minecraft.block.state.IBlockState;
4+
import net.minecraft.util.math.BlockPos;
5+
import net.minecraft.world.IBlockAccess;
6+
import net.minecraftforge.fml.relauncher.Side;
7+
import net.minecraftforge.fml.relauncher.SideOnly;
8+
9+
/**
10+
* @author Vexatos
11+
*/
12+
public interface IBlockWithColor {
13+
14+
@SideOnly(Side.CLIENT)
15+
int colorMultiplier(IBlockState state, IBlockAccess worldIn, BlockPos pos, int tintIndex);
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package pl.asie.computronics.util.internal;
2+
3+
import net.minecraft.item.ItemStack;
4+
import net.minecraftforge.fml.relauncher.Side;
5+
import net.minecraftforge.fml.relauncher.SideOnly;
6+
7+
/**
8+
* @author Vexatos
9+
*/
10+
public interface IItemWithColor {
11+
12+
@SideOnly(Side.CLIENT)
13+
int getColorFromItemstack(ItemStack stack, int tintIndex);
14+
15+
}

0 commit comments

Comments
 (0)
Please sign in to comment.