开启左侧

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

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

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

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

×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 : j! o. S; u! Q% P# r

  T! |% o: t! [  `4 f
# M3 V8 o, P! I2 Q3 b" ^由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
$ }, e" F9 y) B9 a4 l0 u. V+ V% P% M% i7 V
% G' a; E3 |% E6 k; f" |
6 i$ W! m8 D& r/ g& O
我前几天基于@Harlotte的ANTE模组写了我此生第一份
成功的.js代码1 h9 x% d' R/ d8 @2 z$ m7 L3 v6 s
实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理)! @4 V9 _) k% j% t2 t
仅供参考!仅供参考!请勿直接完全照搬!
* ^' W' v0 O7 B) F$ J- v" u
  1. //加载模型
    7 m" c* W0 ~/ u* M/ t
  2. //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面& F" G! \: _, A  Z
  3. let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);1 A5 ~7 `5 b# j' [1 O, b
  4. let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);! y/ Z+ |/ \, y& Y" ~/ x
  5. //翻转 V 坐标
    2 C( s. I7 v( ?( R" R
  6. rawModel.applyUVMirror(false, true);% x5 J3 s3 D5 B8 ~$ [# I. `4 [
  7. rawModel_side.applyUVMirror(false, true);; b( ^4 }& b- A4 R2 d7 M

  8. / s- t! q$ g3 R
  9. //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
      b+ x3 I$ ~/ ^3 s' b5 B) `4 p
  10. let tex = "mtrsteamloco:models/platform_45.png";
    6 o9 {0 `5 b7 k% p5 z8 Z' a( r
  11. let tex_side = "mtrsteamloco:models/platform_45_side.png";; d( m  s+ L; X- i' h
  12. function create(ctx, state, entity){. d% A' S8 k8 x' S4 i  ^% C) P
  13.     state.platform_side = new DynamicModelHolder();
    $ ]' g; p' s# O: l
  14.     state.platform_side.uploadLater(rawModel_side);# \" J. x. Z$ N! O* s
  15.     state.platform = new DynamicModelHolder();
    + D. {6 M- e$ f( d* }3 L2 j
  16.     state.platform.uploadLater(rawModel);! A0 l/ d5 _5 _/ s
  17. ( R1 ]$ o$ e  ]. s( w0 ]* E) W
  18.     //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
    . W2 X2 ?8 x3 [( o- Y! g* s
  19.     if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
    & b, E) ^% C6 p- {4 p. q+ z
  20.     state.tex=tex;% B6 E( {$ M# X0 A# S7 k% V! P. e
  21.     state.tex_side=tex_side;
    ! E# \& ~+ i# P) d
  22.     entity.data.put("texture", tex);2 f3 k) `5 c/ \. `
  23.     entity.data.put("texture_side", tex_side);
    % p/ k. N! ]0 P
  24.     }5 i9 A  A. I) B5 N& N' N
  25. }
    , j# _! a/ t+ l% n' R! x, G
  26. function render(ctx, state, entity){7 y9 Y4 P7 G1 N' s) W0 p0 s! M
  27.     //获得DynamicModelHolder中的模型5 Y* M- Y$ j% l/ q
  28.     if(state.platform_side.getUploadedModel()!= null){
    # P" @8 S! w5 i8 Q& h$ e
  29.     plsModel = state.platform_side.getUploadedModel();}) ]3 D, {% C( l" ?) x* {, f
  30.     if(state.platform.getUploadedModel()!= null){: ^0 g- i9 k) r9 ~! Q5 v, _
  31.     plModel = state.platform.getUploadedModel();}
    0 C; ~% L  @. O* }: W
  32. ) l3 J6 s4 \& D1 {
  33.     //检测方块数据是否发生改变,如果改变则修改方块的纹理
    # M" Y4 ^8 h; q9 f
  34.     //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理
    * ^7 d5 v+ U. ^+ C. o* X3 V& C# v
  35.     file = String(entity.data.get("texture"));
    2 x; v- `& t. P. R  _' Y8 K3 _
  36.     file_side = String(entity.data.get("texture_side"));4 u! y( S. A* c* M
  37.     if (file != state.tex){8 [, V3 F  A1 o+ J
  38.         state.tex=file;& L+ z  K3 n: [/ J% X. m* f  U
  39.         plModel.replaceAllTexture(Resources.id(state.tex));
    5 x# X- y1 g/ Q; ~% z) C; S# g
  40.         }/ g0 ?# z1 u& ^6 v7 y' i5 B  `0 G) l
  41.     if (file_side != state.tex_side){
    ( q  ~2 h9 g8 G+ s4 H0 P. u
  42.         state.tex_side=file_side;
    0 }4 d; u" X) j
  43.         plsModel.replaceAllTexture(Resources.id(state.tex_side));
    : g/ \5 ~; f# o! i
  44.         }
    / A3 B" X/ [; H; v) ?

  45. % G5 W1 W: z- r
  46.     //绘制模型
    0 m6 m3 A+ y: X$ ~6 h
  47.     ctx.drawModel(plsModel, null);
    ! P7 ^- X! O: L$ d9 k1 I- x+ Y" J* T, }
  48.     ctx.drawModel(plModel, null);
    , }- Y8 K4 ]6 w- Y
  49. }% y" _3 K6 z) ~0 f
  50. //当模型离开渲染距离时,关闭它以释放内存
    ' L9 I* V  n5 b7 L
  51. function dispose(ctx, state, entity){9 W/ \! a3 [8 f3 g5 M5 a. B
  52.     state.platform.close();
    & ?) }" y) X: v8 |
  53.     state.platform_side.close();}
      R* h2 J3 C7 a1 A  {& r' i- A
  54. 8 j/ ~* Q" L* ^4 o" q
  55. /*常用方块ID列表
    / {& w% x$ K2 H* ~' Q' l, I/ u
  56. 默认顶部:mtrsteamloco:models/platform_45.png
    2 a, T3 J# [2 y0 N
  57. 默认侧边:mtrsteamloco:models/platform_45_side.png
    / s3 P$ w% f( E& J/ }9 D. O
  58. 石头:minecraft:textures/block/stone.png
    9 y, M* f, w& C
  59. 木板:minecraft:textures/block/oak_planks.png4 L+ i" R# F. Q5 i/ P9 c
  60. 黑曜石:minecraft:textures/block/obsidian.png
    3 j1 j! R; J2 d5 m4 {
  61. 玻璃:minecraft:textures/block/glass.png
    7 G+ Q% B1 S4 v, t9 D/ c
  62. */1 p, `% ^/ i1 C* k
复制代码
/ o' k5 ^9 P2 q- O0 e8 k1 p& B: Z
0 C* o5 \$ g/ T! K- \' P
放到游戏中大概是这个样子:
默认纹理下的站台
被修改成磨制花岗岩纹理的站台
可以通过修改装饰物件方块键值对来修改纹理。/ L" \- R, G, I
5 o" {8 c5 C7 N$ @

& Y' J6 P: w# J7 H0 i目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见, c2 r# ?+ `" N3 h, k
最后的最后 提前一个小时祝大家2025年新年快乐!
+ |- Q( T0 c; q
2 D# z7 _+ ^8 ]. ]# Z, u4 Z* x$ s, G# q4 Z4 `5 ^

) L6 O2 r2 @; {$ H. {' E2 Y, o* f% F- z' Z
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

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" k5 ?9 t  z7 n, m% p* D
有点意思!

: g# g8 J; _  d8 I$ ^7 B/ C但是你那个当做站台好像即使√上了也没法使列车开门* _: a/ U) I) {3 m4 b
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

Harlotte 作者认证 2025-1-2 06:32:17
Hobbytimeblank 发表于 2025-1-1 09:35
3 |4 Q- N  y7 i8 O但是你那个当做站台好像即使√上了也没法使列车开门

; e; E% G7 O' f- J4 R# j, D6 t* i?不应该啊 我这里测试好使着呢 嘶
有事加我QQ: 3435494979
回复

使用道具 举报

楼主 Hobbytimeblank 作者认证 2025-1-2 19:25:08
Harlotte 发表于 2025-1-2 06:32$ C7 G3 Y' A/ a$ a& }# |5 q
?不应该啊 我这里测试好使着呢 嘶

% l3 m  A3 _0 \; {! Z当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台
你是更怀念那几台机器,怀念那两个多月的时间,还是怀念当时与你一起合作的人?
回复

使用道具 举报

Harlotte 作者认证 2025-1-3 21:40:20
Hobbytimeblank 发表于 2025-1-2 19:25
& b+ J& V2 @* P  k  }9 L0 ^3 @$ r当然我们建筑党有自己的解决方法:在装饰物件下面放一层原版站台

+ A$ R4 o) Q7 N2 E是当时代码写错了 遍历错了 已经修好了
有事加我QQ: 3435494979
回复

使用道具 举报

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

本版积分规则

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