76 lines
2.4 KiB
Java
76 lines
2.4 KiB
Java
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<ItemStack> 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)
|
|
};
|
|
}
|
|
}
|