看板 Minecraft 關於我們 聯絡資訊
client端處理的是玩家選取的距離 server端處理的是玩家限制能不能作這項動作的距離 一、選取目標的距離 距離起算基準點:玩家的眼睛位置(眼睛高度:1.62 Sneak中是1.54) 選取到Block(方塊)的距離限制: 創造模式: 5.0 其他模式: 4.5 選取到Entity(實體)的距離限制: 創造模式: 6.0 其他模式: 3.0 資料來源: EntityRenderer.getMouseOver 二、攻擊(左鍵)、互動(右鍵)的距離限制 距離平方計算: 計算玩家跟目標實體的中心腳底位置的距離平方 距離平方限制: 該實體可以被看到: 36.0 該實體不能被看到: 9.0 結論: 可以看到的距離限制是6.0 不能看到的距離限制是3.0 資料來源: Client端: Minecraft.playerController.attackEntity (攻擊 Minecraft.playerController.func_78768_b (互動 Packet : Packet7UseEntity Server端: NetServerHandler.handleUseEntity (Vanilla, Forge PlayerConnection (bukkit 三、挖掘方塊的距離限制 距離平方計算: 玩家的座標是玩家的中心腳底位置加上高度1.5 方塊的座標中心位置(x+0.5,y+0.5,z+0.5) 距離平方限制: Vanilla Minecraft, Bukkit : 36.0 Forge : [ 距離限制(預設5.0 有函式可呼叫設定) + 1.0 ] 的平方 其實也是36.0 結論: 距離限制6.0 資料來源: Clinet端: Minecraft.playerController.clickBlock (點第一下 Minecraft.playerController.onPlayerDamageBlock (持續按住 Packet : Packet14BlockDig Server端: NetServerHandler.handleBlockDig (Vanilla, Forge PlayerConnection (bukkit 四、右鍵方塊的距離限制 距離平方計算: Vanilla Minecraft, Forge: 玩家的座標是玩家的中心腳底位置 方塊的座標中心位置(x+0.5,y+0.5,z+0.5) Bukkit : 玩家的眼睛位置(眼睛高度:1.62 Sneak中是1.54) 方塊的某個西北下方的角(x,y,z) 距離平方限制: Vanilla Minecraft : ?? 檢查式子寫64.0 實際測試是49.0 Bukkit : 36.0 Forge : [ 距離限制(預設5.0 有函式可呼叫設定) + 1.0 ] 的平方 其實也是36.0 結論: 基本上是6.0 不過Bukkit的距離計算方式不同 Client端: Minecraft.playerController.onPlayerRightClick (右鍵 Packet : Packet15Place Server端: NetServerHandler.handlePlace (Vanilla, Forge PlayerConnection (Bukkit 五、總結 由於選取範圍是client端決定才會進行動作 因此server端不會檢查是不是創造模式,只會檢查最大範圍 所以自己寫mod來控制玩家的動作就可以超出平常的距離 playerController有很多function可使用 不過持續按住類型的動作可能需要自己送Packet 不然會被playerController的function中斷 至於弓箭的射程... 會跟初速,發射角度(內建會飄移),重力影響,空氣阻力的影響作計算 (最少遊戲都有考慮到) -- 有問題請寄信(推文)大多人不在(???? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.173.234.184 ※ 編輯: jeffffliu 來自: 1.173.234.184 (05/06 15:15)
mabikerry:有個問題 暴雨的時候射箭會受影響嗎 還是全天候通用... 05/06 15:33
jeffffliu:應該是沒影響 不過我現在懶得確認 05/06 15:36
jeffffliu:印象中沒有檢查天氣 05/07 09:34