开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 . t: n  d3 F: A" N- L6 ~

. S+ l) O. O4 V* r) l: p( T% L* Y3 q8 _9 W+ T4 ]+ ^0 i* w  E
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
- T! F. L7 m: g( P5 ]' F" C1 D
0 N1 U) W1 L- q+ k5 ^; }. y, l& K9 d' V7 }& @

' y! K* Y) O* q( V) [  i+ \9 V  {我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
, P# o* F0 G5 }1 H0 ]' O" H  [实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理). E6 L/ r- [* ~1 `0 b
仅供参考!仅供参考!请勿直接完全照搬!
/ n. t/ L# l2 K" j# o3 L
  1. //加载模型" I, w! t0 p% }+ v
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
    . V. |& y/ ]  p6 R5 u
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    ! P* }2 d# s3 L  H5 y3 e/ `
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
    . a/ D5 B0 [4 C7 S; k0 r- `
  5. //翻转 V 坐标& J. n% P4 k0 G, K# g' P/ I7 W5 ?
  6. rawModel.applyUVMirror(false, true);
    $ _  S7 S7 {' J1 p
  7. rawModel_side.applyUVMirror(false, true);
    " H! Z, [: d* ~7 s) i
  8. & x: P% i8 W" Y/ K5 w  ]
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理). K. X+ x, d2 ]* B4 a: v% O
  10. let tex = "mtrsteamloco:models/platform_45.png";/ J1 K% R. F" k1 d1 t$ z
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    . I6 u& R: Y& j9 N: r, S  t5 p
  12. function create(ctx, state, entity){' u* G/ S$ ?( z* P5 T- [
  13.     state.platform_side = new DynamicModelHolder();
    ; d9 c7 ?5 W% T7 {$ h- ~  M
  14.     state.platform_side.uploadLater(rawModel_side);
    ) r, b* N1 {3 e5 q1 N' ^* C% Z
  15.     state.platform = new DynamicModelHolder();# N2 k2 |8 @, b
  16.     state.platform.uploadLater(rawModel);
    ' O$ J+ G/ _9 K. h& s6 D5 u( Y
  17.   O* q  u1 b6 u3 V2 k. `1 Y& c
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据0 L) Y  x. N4 m2 z7 M
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){+ A! G0 c' w0 n" U- a- Y0 B" F$ A1 {
  20.     state.tex=tex;
    # b, v6 v% P( p; j! u
  21.     state.tex_side=tex_side;8 }" a# M8 O% d0 m/ s) e
  22.     entity.data.put("texture", tex);* i( O9 i/ \( n9 Y, a* l1 M
  23.     entity.data.put("texture_side", tex_side);. s+ u7 }( O" d2 w0 ?4 X1 K2 Z
  24.     }
    2 @' Y# ?+ z0 \, [& k0 L9 N
  25. }
    : o- \! ]4 M4 @% ]
  26. function render(ctx, state, entity){
    # m- g/ v# v$ r3 I
  27.     //获得DynamicModelHolder中的模型1 [6 m; Q& g: ^; @* {, N/ F
  28.     if(state.platform_side.getUploadedModel()!= null){6 k, H: r. z2 A5 I7 b5 w8 I+ |
  29.     plsModel = state.platform_side.getUploadedModel();}
    & h6 e3 z7 D0 j4 m" E7 t9 C/ N8 y
  30.     if(state.platform.getUploadedModel()!= null){2 Y1 H% N6 n& ?3 X7 n
  31.     plModel = state.platform.getUploadedModel();}' P) z' f4 Z$ r/ i5 Z

  32. 7 N7 s* S2 L& G% v) a' ~% n
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理2 y" w2 J% o' [( Z& X1 u) }, c
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    ; }+ L% @' G9 _) N
  35.     file = String(entity.data.get("texture"));
    / h2 s2 p0 X+ q" E
  36.     file_side = String(entity.data.get("texture_side"));/ ^+ y/ I. f$ H- h' q% U
  37.     if (file != state.tex){
    ( Y) ?5 O% f: l- k. ?
  38.         state.tex=file;% Q  \& e/ w8 H) s- X% T$ A
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
    + W( A3 I" |1 S
  40.         }
    ! \: D2 u6 U6 y* e% R
  41.     if (file_side != state.tex_side){
    1 E3 N/ T$ A" K
  42.         state.tex_side=file_side;
    0 Y+ ?$ a3 e# Z
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    " ]' A* k: L3 y2 ^6 K9 ~
  44.         }; c. i* S2 o% g0 A% E

  45. 9 E* E* Y; |4 i0 r+ M2 t  c
  46.     //绘制模型* o; A- C* s8 ]" h# [
  47.     ctx.drawModel(plsModel, null);
    " i2 }+ x* o$ m2 J: L
  48.     ctx.drawModel(plModel, null);
    3 l! d* J- ]0 V, z2 S; w
  49. }- Y1 N* _8 r* u' @. h; X& x
  50. //当模型离开渲染距离时,关闭它以释放内存" Z) {( v3 z) j& i" a
  51. function dispose(ctx, state, entity){
    ) T% g3 Z& Z( u1 e2 ?& m
  52.     state.platform.close();: g* C( M& O- @: i2 E& K5 J* L9 m
  53.     state.platform_side.close();}: k  c1 v3 Y" S+ B1 V1 `+ x

  54. ) i- v; q1 s) U" a% ^" F. g
  55. /*常用方块ID列表! D9 |" k/ a: s  t. a
  56. 默认顶部:mtrsteamloco:models/platform_45.png, F5 s8 j/ M; q; U3 [  R
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    ) h9 R4 t2 w+ f6 X# k( h$ U
  58. 石头:minecraft:textures/block/stone.png( S5 _+ }1 G; z7 Z8 `8 J% o$ A! r
  59. 木板:minecraft:textures/block/oak_planks.png; m3 r0 P- s8 R( W
  60. 黑曜石:minecraft:textures/block/obsidian.png1 |% ?& h$ G; A! U' k
  61. 玻璃:minecraft:textures/block/glass.png8 P) k) |! i- M# u& {( e
  62. */
    ' U, a  W' ~: s- @$ T$ Z$ J
复制代码

& ~3 X4 R) U+ P, N" Q2 _* B1 l, E' p0 R7 o: M, h$ q) b
放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
- a2 H5 k3 H5 {6 R9 H2 n1 `, K) ^
& V) C+ S& r. _" x8 j/ q% v3 p3 E$ u# M
目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见: V  n* y8 u9 A$ A; n7 m2 Z
最后的最后 提前一个小时祝大家2025年新年快乐!
' |* u; Z; {; D' ?! _, A: X1 x, Z  N" `& R# n, w4 B6 z, X! g( M
- I; E, |. i' G8 T6 a& ]  e8 Z8 R

1 H- j, B+ F) J- I' `9 h( l2 E6 r3 _' c6 i4 w0 y$ y4 L
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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:264 R3 ?0 J; E! K; I+ ?6 }
有点意思!

) e7 c$ {/ _. V+ F. l8 L但是你那个当做站台好像即使√上了也没法使列车开门  A) G7 Q: C" t. z. e; D  f
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35
$ z( _6 A5 C- \" |! b5 l# V但是你那个当做站台好像即使√上了也没法使列车开门

0 p4 I4 B$ v6 r, m/ ^, D?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32: O2 A, e9 h8 a3 M, g( A7 n' ^
?不应该啊 我这里测试好使着呢 嘶
- K2 c0 J/ ?/ A) F4 F& ?
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25; m' E( Y1 w) F7 v( J
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

/ t% f# R$ s* F# g% |4 Q- w9 ~% Y! v是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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