开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑
: r0 h9 k3 O, W; {% B* v9 Q& S8 O: B5 t3 X- t' Y; E  R

  p% P# g4 c8 h. E由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
& B6 m7 u6 H! ~
1 R- N4 B; x0 @* O: I8 a
  l$ v2 j, `* _/ m- Q& \
/ w7 o6 c4 d8 I5 t# }
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
# l2 `2 n6 h; \! Y+ ~实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
  n& k; S* J$ u. G. S- n7 Y- N仅供参考!仅供参考!请勿直接完全照搬!
; o+ n) ~/ V2 v7 T  X- A
  1. //加载模型
    7 Q* Y7 j  M8 u; a' H$ @
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面; ^& v5 L) ?! Z1 X; F' M. d
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    ) _9 L2 r* ]+ I' b. n- R( I) ?
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);( N3 w: ?/ z! Q1 v
  5. //翻转 V 坐标; D- w- Z4 @( i
  6. rawModel.applyUVMirror(false, true);
    : i$ M! |, q# w+ {0 v. r- I
  7. rawModel_side.applyUVMirror(false, true);; D( p$ k& C7 E  k" m

  8. " [: ^8 I1 Z( \4 i$ c
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)& x) V& D; v3 N" k0 D
  10. let tex = "mtrsteamloco:models/platform_45.png";* b5 {, p4 f4 b5 H$ n' x3 A, x( p
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    2 j; [. @4 R/ e& T4 m( W% p
  12. function create(ctx, state, entity){$ o  @6 Q5 u) @5 y  F/ d0 {
  13.     state.platform_side = new DynamicModelHolder();
    - K& @) M& y0 f/ L. A; }
  14.     state.platform_side.uploadLater(rawModel_side);) Q; D9 |1 p6 e
  15.     state.platform = new DynamicModelHolder();
    $ N3 m% P' w' ~
  16.     state.platform.uploadLater(rawModel);
    7 E/ y3 |$ `& ^

  17. + B' t2 t% N' I2 V5 g
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    8 {: h) d) ~( C) t- i: R& n
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    & U1 D5 E/ @. k
  20.     state.tex=tex;
    ( t' |3 C9 d6 L* Z4 M$ w! Q, w
  21.     state.tex_side=tex_side;# z+ T1 w: I: d
  22.     entity.data.put("texture", tex);! {* o8 R2 m- G. F- S/ F4 I
  23.     entity.data.put("texture_side", tex_side);
    : Q1 ]1 V/ Y2 ?0 L
  24.     }6 J0 d. W% R3 h$ l$ O" h
  25. }5 ^% \5 b& y$ t. P$ D: k+ l
  26. function render(ctx, state, entity){& `4 K5 I: J# p  O
  27.     //获得DynamicModelHolder中的模型+ `, ]. e  v5 |/ e
  28.     if(state.platform_side.getUploadedModel()!= null){
    & {& M+ \0 S! H" H% a+ p% O
  29.     plsModel = state.platform_side.getUploadedModel();}
    ! t5 l) D- I2 Z' J# \$ n
  30.     if(state.platform.getUploadedModel()!= null){4 D, J3 Q) r; z5 r
  31.     plModel = state.platform.getUploadedModel();}  e# u6 d5 }4 m8 o3 ]

  32. 4 ^; h' e1 `. ?5 ?$ @. m
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理- h2 T; x1 M6 }$ h! L" A. ?6 x( r
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    ! Z, l& r& f4 F; l4 g
  35.     file = String(entity.data.get("texture"));
    # h2 p6 f$ s; B+ I4 a
  36.     file_side = String(entity.data.get("texture_side"));
    2 o9 @/ G' V( e* K" b0 B
  37.     if (file != state.tex){
    7 p4 A) d* o4 }0 a
  38.         state.tex=file;, B; F3 f& O8 B6 t
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
    7 j2 T8 N: [1 y  J) g3 N
  40.         }. M% Y; w( N. q0 |
  41.     if (file_side != state.tex_side){) m7 u7 h8 S: T3 Z1 B% {, v7 S
  42.         state.tex_side=file_side;
    5 [: K- f" k+ V9 Q  d9 M- Y
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    , l2 L, M5 U9 f( a  _, Z6 z. v/ V
  44.         }
      \8 g4 Z: J' X4 e
  45. 7 {: z- d  C% ^9 s% |' k( P
  46.     //绘制模型  I% Q: G, |; W: k7 o) j
  47.     ctx.drawModel(plsModel, null);: o; V+ x9 [9 _
  48.     ctx.drawModel(plModel, null);
    8 ?: ~4 j- o+ w6 M9 q
  49. }! ]% T; a/ J" y/ x; X+ Z
  50. //当模型离开渲染距离时,关闭它以释放内存& ~) x7 H$ H0 ?/ \) b
  51. function dispose(ctx, state, entity){; W5 a, q! c' c& @7 q
  52.     state.platform.close();
    5 P; Z. z( W( `8 g2 o9 ^
  53.     state.platform_side.close();}8 \5 U. f1 v! N2 K( }+ D) i/ b9 T

  54. $ R3 o3 m6 \! t+ R" C* u
  55. /*常用方块ID列表
    ( Y) V& |1 T' A( @; J
  56. 默认顶部:mtrsteamloco:models/platform_45.png7 u+ k4 J& g4 A1 w: E
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png  a1 ^& n! t* B$ N. K) H
  58. 石头:minecraft:textures/block/stone.png" M( j# h3 E9 `$ r% S
  59. 木板:minecraft:textures/block/oak_planks.png1 w: S, y4 q4 r9 L" N/ U
  60. 黑曜石:minecraft:textures/block/obsidian.png
    $ Y6 b/ E: ~* F7 B# F7 U1 p9 t; b$ }
  61. 玻璃:minecraft:textures/block/glass.png) A0 l3 i6 [  x
  62. */# R$ p. D0 I' u* h' g# W+ }9 j* }. K
复制代码

* b8 `6 o* L- R" j- W. c
% s5 S# W9 K* u- V; B5 e3 X放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。6 D1 F4 E# M. d4 H! x! v3 H
4 C4 ^  H8 J0 R

; ]- V: m* @6 H6 V* X/ J目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见# `9 v6 q; h. w# @  K4 N3 Z
最后的最后 提前一个小时祝大家2025年新年快乐!- t7 {; E- l7 T, h5 e: Q; {" Y( T6 P
& t8 s9 H0 @9 w& h# l

7 }* l4 T* M) @0 P- l4 z+ C$ _5 M3 P4 J  X' J& [

) ?7 t: h, J6 \7 ~! G& ?
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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, V1 `2 G5 X, E2 Z. A
有点意思!

0 a5 M: b. S2 _2 J4 A& O但是你那个当做站台好像即使√上了也没法使列车开门
0 C- t) u5 H  m' r  T3 K
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35+ p5 u9 B0 L! s7 W* V% ?: s7 B9 n
但是你那个当做站台好像即使√上了也没法使列车开门

% j$ v/ D( j  y1 Y/ T! G?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32* o) h- B1 L2 {' D
?不应该啊 我这里测试好使着呢 嘶

+ a0 i4 V' b" S, P+ c' Q当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25
7 i* G. C, b7 _2 d$ Z当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
, q0 T; P" @, J6 J. n
是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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