开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑
) Z  f* |6 P3 F& Z* S
, h* p6 y  b) y& W( E
- |, E5 a# U* Q  g) y5 S. h由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
4 L6 H2 c- K2 e8 d+ E3 \( ^: s0 R' l0 {$ ~6 ?

1 w4 |! t1 a: ]6 X$ B! P" }
+ C1 w) V- n$ F8 p7 m2 s2 |! [
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
3 ^# `& Q' F% @  _, t实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
; u/ d* k3 D) P% I6 x4 d; r仅供参考!仅供参考!请勿直接完全照搬!
" _- e5 [- ]  w/ t- y
  1. //加载模型
    5 A6 r" b- u2 g9 E- z, b2 e
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
    7 J0 W/ b( C, _" S* o& v
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);9 X* m3 @2 `5 \  d% N
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);5 f; G, x- w& n6 @9 }" V. }. @
  5. //翻转 V 坐标8 i. I" H. N, b4 E- I6 L' |5 K0 v: C
  6. rawModel.applyUVMirror(false, true);
    . t8 y; Y8 O5 t) m2 D% f
  7. rawModel_side.applyUVMirror(false, true);6 Q  _6 Z, c. k3 u" _# E: a

  8. . i! c! T! i6 `1 q
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)) a: w; [% m+ j
  10. let tex = "mtrsteamloco:models/platform_45.png";8 ^6 i& w  `; j* W4 h, N0 F
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";+ ?6 L/ g: g9 q4 {
  12. function create(ctx, state, entity){
    ; L' ^* W; [; s4 B+ @4 h
  13.     state.platform_side = new DynamicModelHolder();, E5 U" X. ~& T0 M) d! Z; e, @# F6 x
  14.     state.platform_side.uploadLater(rawModel_side);
    - f, V' @$ T2 `1 u
  15.     state.platform = new DynamicModelHolder();
    / ^9 ?' _% m8 i7 g2 e+ t" D" l( I% c
  16.     state.platform.uploadLater(rawModel);3 A9 i/ l. c5 i9 E2 t

  17. 1 ]4 l( L# U. H8 O6 B
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    , `) C6 R5 Z3 K6 k+ m  A! j" g' E
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){9 [! H' S% G0 K% q: P8 u
  20.     state.tex=tex;
    ) D6 k" D! I0 \* m8 L3 ~# e6 D6 v
  21.     state.tex_side=tex_side;% ~- f6 z4 ?; z0 L- t
  22.     entity.data.put("texture", tex);
    : L( o2 ]1 C/ |" L, B& Y1 f
  23.     entity.data.put("texture_side", tex_side);
    : L& q* p* f1 H" @% L! V
  24.     }
    + t: V! U/ y( J" {  M
  25. }
    2 x  t6 \1 ]  Z1 O- e8 F; u
  26. function render(ctx, state, entity){' L: w0 ?2 h+ _# m1 \
  27.     //获得DynamicModelHolder中的模型6 l( x) m' Q$ `; O5 U( ~
  28.     if(state.platform_side.getUploadedModel()!= null){
    5 I6 P" [' M9 U8 I" X
  29.     plsModel = state.platform_side.getUploadedModel();}
    9 z! b+ d) S+ Q% e/ Z8 z
  30.     if(state.platform.getUploadedModel()!= null){
    * x0 b. M  f# J% ?! D6 X
  31.     plModel = state.platform.getUploadedModel();}
    + k; ~* Z% h4 }/ D- I& U

  32. ( e5 n2 s+ E/ L  Y
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理+ A1 w% B0 t$ y( Y) E
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理) q7 V4 D3 _& i: A4 n4 W
  35.     file = String(entity.data.get("texture"));& d7 C; P& F, ?
  36.     file_side = String(entity.data.get("texture_side"));
    " f" K* ]4 q8 s5 S
  37.     if (file != state.tex){
    3 C" i1 ]" A. v# O7 E
  38.         state.tex=file;
    $ i, J# C* _- ]/ i% {1 T
  39.         plModel.replaceAllTexture(Resources.id(state.tex));  T+ N  g6 I: r7 R
  40.         }
    8 e, ?; n0 \. H9 ?
  41.     if (file_side != state.tex_side){
    9 t( l/ x6 S" j4 `9 \/ W+ J; q
  42.         state.tex_side=file_side;
    7 k. a) w! z1 l' D: U( ]
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));7 f, ?; o( i( s6 a. N
  44.         }
    * |4 i1 J% C* _4 S" ]& r
  45.   G7 f- p+ \1 t2 ^. Z5 a
  46.     //绘制模型
    6 |3 L3 H$ L& T- E& ]; x% I. J" P
  47.     ctx.drawModel(plsModel, null);
    $ Y: D+ j6 F* z  O
  48.     ctx.drawModel(plModel, null);# v5 M! ^( k7 h+ c
  49. }; U* |( E. k: |: r
  50. //当模型离开渲染距离时,关闭它以释放内存) o; ^, `1 n% `" s* u
  51. function dispose(ctx, state, entity){( y) V  D" b/ p* R0 \+ s9 [3 C0 J8 P
  52.     state.platform.close();
    ) c% D  Q: Q7 G0 B: w( T( V) t  T1 d
  53.     state.platform_side.close();}
    & V/ O* d' m# ^' e$ n

  54. - ^9 }2 y' D* T1 }) s; M% J5 N$ C
  55. /*常用方块ID列表
    # P" h# U- \- K, A" c
  56. 默认顶部:mtrsteamloco:models/platform_45.png8 Q! D! h8 {' k  l1 L9 s7 r* e
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png$ F4 P4 g0 l! Z
  58. 石头:minecraft:textures/block/stone.png/ i* X( t/ q) x: Q4 J
  59. 木板:minecraft:textures/block/oak_planks.png
    ; u) J! P4 f. j" O/ `
  60. 黑曜石:minecraft:textures/block/obsidian.png
    * {7 }3 b' J' M1 S
  61. 玻璃:minecraft:textures/block/glass.png. E- ~$ `3 p; p- Y2 j, ?$ x
  62. */
    - q. @! j  t& i+ k1 S0 \( A
复制代码
7 Q3 Z3 u5 q) v6 Q3 a+ z2 ^

. G1 P2 a* Y6 B5 R9 \2 s& A放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。' N0 }, C+ ~- W3 r

) n$ {. Z- t; a% C4 f' W8 T; B$ |) p2 x7 H9 {
目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见# b, [# z+ ^: p* a
最后的最后 提前一个小时祝大家2025年新年快乐!5 X. p$ G& u# h# `4 |- U' Q6 t

4 E1 Y3 C8 \7 d& W( J* ^& c: a
* b3 I" d- C: J: n3 y. P% c) G+ |" K" P: k

3 n" U8 ?, E* z1 [& R0 d
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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:267 c! x* \9 b  Y5 H; y) z6 A
有点意思!

- p5 A+ \9 \1 M但是你那个当做站台好像即使√上了也没法使列车开门
- Z/ _' g' ~2 ^/ g; K: J
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35+ a) O) z+ E$ X% b$ s3 v8 C
但是你那个当做站台好像即使√上了也没法使列车开门
/ ?, b" m* U7 T* u% K
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:323 W1 q0 W1 \+ X0 P
?不应该啊 我这里测试好使着呢 嘶
' E. b+ z/ k8 Y3 E- Q. ]/ k8 d
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25- W" g. [; @, b1 c7 ]/ H+ U$ o. ]
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

3 i# S0 a, |9 |, [- ]& A1 g是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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