开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 ) r0 X0 m5 P% v2 f, E6 R

% w$ I1 f1 C) k  L2 C/ o) ~4 A2 X+ X+ U4 c, e. n! R
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用; u! R! g. h1 J* I8 M
! O# |$ a% ^( `/ z7 O* y: U1 @
: s4 ?6 r' Y1 j$ H8 g
0 e8 d) a! G9 G1 J1 K
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
; m6 _  J# n' Q) R实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
8 U. e- F& G; E; G- F, N3 `  T. C9 @仅供参考!仅供参考!请勿直接完全照搬!- n6 P" o' \, p* K$ x, m* c/ H
  1. //加载模型+ `6 v. k  v2 n1 J( z6 Q% D
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面; S4 a" S9 }2 P
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);/ v+ T3 L+ t  o: [  i- n9 y) \
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);( e- T( i2 N& @) r$ `. D' B( w
  5. //翻转 V 坐标
    - G, I. |; u- J1 q4 c. T( P
  6. rawModel.applyUVMirror(false, true);
    ; G: |% ]. W# L8 A! c  E7 h
  7. rawModel_side.applyUVMirror(false, true);
    8 `. c& j+ ]7 v) U& K! ]
  8.   p% ~7 G- l7 L8 n9 n( Y3 L
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    5 [$ e- b" f0 X# Y$ m, m# G9 d
  10. let tex = "mtrsteamloco:models/platform_45.png";0 q; K9 ]0 S8 P; o" L) r5 q
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    # x" T6 F0 h* N% t) i
  12. function create(ctx, state, entity){6 z6 r: m* ]$ |! ?
  13.     state.platform_side = new DynamicModelHolder();
    $ g5 g- J* V# R, j. v
  14.     state.platform_side.uploadLater(rawModel_side);
    + f, }" \# V6 P3 \6 R, }
  15.     state.platform = new DynamicModelHolder();
    8 |! R4 |, h. p2 X( g* |
  16.     state.platform.uploadLater(rawModel);; ?- L3 y/ L- _
  17. , ]1 Z3 [4 H( G- z9 X" ?
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据( H; ]. G8 [2 }) p5 ]
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    ' ?) K* |, ?6 e" S+ I( E* y
  20.     state.tex=tex;
    8 G$ h, s  P/ j9 }$ C* `
  21.     state.tex_side=tex_side;9 f$ m( C  ~; k( g% i; s  d
  22.     entity.data.put("texture", tex);  I. z2 N  w# q/ m( w- o
  23.     entity.data.put("texture_side", tex_side);1 x( p" I2 C+ a
  24.     }1 n0 m/ L9 C, n7 [9 G! N6 B7 s
  25. }) ~6 P! g7 @% l/ j% k$ r+ s3 D
  26. function render(ctx, state, entity){
    8 ~; \% n# t6 ]5 s2 E  l6 Y
  27.     //获得DynamicModelHolder中的模型0 r3 w3 A, F: E! y1 W# w
  28.     if(state.platform_side.getUploadedModel()!= null){
    + @/ ~7 E8 i! |9 _+ \2 y
  29.     plsModel = state.platform_side.getUploadedModel();}
    ! T' A* Q3 Q/ F( ?
  30.     if(state.platform.getUploadedModel()!= null){, ^/ @+ r/ {- L  ^
  31.     plModel = state.platform.getUploadedModel();}6 e. O2 d/ p, E; Z

  32. + b  P# Q' l  T5 N! {8 M
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    ( Y  p- r9 `+ |) b
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    ! P  ?' M% j4 s- R2 `# A$ H
  35.     file = String(entity.data.get("texture"));6 w/ m! \) `( l/ c8 ^. l3 W
  36.     file_side = String(entity.data.get("texture_side"));# ^& E3 }) u/ I
  37.     if (file != state.tex){6 ]/ T7 v2 d. p1 v0 t' D* Q5 m
  38.         state.tex=file;: g+ A; C# K# J  @1 b$ c
  39.         plModel.replaceAllTexture(Resources.id(state.tex));# E* D2 W5 q6 u. B/ h0 n
  40.         }
    0 e7 |6 [: n8 H# ?
  41.     if (file_side != state.tex_side){
    ' O  }5 i; L1 t! K+ c" @5 T
  42.         state.tex_side=file_side;4 e' I/ I$ g0 l) i7 D- d. f' F
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    # J, t4 H" B0 O: C3 C2 l8 S
  44.         }
    / U/ |" x2 F) {

  45. 5 Z7 D5 K4 u) Q2 q" E" f# y
  46.     //绘制模型
    6 h+ r/ }) e/ ?# K  U3 m
  47.     ctx.drawModel(plsModel, null);8 I: b& ]5 E3 B
  48.     ctx.drawModel(plModel, null);8 `; h3 `# m) f8 J2 r3 X  d- @
  49. }5 Y+ q1 V% P" Q* j; N* L
  50. //当模型离开渲染距离时,关闭它以释放内存
    & F* Y+ X$ k+ u& o7 {3 j% v2 T
  51. function dispose(ctx, state, entity){
    4 C6 L0 [% q, A) U3 F6 S& Z: ?- Z
  52.     state.platform.close();
    + D7 A6 n6 h: C9 {
  53.     state.platform_side.close();}3 s. g. s1 k9 p( Z% ?6 c( P% Y" \

  54. " k; r& `, i( n1 ^; j) Q
  55. /*常用方块ID列表5 N* x$ S$ Z' d4 Z: p8 ^0 @! n
  56. 默认顶部:mtrsteamloco:models/platform_45.png
    1 d- G9 ^  g$ k) p7 @
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png. y& {2 O0 ^! p- u2 s8 C6 u
  58. 石头:minecraft:textures/block/stone.png
    6 N- o7 E8 X3 ^  [0 ?0 M; y
  59. 木板:minecraft:textures/block/oak_planks.png
    ! g3 M9 v/ ?  ^1 p  W
  60. 黑曜石:minecraft:textures/block/obsidian.png' {" |- o" r# \* ?' t: H
  61. 玻璃:minecraft:textures/block/glass.png
    0 Q& b" I& I$ h
  62. */- e8 j7 p$ p) `
复制代码

! C( j/ [0 y5 Y
) @1 R+ k# e8 Y. m% ?放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。: _- D# x1 |% T- T9 V

; ^7 [4 F7 C4 Z) n% _7 q
; j! H: K- H! e3 g' j目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
! n! y. F/ _  D7 p  {& ~# f9 B$ C最后的最后 提前一个小时祝大家2025年新年快乐!
4 I5 p  Q3 ~9 I+ _$ h' U5 j4 z8 l( o5 g, N( u' t0 M
0 D/ x) a. D/ C1 P0 _- ?! F; H$ V

5 |8 f0 s# ]2 T9 P' z( a( `
8 P5 S+ a7 C$ p2 [: Z
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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:260 b$ g$ x: F% l$ I0 z
有点意思!

. @; E  X  M1 _5 l  {但是你那个当做站台好像即使√上了也没法使列车开门& Z5 D$ s) O, l4 M' v
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35( G8 t1 w* ]6 q( a) n% P
但是你那个当做站台好像即使√上了也没法使列车开门
) L8 q) V7 P4 g/ G2 Y" @
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32
2 e& E  G% s8 z; d9 H7 x6 P9 O?不应该啊 我这里测试好使着呢 嘶

4 {# {0 @/ U, ^, i当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:259 N4 z4 y( N8 Y. ]
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
! U' {- C& _; O  J2 P; c! K; z
是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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