package ru.betterend.blocks; import java.util.Collections; import java.util.List; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.block.AbstractGlassBlock; import net.minecraft.block.BlockState; import net.minecraft.block.Material; import net.minecraft.client.color.block.BlockColorProvider; import net.minecraft.client.color.item.ItemColorProvider; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3i; import ru.betterend.client.ERenderLayer; import ru.betterend.client.IRenderTypeable; import ru.betterend.util.IColorProvider; import ru.betterend.util.MHelper; public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTypeable, IColorProvider { private static final Vec3i[] COLORS; public AuroraCrystalBlock() { super(FabricBlockSettings.of(Material.GLASS).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.GLASS).lightLevel(15).nonOpaque()); } @Override public BlockColorProvider getProvider() { return (state, world, pos, tintIndex) -> { long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ(); double delta = i * 0.1; int index = MHelper.floor(delta); int index2 = (index + 1) & 3; delta -= index; index &= 3; Vec3i color1 = COLORS[index]; Vec3i color2 = COLORS[index2]; int r = MHelper.floor(MathHelper.lerp(delta, color1.getX(), color2.getX())); int g = MHelper.floor(MathHelper.lerp(delta, color1.getY(), color2.getY())); int b = MHelper.floor(MathHelper.lerp(delta, color1.getZ(), color2.getZ())); return MHelper.color(r, g, b); }; } @Override public ItemColorProvider getItemProvider() { return (stack, tintIndex) -> { return MHelper.color(COLORS[3].getX(), COLORS[3].getY(), COLORS[3].getZ()); }; } @Override public ERenderLayer getRenderLayer() { return ERenderLayer.TRANSLUCENT; } @Override public List getDroppedStacks(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } static { COLORS = new Vec3i[] { new Vec3i(247, 77, 161), new Vec3i(120, 184, 255), new Vec3i(120, 255, 168), new Vec3i(243, 58, 255) }; } }