mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-28 15:38:00 +01:00
54 lines
1.7 KiB
Java
54 lines
1.7 KiB
Java
|
package com.minelittlepony.unicopia.block;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
|
||
|
import org.jetbrains.annotations.Nullable;
|
||
|
|
||
|
import net.minecraft.block.Block;
|
||
|
import net.minecraft.block.BlockState;
|
||
|
import net.minecraft.util.math.BlockPos;
|
||
|
import net.minecraft.util.math.MathHelper;
|
||
|
import net.minecraft.world.BlockRenderView;
|
||
|
|
||
|
public interface TintedBlock {
|
||
|
List<Block> REGISTRY = new ArrayList<>();
|
||
|
|
||
|
int MAX_BIT_SHIFT = 8 * 3;
|
||
|
int WHITE = 0xFFFFFF;
|
||
|
|
||
|
int getTint(BlockState state, @Nullable BlockRenderView world, @Nullable BlockPos pos, int foliageColor);
|
||
|
|
||
|
/**
|
||
|
* Rotates a color's components by a given number of bytes.
|
||
|
*/
|
||
|
static int rotate(int color, int bitShift) {
|
||
|
bitShift = MathHelper.clamp(bitShift, -MAX_BIT_SHIFT, MAX_BIT_SHIFT);
|
||
|
return WHITE & (
|
||
|
(color << bitShift)
|
||
|
| ((color >> (MAX_BIT_SHIFT - bitShift)) & ~(WHITE << bitShift))
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Blends two colors together using the overlay color's opacity value
|
||
|
*/
|
||
|
static int blend(int color, int overlay) {
|
||
|
return blend(color, overlay & WHITE, ((overlay >> MAX_BIT_SHIFT) & 0xFF) / 255F);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Blends two colors an alpha ratio to determine the opacity of the overlay.
|
||
|
*/
|
||
|
static int blend(int color, int overlay, float blend) {
|
||
|
return blendComponent(color & 0xFF, overlay & 0xFF, blend)
|
||
|
| (blendComponent((color >> 8) & 0xFF, (overlay >> 8) & 0xFF, blend) << 8)
|
||
|
| (blendComponent((color >> 16) & 0xFF, (overlay >> 16) & 0xFF, blend) << 16);
|
||
|
|
||
|
}
|
||
|
|
||
|
private static int blendComponent(int color, int overlay, float blend) {
|
||
|
return (int)((color * (1F - blend)) + (overlay * blend));
|
||
|
}
|
||
|
}
|