开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 / j, m' Z1 R1 X

2 E, t% J  {: y: ~8 J, D# [$ T% Y( T& o
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用5 o6 w7 J+ {6 [3 O9 g
2 X. W  d: a  G+ d; {! M5 L* \1 v
8 f! l' f( b5 G* Q- C) c$ O

6 m* R' N+ G  H8 T7 p8 o# x我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码/ [% |3 D% Q  y; S* |9 K
实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理), A4 _; O  t; X1 f; d
仅供参考!仅供参考!请勿直接完全照搬!5 J0 }$ `! p2 @. T; k
  1. //加载模型1 h' C" U' W4 A4 S7 Z, ^0 f
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
    . [+ f; v5 |% e# o7 ^, [8 @
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);; B& d) D8 ^* A0 m" y9 B
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);1 h; W$ b4 F4 I' L4 I
  5. //翻转 V 坐标5 v+ R' M7 r1 I! p% |+ @2 N
  6. rawModel.applyUVMirror(false, true);
    ' J' {5 v+ p$ {
  7. rawModel_side.applyUVMirror(false, true);* N3 M" Z3 l; H, Z* v4 b; e

  8. / ?) s' g2 I$ b* \8 H
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    8 ~' z% k5 D& K2 z
  10. let tex = "mtrsteamloco:models/platform_45.png";6 P- ~3 x/ |, o: g; }$ O3 M
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";, T0 z+ X6 C% Z: _. L6 u
  12. function create(ctx, state, entity){
    # Q# g# u7 O; J9 \9 v" ~  r3 i% l
  13.     state.platform_side = new DynamicModelHolder();
    : D# a3 ]$ t/ l9 O& V* @
  14.     state.platform_side.uploadLater(rawModel_side);
    - w' G: G+ s) X4 I, O, J
  15.     state.platform = new DynamicModelHolder();
    ' ]8 @, A! k6 M) i
  16.     state.platform.uploadLater(rawModel);1 c( y' \; O# ]! G

  17. - C0 _& _! z' m$ f0 P
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    8 a& F) e( t+ a7 f1 f, V" N, b4 w7 i
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){, B! E8 N% E5 Q
  20.     state.tex=tex;
    4 {+ T2 M. K$ \, ^
  21.     state.tex_side=tex_side;
    : y' e1 L, o( ^0 ?; @& R$ a
  22.     entity.data.put("texture", tex);9 w$ X. ?) G* g; Y) W: n# \
  23.     entity.data.put("texture_side", tex_side);
    9 w# ]& J: A* S5 w" V( m  m
  24.     }
    0 X; T' l9 k. h( U+ B* n2 ]. X5 S
  25. }" ~0 _% p0 W1 t2 H
  26. function render(ctx, state, entity){
    / Y: x9 G9 ]# t: Z
  27.     //获得DynamicModelHolder中的模型
    6 ~- C9 l3 q& f8 e  z1 u
  28.     if(state.platform_side.getUploadedModel()!= null){0 x8 N6 d! k  b  e! \+ B: j  _
  29.     plsModel = state.platform_side.getUploadedModel();}
    : a9 s# O1 [. f% w5 y- ?
  30.     if(state.platform.getUploadedModel()!= null){
    1 I. g- K0 I5 Y2 ?) k# q
  31.     plModel = state.platform.getUploadedModel();}
    4 W2 W6 c  j1 |  w8 @) b6 o

  32. - E& q* n! a* ~& Q  B
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理% U8 L, ~  N  Q, G- e1 z
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    ( ~! E1 U. S# K! N( N0 l
  35.     file = String(entity.data.get("texture"));
    1 X, B2 H4 m: u( n
  36.     file_side = String(entity.data.get("texture_side"));
    1 `; q! ^# I2 R" r6 O+ @  S3 ^
  37.     if (file != state.tex){
    0 Q( W% M5 Z; P8 Q1 p& G( }7 b4 T
  38.         state.tex=file;
    ) {/ H1 M: B" a3 R
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
      L9 M7 B0 J/ O5 d7 \+ D
  40.         }3 s7 t# A' j- {, A# m8 }1 j; |
  41.     if (file_side != state.tex_side){
      t2 P( p9 r0 u
  42.         state.tex_side=file_side;! o% H  \0 U& G4 \
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    0 C! G& ~# o  |2 q* z6 g3 |
  44.         }
    0 M( n0 _. O+ N* l2 Y& U; q

  45. $ N1 V4 S* `3 }  p2 |
  46.     //绘制模型# b: R9 N1 y1 x, g
  47.     ctx.drawModel(plsModel, null);9 v* R9 H$ m+ S9 P) g7 o
  48.     ctx.drawModel(plModel, null);
    . t0 t: O- K' z; r7 X
  49. }
    * I& S: n9 {# h9 |
  50. //当模型离开渲染距离时,关闭它以释放内存
    6 j2 Y) G' V% b, ~. L- Y7 N7 I- h; m
  51. function dispose(ctx, state, entity){
    2 i# a9 u& C3 r6 d
  52.     state.platform.close();" X$ p0 P! A$ m8 e, q7 z+ T! Z
  53.     state.platform_side.close();}
    9 ~1 ~0 \: y  i' [8 {' Z. u" J

  54. " S! i& Z- y9 ~7 H! O
  55. /*常用方块ID列表
    3 @! t' T* \' d8 E% M: v
  56. 默认顶部:mtrsteamloco:models/platform_45.png3 P) ~' R1 ?% C: }/ h) t
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    * x1 q, y& D0 Q( ~; E2 K" V0 J" x5 b# B
  58. 石头:minecraft:textures/block/stone.png9 Y% T5 C  I5 a0 M, I8 n( |+ _3 g
  59. 木板:minecraft:textures/block/oak_planks.png
    ; t) P3 C7 v7 _( G
  60. 黑曜石:minecraft:textures/block/obsidian.png4 a, p* X, I4 n' E
  61. 玻璃:minecraft:textures/block/glass.png
    2 F. A1 v6 j: W) g2 b9 S
  62. */
    " W8 V2 W6 l/ J
复制代码
8 a; O) x# \. ]0 Q; p& u# M
% s* w' A" h5 [7 Z7 b" A, z4 `
放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。& j5 N0 z0 J! k2 S- o

5 T+ I% u: j5 o4 S- O7 e! C  ^( z) J* R) f1 ?* |
目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见( N& O: F4 @9 L8 e) l
最后的最后 提前一个小时祝大家2025年新年快乐!
: R' b" m- n6 y; p6 H: [6 _& O* N- Y+ A) @: \/ d& J
2 k8 a$ k; q6 i+ _

, D4 [5 \' C8 w3 Q. R
+ P7 h  e( c$ T4 U
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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+ ]" i% ]9 z( j1 Z6 u1 ^2 v3 y" Q
有点意思!
' L; B* q5 q# u5 Z9 M
但是你那个当做站台好像即使√上了也没法使列车开门7 e- D# p# Y: L( R9 G
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35
3 v% k0 f( p% G! d& N但是你那个当做站台好像即使√上了也没法使列车开门
: D( I3 z7 A0 _
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32
# Y. n: E8 F. U$ R9 b/ j' C+ x?不应该啊 我这里测试好使着呢 嘶
7 I( |& X8 X5 r0 f) j' ?( M7 b1 u% j
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25
8 B& Y- O4 w3 @6 C5 |, h, z当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

% n, w# v  m/ X8 ?是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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