diff --git a/app/src/main/java/com/coldmint/rust/pro/BrowserActivity.kt b/app/src/main/java/com/coldmint/rust/pro/BrowserActivity.kt index b41a8a7..6edaedd 100644 --- a/app/src/main/java/com/coldmint/rust/pro/BrowserActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/BrowserActivity.kt @@ -28,6 +28,9 @@ class BrowserActivity : BaseActivity() { } setReturnButton() viewBinding.webView.loadUrl(link) + //是否启用Js + val enableJs = intent.getBooleanExtra("javaScriptEnabled",false); + viewBinding.webView.settings.javaScriptEnabled = enableJs viewBinding.webView.webViewClient = object : WebViewClient() { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { viewBinding.linearProgressIndicator.isVisible = true diff --git a/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt b/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt index 67d3f47..532bb35 100644 --- a/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/MainActivity.kt @@ -361,6 +361,14 @@ class MainActivity : BaseActivity() { false } + menu.findItem(R.id.rust_api).setOnMenuItemClickListener { + val thisIntent = Intent(this, BrowserActivity::class.java) + thisIntent.putExtra("link", "https://rustedwarfareapicode.top/") + thisIntent.putExtra("javaScriptEnabled", true) + startActivity(thisIntent) + false + } + menu.findItem(R.id.about).setOnMenuItemClickListener { startActivity(Intent(this@MainActivity, AboutActivity::class.java)) false diff --git a/app/src/main/java/com/coldmint/rust/pro/ReleaseModActivity.kt b/app/src/main/java/com/coldmint/rust/pro/ReleaseModActivity.kt index 9fbd59f..7f94a6d 100644 --- a/app/src/main/java/com/coldmint/rust/pro/ReleaseModActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/ReleaseModActivity.kt @@ -2,6 +2,7 @@ package com.coldmint.rust.pro import android.annotation.SuppressLint import android.content.Intent +import android.content.res.ColorStateList import android.graphics.BitmapFactory import android.net.Uri import android.os.Bundle @@ -88,6 +89,19 @@ class ReleaseModActivity : BaseActivity() { } } + /** + * 加载默认图像 + */ + fun loadDefaultImage() { + val drawable = getDrawable(R.drawable.image) + viewBinding.iconView.setImageDrawable( + GlobalMethod.tintDrawable( + drawable, + ColorStateList.valueOf(GlobalMethod.getColorPrimary(this)) + ) + ) + } + private fun initData() { lineParser.symbol = "," @@ -179,13 +193,16 @@ class ReleaseModActivity : BaseActivity() { viewBinding.modIdEdit.setText( Pinyin.toPinyin(temModClass.modName, "_").lowercase(Locale.getDefault()) ) + viewBinding.versionNameEdit.setText("1.0") viewBinding.modNameEdit.setText(temModClass.modName) val description = temModClass.readValueFromInfoSection("description", "mod") if (description != null) { viewBinding.modDescribeEdit.setText(description) } val finalLink = temModClass.readResourceFromInfo("thumbnail")?.absolutePath - if (finalLink != null) { + if (finalLink == null) { + loadDefaultImage() + } else { loadIcon(finalLink) } } @@ -224,6 +241,8 @@ class ReleaseModActivity : BaseActivity() { val icon = t.data.icon if (icon != null && icon.isNotBlank()) { loadIcon(ServerConfiguration.getRealLink(icon)) + } else { + loadDefaultImage() } val screenshots = t.data.screenshots @@ -390,7 +409,7 @@ class ReleaseModActivity : BaseActivity() { bundle.putString("tag", lineData) bundle.putString( "title", - String.format(getString(R.string.tag_title), s) + String.format(getString(R.string.tag_title), lineData) ) bundle.putString("action", "tag") val thisIntent = @@ -490,7 +509,7 @@ class ReleaseModActivity : BaseActivity() { if (link != null) { needIcon = false } - viewBinding.iconView.setImageResource(R.drawable.image) + loadDefaultImage() } false } diff --git a/app/src/main/java/com/coldmint/rust/pro/SearchResultActivity.kt b/app/src/main/java/com/coldmint/rust/pro/SearchResultActivity.kt index 93f934f..5612681 100644 --- a/app/src/main/java/com/coldmint/rust/pro/SearchResultActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/SearchResultActivity.kt @@ -25,6 +25,7 @@ class SearchResultActivity : BaseActivity() { map["mod_comments"] = R.string.search_type_mod_comments map["mod_versions"] = R.string.search_type_mod_versions map["purchase_plan"] = R.string.search_type_purchase_plan + map["template_package"] = R.string.search_type_template_package map } diff --git a/app/src/main/java/com/coldmint/rust/pro/UserHomePageActivity.kt b/app/src/main/java/com/coldmint/rust/pro/UserHomePageActivity.kt index 522bad7..b4463c4 100644 --- a/app/src/main/java/com/coldmint/rust/pro/UserHomePageActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/UserHomePageActivity.kt @@ -5,6 +5,8 @@ import android.app.ActivityOptions import android.content.Context import android.content.Intent import android.graphics.Color +import android.graphics.Shader +import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.os.Bundle import android.view.Gravity @@ -13,6 +15,7 @@ import android.view.View import android.view.inputmethod.EditorInfo import android.widget.EditText import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.core.view.drawToBitmap import androidx.core.view.isVisible import com.bumptech.glide.Glide import com.coldmint.dialog.CoreDialog @@ -25,6 +28,7 @@ import com.coldmint.rust.pro.adapters.UserHomeStateAdapter import com.coldmint.rust.pro.base.BaseActivity import com.coldmint.rust.pro.databinding.ActivityUserHomePageBinding import com.coldmint.rust.pro.dialog.CommentDialog +import com.coldmint.rust.pro.tool.AnimUtil import com.coldmint.rust.pro.tool.AppSettings import com.coldmint.rust.pro.tool.GlobalMethod import com.google.android.material.appbar.AppBarLayout @@ -45,7 +49,7 @@ class UserHomePageActivity : BaseActivity() { val userHomeStateAdapter by lazy { UserHomeStateAdapter(this, userId) } - + var needShowFab = false //旧的备份数据 var oldSpaceInfoData: SpaceInfoData? = null @@ -120,7 +124,7 @@ class UserHomePageActivity : BaseActivity() { if (account == null) { viewBinding.button.text = getString(R.string.please_login_first) viewBinding.button.isEnabled = false - }else{ + } else { if (account == userId) { viewBinding.button.text = getString(R.string.editData) } else { @@ -131,7 +135,8 @@ class UserHomePageActivity : BaseActivity() { if (data != null && ServerConfiguration.isEvent(data)) { when (data) { "@event:已互粉" -> { - viewBinding.button.text = getString(R.string.each_other_follow) + viewBinding.button.text = + getString(R.string.each_other_follow) } "@event:已关注" -> { viewBinding.button.text = getString(R.string.followed) @@ -237,20 +242,53 @@ class UserHomePageActivity : BaseActivity() { if (cover != null) { Glide.with(this).load(ServerConfiguration.getRealLink(cover)) .into(viewBinding.coverView) + Glide.with(this).load(ServerConfiguration.getRealLink(cover)) + .into(viewBinding.fullCoverView) } viewBinding.viewPager.adapter = userHomeStateAdapter viewBinding.coverView.setOnClickListener { - if (cover != null) { - val intent = Intent(this@UserHomePageActivity, FullScreenCoverActivity::class.java) - val name = getString(R.string.transition_cover) - val options = - ActivityOptions.makeSceneTransitionAnimation(this, viewBinding.coverView, name) - intent.putExtra("iconLink", cover) - this@UserHomePageActivity.startActivity(intent, options.toBundle()) + if (cover == null) { + return@setOnClickListener } + viewBinding.coverView.visibility = View.INVISIBLE + AnimUtil.doAnim( + this, + R.anim.overall_drop, + listOf(viewBinding.appBar, viewBinding.viewPager) + ) { views -> + views.forEach { + it.isVisible = false + } + needShowFab = viewBinding.fab.isShown + if (needShowFab) { + viewBinding.fab.hide() + } + viewBinding.fullCoverView.isVisible = true + } + } + + viewBinding.fullCoverView.setOnClickListener { + if (cover == null) { + return@setOnClickListener + } + viewBinding.fullCoverView.isVisible = false + AnimUtil.doAnim( + this, + R.anim.overall_up, + listOf(viewBinding.appBar, viewBinding.viewPager) + ) { views -> + views.forEach { + it.isVisible = true + } + if (needShowFab) { + viewBinding.fab.show() + } + viewBinding.coverView.isVisible = true + } + } fans = spaceInfoData.data.fans diff --git a/app/src/main/java/com/coldmint/rust/pro/WorkManagementActivity.kt b/app/src/main/java/com/coldmint/rust/pro/WorkManagementActivity.kt index 2fc43b7..e8a3860 100644 --- a/app/src/main/java/com/coldmint/rust/pro/WorkManagementActivity.kt +++ b/app/src/main/java/com/coldmint/rust/pro/WorkManagementActivity.kt @@ -11,6 +11,8 @@ import androidx.core.view.isVisible import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import com.afollestad.materialdialogs.MaterialDialog +import com.coldmint.dialog.CoreDialog +import com.coldmint.dialog.databinding.DialogCoreBinding import com.coldmint.rust.core.dataBean.ApiResponse import com.coldmint.rust.core.dataBean.mod.WebModAllInfoData import com.coldmint.rust.core.dataBean.mod.WebModListData @@ -70,30 +72,27 @@ class WorkManagementActivity : BaseActivity() { val adapter = WebModAllInfoAdapter(this@WorkManagementActivity, data) adapter.setItemEvent { i, itemWebmodAllInfoBinding, viewHolder, data -> + itemWebmodAllInfoBinding.more.setOnClickListener { val popupMenu = GlobalMethod.createPopMenu(it) when (data.hidden) { 0 -> { + //上架状态 popupMenu.menu.add(R.string.sold_out_mod) + popupMenu.menu.add(R.string.work_of_home_page) + popupMenu.menu.add(R.string.submit_the_update) } - 1 -> { - //等待审核 - itemWebmodAllInfoBinding.modIntroductionView.setText( - R.string.not_audit - ) - } + -1 -> { + //用户手动隐藏 popupMenu.menu.add(R.string.review_audit) + popupMenu.menu.add(R.string.work_of_home_page) + } - -2 -> { - //被管理员举报下架 - itemWebmodAllInfoBinding.modIntroductionView.setText( - R.string.banned_mod - ) + else -> { + } } - popupMenu.menu.add(R.string.work_of_home_page) - popupMenu.menu.add(R.string.submit_the_update) popupMenu.menu.add(R.string.update_record) popupMenu.show() popupMenu.setOnMenuItemClickListener { @@ -128,88 +127,88 @@ class WorkManagementActivity : BaseActivity() { startActivity(intent) } getString(R.string.sold_out_mod) -> { - MaterialDialog(this@WorkManagementActivity).show { - title(R.string.sold_out_mod).message(R.string.sold_out_mod_tip) - .positiveButton(R.string.dialog_ok) - .positiveButton { - WebMod.instance.soldOutMod( - data.developer, - data.id, - object : - ApiCallBack { - override fun onResponse( - t: ApiResponse - ) { - if (t.code == ServerConfiguration.Success_Code) { - data.hidden = -1 - } else { - Snackbar.make( - viewBinding.recyclerView, - t.message, - Snackbar.LENGTH_SHORT - ).show() - } + CoreDialog(this@WorkManagementActivity).setTitle( + R.string.sold_out_mod + ).setMessage(R.string.sold_out_mod_tip) + .setPositiveButton(R.string.dialog_ok) { + WebMod.instance.soldOutMod( + data.developer, + data.id, + object : + ApiCallBack { + override fun onResponse( + t: ApiResponse + ) { + if (t.code == ServerConfiguration.Success_Code) { + data.hidden = -1 + adapter.notifyItemChanged(i) + } else { + Snackbar.make( + viewBinding.recyclerView, + t.message, + Snackbar.LENGTH_SHORT + ).show() } + } - override fun onFailure(e: Exception) { - showInternetError( - view = viewBinding.recyclerView, - exception = e - ) - } + override fun onFailure(e: Exception) { + showInternetError( + view = viewBinding.recyclerView, + exception = e + ) + } - }) - } - .negativeButton(R.string.dialog_cancel) - .cancelable(false) - } + }) + } + .setNegativeButton(R.string.dialog_cancel) { + + } + .setCancelable(false).show() } getString(R.string.review_audit) -> { - MaterialDialog(this@WorkManagementActivity).show { - title(R.string.review_audit).message( - text = - String.format( - getString(R.string.review_audit_mod_tip), - data.name - ) + CoreDialog(this@WorkManagementActivity).setTitle( + R.string.review_audit + ).setMessage( + String.format( + getString(R.string.review_audit_mod_tip), + data.name ) - .positiveButton(R.string.dialog_ok) - .positiveButton { - WebMod.instance.afreshAuditMod( - AppSettings - .getValue( - AppSettings.Setting.Token, - "" - ), - data.id, - object : - ApiCallBack { - override fun onResponse( - t: ApiResponse - ) { - if (t.code == ServerConfiguration.Success_Code) { - data.hidden = 1 - } else { - Snackbar.make( - viewBinding.recyclerView, - t.message, - Snackbar.LENGTH_SHORT - ).show() - } - } + ).setPositiveButton(R.string.dialog_ok) { + WebMod.instance.afreshAuditMod( + AppSettings + .getValue( + AppSettings.Setting.Token, + "" + ), + data.id, + object : + ApiCallBack { + override fun onResponse( + t: ApiResponse + ) { + if (t.code == ServerConfiguration.Success_Code) { + data.hidden = 1 + adapter.notifyItemChanged(i) + } else { + Snackbar.make( + viewBinding.recyclerView, + t.message, + Snackbar.LENGTH_SHORT + ).show() + } + } - override fun onFailure(e: Exception) { - showInternetError( - view = viewBinding.recyclerView, - exception = e - ) - } + override fun onFailure(e: Exception) { + showInternetError( + view = viewBinding.recyclerView, + exception = e + ) + } - }) - } - .negativeButton(R.string.dialog_cancel) - .cancelable(false) - } + }) + }.setNegativeButton(R.string.dialog_cancel) { + + }.setCancelable(false).show() } } false diff --git a/app/src/main/java/com/coldmint/rust/pro/adapters/ReportAdapter.kt b/app/src/main/java/com/coldmint/rust/pro/adapters/ReportAdapter.kt index 689fd40..0bf3812 100644 --- a/app/src/main/java/com/coldmint/rust/pro/adapters/ReportAdapter.kt +++ b/app/src/main/java/com/coldmint/rust/pro/adapters/ReportAdapter.kt @@ -27,8 +27,8 @@ import java.lang.StringBuilder * @date 2022/1/9 11:03 */ class ReportAdapter( - context: Context, - dataList: MutableList + context: Context, + dataList: MutableList ) : BaseAdapter(context, dataList) { override fun getViewBindingObject( @@ -54,7 +54,7 @@ class ReportAdapter( viewBinding.timeView.text = data.time viewBinding.nameView.text = data.userName viewBinding.openView.text = - String.format(context.getString(R.string.view_the_report_object), data.target) + context.getString(R.string.view_the_report_object) when (data.type) { "mod" -> { viewBinding.typeView.setText(R.string.report_mod) diff --git a/app/src/main/java/com/coldmint/rust/pro/adapters/WebModAllInfoAdapter.kt b/app/src/main/java/com/coldmint/rust/pro/adapters/WebModAllInfoAdapter.kt index b7d3c08..0356f99 100644 --- a/app/src/main/java/com/coldmint/rust/pro/adapters/WebModAllInfoAdapter.kt +++ b/app/src/main/java/com/coldmint/rust/pro/adapters/WebModAllInfoAdapter.kt @@ -5,6 +5,7 @@ import android.content.ServiceConnection import android.view.LayoutInflater import android.view.ViewGroup import android.widget.PopupMenu +import androidx.core.view.isVisible import com.bumptech.glide.Glide import com.coldmint.rust.core.dataBean.ApiResponse import com.coldmint.rust.core.dataBean.mod.WebModAllInfoData @@ -22,7 +23,7 @@ import com.coldmint.rust.pro.tool.GlobalMethod * @date 2022/1/4 10:59 */ class WebModAllInfoAdapter( - context: Context, + context: Context, list: MutableList ) : BaseAdapter(context, list) { @@ -41,10 +42,35 @@ class WebModAllInfoAdapter( position: Int ) { viewBinding.modNameView.text = data.name - viewBinding.modIntroductionView.text = data.describe + when (data.hidden) { + 1 -> { + //等待审核 + viewBinding.modIntroductionView.setText( + R.string.not_audit + ) + viewBinding.more.isVisible = false + } + -2 -> { + //被管理员举报下架 + viewBinding.modIntroductionView.setText( + R.string.banned_mod + ) + viewBinding.more.isVisible = false + } + 0 -> { + viewBinding.modIntroductionView.setText(R.string.public_mod) + viewBinding.more.isVisible = true + } + else->{ + viewBinding.modIntroductionView.setText(R.string.private_mod) + viewBinding.more.isVisible = true + } + } + val icon = data.icon if (icon != null && icon.isNotBlank()) { - Glide.with(context).load(ServerConfiguration.getRealLink(icon)).apply(GlobalMethod.getRequestOptions()) + Glide.with(context).load(ServerConfiguration.getRealLink(icon)) + .apply(GlobalMethod.getRequestOptions(grayscale = data.hidden == -2)) .into(viewBinding.modIcon) } } diff --git a/app/src/main/java/com/coldmint/rust/pro/tool/AnimUtil.kt b/app/src/main/java/com/coldmint/rust/pro/tool/AnimUtil.kt new file mode 100644 index 0000000..6055529 --- /dev/null +++ b/app/src/main/java/com/coldmint/rust/pro/tool/AnimUtil.kt @@ -0,0 +1,40 @@ +package com.coldmint.rust.pro.tool + +import android.content.Context +import android.view.View +import android.view.animation.Animation +import android.view.animation.AnimationUtils + +object AnimUtil { + + /** + * 播放动画资产文件 + */ + fun doAnim( + context: Context, + animRes: Int, + views: List, + func: (views: List) -> Unit + ) { + val animation = AnimationUtils.loadAnimation(context, animRes) + animation.setAnimationListener(object : Animation.AnimationListener { + override fun onAnimationStart(animation: Animation?) { + } + + override fun onAnimationEnd(animation: Animation?) { + views.forEach { + it.clearAnimation() + } + func.invoke(views) + } + + override fun onAnimationRepeat(animation: Animation?) { + + } + + }) + views.forEach { + it.startAnimation(animation) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/coldmint/rust/pro/tool/GlobalMethod.kt b/app/src/main/java/com/coldmint/rust/pro/tool/GlobalMethod.kt index a93906d..2f3e63d 100644 --- a/app/src/main/java/com/coldmint/rust/pro/tool/GlobalMethod.kt +++ b/app/src/main/java/com/coldmint/rust/pro/tool/GlobalMethod.kt @@ -348,7 +348,6 @@ object GlobalMethod { } } - //打开指定app //图像着色 fun tintDrawable(drawable: Drawable?, colors: ColorStateList?): Drawable { val wrappedDrawable = DrawableCompat.wrap(drawable!!) diff --git a/app/src/main/res/anim/overall_drop.xml b/app/src/main/res/anim/overall_drop.xml new file mode 100644 index 0000000..ca49474 --- /dev/null +++ b/app/src/main/res/anim/overall_drop.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/overall_up.xml b/app/src/main/res/anim/overall_up.xml new file mode 100644 index 0000000..8d69b28 --- /dev/null +++ b/app/src/main/res/anim/overall_up.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/outline_book_24.xml b/app/src/main/res/drawable/outline_book_24.xml new file mode 100644 index 0000000..283b63a --- /dev/null +++ b/app/src/main/res/drawable/outline_book_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_release_mod.xml b/app/src/main/res/layout/activity_release_mod.xml index 38b0630..7190c12 100644 --- a/app/src/main/res/layout/activity_release_mod.xml +++ b/app/src/main/res/layout/activity_release_mod.xml @@ -221,12 +221,21 @@ android:layout_height="wrap_content" android:text="@string/mod_icon" /> - + + + + + + @@ -325,7 +334,7 @@ diff --git a/app/src/main/res/layout/activity_user_home_page.xml b/app/src/main/res/layout/activity_user_home_page.xml index c06ef3c..f6c57fe 100644 --- a/app/src/main/res/layout/activity_user_home_page.xml +++ b/app/src/main/res/layout/activity_user_home_page.xml @@ -4,6 +4,12 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + @@ -266,4 +271,5 @@ android:src="@drawable/add" android:visibility="gone" /> + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_drawer_left.xml b/app/src/main/res/menu/menu_drawer_left.xml index c505402..cbd79d0 100644 --- a/app/src/main/res/menu/menu_drawer_left.xml +++ b/app/src/main/res/menu/menu_drawer_left.xml @@ -59,6 +59,10 @@ android:id="@+id/user_group" android:icon="@drawable/ic_outline_free_breakfast_24" android:title="@string/user_group" /> + The user name Report mod To report the user - Check (%1$s) + Check The book label already exists. Please change the path. feedback Please set the main image. @@ -687,7 +687,6 @@ female Please enter your search content To report to deal with - Because of the report, was removed by the administrator. This mod is hidden and cannot be reported. You cannot report your own mods. If you want to remove a mod, please go to \"Work Management\". The administrator diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 251efb2..0abce25 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -439,7 +439,7 @@ ユーザー名 通報モジュール ユーザーを通報する - (%1$s)を見る + を見る サインがありますので、パスを変更してください。 意見のフィードバック 本体画像を設定してください。 @@ -687,7 +687,6 @@ 検索内容を入力してください 通報処理 - 通報され、管理人に撤去された。 このモジュールは隠れていて、通報することができません。 自分のモジュールを通報することはできません、もしモジュールを降ろすことを希望するならば\「作品管理\」に行ってください。 管理人 diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index eca078c..ffdd7a3 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -438,7 +438,7 @@ Имя пользователя. Группа доноров Сообщать о потребителе - Смотрите. + Смотрите Подписание книги уже существует. Обратная связь мнений Пожалуйста, установите основные изображения. @@ -686,7 +686,6 @@ женщин Введите, пожалуйста, содержимое поиска Отчет. - Был снят с крючка администратором за жалобу. Этот модуль скрыт и не может быть донесён. Не могу сообщить о своей группе моделей, и если вы хотите, чтобы она ушла с подиума, пожалуйста, пройдите в/управление работами /. Администратор. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 82cc183..5167b2d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -461,7 +461,7 @@ 用户名 举报模组 举报用户 - 查看(%1$s) + 查看 此书签已存在,请更换路径。 意见反馈 请设置主体图像。 @@ -717,7 +717,7 @@ 请输入搜索内容 举报处理 - 因举报,被管理员下架。 + 因举报,被管理员下架 此模组是隐藏的,无法举报。 不能举报自己的模组,若希望下架模组请前往\"作品管理\"。 管理员 @@ -951,4 +951,8 @@ 在Github上查看铁锈助手的源代码,助手已开源,欢迎二次开发。 获取源代码 ObtainSourceCode + 铁锈Api-Code + 模板包 + 公开 + 私有 \ No newline at end of file