开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑
1 |0 e4 i$ H) G7 L+ m/ U, i) t3 Z- C# m) M
6 R+ I0 b' q) u! }& T0 m
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
$ G: @% B, p: _2 |) \) h
; v* k: F  @2 [3 i8 C. o' s/ ~: y  c/ T! a$ h; N7 B7 N, G
* }1 r, x  c2 }3 V
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
7 G8 z& @4 M4 l# X$ @  |0 \2 U实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)' R/ y0 ^& C  x1 n
仅供参考!仅供参考!请勿直接完全照搬!
* g: E% \" p4 U$ T% }8 x& v/ q
  1. //加载模型, j2 T  J9 Z. L% ~
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面' O; v6 G5 G. M8 s( O
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);' o! \) J! e! T1 g8 r& a! K3 o( L
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
    ) }" P* O% q5 a, P" C0 Y2 e
  5. //翻转 V 坐标
    9 Z5 Z2 Y! W! c% w$ n; p* Y' b
  6. rawModel.applyUVMirror(false, true);
    9 x8 a+ Z0 F- L# m0 V
  7. rawModel_side.applyUVMirror(false, true);
    + `& n3 I: V9 z: ?* t' v, _, |

  8. 0 x# Z6 G7 W: a1 O7 Y
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    2 |8 H" D1 d# I: }9 o; N; _
  10. let tex = "mtrsteamloco:models/platform_45.png";8 J+ B- [/ U; s- W+ J: ^
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    ( j, M& M! S0 o2 j6 S8 L
  12. function create(ctx, state, entity){  N4 f: x1 D/ j* O) {
  13.     state.platform_side = new DynamicModelHolder();/ S" F6 ], U4 B( r) J
  14.     state.platform_side.uploadLater(rawModel_side);6 r4 q; R' ^& q0 L2 f3 W
  15.     state.platform = new DynamicModelHolder();6 W; E/ [5 p& v6 j) g
  16.     state.platform.uploadLater(rawModel);% r1 a( j$ K3 C

  17. & W7 |1 `6 C; N. {! O, L
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    6 u% M. `( B' ~$ T+ O- i
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    3 u/ o; M1 C+ y1 t
  20.     state.tex=tex;' a6 C* i, q6 g( w' b5 x9 ]! _
  21.     state.tex_side=tex_side;& O9 m" [' T! k  V% Q* t6 x  |0 I
  22.     entity.data.put("texture", tex);
    7 p. Z& _  s8 L* H/ A- V6 {0 t; ?
  23.     entity.data.put("texture_side", tex_side);% Z" ?; e, {' r1 P6 s' d. l) N, y4 u
  24.     }# L' K5 _4 U+ D2 D6 X' j( o/ D
  25. }
    - f6 A/ w1 o: \' K
  26. function render(ctx, state, entity){
    ! \+ e9 G/ X; }& ~$ j/ A. s5 _
  27.     //获得DynamicModelHolder中的模型6 n/ ?" C& u6 l0 c2 @. `4 K
  28.     if(state.platform_side.getUploadedModel()!= null){  E! r' Q  A7 I
  29.     plsModel = state.platform_side.getUploadedModel();}
    % K3 K5 m5 d0 L3 }* f+ t, T# b
  30.     if(state.platform.getUploadedModel()!= null){
    ' \  o. h3 y8 {& ^
  31.     plModel = state.platform.getUploadedModel();}
    : S, F# G$ v) j" [5 e
  32. ! n% E' g3 k6 J+ P
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    ! c0 E" z( c' ?
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    ; |: L) I- V- K& r5 z
  35.     file = String(entity.data.get("texture"));- f" c8 [: D: _3 {
  36.     file_side = String(entity.data.get("texture_side"));4 z+ c9 I- _) \. B, J# }+ Q; ]. f
  37.     if (file != state.tex){  x4 @9 o: k6 T& ]
  38.         state.tex=file;
    ( r/ L' B6 \/ N3 R, Y
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
    5 d% X5 D% t5 s+ S
  40.         }
    5 c4 u! _* h9 F, H
  41.     if (file_side != state.tex_side){
    9 W7 \2 J4 d  \- Q/ a( v
  42.         state.tex_side=file_side;. t1 Y$ l( s5 T3 Z3 N/ P2 f3 F. H
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));2 ~; v9 B8 A! ^- \
  44.         }
    ; P2 ^/ G& h9 k5 {/ E
  45. * a6 f9 N4 V; }
  46.     //绘制模型
    8 R2 `  }( t4 m0 Y: G3 K
  47.     ctx.drawModel(plsModel, null);# ~5 r& Z# H5 m" E
  48.     ctx.drawModel(plModel, null);( U* B0 S' r* e3 |8 X) @! \
  49. }
      R& a  h2 i4 g5 B
  50. //当模型离开渲染距离时,关闭它以释放内存
    ' u2 M5 T7 B* ?5 N3 _. \- O) j" e* r% ?
  51. function dispose(ctx, state, entity){% E+ P& H9 m% [. F/ x0 ~& x  h
  52.     state.platform.close();. @, Y, h8 L. P  u
  53.     state.platform_side.close();}: \3 F$ U1 n+ A0 @0 x( X

  54. ! |2 Z7 P/ r: l8 F
  55. /*常用方块ID列表* H8 n4 J; z' b+ m. Q
  56. 默认顶部:mtrsteamloco:models/platform_45.png
    / g" U. ~- E; f# y  _  [8 U3 Q
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    % [- z$ z; Q" ]( k& [* k. p! h
  58. 石头:minecraft:textures/block/stone.png
    ! I; }4 Y0 n* Y6 F, `0 b
  59. 木板:minecraft:textures/block/oak_planks.png
    ! S' Q& M' ?8 j$ [! w% C! b
  60. 黑曜石:minecraft:textures/block/obsidian.png
      O9 m* k: M6 S8 v0 V
  61. 玻璃:minecraft:textures/block/glass.png) W, w, J- j0 G4 w2 ?/ N
  62. */
    , j$ [6 W6 N' |" K; h
复制代码

' S9 o* _9 Q5 n" S; V3 A2 R0 \
( q1 V4 [! B- ^% W" |放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
, x. Y* \' [. o, ]) a7 i$ r& ?, O, U( a( D8 b! S2 ~

' \! @. J' T. ], b& a目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
8 @0 Y- j# F( [! C) I5 s- \最后的最后 提前一个小时祝大家2025年新年快乐!5 F# E& |" G+ i
+ e" m3 s2 b& q  r( K

3 A$ l2 E$ }4 V6 \$ G  {
* u9 a0 j2 v$ P# ^  ?- Y! l# P; C
$ h6 {. x: k  p  g
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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
+ e! p* X/ o% G) L# x有点意思!
8 v" e; [6 Z+ M0 U! ?% D% s
但是你那个当做站台好像即使√上了也没法使列车开门
& r3 o2 j7 l9 k! L$ f* V6 Y
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:357 Y4 G# y, v9 q  t5 g9 ?' q1 X
但是你那个当做站台好像即使√上了也没法使列车开门
* v5 R, Z8 H: b, T
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:329 m: a" {4 l' P6 ], g* r
?不应该啊 我这里测试好使着呢 嘶

6 K% t4 Q! n$ _7 K) j) J  H  A当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25: E* \' M6 `# y0 R! c5 F
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

- ^; U4 U  o4 S7 h; [# g/ Q是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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