package com.thebrokenrail.sorcerycraft.client; import com.thebrokenrail.sorcerycraft.ModConfig; import com.thebrokenrail.sorcerycraft.SorceryCraft; import com.thebrokenrail.sorcerycraft.client.entity.SpellEntityRenderer; import com.thebrokenrail.sorcerycraft.client.gui.CastingTableScreen; import com.thebrokenrail.sorcerycraft.gui.CastingTableScreenHandler; import com.thebrokenrail.sorcerycraft.packet.UpdateKnownSpellsS2CPacket; import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; import me.sargunvohra.mcmods.autoconfig1u.gui.registry.GuiRegistry; import me.sargunvohra.mcmods.autoconfig1u.util.Utils; import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; 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.screen.ScreenProviderRegistry; import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl; import net.minecraft.client.MinecraftClient; import net.minecraft.text.LiteralText; import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import java.util.Collections; @SuppressWarnings("unused") @Environment(EnvType.CLIENT) public class SorceryCraftClient implements ClientModInitializer { @Override public void onInitializeClient() { GuiRegistry guiRegistry = AutoConfig.getGuiRegistry(ModConfig.class); guiRegistry.registerAnnotationProvider((s, field, config, defaults, guiRegistryAccess) -> { ModConfig.UsePercentage bounds = field.getAnnotation(ModConfig.UsePercentage.class); return Collections.singletonList(ConfigEntryBuilder.create().startIntSlider(new LiteralText(s), MathHelper.ceil(Utils.getUnsafely(field, config, 0.0) * 100), MathHelper.ceil(bounds.min() * 100), MathHelper.ceil(bounds.max() * 100)).setDefaultValue(() -> MathHelper.ceil((double) Utils.getUnsafely(field, defaults) * 100)).setSaveConsumer((newValue) -> Utils.setUnsafely(field, config, newValue / 100d)).setTextGetter(integer -> new LiteralText(String.format("%d%%", integer))).build()); }, field -> field.getType() == Double.TYPE || field.getType() == Double.class, ModConfig.UsePercentage.class); EntityRendererRegistry.INSTANCE.register(SorceryCraft.SPELL_ENTITY, (entityRenderDispatcher, context) -> new SpellEntityRenderer(entityRenderDispatcher)); ScreenProviderRegistry.INSTANCE.registerFactory(new Identifier(SorceryCraft.NAMESPACE, "casting_table"), (container) -> { assert MinecraftClient.getInstance().player != null; return new CastingTableScreen(container, MinecraftClient.getInstance().player.inventory, new TranslatableText("block." + SorceryCraft.NAMESPACE + ".casting_table")); }); ClientSidePacketRegistryImpl.INSTANCE.register(new Identifier(SorceryCraft.NAMESPACE, "update_known_spells"), UpdateKnownSpellsS2CPacket::handle); } }