开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 1 y* r. F) O3 `  s: y$ ]

% q6 c: N/ L( z% T* d, j& p
: y9 E1 F0 [- a( C5 M9 l+ k由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
% g' P, d0 r0 r' r( V. O% w5 v2 G1 v6 b; t  q+ T; F7 p

/ N5 Y4 C% _: Z, R; I+ Z
/ o- W  Q6 E# w1 s7 U
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码6 ?% p9 C( [# \
实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
2 O, S: M: d: B& Q' V) Z仅供参考!仅供参考!请勿直接完全照搬!
1 h" P/ r0 W( O  S  ]4 O0 m2 G
  1. //加载模型4 W: @: q4 Y4 e. t. V, ^
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面, Q9 W% a& P& z% t
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    ( w# W& o% ]+ M% J$ J, w! e
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
    6 y. B! ~2 D6 C; N- a
  5. //翻转 V 坐标
    + c( r8 f/ V$ [# }% x3 s  |
  6. rawModel.applyUVMirror(false, true);" [) o2 l& q* E; d
  7. rawModel_side.applyUVMirror(false, true);
    : d+ v) R6 N: O1 m
  8. ) [/ J: F8 ]  @
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    % L3 C& ?  n* z
  10. let tex = "mtrsteamloco:models/platform_45.png";/ w$ J8 D# t' O. o, J8 w
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    ( D3 u! `+ T! l$ P
  12. function create(ctx, state, entity){6 u8 L% v- B. v  [
  13.     state.platform_side = new DynamicModelHolder();9 ]: g( U% r# o3 w
  14.     state.platform_side.uploadLater(rawModel_side);
    . t% \8 H, a: T4 ?( T# T+ b
  15.     state.platform = new DynamicModelHolder();
    " j- p* o' c+ H6 _5 O$ w+ ~- v8 L
  16.     state.platform.uploadLater(rawModel);, E' I+ |1 e) b$ \
  17. + i, e. Z5 C4 y* @8 d4 U: x
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    ! M! ~& v' U5 l$ e7 a6 u7 d
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){6 `3 \) V& C4 T
  20.     state.tex=tex;
    $ x$ r0 J# s. F( e9 j/ T7 h6 m
  21.     state.tex_side=tex_side;  G* l2 b7 F. j$ h: u* Q9 l& g8 z
  22.     entity.data.put("texture", tex);0 F5 k1 r+ g2 `+ g6 N( \8 L
  23.     entity.data.put("texture_side", tex_side);0 q: g" U8 G% F9 b0 y8 p) b
  24.     }
    ) Y1 r9 m+ Q5 z& `& R( W; n& v6 i
  25. }
    ( N8 D2 e  Z: W2 m" }
  26. function render(ctx, state, entity){
    / \- D3 [# j( z/ p
  27.     //获得DynamicModelHolder中的模型6 `7 v. n( c6 x4 ?* _* e
  28.     if(state.platform_side.getUploadedModel()!= null){
    - o& k0 J3 K5 k$ I
  29.     plsModel = state.platform_side.getUploadedModel();}
    ) `( t0 ^$ {7 V( a
  30.     if(state.platform.getUploadedModel()!= null){3 j( r4 b# y# K# M, N! Z/ q: ]4 f5 U
  31.     plModel = state.platform.getUploadedModel();}
    # y$ \. C- v: G7 S. w. @; Z

  32. % K5 U# P; v: [5 _" u
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理3 J! ?& a7 g) c
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    ) q* X/ y" M) _/ s3 H7 ^* w9 F# S! d
  35.     file = String(entity.data.get("texture"));* @6 _/ w# U( J, f5 n/ C1 Y7 `/ l
  36.     file_side = String(entity.data.get("texture_side"));
    8 O% W# e8 Y  e
  37.     if (file != state.tex){6 f# s0 L* b& u, O' {) D
  38.         state.tex=file;
    ( M( |; \$ @7 W- c5 u. b
  39.         plModel.replaceAllTexture(Resources.id(state.tex));9 i( H- B* G: I) |- k+ k
  40.         }8 B3 c% w+ p( |
  41.     if (file_side != state.tex_side){8 q& T0 z  i& I$ j- L- o( k, j
  42.         state.tex_side=file_side;
    2 ], G. C2 M; z% e3 y' S
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    2 K- z9 b. }9 ~4 T
  44.         }0 m/ U( [: N! d
  45. $ P' u% p: b  v2 c+ s4 \
  46.     //绘制模型
    % ~* ?, M4 M, b1 Q3 c  c, c
  47.     ctx.drawModel(plsModel, null);, g  A( u& X/ P9 v
  48.     ctx.drawModel(plModel, null);) B$ M( ?- w. D" ~
  49. }# F2 [# t* v% U: G
  50. //当模型离开渲染距离时,关闭它以释放内存; n* ?$ a# U9 I. f. a- V
  51. function dispose(ctx, state, entity){
    5 Q$ N7 K3 t/ Z  P& E
  52.     state.platform.close();
    # N" d' I7 a! D
  53.     state.platform_side.close();}" }" _' P: v7 V) n6 W9 {8 \3 f

  54. ' j# d, q3 V7 C- Z- H
  55. /*常用方块ID列表% @. N: @6 F. E/ b, r; U# Y5 `
  56. 默认顶部:mtrsteamloco:models/platform_45.png
    & k; p- D/ X' ^4 c
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    / S. [+ y1 P/ I2 F
  58. 石头:minecraft:textures/block/stone.png. y& u" `' m8 f: J2 i
  59. 木板:minecraft:textures/block/oak_planks.png
    $ G0 b5 @0 e4 P8 Q$ m8 e/ l
  60. 黑曜石:minecraft:textures/block/obsidian.png: o% e' d7 o) C: D5 f2 z
  61. 玻璃:minecraft:textures/block/glass.png( s3 P" z5 q/ O- ^8 U1 S
  62. */5 h8 k, O6 R0 M8 g* L
复制代码
% Q3 Y. u0 S3 s  q7 Q5 k6 V

' k7 H2 V- l7 G: S* ^2 c放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
! ~8 Z' i6 Q( |$ H$ E
1 ]+ d$ x# i& U7 A, V. z" e: q% @& a) b" D; I- ?6 {" ]. `- b) ^
目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
- e4 P; `) g- q9 e4 |" K$ d7 v最后的最后 提前一个小时祝大家2025年新年快乐!
6 G7 @' |4 V- d" Y9 d4 ^, Q
1 I2 F' G* m3 P6 |
0 l9 s$ B. I3 O. b9 d( y5 x! _& O! h7 }5 Y/ j

% O6 f/ z% Y. S
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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
" O/ f  ^: w* j* A/ B有点意思!

/ R/ w. t& d5 A8 w; z8 B$ i: H; h但是你那个当做站台好像即使√上了也没法使列车开门
, E/ G/ c  p' L
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35/ c) h* U8 E' d' J+ [; M5 a+ j" |- ~( b
但是你那个当做站台好像即使√上了也没法使列车开门
2 v( d4 w  h- {% |& w/ F
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32
; l2 I2 W! ~+ b1 E9 i; h; N?不应该啊 我这里测试好使着呢 嘶
4 B8 j0 J1 S0 s- y+ G! F& a0 r
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25
. _, [# l: n! m8 ?当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

& |/ R( Y5 [  m" @& K: O$ Z是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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