开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 9 r/ A$ \* x7 H8 d

3 ~7 K! Z0 l) J& [& J3 X- H  l/ u* n. c( q$ Z
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
6 {+ @3 |+ B" a: ^# a9 S! M7 x' ~6 w& z' _

7 t: q( R7 n( i  K9 [9 x  L

7 e* E: Y: @+ a0 v) j我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
/ L9 \/ ]8 ^& s1 Y. v7 L, ^" w& a实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
7 a7 @+ d/ L- R; [0 \仅供参考!仅供参考!请勿直接完全照搬!
) k3 G1 U2 h  G+ Z# l( o% ~
  1. //加载模型
    ( h9 @' Q, g0 y/ a: f0 y9 d2 T, y
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面. y. |6 K: k' w0 a
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    - O/ K" E& t) t5 _
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);, r; {, y* d' k% [3 Y
  5. //翻转 V 坐标
      J* f, \" a8 }. T) R+ P- z
  6. rawModel.applyUVMirror(false, true);
    ( a+ }$ O# a  X# p
  7. rawModel_side.applyUVMirror(false, true);7 E9 K- l5 i  V  {9 W1 w

  8. 7 U% G% O) k+ S7 U9 H6 w% U' |
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)* S$ b+ l8 Z* X# M3 B# g
  10. let tex = "mtrsteamloco:models/platform_45.png";
    ' @% v5 F/ z3 w' F" o% o
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    & p3 @0 Y  S# k7 K: J# \3 m5 f4 s
  12. function create(ctx, state, entity){
    * ]) ~2 A; `' T' d
  13.     state.platform_side = new DynamicModelHolder();  V& K* r; E  E$ \9 ~4 Q6 S
  14.     state.platform_side.uploadLater(rawModel_side);3 Y% F" S% |# S: e
  15.     state.platform = new DynamicModelHolder();
    . a' T3 X6 A8 A( x( g
  16.     state.platform.uploadLater(rawModel);8 H. |+ j" y9 b/ ^' b
  17. ( N7 s" x/ W5 }2 h
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
      @" \4 G$ @4 @- z7 O. _, Y6 Q
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){' Q0 A5 v- K% X  I4 R, K
  20.     state.tex=tex;
    ! r) r* y1 F6 t9 n
  21.     state.tex_side=tex_side;
      S7 j/ H' a- J* s6 H' F$ A$ J
  22.     entity.data.put("texture", tex);
    0 G/ `5 X8 b4 O- C, m
  23.     entity.data.put("texture_side", tex_side);
    , B' H4 p1 _8 g' C6 w- k  L
  24.     }
    2 ^& l) m2 P3 |% z6 `8 X4 P0 D4 d
  25. }5 f: c" ]: l" g4 d
  26. function render(ctx, state, entity){+ ~! Y% M5 f5 m) H0 O
  27.     //获得DynamicModelHolder中的模型
    ) N3 @9 [7 f8 Q' w, D
  28.     if(state.platform_side.getUploadedModel()!= null){2 X. G6 b& i. ~; u6 a
  29.     plsModel = state.platform_side.getUploadedModel();}
    ; k: v) S1 t8 ?( [; n8 |3 y8 H
  30.     if(state.platform.getUploadedModel()!= null){
    * _, q$ l1 a" a) B6 o+ @2 z) T
  31.     plModel = state.platform.getUploadedModel();}
    ' O) k1 j- q  M3 b3 C; E6 @+ x

  32. , f6 Z8 e2 M  Q: u& b; h. I
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    $ |: q) z5 b" V7 B+ N5 ]
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    5 ]+ Q' W$ u" b
  35.     file = String(entity.data.get("texture"));
    2 c( s! D1 H6 a3 M4 u
  36.     file_side = String(entity.data.get("texture_side"));
    ' W$ B& A5 E0 H: z3 z; o: i: R5 G1 w
  37.     if (file != state.tex){
    ' h% v! [2 k7 ]3 B/ S
  38.         state.tex=file;
    9 u9 P; v4 V( o
  39.         plModel.replaceAllTexture(Resources.id(state.tex));4 x. I7 q5 d% o0 M/ |0 c+ o
  40.         }# i# g% `1 B% `+ _
  41.     if (file_side != state.tex_side){
      f9 x% E; M2 P8 A, G" ^
  42.         state.tex_side=file_side;
    6 y0 X4 p+ s1 @# k% S: ]$ a
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    7 I$ |3 c' T# N5 e  x% F4 k
  44.         }+ S+ N( L$ W1 u/ n

  45. , y1 N/ `% S: F7 i; c
  46.     //绘制模型
    * ?1 I$ _6 _$ G* T2 e5 _% A
  47.     ctx.drawModel(plsModel, null);9 z( _6 W4 C9 x( O! M
  48.     ctx.drawModel(plModel, null);1 B4 R" G: r- u9 u- _9 u6 m
  49. }
    ; {2 y/ Z. _& w7 x# W- U8 U
  50. //当模型离开渲染距离时,关闭它以释放内存
    # u/ `0 x- b# {/ m7 d2 p% u
  51. function dispose(ctx, state, entity){
    & q! L- y: I1 k* K
  52.     state.platform.close();
    * K' b' y% J3 i3 \+ H
  53.     state.platform_side.close();}, y7 o( K5 Q2 f' y
  54. 5 V% }. \: Z2 z4 e
  55. /*常用方块ID列表
    ' ^" P8 @& i$ ^" p/ o. _/ _+ y5 B
  56. 默认顶部:mtrsteamloco:models/platform_45.png0 |0 C( }2 z/ V2 D# i$ a) U
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    # V6 }' R3 q$ K( i6 T! }
  58. 石头:minecraft:textures/block/stone.png4 E" J, D( `3 m
  59. 木板:minecraft:textures/block/oak_planks.png7 U$ c0 f7 h4 l! W' _2 ?8 v
  60. 黑曜石:minecraft:textures/block/obsidian.png
    ; V7 l7 f% ^3 O  \6 R8 S
  61. 玻璃:minecraft:textures/block/glass.png% \. k( D, J$ F* ^7 H7 R
  62. */
    0 ?- D; [" L1 H! o/ H: Z
复制代码

2 f! r& m0 J* M- a+ I  }
3 J$ ^' L) \7 R, ]* P放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
# o, ]0 F3 g& ]/ m& L
2 n: @8 j, W, X$ Q1 _+ e" \; P3 O4 \5 f
目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
" r6 P/ u( x6 F1 i; t4 ~最后的最后 提前一个小时祝大家2025年新年快乐!' z6 ?; {8 u* B  M, ], U* _

4 R0 M2 x9 j6 @
0 F+ S" T5 o/ h, i' k/ k) U* k9 r
0 E; t: f9 P+ C. j4 S: Z' f0 |( h3 J; i4 m/ q% j# m) x" j
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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
5 |: E- I) |+ c: x2 [' p有点意思!
* M, c8 b& ?- I; p: j/ F
但是你那个当做站台好像即使√上了也没法使列车开门3 y% B1 Q% V4 n1 U6 w& p3 c
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35) t9 q* u4 O# U) _
但是你那个当做站台好像即使√上了也没法使列车开门

9 `9 T- ~& ]' @% F( [?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32' R3 M( ?% E9 O& u1 Y2 o. g
?不应该啊 我这里测试好使着呢 嘶
. Y! J+ Z0 Z+ w$ n
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25. s2 L+ J) d' `+ n2 P
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
: ^! K8 V) W! _: v9 V. C/ x
是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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