89 lines
3.1 KiB
Java
89 lines
3.1 KiB
Java
package com.thebrokenrail.reliccraft.client;
|
|
|
|
import com.thebrokenrail.reliccraft.RelicCraft;
|
|
import com.thebrokenrail.reliccraft.client.entity.RelicEntityRenderer;
|
|
import com.thebrokenrail.reliccraft.item.DragonEggHolderBlockItem;
|
|
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() {
|
|
DragonEggHolderBlockItem.initClient();
|
|
|
|
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);
|
|
}
|
|
}
|