开启左侧

[现版本作废]伪装45度站台方块代码分享

[复制链接]
Hobbytimeblank 作者认证 2024-12-31 22:57:26

还没有账号?赶快去注册吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 9 {2 \" g+ q( H! l; E

% `8 D2 b8 j$ U) v% n+ I, H
1 T, K7 m) c. q" [! n# M- {由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
8 ?# w: x* u! x; q
* n2 _' M7 Z6 s" z" R. B
' C$ Y1 h" A" H8 s  ]

  P  f; A0 B; A1 }我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码; i/ |) L5 m5 c1 M/ y' Z$ q
实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
5 ]7 u5 k: E4 k% }" \7 W1 T/ o" ^8 A仅供参考!仅供参考!请勿直接完全照搬!
  g7 c3 r& |5 A4 c% N
  1. //加载模型+ z, K  q) N- E0 a* _9 j/ r" x
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
    1 C( A, N$ X0 B6 c; P% c
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    ! u6 w4 x) g- L, B9 F9 |7 E
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);9 h' h+ Z0 e! U. Q$ U; M3 e7 v* ~/ `
  5. //翻转 V 坐标
    & n, E5 E8 D: H$ W8 [$ f: Z
  6. rawModel.applyUVMirror(false, true);7 {4 K6 j7 S& S$ F
  7. rawModel_side.applyUVMirror(false, true);4 G' L8 m9 ?2 H( r1 l$ w

  8. - r1 L* n! |' M, @$ k8 A
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    " x1 {$ Y& A# l$ _
  10. let tex = "mtrsteamloco:models/platform_45.png";
    7 z7 t: B5 M+ q$ N
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";0 T& l5 X0 ^( s
  12. function create(ctx, state, entity){- a. J2 j1 P2 g! ?) A# M) w
  13.     state.platform_side = new DynamicModelHolder();5 o+ F1 v# ~' \9 l" r+ Y; k
  14.     state.platform_side.uploadLater(rawModel_side);
    3 G. j$ R8 H) d3 R3 ?0 {! m
  15.     state.platform = new DynamicModelHolder();: D9 G5 h" h) \( b. l* g/ M
  16.     state.platform.uploadLater(rawModel);& K( d7 @( M5 i; I. z
  17. 8 G2 N: H4 V- Z' f4 N4 i8 p
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    / ^5 g! v% g! a
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    6 j+ B1 K5 `$ {9 V
  20.     state.tex=tex;
    , }8 W+ G8 D% D5 C% [
  21.     state.tex_side=tex_side;3 I& ^& l0 S3 p' ^* |& j, |6 @
  22.     entity.data.put("texture", tex);% K9 b; g+ X: e8 t2 O+ s
  23.     entity.data.put("texture_side", tex_side);( ?" z' }  {* B. W( I) u$ L
  24.     }' o9 s9 b; v$ k3 g" N$ Y
  25. }
    ; \" K5 \# M0 M5 G% a
  26. function render(ctx, state, entity){  }9 Y5 P1 N5 L  y2 E" _
  27.     //获得DynamicModelHolder中的模型7 j1 J2 a) f3 e, S
  28.     if(state.platform_side.getUploadedModel()!= null){
    3 V! e" C: J) l+ u. a
  29.     plsModel = state.platform_side.getUploadedModel();}4 L8 g6 i& @0 X$ k
  30.     if(state.platform.getUploadedModel()!= null){/ H3 I" D8 Q- h! Z% ?, L! {- c. r
  31.     plModel = state.platform.getUploadedModel();}
    ) D: A4 `8 E  z: Q, m

  32. ( J2 U6 Y+ M# ~  p' X
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    " \( \( P" W0 O/ W9 g9 j  Z% R6 [
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理2 W* ~0 v1 c9 ^
  35.     file = String(entity.data.get("texture"));& n9 \/ q# b8 W7 ^
  36.     file_side = String(entity.data.get("texture_side"));/ m& y% j3 g3 z- U( l* f2 [) Z
  37.     if (file != state.tex){/ e( h* T' P  E- T
  38.         state.tex=file;
    $ q9 s! R) i. u, i: n9 L
  39.         plModel.replaceAllTexture(Resources.id(state.tex));. p, X1 U2 A# N% [) h6 o
  40.         }, l% g$ _+ i3 s: {
  41.     if (file_side != state.tex_side){" t/ P: C0 o- F
  42.         state.tex_side=file_side;
    5 c$ C) [( J, U$ W
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    1 E, J4 Q- P% G2 g4 l- L/ x, ^
  44.         }
    8 A! e* U4 k+ P; d
  45. $ w5 a$ H& U! _; V' `
  46.     //绘制模型
    ; P8 O2 b3 s7 X: ~8 y0 y) ?' ?
  47.     ctx.drawModel(plsModel, null);
    / N0 b, Y) S8 B- R  }
  48.     ctx.drawModel(plModel, null);0 n6 s5 Q! L7 ^
  49. }4 G+ z; d) x3 P$ J, {+ Q" v
  50. //当模型离开渲染距离时,关闭它以释放内存
    : W% D5 O6 W# x/ D0 ~3 S. i
  51. function dispose(ctx, state, entity){
      c' l4 o: b3 D/ s0 U
  52.     state.platform.close();
    / u' m! c% L: ^2 M' q1 e, k' N; U
  53.     state.platform_side.close();}# ~" A. p! ?" J3 W3 ]& i- j
  54. ' ^/ L7 K6 }& Z7 Z2 |
  55. /*常用方块ID列表; g5 A4 W- Q3 \" ?8 C
  56. 默认顶部:mtrsteamloco:models/platform_45.png# `+ N! m3 p/ Q. U: \$ t
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png. _9 s4 h; A8 \. I7 [1 ]) y5 j
  58. 石头:minecraft:textures/block/stone.png
    2 [" w  q; K$ Q3 b; c
  59. 木板:minecraft:textures/block/oak_planks.png* r2 |+ j8 l7 D$ x7 z" w
  60. 黑曜石:minecraft:textures/block/obsidian.png# U" O( R8 x" {. C$ N, f2 E- Y& j# e+ _
  61. 玻璃:minecraft:textures/block/glass.png7 C! p# [) g3 K
  62. */$ g6 _! M8 q- w. f
复制代码
' N2 ?4 \8 M/ c: f. a
+ t8 n+ i6 A6 Z- O0 \, m
放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
# {+ [" k5 K4 c. H1 D8 D9 W2 \; _

2 K! E/ w( ~0 q% A% z' e目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见' G0 h* r6 a0 R1 D) c# E
最后的最后 提前一个小时祝大家2025年新年快乐!
" d1 A! \. Z+ Y+ H, U+ T/ n- U7 u6 R9 }
3 S( o/ i* r. v3 i, X: Q3 |( d

: F& |/ v4 j2 z) [; U1 [# |! Q5 a) A% P" O0 j9 E
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-1 09:26:31
有点意思!

评分

参与人数 1人气 +1 收起 理由
Hobbytimeblank + 1 高呼666!

查看全部评分

有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-1 09:35:40
Harlotte 发表于 2025-1-1 09:26
' ?+ C/ ]( m; v9 R/ ^8 s( K0 h' w有点意思!
- e+ `% ~; X0 T/ O: i: ~
但是你那个当做站台好像即使√上了也没法使列车开门% O* {( h% ^) _# O
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35% j6 y4 g' S4 H( F: }# ]$ _
但是你那个当做站台好像即使√上了也没法使列车开门

  T* B, b$ {* o+ o4 _?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32! L# ~+ X$ R( z$ ^- @
?不应该啊 我这里测试好使着呢 嘶
7 O3 P* K+ P) |+ n( J# C
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:253 J$ [: h# ]2 N, v9 q
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

6 C. d7 v0 q. M4 e3 \, J5 K是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表