package com.thebrokenrail.reliccraft.client; import com.thebrokenrail.reliccraft.RelicCraft; import com.thebrokenrail.reliccraft.client.entity.RelicEntityRenderer; import com.thebrokenrail.reliccraft.item.RelicItem; import com.thebrokenrail.reliccraft.packet.UpdateTimeDilationS2CPacket; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.minecraft.util.Util; @SuppressWarnings("unused") @Environment(EnvType.CLIENT) public class RelicCraftClient implements ClientModInitializer { public static int generateColor(float h, float s, float v) { float r, g, b, i, f, p, q, t; i = (float) Math.floor(h * 6); f = h * 6 - i; p = v * (1 - s); q = v * (1 - f * s); t = v * (1 - (1 - f) * s); switch ((int) (i % 6)) { case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; default: throw new UnsupportedOperationException(); } return rgbToDecimal(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)); } private static int rgbToDecimal(int r, int g, int b) { return (r << 16) | (g << 8) | b; } private static int getStackColor(ItemStack stack) { if (stack.getName().asString().equals("jeb_")) { return generateColor(Util.getMeasuringTimeMs() / 3600f, 1f, 1f); } else { return RelicItem.getData(stack).color; } } @Override public void onInitializeClient() { ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex > 0 ? -1 : getStackColor(stack), RelicCraft.ORB_ITEM); ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex > 0 ? -1 : getStackColor(stack), RelicCraft.STAFF_ITEM); EntityRendererRegistry.INSTANCE.register(RelicCraft.RELIC_ENTITY, (entityRenderDispatcher, context) -> new RelicEntityRenderer(entityRenderDispatcher)); ClientSidePacketRegistryImpl.INSTANCE.register(new Identifier(RelicCraft.NAMESPACE, "update_time_dilation"), UpdateTimeDilationS2CPacket::handle); } }