开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 " V$ R0 }( A: E; t3 g. L( ~: \- n! Q
; Q0 X5 W! x/ @1 D4 \  p( Y9 L8 F
( E* h9 a/ A. \; {) y; Q2 o6 E3 X
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
0 h  `  |+ m6 D6 a7 Y( ~/ j9 }+ s" {' M2 W* C; z

4 p" y8 `' v& }: w2 M+ B
3 S! q0 _, |# U9 @6 T
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
, y3 ?# a% r/ }5 B实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
5 Z8 I" I1 k! D8 B: P  \; W1 U仅供参考!仅供参考!请勿直接完全照搬!5 e0 B6 Q* ]8 T% d! U! d1 L
  1. //加载模型! A, n7 Q, k; {; S& t; ^% y
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
    ; X* G; x: c8 ]/ H$ ?
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    . l! t- P3 D# y5 a3 H# ^
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
      t( m6 y9 R8 h  s: k1 w; o8 b, V, c/ j
  5. //翻转 V 坐标5 K( K! V) n" w7 c% k" Y
  6. rawModel.applyUVMirror(false, true);
    7 q( f7 z- w' q% G% A; X
  7. rawModel_side.applyUVMirror(false, true);
    7 \) `& V. G8 a* L: }

  8. ) z; R$ q( @% c0 M
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)! p8 z6 m3 B8 v' h( h! b
  10. let tex = "mtrsteamloco:models/platform_45.png";  W7 C" W9 N! y& c# m. F
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";, ~& c/ `. x' e+ L' x) J# P
  12. function create(ctx, state, entity){
    . c. x9 j9 J, \! X) a
  13.     state.platform_side = new DynamicModelHolder();, h& g# T8 M7 J& I; x5 S& ~& N, x
  14.     state.platform_side.uploadLater(rawModel_side);# |0 B& p8 p  G& I) v' \
  15.     state.platform = new DynamicModelHolder();
    6 O8 w9 S) b$ J" h$ R
  16.     state.platform.uploadLater(rawModel);
    / F) R+ y5 @$ j  a& t
  17. $ Y- a  L: G6 i, W  w  _7 S
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    / P" p, z+ a0 i  d) \
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    % u% ~* @6 \9 Z5 A% ?5 _
  20.     state.tex=tex;3 |+ J4 H: L' n
  21.     state.tex_side=tex_side;/ i9 V3 y9 y6 V7 O8 ^  X& C0 \) l) h
  22.     entity.data.put("texture", tex);+ a! {! W7 J9 X0 y' C/ D
  23.     entity.data.put("texture_side", tex_side);
    4 A, P2 l+ L! c5 E0 f  D
  24.     }
    * C! L- J/ y" |
  25. }
    . @* M7 R) ^' P" _& P3 f
  26. function render(ctx, state, entity){1 i6 [) ]/ h! Q. ]- L& n
  27.     //获得DynamicModelHolder中的模型
      w( Q. w& ?7 n) J! l
  28.     if(state.platform_side.getUploadedModel()!= null){
    . f# A# O( }8 `& M0 [2 N
  29.     plsModel = state.platform_side.getUploadedModel();}% q, p! o8 d% ]1 n
  30.     if(state.platform.getUploadedModel()!= null){3 Z5 z$ w: {3 K  o. z( R5 D
  31.     plModel = state.platform.getUploadedModel();}
    7 F0 X! h2 v0 p! [! K1 I( t( B
  32. 8 u# y# T8 P+ O$ y8 V9 U: P
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理4 C9 x/ [; @& f' \8 c
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理0 J  M7 l3 Q# v- ?* j! e1 c+ b+ i
  35.     file = String(entity.data.get("texture"));
    1 ]0 m0 Q/ `% f4 u0 A0 p
  36.     file_side = String(entity.data.get("texture_side"));
    9 m! y0 f$ l" z% i
  37.     if (file != state.tex){$ p# K; A7 ?! G! Y/ X; e
  38.         state.tex=file;5 @1 O9 W+ @( Z" C7 g
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
    ; [) m" c8 N5 m
  40.         }
    1 T  s! G) G9 C7 `) ]$ j: [* @  _* a9 k
  41.     if (file_side != state.tex_side){# b! i) t! \0 A1 o' ^
  42.         state.tex_side=file_side;
    % N6 @8 D7 ]7 ~# q2 ~/ G/ w0 p
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    $ k" @, ^) V1 w" c4 @
  44.         }) r3 j* C, w7 q9 l+ k  z
  45. * n; O5 P5 L' w+ I. ]
  46.     //绘制模型* b: U; ~2 I' a3 `7 e& W
  47.     ctx.drawModel(plsModel, null);9 x2 f0 Z4 g9 m! c: p
  48.     ctx.drawModel(plModel, null);
    3 @+ ~  s' v' ~& [& G/ h. l
  49. }, b4 j% d' }, b
  50. //当模型离开渲染距离时,关闭它以释放内存
      _6 S: _$ f, p. O6 F' T
  51. function dispose(ctx, state, entity){
    ) C: m: c0 c! w) N
  52.     state.platform.close();# |, j1 A+ l: b- H
  53.     state.platform_side.close();}! W; f! {" T5 k: {% N7 [

  54. ) w/ T" s) @5 [! n& X
  55. /*常用方块ID列表
    5 l$ P( C) d3 Z3 O" F
  56. 默认顶部:mtrsteamloco:models/platform_45.png
    0 ^# `5 [# u% R9 I" X$ Q
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    ; a7 E+ |/ J/ ~/ R# S
  58. 石头:minecraft:textures/block/stone.png
    ) N; z0 d' |% b/ y: T1 [
  59. 木板:minecraft:textures/block/oak_planks.png
    7 A8 C9 K6 R% `2 v, S. T" _
  60. 黑曜石:minecraft:textures/block/obsidian.png# O8 I2 M+ A4 x( r* R; t9 v
  61. 玻璃:minecraft:textures/block/glass.png
    8 A. t8 @4 d  l0 J. H. P  j  W& I
  62. */0 V0 k$ E) [, L4 b, Q' Z/ Z
复制代码
" o3 J! h8 B0 ?
) d$ H) ?( J& v2 K
放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
8 t$ f4 S  ?, J. ^% Z& b
7 B" Y6 Q6 p7 U2 D" q7 c- A$ J5 q" C- |; t. @+ {
目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
3 ?8 u/ s) F7 k; T& L最后的最后 提前一个小时祝大家2025年新年快乐!
! L/ @. S5 h5 q) f  g7 _* Z* V& w8 P  X7 R5 F; K3 G

( j- B! c$ o3 `, y; a8 [7 G: V+ S0 }/ s( m

. Y3 x2 ~/ C0 v( _& i  H
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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:268 f/ j% g2 \% X% a
有点意思!
4 c' O( W8 V, B: f* i. S
但是你那个当做站台好像即使√上了也没法使列车开门
$ L& t2 q! X8 D* T8 K+ Y: ^9 X
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35
8 Z( s; K) t; U7 o1 \但是你那个当做站台好像即使√上了也没法使列车开门

6 ~8 r- Y6 g6 M/ d3 k+ _?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32; e2 \! T- C3 `" `6 Y% G+ N6 U
?不应该啊 我这里测试好使着呢 嘶
6 h4 _6 B' N5 ~% i
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25
5 q* e+ e5 F1 g. U1 G当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

, i* _5 `. d1 |! j是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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