zh_cn:tutorial:fluids
                Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| zh_cn:tutorial:fluids [2023/05/04 11:25] – [进行] 更新并使用 tutorial 命名空间 solidblock | zh_cn:tutorial:fluids [2023/05/04 11:31] (current) – [渲染设置] solidblock | ||
|---|---|---|---|
| Line 166: | Line 166: | ||
| ==== 制作一个流体方块 ==== | ==== 制作一个流体方块 ==== | ||
| - | 接下来,我们需要在世界中创建表示酸的方块。'' | + | 接下来,我们需要在世界中创建表示酸的方块。'' | 
| - | <code java [enable_line_numbers=" | + | <yarncode  | 
| - | // ... | + | public static  | 
| - | + | ||
| - | public static  | + | |
| - | + | ||
| - | // ... | + | |
| @Override | @Override | ||
| - | public void onInitialize() | + | public void onInitialize() { | 
| - | { | + | 	ACID = class_2378.method_10230(class_7923.field_41175, new class_2960(" | 
| - | // ... | + | |
| - | + | ||
| - | 	ACID = Registry.register(Registry.BLOCK, new Identifier(MOD_ID, " | + | |
| // ... | // ... | ||
| - | } | + | } | 
| + | </ | ||
| - | // ... | + | 既然我们有了这些静态对象,我们回到 '' | 
| - | </ | + | <yarncode  | 
| - | + | public abstract class AcidFluid extends TutorialFluid { | |
| - | 既然我们有了这些静态对象,我们回到'' | + | |
| - | <code java [enable_line_numbers=" | + | |
| - | public abstract class AcidFluid extends TutorialFluid | + | |
| - | { | + | |
| @Override | @Override | ||
| - | 	public  | + | 	public  | 
| - | { | + | |
| 		return TutorialMod.STILL_ACID; | 		return TutorialMod.STILL_ACID; | ||
| } | } | ||
| - | + | ||
| @Override | @Override | ||
| - | 	public  | + | 	public  | 
| - | { | + | |
| 		return TutorialMod.FLOWING_ACID; | 		return TutorialMod.FLOWING_ACID; | ||
| } | } | ||
| - | + | ||
| @Override | @Override | ||
| - | 	public  | + | 	public  | 
| - | { | + | |
| 		return TutorialMod.ACID_BUCKET; | 		return TutorialMod.ACID_BUCKET; | ||
| } | } | ||
| - | + | ||
| @Override | @Override | ||
| - | 	protected  | + | 	protected  | 
| - | { | + | 		// method_15741  | 
| - | 		// method_15741  | + | 		return TutorialMod.ACID.method_9564().method_11657(class_2741.field_12538, method_15741(fluidState)); | 
| - | 		return TutorialMod.ACID.getDefaultState().with(Properties.LEVEL_15, method_15741(fluidState)); | + | |
| } | } | ||
| - | + | ||
| - | // ... | + | public static class Flowing extends AcidFluid { | 
| - | } | + | @Override | 
| - | </code> | + | 		protected void method_15775(class_2689.class_2690< | 
| + | 			super.method_15775(builder); | ||
| + | 			builder.method_11667(field_15900); | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public int method_15779(class_3610 fluidState) { | ||
| + | 			return fluidState.method_11654(field_15900); | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public boolean method_15793(class_3610 fluidState) { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public static class Still extends AcidFluid { | ||
| + | @Override | ||
| + | public int method_15779(class_3610 fluidState) { | ||
| + | return 8; | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public boolean method_15793(class_3610 fluidState) { | ||
| + | return true; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </yarncode> | ||
| ===== 渲染设置 ===== | ===== 渲染设置 ===== | ||
| - | 为了让流体拥有纹理,或者与一个颜色绑定,你需要为其注册一个'' | + | 为了让流体拥有纹理,或者与一个颜色绑定,你需要为其注册一个'' | 
| + | |||
| + | < | ||
| + | @Environment(EnvType.CLIENT) | ||
| + | public class TutorialModClient implements ClientModInitializer { | ||
| - | <code java [enable_line_numbers=" | ||
| - | public class TutorialModClient implements ClientModInitializer | ||
| - | { | ||
| - | // ... | ||
| - | |||
| @Override | @Override | ||
| - | public void onInitializeClient() | + | public void onInitializeClient() { | 
| - | { | + | 		FluidRenderHandlerRegistry.INSTANCE.register(TutorialMod.STILL_ACID, | 
| - | // ... | + | 				new class_2960(" | 
| - | + | 				new class_2960("minecraft: | |
| - | 		setupFluidRendering(TutorialMod.STILL_ACID, | + | 0x4CC248 | 
| - | 		BlockRenderLayerMap.INSTANCE.putFluids(RenderLayer.getTranslucent(), TutorialMod.STILL_ACID, | + | )); | 
| - | + | ||
| + | 		BlockRenderLayerMap.INSTANCE.putFluids(class_1921.method_23583(), TutorialMod.STILL_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. | ||
| + | 		// | ||
| + | 		//    registry.register(new Identifier(" | ||
| + | 		//    registry.register(new Identifier(" | ||
| + | //}); | ||
| // ... | // ... | ||
| } | } | ||
| - | |||
| - | // ... | ||
| - | |||
| - | 	public static void setupFluidRendering(final Fluid still, final Fluid flowing, final Identifier textureFluidId, | ||
| - | { | ||
| - | 		final Identifier stillSpriteId = new Identifier(textureFluidId.getNamespace(), | ||
| - | 		final Identifier flowingSpriteId = new Identifier(textureFluidId.getNamespace(), | ||
| - | |||
| - | 		// If they' | ||
| - | 		ClientSpriteRegistryCallback.event(SpriteAtlasTexture.BLOCK_ATLAS_TEX).register((atlasTexture, | ||
| - | { | ||
| - | 			registry.register(stillSpriteId); | ||
| - | 			registry.register(flowingSpriteId); | ||
| - | }); | ||
| - | |||
| - | 		final Identifier fluidId = Registry.FLUID.getId(still); | ||
| - | 		final Identifier listenerId = new Identifier(fluidId.getNamespace(), | ||
| - | |||
| - | 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< | ||
| - | 				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, | ||
| - | 		FluidRenderHandlerRegistry.INSTANCE.register(flowing, | ||
| - | } | ||
| - | |||
| - | // ... | ||
| } | } | ||
| - | </code> | + | </yarncode> | 
| 如果你需要使用你自己的流体纹理,你可以参考原版资源包(('' | 如果你需要使用你自己的流体纹理,你可以参考原版资源包(('' | ||
zh_cn/tutorial/fluids.1683199511.txt.gz · Last modified: 2023/05/04 11:25 by solidblock