开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑
& w, i8 Q6 S* @0 P$ Y0 t
6 [! I) p8 o4 y, a3 |8 `$ D" z, v& O6 w+ i! j  Z
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
8 a1 S0 [/ m3 ~+ S( @1 D, c
; z3 L  n+ a6 s: f/ l+ \. s5 t% [8 h: r" F- Q
9 G( X, z+ o& \& `) D
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码
! |4 `5 C+ ~* o4 j4 h. S实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)1 M) D4 V) O/ I& B0 ^
仅供参考!仅供参考!请勿直接完全照搬!/ X, s: ]* H" X1 I
  1. //加载模型" I9 v7 ~: o1 u$ k+ l2 |. c# `. _
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面+ P# t2 }3 n* _
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);# t# I; \; i& H! |: D
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);! l" O( s2 ~! ~' _
  5. //翻转 V 坐标
    / H$ k- x; I$ B0 M$ r  m: U& G0 V
  6. rawModel.applyUVMirror(false, true);
    ! L. D) ?0 Z& f" `
  7. rawModel_side.applyUVMirror(false, true);
    8 l- Y9 ]. R4 h# f  N5 F- P

  8. ; T9 C: o' Z) j% i" \, N7 q& ^9 m  |
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    ' n2 J1 m* i: u1 P- _8 c7 \
  10. let tex = "mtrsteamloco:models/platform_45.png";
    9 [' ~0 a# A9 j" V+ y
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";
    , p% y5 Q4 P: A0 ^0 ]
  12. function create(ctx, state, entity){' n7 Z$ b# }# F4 N$ n
  13.     state.platform_side = new DynamicModelHolder();
    + e! q4 d4 q- [4 j) V; U+ u$ m
  14.     state.platform_side.uploadLater(rawModel_side);
    7 Z4 l# N/ @4 f0 p' p8 c
  15.     state.platform = new DynamicModelHolder();5 R3 J; O7 H5 g6 n$ d0 A& v$ }) u, T
  16.     state.platform.uploadLater(rawModel);3 S( V) G2 [7 r! W
  17. 3 N4 ~! s) `6 J" z& D; _
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据: j' p. ~2 `* W" S5 V  v) H
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){: Z8 N3 `% M, ^
  20.     state.tex=tex;' w4 K- k1 }' G& \
  21.     state.tex_side=tex_side;
    ! D8 ]3 n( `) s# d1 ~
  22.     entity.data.put("texture", tex);
    1 }% ~' H/ h8 R" h0 k
  23.     entity.data.put("texture_side", tex_side);
      n: ?0 [. Z" {- S
  24.     }
    ' r7 f! m" Y* e/ v) K$ d6 Z
  25. }- M  Z2 ]3 ?4 |2 C# I* v2 G
  26. function render(ctx, state, entity){
    7 [. m) Z  ?% M$ E
  27.     //获得DynamicModelHolder中的模型
    ! \! E6 n+ V2 A* b5 f8 b+ `5 d
  28.     if(state.platform_side.getUploadedModel()!= null){3 h5 E2 O2 ~, }; @8 h
  29.     plsModel = state.platform_side.getUploadedModel();}
    + X4 \' O7 I7 v) x$ }, I7 T
  30.     if(state.platform.getUploadedModel()!= null){9 `+ }  n* ?! R) C5 G
  31.     plModel = state.platform.getUploadedModel();}
    # R- T& b# O$ H
  32. " Z: x! {3 w0 l* H0 t
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    4 c/ Y+ Q& x' m  L! n) j+ B( d
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    ' }8 r5 e9 I! V4 M
  35.     file = String(entity.data.get("texture"));, K1 o: X& z; f1 I1 M: W
  36.     file_side = String(entity.data.get("texture_side"));1 ~  V( M" Y8 f' J; Z
  37.     if (file != state.tex){( Z& Q, m1 `: m% ~: p3 Z/ ?
  38.         state.tex=file;
    # Q  M% w& n- f2 ]
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
    ! `& Z. n, B) m9 K/ c
  40.         }
    . s+ I) [2 \& F
  41.     if (file_side != state.tex_side){( ]7 z! s2 C3 Y4 k2 x
  42.         state.tex_side=file_side;" I1 Q5 ]3 Y: F7 X$ l- o+ m3 I
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    " j7 z3 d$ ?- h6 ^5 m$ e& I
  44.         }+ d$ J- C* L* f# p7 x# o

  45. 2 t) k5 [( k* ^4 x# K; H. D8 D
  46.     //绘制模型
    , }6 k  F5 X7 i) C. b% w
  47.     ctx.drawModel(plsModel, null);
    / e0 X) a) c6 [4 D9 p3 l
  48.     ctx.drawModel(plModel, null);
    . \  D. i4 S1 T
  49. }+ g9 z, j1 c- r3 O$ ?! S" l
  50. //当模型离开渲染距离时,关闭它以释放内存
    5 q/ f5 r0 k' \$ i6 T" I
  51. function dispose(ctx, state, entity){
    3 O9 p& O  Z/ o2 u! R) q* U0 A" p
  52.     state.platform.close();
    " g5 W1 N+ |1 Y; t
  53.     state.platform_side.close();}
    1 i! K0 [3 V8 c- i+ y
  54. . J4 O8 ^5 N3 |9 p
  55. /*常用方块ID列表1 u- S% [% u3 R
  56. 默认顶部:mtrsteamloco:models/platform_45.png, }: V' y0 x! n# o. t& |
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png' D  H* S) I# X2 Y% n- Q$ q/ r2 w
  58. 石头:minecraft:textures/block/stone.png+ m* F# Y% S/ b9 @& E- J1 _$ l
  59. 木板:minecraft:textures/block/oak_planks.png
    ( y8 T3 G- U6 v- i4 Z4 N; X" R
  60. 黑曜石:minecraft:textures/block/obsidian.png
    0 e# ~, h( I: K$ n, I
  61. 玻璃:minecraft:textures/block/glass.png
    ; L5 v/ _  G+ r7 ?" a
  62. */) m- N5 ]! r% \! B* T
复制代码

; s" |) F* F6 f& f- _4 @' m
7 v1 h# C' v! l" _; n, y放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。
, ]- L4 C& B/ ?% f. j! h8 H  x) j1 ^9 U1 b

% h( ?- E- |5 i  r2 A目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
5 A# \6 j- Y) v! y1 \最后的最后 提前一个小时祝大家2025年新年快乐!" {. [0 Z$ t+ I$ ?* h1 U# u( L

. {% p& x$ {) \: R: d( r& U. {3 L  s! y
' r- F/ E8 X4 y9 j+ f
) F/ ?. a; `' j* R1 a! i) 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/ A1 P  b- P. s
有点意思!
9 f& I' F2 l+ }) }+ K7 @& m
但是你那个当做站台好像即使√上了也没法使列车开门3 ~8 f. z  w0 w2 q% @% g
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35
/ s$ q  h& s$ _: `但是你那个当做站台好像即使√上了也没法使列车开门

2 ^( C% r; i; G  X6 b/ l+ |5 ~?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
回复

使用道具 举报

楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32& F* m& R5 s5 ]0 \5 S1 ?
?不应该啊 我这里测试好使着呢 嘶

! D! R" k6 q0 T! g/ {4 w" i当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:257 T1 P2 ?) B$ X+ o9 n
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

' E0 q: l) a; _0 G/ S是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
回复

使用道具 举报

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

本版积分规则

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