User Tools

Site Tools


zh_cn:tutorial:propertydelegates

Differences

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

Link to this comparison view

zh_cn:tutorial:propertydelegates [2023/02/03 02:47] – 创建了zh_cn:tutorial:propertydelegates页面 hanatomizuzh_cn:tutorial:propertydelegates [2023/02/07 09:21] (current) solidblock
Line 1: Line 1:
 =====使用 PropertyDelegates 同步整形数据===== =====使用 PropertyDelegates 同步整形数据=====
  
-**PropertyDelegates**:''PropertyDelegates'' 是一种可以包含多个可以被读写的整型值的容器。+**PropertyDelegate**:''PropertyDelegate'' 是一种包含多个可读写的整型值的容器。
  
-在这章教程中,我们将会同步客户端和服务器之间的整型值,比如熔炉熔炼进度。+在这章教程中,我们将会同步客户端和服务器之间的整型值,比如原版熔炉熔炼进度。
  
-为了理解这篇教程,你需要先阅读 [[zh_cn:tutorial:screenhandler|ScreenHandler]] 教程,这里不会再次显示已经在那里被提到的代码。+理解这篇教程,你需要先阅读 [[zh_cn:tutorial:screenhandler|ScreenHandler]] 教程,其中提到的方法代码本页不再提及
  
-为了减小复杂性,这章教程使用 [[zh_cn:tutorial:extendedscreenhandler|扩展的 ScreenHandler]]。+为了减小复杂性,这章教程不再使用 [[zh_cn:tutorial:extendedscreenhandler|ExtendedScreenHandler]]。
  
-=====BlockEntity=====+===== BlockEntity =====
  
 由于 Block 类完全不需要更改,所以我们把它放在这里。 由于 Block 类完全不需要更改,所以我们把它放在这里。
  
-我们的 ''BlockEntity'' 现在实现了 ''Tickable'',这将提供 ''tick()'' 方法,每个 tick 都会调用该方法我们用来增加想要同步的整+我们的 ''BlockEntity'' 现在实现了 ''Tickable'',这将提供 ''tick()'' 方法,每都会调用该方法我们用这个方法来增加想要同步的整数值
  
 <code java [enable_line_numbers=true] BoxBlockEnity.java> <code java [enable_line_numbers=true] BoxBlockEnity.java>
Line 19: Line 19:
 public class BoxBlockEntity extends BlockEntity implements NamedScreenHandlerFactory, ImplementedInventory, Tickable { public class BoxBlockEntity extends BlockEntity implements NamedScreenHandlerFactory, ImplementedInventory, Tickable {
     private final DefaultedList<ItemStack> inventory = DefaultedList.ofSize(9, ItemStack.EMPTY);     private final DefaultedList<ItemStack> inventory = DefaultedList.ofSize(9, ItemStack.EMPTY);
-    // 这是我们希望同步的整型,每 tick 会增加 1。+    // 这是我们希望同步的整型,每会增加 1。
     private int syncedInt;     private int syncedInt;
    
-    // PropertyDelegate 是一个接口(Ingterface),我们将在这里使用内联(Inline)实现。+    // PropertyDelegate 是一个接口,我们将在这里使用内联实现。
     // 它通常可以包含多个整型作为索引标志的数据,但是在本例中只有一个整型     // 它通常可以包含多个整型作为索引标志的数据,但是在本例中只有一个整型
         private final PropertyDelegate propertyDelegate = new PropertyDelegate() {         private final PropertyDelegate propertyDelegate = new PropertyDelegate() {
Line 47: Line 47:
    
    
-    // 返回 ImplementedInventory 接口(Interface)+    // 来自 ImplementedInventory
          
     @Override     @Override
Line 55: Line 55:
     }     }
    
-    //这些方法来自 NamedScreenHandlerFactory 接口(Interface)+    //这些方法来自 NamedScreenHandlerFactory 接口
    
     @Override     @Override
Line 62: Line 62:
         // 只有服务器在开始时拥有物品栏,这将会在 ScreenHandler 中同步到客户端         // 只有服务器在开始时拥有物品栏,这将会在 ScreenHandler 中同步到客户端
    
-        // 类似于物品栏:服务器获得 PropertyDelegate 并将其直接给 screen handler 的服务器实例+        // 类似于物品栏服务器获得 PropertyDelegate 并将其直接给 screen handler 的服务器实例
         return new BoxScreenHandler(syncId, playerInventory, this,propertyDelegate);         return new BoxScreenHandler(syncId, playerInventory, this,propertyDelegate);
     }     }
Line 72: Line 72:
     }     }
    
-    // 每个 tick 增加一个同步的整型,我们只是处于演示目的在服务器上这么做。+    // 每增加一个同步的整型,我们在服务器上这么做,从而用于演示
     @Override     @Override
     public void tick() {     public void tick() {
Line 89: Line 89:
     PropertyDelegate propertyDelegate;     PropertyDelegate propertyDelegate;
    
-    // 当服务器想要打开 screenHandler 时,这个构造函数将会在客户端被调用  +    // 当服务器想要打开 screenHandler 时,客户端就会调用这个构造函数  
-    // 客户端将调用一个带有空的物品栏的父级构造函数和 screenHandler 将自动同步这个空的物品栏到服务器上+    // 客户端将调用父级构造函数,其中物品栏是空的。screenHandler 将自动这个空的物品栏同步到服务器上
    
-    // 就像是于物品栏,客户端将分配一个空的 propertyDelegate 并且它将自动与服务器同步+    // 类似于物品栏,客户端将分配一个空的 propertyDelegate 并且它将自动与服务器同步
    
     public BoxScreenHandler(int syncId, PlayerInventory playerInventory) {     public BoxScreenHandler(int syncId, PlayerInventory playerInventory) {
Line 132: Line 132:
 =====使用 Screen 显示信息===== =====使用 Screen 显示信息=====
  
-当屏幕在其构造函数中获得 ScreenHandler 时,我们可以从上面访问 property delegates ,并可以在屏幕上显示+当屏幕在其构造函数中获得 ScreenHandler 时,我们可以从上面访问 property delegates,并可以在屏幕上渲染这个
  
 <code java [enable_line_numbers=true]> <code java [enable_line_numbers=true]>
Line 170: Line 170:
 =====最后===== =====最后=====
  
-由于 ''ScreenHandler'' 的注册与第一个教程相同,我们已经可以看到结果了!当 ''BlockEntity'' 被放置时,它将每 ''tick'' 增加一个 ''syncedInt'';当我们查看容器内部时,整将自动同步到客户端并呈现在左上角。+由于 ''ScreenHandler'' 的注册与第一个教程相同,我们已经可以看到结果了!放置这个 ''BlockEntity'' 时,它将每游戏刻增加一个 ''syncedInt'';当我们查看容器内部时,这个将自动同步到客户端并呈现在左上角。
  
 [[https://streamable.com/7aic8q | 示例视频]] [[https://streamable.com/7aic8q | 示例视频]]
  
 如果您想要一个更现实的例子,您可以去看看 ''Minecraft'' 代码中的 ''AbstractFurnaceEntity'' 和 ''AbstractFurnaceScreenHandler'' 如果您想要一个更现实的例子,您可以去看看 ''Minecraft'' 代码中的 ''AbstractFurnaceEntity'' 和 ''AbstractFurnaceScreenHandler''
zh_cn/tutorial/propertydelegates.1675392438.txt.gz · Last modified: 2023/02/03 02:47 by hanatomizu