11package mekanism .client ;
22
3+ import com .mojang .blaze3d .shaders .FogShape ;
4+ import com .mojang .blaze3d .systems .RenderSystem ;
35import java .lang .ref .WeakReference ;
46import mekanism .api .providers .IBlockProvider ;
57import mekanism .api .providers .IItemProvider ;
68import mekanism .api .text .EnumColor ;
79import mekanism .client .gui .machine .GuiAdvancedElectricMachine ;
810import mekanism .client .gui .machine .GuiElectricMachine ;
911import mekanism .client .render .MekanismRenderer ;
12+ import mekanism .client .render .RenderPropertiesProvider ;
13+ import mekanism .common .block .BlockMekanism ;
1014import mekanism .common .block .interfaces .IColoredBlock ;
1115import mekanism .common .inventory .container .tile .MekanismTileContainer ;
1216import mekanism .common .item .interfaces .IColoredItem ;
17+ import mekanism .common .registration .impl .BlockDeferredRegister ;
1318import mekanism .common .registration .impl .ContainerTypeRegistryObject ;
1419import mekanism .common .registration .impl .FluidDeferredRegister ;
20+ import mekanism .common .registration .impl .FluidDeferredRegister .MekanismFluidType ;
1521import mekanism .common .registration .impl .TileEntityTypeRegistryObject ;
1622import mekanism .common .registries .MekanismDataComponents ;
1723import mekanism .common .tile .prefab .TileEntityAdvancedElectricMachine ;
1824import mekanism .common .tile .prefab .TileEntityElectricMachine ;
25+ import net .minecraft .client .Camera ;
1926import net .minecraft .client .KeyMapping ;
27+ import net .minecraft .client .Minecraft ;
2028import net .minecraft .client .color .block .BlockColor ;
2129import net .minecraft .client .color .item .ItemColor ;
2230import net .minecraft .client .gui .screens .MenuScreens .ScreenConstructor ;
2331import net .minecraft .client .gui .screens .Screen ;
2432import net .minecraft .client .gui .screens .inventory .MenuAccess ;
33+ import net .minecraft .client .multiplayer .ClientLevel ;
34+ import net .minecraft .client .renderer .FogRenderer ;
2535import net .minecraft .client .renderer .blockentity .BlockEntityRenderer ;
2636import net .minecraft .client .renderer .blockentity .BlockEntityRendererProvider ;
2737import net .minecraft .client .renderer .item .ItemProperties ;
4050import net .neoforged .neoforge .client .event .RegisterColorHandlersEvent ;
4151import net .neoforged .neoforge .client .event .RegisterKeyMappingsEvent ;
4252import net .neoforged .neoforge .client .event .RegisterMenuScreensEvent ;
53+ import net .neoforged .neoforge .client .extensions .common .IClientFluidTypeExtensions ;
54+ import net .neoforged .neoforge .client .extensions .common .IClientItemExtensions ;
55+ import net .neoforged .neoforge .client .extensions .common .RegisterClientExtensionsEvent ;
4356import net .neoforged .neoforge .client .model .DynamicFluidContainerModel ;
57+ import net .neoforged .neoforge .fluids .FluidType ;
58+ import net .neoforged .neoforge .registries .DeferredHolder ;
4459import org .jetbrains .annotations .NotNull ;
4560import org .jetbrains .annotations .Nullable ;
61+ import org .joml .Vector3f ;
4662
4763public class ClientRegistrationUtil {
4864
@@ -178,4 +194,76 @@ public static void registerIColoredBlockHandler(RegisterColorHandlersEvent event
178194 public static void registerIColoredItemHandler (RegisterColorHandlersEvent .Item event , IItemProvider ... items ) {
179195 registerItemColorHandler (event , COLORED_ITEM_COLOR , items );
180196 }
197+
198+ public static void registerItemExtensions (RegisterClientExtensionsEvent event , IClientItemExtensions extension , IItemProvider ... items ) {
199+ for (IItemProvider item : items ) {
200+ event .registerItem (extension , item .asItem ());
201+ }
202+ }
203+
204+ public static void registerBlockExtensions (RegisterClientExtensionsEvent event , BlockDeferredRegister allBlocks ) {
205+ for (DeferredHolder <Block , ? extends Block > primaryEntry : allBlocks .getPrimaryEntries ()) {
206+ if (primaryEntry .get () instanceof BlockMekanism ) {
207+ event .registerBlock (RenderPropertiesProvider .PARTICLE_HANDLER , primaryEntry .get ());
208+ }
209+ }
210+ }
211+
212+ public static void registerFluidExtensions (RegisterClientExtensionsEvent event , FluidDeferredRegister allFluids ) {
213+ for (DeferredHolder <FluidType , ? extends FluidType > fluidTypeEntry : allFluids .getFluidTypeEntries ()) {
214+ if (fluidTypeEntry .get () instanceof MekanismFluidType fluidType ) {
215+ event .registerFluidType (new IClientFluidTypeExtensions () {
216+ @ NotNull
217+ @ Override
218+ public ResourceLocation getStillTexture () {
219+ return fluidType .stillTexture ;
220+ }
221+
222+ @ NotNull
223+ @ Override
224+ public ResourceLocation getFlowingTexture () {
225+ return fluidType .flowingTexture ;
226+ }
227+
228+ @ Override
229+ public ResourceLocation getOverlayTexture () {
230+ return fluidType .overlayTexture ;
231+ }
232+
233+ @ Nullable
234+ @ Override
235+ public ResourceLocation getRenderOverlayTexture (Minecraft mc ) {
236+ return fluidType .renderOverlayTexture ;
237+ }
238+
239+ @ NotNull
240+ @ Override
241+ public Vector3f modifyFogColor (@ NotNull Camera camera , float partialTick , @ NotNull ClientLevel level , int renderDistance , float darkenWorldAmount ,
242+ @ NotNull Vector3f fluidFogColor ) {
243+ return new Vector3f (MekanismRenderer .getRed (getTintColor ()), MekanismRenderer .getGreen (getTintColor ()), MekanismRenderer .getBlue (getTintColor ()));
244+ }
245+
246+ @ Override
247+ public void modifyFogRender (@ NotNull Camera camera , @ NotNull FogRenderer .FogMode mode , float renderDistance , float partialTick , float nearDistance ,
248+ float farDistance , @ NotNull FogShape shape ) {
249+ //Copy of logic for water except always treating it as if it was a player who has no water vision
250+ // and does not take the biome's closer water fog into account
251+ farDistance = 24F ;
252+ if (farDistance > renderDistance ) {
253+ farDistance = renderDistance ;
254+ shape = FogShape .CYLINDER ;
255+ }
256+ RenderSystem .setShaderFogStart (-8 );
257+ RenderSystem .setShaderFogEnd (farDistance );
258+ RenderSystem .setShaderFogShape (shape );
259+ }
260+
261+ @ Override
262+ public int getTintColor () {
263+ return fluidType .color ;
264+ }
265+ }, fluidType );
266+ }
267+ }
268+ }
181269}
0 commit comments