User Tools

Site Tools


zh_cn:tutorial:fluids

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
zh_cn:tutorial:fluids [2023/05/04 11:27] – [制作一个流体方块] solidblockzh_cn:tutorial:fluids [2023/05/04 11:31] (current) – [渲染设置] solidblock
Line 234: Line 234:
 </yarncode> </yarncode>
 ===== 渲染设置 ===== ===== 渲染设置 =====
-为了让流体拥有纹理,或者与一个颜色绑定,你需要为其注册一个''FluidRenderHandler''。这里,我们重用水的纹理,并仅仅改变用于其上的颜色。为确保纹理渲染为半透明的,你可以使用Fabric的''BlockRenderLayerMap''+为了让流体拥有纹理,或者与一个颜色绑定,你需要为其注册一个''FluidRenderHandler''。这里,我们重用水的纹理,并仅仅改变用于其上的颜色。为确保纹理渲染为半透明的,你可以使用 Fabric 的 ''BlockRenderLayerMap''(参见 [[blockappearance]]) 
 + 
 +<yarncode java [enable_line_numbers="true"]> 
 +@Environment(EnvType.CLIENT) 
 +public class TutorialModClient implements ClientModInitializer {
  
-<code java [enable_line_numbers="true"]> 
-public class TutorialModClient implements ClientModInitializer 
-{ 
- // ... 
-  
  @Override  @Override
- public void onInitializeClient() + public void onInitializeClient() { 
- {+ FluidRenderHandlerRegistry.INSTANCE.register(TutorialMod.STILL_ACID, TutorialMod.FLOWING_ACID, new SimpleFluidRenderHandler( 
 + new class_2960("minecraft:block/water_still"), 
 + new class_2960("minecraft:block/water_flow"), 
 + 0x4CC248 
 + )); 
 + 
 + BlockRenderLayerMap.INSTANCE.putFluids(class_1921.method_23583(), TutorialMod.STILL_ACID, TutorialMod.FLOWING_ACID); 
 + 
 + //if you want to use custom textures they needs to be registered. 
 + //In this example this is unnecessary because the vanilla water textures are already registered. 
 + //To register your custom textures use this method. 
 + //ClientSpriteRegistryCallback.event(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE).register((atlasTexture, registry) -> { 
 + //    registry.register(new Identifier("tutorial:block/custom_fluid_still")); 
 + //    registry.register(new Identifier("tutorial:block/custom_fluid_flowing")); 
 + //}); 
  // ...  // ...
-  
- setupFluidRendering(TutorialMod.STILL_ACID, TutorialMod.FLOWING_ACID, new Identifier("minecraft", "water"), 0x4CC248); 
- BlockRenderLayerMap.INSTANCE.putFluids(RenderLayer.getTranslucent(), TutorialMod.STILL_ACID, TutorialMod.FLOWING_ACID); 
-  
- // ... 
- } 
-  
- // ... 
-  
- public static void setupFluidRendering(final Fluid still, final Fluid flowing, final Identifier textureFluidId, final int color) 
- { 
- final Identifier stillSpriteId = new Identifier(textureFluidId.getNamespace(), "block/" + textureFluidId.getPath() + "_still"); 
- final Identifier flowingSpriteId = new Identifier(textureFluidId.getNamespace(), "block/" + textureFluidId.getPath() + "_flow"); 
-  
- // If they're not already present, add the sprites to the block atlas 
- ClientSpriteRegistryCallback.event(SpriteAtlasTexture.BLOCK_ATLAS_TEX).register((atlasTexture, registry) -> 
- { 
- registry.register(stillSpriteId); 
- registry.register(flowingSpriteId); 
- }); 
-  
- final Identifier fluidId = Registry.FLUID.getId(still); 
- final Identifier listenerId = new Identifier(fluidId.getNamespace(), fluidId.getPath() + "_reload_listener"); 
-  
- final Sprite[] fluidSprites = { null, null }; 
-  
- ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() 
- { 
- @Override 
- public Identifier getFabricId() 
- { 
- return listenerId; 
- } 
-  
- /** 
- * Get the sprites from the block atlas when resources are reloaded 
- */ 
- @Override 
- public void apply(ResourceManager resourceManager) 
- { 
- final Function<Identifier, Sprite> atlas = MinecraftClient.getInstance().getSpriteAtlas(SpriteAtlasTexture.BLOCK_ATLAS_TEX); 
- fluidSprites[0] = atlas.apply(stillSpriteId); 
- fluidSprites[1] = atlas.apply(flowingSpriteId); 
- } 
- }); 
-  
- // The FluidRenderer gets the sprites and color from a FluidRenderHandler during rendering 
- final FluidRenderHandler renderHandler = new FluidRenderHandler() 
- { 
- @Override 
- public Sprite[] getFluidSprites(BlockRenderView view, BlockPos pos, FluidState state) 
- { 
- return fluidSprites; 
- } 
-  
- @Override 
- public int getFluidColor(BlockRenderView view, BlockPos pos, FluidState state) 
- { 
- return color; 
- } 
- }; 
-  
- FluidRenderHandlerRegistry.INSTANCE.register(still, renderHandler); 
- FluidRenderHandlerRegistry.INSTANCE.register(flowing, renderHandler); 
  }  }
-  
- // ... 
 } }
-</code>+</yarncode>
  
 如果你需要使用你自己的流体纹理,你可以参考原版资源包((''assets/minecraft/blockstates/water.json''\\ ''assets/minecraft/models/block/water.json''\\ ''assets/minecraft/textures/block/water_still.png''\\ ''assets/minecraft/textures/block/water_still.png.mcmeta''\\ ''assets/minecraft/textures/block/water_flow.png''\\ ''assets/minecraft/textures/block/water_flow.png.mcmeta''))作为一个模板。 如果你需要使用你自己的流体纹理,你可以参考原版资源包((''assets/minecraft/blockstates/water.json''\\ ''assets/minecraft/models/block/water.json''\\ ''assets/minecraft/textures/block/water_still.png''\\ ''assets/minecraft/textures/block/water_still.png.mcmeta''\\ ''assets/minecraft/textures/block/water_flow.png''\\ ''assets/minecraft/textures/block/water_flow.png.mcmeta''))作为一个模板。
zh_cn/tutorial/fluids.1683199662.txt.gz · Last modified: 2023/05/04 11:27 by solidblock