开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 ) Y# N' L" I! U8 D5 P

3 `/ Q+ W3 M9 R* |8 Q0 M- ?1 {) B; u2 _1 T3 F3 O+ x
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
: J/ I  [9 K7 g5 q; v( s4 u0 K9 \0 {3 V0 Q- H9 Q
! m- X% e$ _; X' `# ]; t. S- \' T! {% S! ~
) Q- `$ \( B# w3 Z( c6 Q
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
  {6 Q2 X% z5 k实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)0 U  I- ?2 N6 j* \* G; b6 L# k
仅供参考!仅供参考!请勿直接完全照搬!$ m% P1 Q  |! e- C$ b: ]0 u/ m4 u
  1. //加载模型
    " v+ V- @* t, p8 a$ N( @  w, @4 l: N3 ~
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面9 l( l% Y# n  l' u* n/ ^0 Q
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    . i* O9 ~9 {4 e* F7 u8 ]; ~/ j% G
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
    ( \, Y+ f) V  w7 F0 y5 O8 a, h
  5. //翻转 V 坐标
    & a% x4 P  ^  @
  6. rawModel.applyUVMirror(false, true);
    ! b  G7 m# e, P. n! B/ g
  7. rawModel_side.applyUVMirror(false, true);6 q6 D. `% Y1 ~! v8 U. f. y( i" C
  8. - v' T3 f$ f0 }- q. m
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)& `& J' `* A0 h. [' d/ b7 L
  10. let tex = "mtrsteamloco:models/platform_45.png";
    . J: M9 v4 Y/ `! X
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";% j( g0 n; c0 Q
  12. function create(ctx, state, entity){7 `2 B# y2 e7 f
  13.     state.platform_side = new DynamicModelHolder();
    7 O4 w/ \. ?7 ?! Q# j2 S
  14.     state.platform_side.uploadLater(rawModel_side);! C0 c, L# i$ q8 t+ f0 Z
  15.     state.platform = new DynamicModelHolder();; Z2 U! v$ v% W0 L4 a$ x
  16.     state.platform.uploadLater(rawModel);
    * x% f9 D$ i* A, a8 T2 e4 M

  17.   R! ^8 {- K2 M3 N7 _1 N- b
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据+ O: z( F0 j$ F) o6 v" S3 Z; \, [7 C
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
      S% y5 N% n4 X0 o
  20.     state.tex=tex;$ t  ~4 t# y) d! k. E0 c% m/ {/ p
  21.     state.tex_side=tex_side;& E+ f2 A+ ]% z: W
  22.     entity.data.put("texture", tex);6 \6 |6 W  |+ o) g7 o& N- }
  23.     entity.data.put("texture_side", tex_side);8 l, Z4 F* r" C- ~' m8 x
  24.     }
    9 E. F3 l4 l5 N% R
  25. }
    ' n6 B9 i; T  W, p& X5 v7 t
  26. function render(ctx, state, entity){/ y* I: A- J7 y& r
  27.     //获得DynamicModelHolder中的模型+ G9 t/ D5 B7 D" w+ e- F3 E: B
  28.     if(state.platform_side.getUploadedModel()!= null){5 n8 C! I+ {  B: U2 V: U" H
  29.     plsModel = state.platform_side.getUploadedModel();}
    , x+ M$ i* U+ ^1 C+ ^$ `" X
  30.     if(state.platform.getUploadedModel()!= null){
    : T/ |2 `& P: H& a+ h
  31.     plModel = state.platform.getUploadedModel();}4 o: c+ X5 s8 @8 a$ `
  32. + j' W7 [$ R! ?* p+ R  F4 w
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    ; Z* k( v8 q) m1 J* v
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    1 t# ~) e$ H; P8 ^
  35.     file = String(entity.data.get("texture"));
    / G* \6 }' ~1 D7 S- k! I# x/ G
  36.     file_side = String(entity.data.get("texture_side"));, X" c7 a* E' t  `! _" f
  37.     if (file != state.tex){
    % `( s5 d5 j8 U, T
  38.         state.tex=file;$ J- \/ c# _2 `8 J( S+ A2 X8 R# l
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
    ) X( k( B  }3 n8 x: `; c. d
  40.         }- F* t1 q3 K# g+ F1 b
  41.     if (file_side != state.tex_side){
    & M: ~- i7 X% Z
  42.         state.tex_side=file_side;
    % b$ I: v+ O& l  l+ f
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    6 N. F: U% |/ X6 r' j0 T/ n
  44.         }) W0 H9 s# I/ p0 B7 e  V

  45. 2 B8 J% `3 w+ T, A
  46.     //绘制模型" R* v4 E$ V& F' k( r
  47.     ctx.drawModel(plsModel, null);% T; L5 K% S+ S. w8 g
  48.     ctx.drawModel(plModel, null);
    3 h" r% X4 r" [; n* D9 C0 y
  49. }
    : E9 C0 P2 v: F+ T4 T
  50. //当模型离开渲染距离时,关闭它以释放内存
    6 F0 I0 e* p+ R3 O7 W
  51. function dispose(ctx, state, entity){
    ( F9 W8 o# P$ B; Z& }$ `8 {4 e, G
  52.     state.platform.close();7 D& l3 d. o8 L5 m8 @4 @. }) _$ L
  53.     state.platform_side.close();}5 _. w4 ^3 [7 b- v% H! u9 j9 {0 e3 p

  54. * @. y) M( X! Z$ P* J
  55. /*常用方块ID列表
    ! X  ]8 A) S+ Z" \! Y0 _8 ^0 X. e
  56. 默认顶部:mtrsteamloco:models/platform_45.png
    : ?7 U7 z) @: ~* w% l
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png0 m4 u- R2 T; V. V9 J' n5 A' V4 U
  58. 石头:minecraft:textures/block/stone.png
    5 _& w: Y0 T# z) P
  59. 木板:minecraft:textures/block/oak_planks.png5 f- o. @0 ?7 }! w
  60. 黑曜石:minecraft:textures/block/obsidian.png
    ( e- T( j5 n) b
  61. 玻璃:minecraft:textures/block/glass.png$ E+ O: o' C# q  }
  62. */9 u+ X1 S- O# Y, d3 n/ b
复制代码
* h  `5 [! W* e8 b+ V7 z
" @6 j( a' B/ Y, Q7 f
放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。% ?6 q1 Q( o! o: P% e; d
1 g: M/ j5 ?. L% }

/ l! ^" g6 x" t5 J: E" K! {: v目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见; l! b% T. y) p0 M. y0 L
最后的最后 提前一个小时祝大家2025年新年快乐!( G1 b; k: h- A$ ]

3 p' ?& N' u* f) M, j$ {% G
# G+ S) |  v& }2 Y$ Y. f* p/ l
3 e8 k# q4 O  Z; F! Z0 A6 F' c4 @' _2 x! N8 Q" [& r" l9 S9 O
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

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" Y4 f# A1 s% a. v7 U% r9 Y
有点意思!
- g* F+ [. G% }
但是你那个当做站台好像即使√上了也没法使列车开门
% a7 M3 T4 z- C2 D, j$ b* N
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35, M8 x5 \# k$ v0 F7 h
但是你那个当做站台好像即使√上了也没法使列车开门
4 ]. m3 f& E+ Z* J
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
回复

使用道具 举报

楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32+ b( P8 J1 o  c: ^( ~" {
?不应该啊 我这里测试好使着呢 嘶
8 i5 k) Z  @" ]2 F) J
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25
6 m) r2 J* L: A当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
" T3 O! V' B/ T0 g
是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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