开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 ) ~6 e4 R$ p  h7 R4 c- u$ v
5 N+ M* `# T. `8 p7 D

8 Q( Q3 U1 C5 y$ N$ k% p3 f由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
* L# v' m$ Q7 Y  A  u& ?
6 c+ W+ _. `; h
, J  d' I" W) O! [
* M+ T+ N1 ~/ b: A( \% J
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
% Q) i( @3 ^7 h, g实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)! J3 f6 i- Q; J# {* I/ _( l8 T, ?
仅供参考!仅供参考!请勿直接完全照搬!
; z" V2 z1 a& h% {' V8 C1 B
  1. //加载模型
    : v3 D' H% E+ f0 S. A4 \
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
    / c7 U; G  y% N
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
      P' o" @5 I: j) C% _# @. }
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
    # f  }$ V8 }9 x; M
  5. //翻转 V 坐标
    0 N+ p6 y& i/ U
  6. rawModel.applyUVMirror(false, true);
    ; h% L2 U; K2 U6 e7 C
  7. rawModel_side.applyUVMirror(false, true);; Y7 L, N# ~0 @/ @3 H+ U

  8. 7 G. U  a9 n: m6 d: @4 P& V6 \
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    # w/ Q% P" ~. }5 ^* m
  10. let tex = "mtrsteamloco:models/platform_45.png";& y5 |! ~; n+ O$ ^, P* n) U( }
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    $ h* `- x9 U; d
  12. function create(ctx, state, entity){
    . }- \( i+ _0 G( K$ r$ Y7 \+ |
  13.     state.platform_side = new DynamicModelHolder();
    ! R9 ]" }; _+ V
  14.     state.platform_side.uploadLater(rawModel_side);
    " {: E5 f) m5 X' K
  15.     state.platform = new DynamicModelHolder();
    / |! l( n$ F! W; O
  16.     state.platform.uploadLater(rawModel);
    : A8 J( P" k. l& J

  17. ( U0 \/ j) m* r% l( ^- o
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据8 w: ^: [, g" d4 A0 C1 F
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    4 p1 X9 i0 o; t" K9 ^' Q( P
  20.     state.tex=tex;& H3 G$ v, j4 ~: {' w: M4 g
  21.     state.tex_side=tex_side;
    ; U2 F( D/ a4 I* a$ ^
  22.     entity.data.put("texture", tex);
    ! d0 H3 g3 a6 r) \) `
  23.     entity.data.put("texture_side", tex_side);
    5 {& p# \0 H, {+ ^) p) G) a
  24.     }! C+ Z: t2 b% ?) X/ s& A
  25. }8 w7 M) t4 i7 y0 z: |
  26. function render(ctx, state, entity){
    , ?4 M, k9 ^5 Y. S/ ^) Z
  27.     //获得DynamicModelHolder中的模型
    - X/ [# f! e$ i  ]' c& G
  28.     if(state.platform_side.getUploadedModel()!= null){7 @5 e% q2 }1 T+ Y
  29.     plsModel = state.platform_side.getUploadedModel();}
    $ A% X$ I$ b/ t" U4 i+ ~
  30.     if(state.platform.getUploadedModel()!= null){
    4 F( M$ n) Z* h4 u& |4 y0 V2 \
  31.     plModel = state.platform.getUploadedModel();}
    ( H: Z, L6 p; V
  32. 3 q, n* w0 Y# Y3 c( X3 R3 [* c8 d+ Q
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    ' V; o$ P3 X- @/ Z. C$ C* B
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理5 g1 v9 W) `% K+ Q
  35.     file = String(entity.data.get("texture"));$ j' E4 `  q0 y3 c5 ~- ?4 n
  36.     file_side = String(entity.data.get("texture_side"));9 _0 e- e* ]- P9 Y% a; Y& w
  37.     if (file != state.tex){
    : `9 ~9 Q) ~) T# K- c( i; J9 Y
  38.         state.tex=file;" K( Y  @7 n! P- Q# X7 |
  39.         plModel.replaceAllTexture(Resources.id(state.tex));, G# K6 ]: ~9 {$ A7 W7 X/ `: N
  40.         }
    + A2 x7 C% j! \1 s
  41.     if (file_side != state.tex_side){
    ) ^* W7 o+ w3 A1 a/ E9 `5 g
  42.         state.tex_side=file_side;: S. ]3 l0 q& T* Q# q+ M9 s
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));) {! @2 |3 h7 Q. Q
  44.         }
    . Z3 f1 n" c# V) ^9 C% V
  45. 5 x) J& M1 g4 Y6 M/ \( P3 O
  46.     //绘制模型
      P1 q; t# B7 G' q4 Q
  47.     ctx.drawModel(plsModel, null);8 \) \9 P1 K$ M
  48.     ctx.drawModel(plModel, null);
    6 n# Z4 V/ t( ~6 ]9 z) D/ |7 e
  49. }  `- B# M$ b$ f4 v/ u
  50. //当模型离开渲染距离时,关闭它以释放内存2 K1 l" ~- v+ e1 V2 u
  51. function dispose(ctx, state, entity){
    ' G7 r+ ]4 ?) e, Z1 L2 o3 i
  52.     state.platform.close();
    $ o5 g9 d8 G) f8 e
  53.     state.platform_side.close();}
    9 M& y: k1 s8 j0 ?+ Q7 x
  54. & x1 H7 N' y: H4 k  V
  55. /*常用方块ID列表- |2 r7 A) o% S
  56. 默认顶部:mtrsteamloco:models/platform_45.png
    9 l9 e, w3 L' r/ i1 J: J: j
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    ( s# P* @- W# b3 y1 w! c( R/ g
  58. 石头:minecraft:textures/block/stone.png0 z6 n7 ~+ u) a  ]0 e( c
  59. 木板:minecraft:textures/block/oak_planks.png+ x7 K: g5 X: u1 `
  60. 黑曜石:minecraft:textures/block/obsidian.png
    % K- c, R2 l: z6 N* c3 K1 H+ e; `
  61. 玻璃:minecraft:textures/block/glass.png
      ]; r5 |5 b+ o6 C3 R" n0 Y7 j7 i7 U
  62. */; i0 A. w2 d/ h7 {
复制代码

# X! F) V8 _& y" _7 b, s. U5 c" ~
9 a! K0 A% J8 l! V( K5 y. J放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
3 u: x- ~+ z- R5 H; }4 ]/ N* d3 k) z; w) _0 r+ W: A+ y

" H& r5 ^4 Z% d% w8 W) [" i& ]目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
( q( p: y1 l( {6 q- z/ w7 p9 |6 x最后的最后 提前一个小时祝大家2025年新年快乐!
+ d" l3 S( O4 s5 L
5 S7 J3 B% s/ `* h2 S. e3 V  Z  k9 \/ H5 Z8 k

: X8 C% q0 U2 B. a5 b7 N" W! V* w4 G: P* q
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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
" u* Q2 `3 D3 T0 ?6 J. O有点意思!

* Q" L) W4 X* ^% V: h+ X但是你那个当做站台好像即使√上了也没法使列车开门3 F  q: z2 e/ S. l5 \* z- {+ ?
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:357 Z' l) _$ y! E& d& d. H5 x# T
但是你那个当做站台好像即使√上了也没法使列车开门
8 ]' y. W6 J/ h% d2 L6 V
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32$ r( K3 i3 E8 E' @1 z6 x# H
?不应该啊 我这里测试好使着呢 嘶
1 y% P5 s) ^: P* `
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25# J1 t7 K4 E5 h" X0 f4 W
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

, w" @! e4 L( j& x  W$ j是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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