开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 ! }8 S1 _4 k( O

1 c/ z7 Z7 y$ Q, p1 w+ w. e( l. m7 t4 z! P# ?
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
* j2 |% x. j1 T
0 y/ P) q8 ?( a/ H; T3 x- r. X1 P2 ^: u* h- a

: }, z) G0 l! n/ e9 n我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码! K4 m8 w1 T5 m9 M
实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)
' J8 u& W: y7 |: l, A$ }4 g. a仅供参考!仅供参考!请勿直接完全照搬!9 O7 p: ], ^# g6 q: H
  1. //加载模型
    , ^) I  A2 E9 {  }
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
    : f/ Q% Z0 z( Q& Z
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
    3 J  P7 b" _% N
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
    ' w# P# p- C' b% q$ G" r
  5. //翻转 V 坐标
    : [. E, R& p0 P2 o- b
  6. rawModel.applyUVMirror(false, true);0 [& d2 ^6 J, W% b0 |% {& |1 q
  7. rawModel_side.applyUVMirror(false, true);9 w  @. H- m& \

  8. 2 W; b1 v& |0 ~& T: G
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
    - ~/ R4 @' a. C
  10. let tex = "mtrsteamloco:models/platform_45.png";
    " _7 N7 x9 m+ q7 T" G2 ~
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";8 e1 W& x/ T4 g6 o7 Y! S
  12. function create(ctx, state, entity){  q  g; p' e  r- b& B$ o
  13.     state.platform_side = new DynamicModelHolder();
    ! C& N+ Q( Q8 g  l
  14.     state.platform_side.uploadLater(rawModel_side);9 U* I+ C! p# P" }1 p& a1 I
  15.     state.platform = new DynamicModelHolder();: t- H6 K4 M) z2 }
  16.     state.platform.uploadLater(rawModel);
    2 G) I8 s9 u( P

  17. # Z3 J' K0 \' w8 h7 U4 c
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据3 R% ]- `8 r- K# t9 }. s3 ]7 V- ^
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    1 F1 Y) B7 L; ~/ U1 J
  20.     state.tex=tex;
    ' F' x/ X" N& ?  d2 s2 b4 Z
  21.     state.tex_side=tex_side;% Z' }6 [0 u: z- ?/ B8 L: i
  22.     entity.data.put("texture", tex);0 j! B, _- E& \- l3 r8 c* A
  23.     entity.data.put("texture_side", tex_side);) E2 s1 f0 L; S. F8 E/ c7 v- {" Q
  24.     }4 m! j0 A7 J  P$ M& V
  25. }4 r4 G0 v  @, x* t6 l3 n# V1 h+ w' D9 M, Q: }
  26. function render(ctx, state, entity){0 |8 P7 g  j9 s% M; N
  27.     //获得DynamicModelHolder中的模型! m+ [0 L* p' R) b" O
  28.     if(state.platform_side.getUploadedModel()!= null){
    , f) Q6 b$ C+ A% ^. c) P' S
  29.     plsModel = state.platform_side.getUploadedModel();}3 K/ i% ^8 o6 ?" |
  30.     if(state.platform.getUploadedModel()!= null){
    6 E; R, X) t# P  P; d+ f
  31.     plModel = state.platform.getUploadedModel();}# `4 h* Z7 Z: [. V9 I/ u4 M

  32. ' M* h! M0 m  o. D6 d4 a1 Y2 g
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    ; g/ N* p( M9 }: w, x) l' f- o
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    # w9 E; {6 M* R7 p
  35.     file = String(entity.data.get("texture"));, ^+ F1 R( ]  q# J# T% K6 X* Y+ I, h
  36.     file_side = String(entity.data.get("texture_side"));
    ( j$ j% u, d) K5 w" F, v$ X
  37.     if (file != state.tex){2 `# `# d6 _, w
  38.         state.tex=file;; @" E8 r( c2 O! D' a0 @
  39.         plModel.replaceAllTexture(Resources.id(state.tex));; x1 \4 k* d9 I. P
  40.         }) }2 v3 S& k2 @1 Z7 O  @
  41.     if (file_side != state.tex_side){; P* p) t, S! [$ d, @5 K
  42.         state.tex_side=file_side;
    ) E4 J0 j3 E5 m
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    4 N/ D( ~. }+ F: C: C4 s% t) e& t& `8 T
  44.         }
    3 w' Y. y7 q6 ?- D" w- z

  45. / K. i9 _7 _8 k* o) I  Y
  46.     //绘制模型
    8 P1 E3 B( l9 V3 n
  47.     ctx.drawModel(plsModel, null);
    6 O( ?; Y1 L9 p# e+ A
  48.     ctx.drawModel(plModel, null);0 @: a9 m+ M, ^0 S" C
  49. }# D8 k! C" s8 P" r1 q( y7 H, ]
  50. //当模型离开渲染距离时,关闭它以释放内存
    ! ]# E4 R% H* P+ r. ~; F; o% |/ L
  51. function dispose(ctx, state, entity){
    5 Z% Q" m. A  [3 m3 I
  52.     state.platform.close();
    , K4 p( {* U# S  ?9 q7 n2 K. U) |' k
  53.     state.platform_side.close();}
    ! \7 w  {  }" j

  54. : [; u( \' v4 v: q) Z6 w7 T* y* O- F0 @
  55. /*常用方块ID列表4 z) ]# @; J  b2 L6 h
  56. 默认顶部:mtrsteamloco:models/platform_45.png; g- T! n4 k6 h- f# R( n
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png6 M. d7 R8 i1 {# L& P" U
  58. 石头:minecraft:textures/block/stone.png6 E0 G4 u+ D2 `, p8 J* X
  59. 木板:minecraft:textures/block/oak_planks.png4 c* w. N( o& n+ m! F
  60. 黑曜石:minecraft:textures/block/obsidian.png' y" v% E+ c( ^6 I$ G3 [
  61. 玻璃:minecraft:textures/block/glass.png
    % _; l$ y; G7 s: V9 K
  62. */  ~$ z" _+ t$ S5 }" R$ j# C1 Y
复制代码
8 f2 M4 H7 ~, c( [2 V: }

9 n! p. e! L8 C9 A放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。8 A" w5 f5 W1 S* \6 \1 e/ q
. n' b9 [9 [) i, o, C+ I% b

9 g, k2 A- A) x, Z6 D8 \$ ~; w目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见0 A- ~  p7 {+ U4 B
最后的最后 提前一个小时祝大家2025年新年快乐!' ?) D, z+ F# F# B6 ~

: ^# b+ y- ]' h! Y& U$ z' `( ]0 h  A$ ~+ K, v) B

1 T6 q; [# X. w( ^. b  Q; ~# A; w. ]: e8 t- V" I
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
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- e1 C1 V1 k) _5 ^1 r
有点意思!
1 t0 J0 w/ h2 ]9 p! T0 B  \
但是你那个当做站台好像即使√上了也没法使列车开门' X9 k2 M- V7 z% Z% |3 F0 o
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35- H8 s2 c  c% i2 O) }; r6 _
但是你那个当做站台好像即使√上了也没法使列车开门
: _0 O( r& ^' [4 ~# t9 d. y# X0 o
?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32
2 J% p$ G$ p0 J' g6 E+ |- y?不应该啊 我这里测试好使着呢 嘶
5 B+ s- {, [& m$ S% F# X- _- {
当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25
& _+ X+ A1 m  c  w- ?当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

: ~; \6 i' {+ [6 l6 C是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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