|
还没有账号?赶快去注册吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Hobbytimeblank 于 2025-1-18 18:08 编辑 : W( m/ T4 d$ F, I) r8 c
- V( T5 H1 @" g# C' _( o" ?. t* a. n8 m( \& R( S% n% _7 o6 z/ I! |
由于ANTE1.0.0版本修改的内容过多,该代码只能在0.5.4版本生效,新版本请勿使用
4 q9 S- \2 L% A6 i
$ s+ K3 Z" ~ z5 b
I$ T3 S, z7 O& G$ ~
9 x1 b3 A( r% e4 {我前几天基于@Harlotte的ANTE模组写了我此生第一份成功的.js代码
$ _8 p- X( g! R. v9 a) \7 ]实现的功能就是使用(A)NTE的装饰物件制作了可自定义材质的45度站台(其实其他的模型理论上也可以,是同一个原理) ]2 F& C- z) X- g. z
仅供参考!仅供参考!请勿直接完全照搬!
* Q6 x& ], q# a- //加载模型
# w# U7 q# F9 J, u8 }( g - //这里我使用了两个模型,第一个负责上下表面,第二个模型负责侧面
5 S8 G: E7 J9 s1 F0 t. u - let rawModel = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall.obj"), null);
8 h6 h8 g( }2 h! |5 A" m - let rawModel_side = ModelManager.loadRawModel(Resources.manager(), Resources.id("mtrsteamloco:models/platform_tall_side.obj"), null);
/ m7 V1 t" j) A: }" m - //翻转 V 坐标
& t8 Y4 C" O- y1 @( g. b - rawModel.applyUVMirror(false, true);) M/ h; C% J+ R) D6 j9 i3 E
- rawModel_side.applyUVMirror(false, true);
. V% \. m$ _ }) W- P
0 w/ H- a* h: I; N5 h" ~/ P- //设置初始纹理,其中tex是站台的底部和顶部。tex_side是站台的侧面(四面共用纹理)
' K4 R$ R+ }. r1 C3 f8 x - let tex = "mtrsteamloco:models/platform_45.png";
- F1 d$ z7 v t* L; { - let tex_side = "mtrsteamloco:models/platform_45_side.png";
5 Z1 K/ o0 O& N2 q5 g - function create(ctx, state, entity){
+ G7 v( W5 d6 o* b' e - state.platform_side = new DynamicModelHolder();+ s8 W) l$ s, m/ w6 K4 ]: _
- state.platform_side.uploadLater(rawModel_side);% N7 Q. f y% ?
- state.platform = new DynamicModelHolder();: B9 S' G! ?5 d3 B4 c
- state.platform.uploadLater(rawModel);
3 {0 L2 z4 u+ E: V
( d& H7 x! E- z9 i9 t5 l- //如果这个装饰物件是刚刚被放出来的,那么将其初始化,为其放入默认的方块数据
" @9 C! o7 x3 j2 A - if(entity.data.get("texture")==null && entity.data.get("texture_side")==null){
: A( L3 J. l& n5 o; _! e( U$ w - state.tex=tex;! B& n/ z$ w" ]' c1 H6 Z8 X
- state.tex_side=tex_side;
; ]: ^# i+ J+ C+ d& [) a - entity.data.put("texture", tex);5 I1 Z D! ]9 a
- entity.data.put("texture_side", tex_side);
9 W' ?. x3 s( K7 S& C - }
- {/ u4 X; }4 ^/ c& e& h. N) r6 ` - }' q5 D% @: @) Z/ O9 H
- function render(ctx, state, entity){( H! T5 r x) O# ~5 @; t
- //获得DynamicModelHolder中的模型
) F+ \9 V, Y0 ]& T$ O" w% q - if(state.platform_side.getUploadedModel()!= null){
O: e; x1 b2 U: X! y( v( D3 ~8 h C& [ - plsModel = state.platform_side.getUploadedModel();}
7 ]4 @/ F1 P) O6 D2 a - if(state.platform.getUploadedModel()!= null){
) E7 O3 G/ k" R, M - plModel = state.platform.getUploadedModel();}
# c/ t4 W6 s# N8 N3 j- B- V9 ] - $ Z5 ^8 i# q6 Y9 Y( w& w5 _' v
- //检测方块数据是否发生改变,如果改变则修改方块的纹理
) ]3 m5 I9 o4 g) p0 b - //要求用户自行填写资源位置,这也意味着你可以加载任何位置包括原版、资源包、模组内的任何图片作为站台的纹理/ Y0 s6 a# \ z
- file = String(entity.data.get("texture"));
* T. T: j4 h! f7 I( h7 A - file_side = String(entity.data.get("texture_side"));4 I. [$ I5 [9 y( |6 N+ c
- if (file != state.tex){
, j& p* o4 q* M% ^" Y3 e. u - state.tex=file;4 |6 d5 s3 [" [+ |1 p9 t
- plModel.replaceAllTexture(Resources.id(state.tex));
. g. p. B I+ g5 d- b3 {* b+ t* G/ E: ^ - }$ \4 `7 L8 j* k4 B3 h' \. P/ X5 H
- if (file_side != state.tex_side){6 y4 x" O' D. F4 a ~8 I2 A
- state.tex_side=file_side;
% f; y; i) R7 u$ q P - plsModel.replaceAllTexture(Resources.id(state.tex_side));
+ O5 d, }& n+ D( M2 { - }
! R6 n+ K' r& R9 d& j7 ?/ K - ' \( n, i8 k' l* G' E% ]
- //绘制模型0 ~0 ~' m$ C( k B
- ctx.drawModel(plsModel, null);, |* h! s; D2 g1 R: A
- ctx.drawModel(plModel, null);9 P7 |7 W! s9 o& G
- }
1 w7 Q5 y/ o& Z - //当模型离开渲染距离时,关闭它以释放内存9 i; B" P5 B# I0 J
- function dispose(ctx, state, entity){
6 C/ \# ?- e* r: I - state.platform.close();
/ F: b; ]1 a0 b4 Q1 a: D4 s - state.platform_side.close();}
9 U5 _) k1 J0 T/ W7 C3 v
, v$ q' x$ \9 F0 _/ G1 U3 @- /*常用方块ID列表 }& ~0 ?# ?( y" P( `& Y" \" i
- 默认顶部:mtrsteamloco:models/platform_45.png7 G. o" T+ k9 j8 m
- 默认侧边:mtrsteamloco:models/platform_45_side.png" H4 l5 R$ w$ S
- 石头:minecraft:textures/block/stone.png
" l1 p$ i6 G# r" b3 y" F7 a2 V2 X( ? - 木板:minecraft:textures/block/oak_planks.png
0 V* k0 H* C" ]. P4 k - 黑曜石:minecraft:textures/block/obsidian.png
* L0 p* U( W; I* o - 玻璃:minecraft:textures/block/glass.png7 E% j$ b8 e) C; ?: g8 [( f7 W$ a
- */
$ Q) k0 _3 b$ Q O* U5 i
复制代码
! D# r- e; m) }2 G+ d/ w6 f N% r
6 p$ n1 B* J! Z' g" X C" Z放到游戏中大概是这个样子: | | 默认纹理下的站台 | 被修改成磨制花岗岩纹理的站台 | 可以通过修改装饰物件方块键值对来修改纹理。# \2 J1 ^. K7 g# g" }
3 A# L. G+ ?1 u' o+ Z' |0 \1 f6 H% A: k8 ]1 w& d
目前该内容仍然在测试,感谢各位程序员们提出优化性能、功能方面的合理意见
" h4 |2 v8 }& ~1 N: I" l6 b% }* ], p最后的最后 提前一个小时祝大家2025年新年快乐!
* c! {7 G" W( u! N! E% b! Y) Y- i D
! p# w' f5 i$ q+ @, w
0 |- }5 b" Z) j0 P( F4 a+ }, ~* p! e$ P3 k, p4 Y* H
, c' X* q4 L! b* ?
|
|