Code Monkey home page Code Monkey logo

giganticminecraft / seichiassist Goto Github PK

View Code? Open in Web Editor NEW
96.0 10.0 36.0 87.76 MB

ギガンティック☆整地鯖の独自要素を司るプラグイン / A Minecraft(Spigot) Plugin used for Gigantic Seichi Server. Address -> play.seichi.click

Home Page: https://discord.gg/gigantic-minecraft

License: GNU General Public License v3.0

Java 4.24% Scala 94.41% Dockerfile 0.07% Batchfile 0.03% Shell 1.26%
minecraft-plugin spigot-plugin minecraft-server

seichiassist's Introduction

SeichiAssist

GitHub Actions

前提プラグイン

前提プラグイン(整地鯖内製)

コントリビューション

どのように貢献するかはCONTRIBUTING.mdへ移動しました。

慣れている開発者向け:

  1. 自分のGitHubアカウントへfork
  2. git clone --recursive https://github.com/${YOUR_GITHUB_ID}/SeichiAssist
  3. cd SeichiAssist
  4. git checkout -b ${YOUR_BRANCH_NAME} develop
  5. git commit -am "feat: 〇〇を実装"
  6. git push
  7. GiganticMinecraftのレポジトリに向かってPull Requestを作成
  8. CIとコードレビューを待つ
  9. マージされる
  10. CDが実行される
  11. (本番サーバーへのデプロイはGiganticMinecraftのメンバーがPRによって行う)

利用条件

  • GPLv3ライセンス での公開です。ソースコードの使用規約等はGPLv3ライセンスに従います。
  • 当リポジトリのコードの著作権はunchamaが所有しています。
  • 独自機能の追加やバグの修正等、ギガンティック☆整地鯖(以下、当サーバー)の発展への寄与を目的としたコードの修正・改変を歓迎しています。その場合、当サーバーのDiscordコミュニティに参加して、当コードに関する詳細なサポートを受けることが出来ます。

ライセンス

このプラグインは、Apache 2.0ライセンスで配布されている以下の製作物が含まれています。

seichiassist's People

Contributors

blackbracken avatar crosshearts avatar ga2ku avatar github-actions[bot] avatar haruyan-hopemucci avatar inductor avatar karayuumac avatar kassikun2012 avatar kaworukomine avatar kisaragieffective avatar kory33 avatar largogreentea avatar lucky3028 avatar outductor avatar renovate[bot] avatar rito528 avatar rsoba avatar siro256 avatar soundofhorizon avatar t-sasaki915 avatar taaa150 avatar tar0ss avatar tennitimc avatar unchama avatar unixpf avatar wreulicke avatar yanorei32 avatar yudegoma avatar yuki256r avatar yukukotani avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

seichiassist's Issues

整地鯖専用の進捗を作成する

1.12から進捗を自由に造ることが出来るようになったので、整地鯖特有の進捗を作成する。

アイディアプロジェクトからだが、具体的な進捗の内容に関しては何も決まっていないため、そこから決定することになりそう。

[SQL]statementやresultsetの閉じ忘れ

statementやresultsetの閉じ忘れを所々忘れているので閉じるようにする。
閉じ忘れててもGC時に閉じるらしいけど、その分GCが重くなるらしい……とgoogle先生が仰っておりました。

メニューとSlotの対応表

木の棒メニュー1ページ目

  • 木の棒メニュー1ページ目
    • 統計データボタン(1)
      • 押下で整地量バーON/OFF
    • 採掘速度変更ボタン(2)
      • 押下で採掘速度変更(OFF->無制限->127->200->400->600->OFFへ)
    • 土地保護メニューボタン(4)
    • サーバ間移動メニューボタン(7)
    • スポーンワールドへワープボタン(8)
      • 押下でスポーンワールドへワープ
    • 実績・二つ名システムボタン(9)
    • スターレベル情報ボタン(10)
    • パッシブスキルブックボタン(11)
    • アクティブスキルブックボタン(13)
      • 押下でアクティブスキルメニュー切り替えメニューへ
    • 不要ガチャ景品交換システムボタン(16)
      • 押下で景品交換インベントリオープン
    • 鉱石・交換券変換システムボタン(17)
      • 押下で鉱石・交換券変換システムメニューへ
    • ホームメニューボタン(18)
      • 押下でホームメニューへ
    • ランダムテレポートボタン(19)
      • 押下でランダムテレポート
    • 四次元ポケットボタン(21)
      • 四次元ポケットオープン
    • どこでもエンダーチェストボタン(22)
      • エンダーチェストオープン
    • FastCraft機能ボタン(23)
      • 押下でFastCraftを開く
    • MineStackメニューボタン(24)
      • 押下でMineStackメニュー
    • ガチャ券受け取りボタン(27)
      • 押下でガチャ券受け取り
    • ガチャ券受け取り方法選択ボタン(28)
      • 押下でガチャ券受け取り方法選択(あとでまとめて受け取り->毎分受け取り)
    • 運営からのガチャ券受け取りボタン(29)
      • 押下で運営からのガチャ券受け取り
    • 投票ptメニューボタン(30)
      • 押下で投票メニューへ
    • 整地神ランキングボタン(32)
      • 押下で整地神ランキング表示
    • ログイン神ランキング(33)
      • 押下でログイン神ランキング表示
    • 投票神ランキング(34)
      • 押下で投票神ランキング表示
    • 2ページ目ボタン(35)

木の棒メニュー2ページ目

  • 木の棒メニュー2ページ目
    • 公式wikiにアクセスボタン(1)
      • 押下で公式wiki(公式ホームページに変更予定)のURL表示
    • 運営方針とルールを確認ボタン(2)
      • 押下でルールのURL表示
    • 鯖Mapを見るボタン(3)
      • 押下で鯖マップURL表示
    • インベントリ共有ボタン(6)
      • 押下でインベントリが収納される
    • ロビーサーバへ移動ボタン(8)
      • 押下でロビーサーバへ
    • 自分の頭の取得ボタン(12)
      • 押下で経験値10000消費で自分の頭取得
    • 全体通知切り替えボタン(13)
      • 押下で通知設定の切り替え(消音しない/表示する->消音する/表示する->消音する/表示しない)
    • 死亡メッセージ表示切り替え(14)
      • 押下で切り替え(表示->隠す)
    • ワールドガード保護メッセージ表示切り替え(15)
      • 押下で切り替え(表示->非表示)
    • 1ページ目へボタン(27)
    • ゴミ箱を開くボタン(30)
      • 押下でゴミ箱インベントリを開く
    • タイタン補修インベントリボタン(34)
      • 押下でタイタン補修インベントリを開く
    • GT椎名林檎交換システムボタン
      • 押下でGT椎名林檎交換システムインベントリへ

土地保護関連メニュー

  • 保護メニュー
    • 保護設定用木の斧取得ボタン(0)
      • 押下で木の棒を取得
    • 保護申請ボタン(1)
      • 押下で保護申請コマンド実行
    • 保護一覧表示ボタン(2)
      • 押下で保護一覧表示コマンド実行
    • RegionGUI機能ボタン(3)
      • 押下でRegionGUIメニューへ
    • グリッド式保護メニューボタン(4)
      • 押下でグリッド式保護メニューへ

サーバ間移動メニュー

  • サーバ間移動メニュー
    • アルカディアサーバ移動ボタン(0)
      • 押下でアルカディアサーバへ
    • エデンサーバ移動ボタン(1)
      • 押下でエデンサーバへ
    • ヴァルハラサーバ移動ボタン(2)
      • 押下でヴァルハラサーバへ
    • 公共施設サーバ移動ボタン(8)
      • 押下で公共施設サーバへ

実績・二つ名システムメニュー

  • 実績・二つ名メニュー
    • 整地レベルを表示ボタン(0)
      • 押下で整地Lvに表示変更
    • 二つ名組み合わせシステムメニュー(8)
      • 押下で二つ名組み合わせメニューへ
    • カテゴリ「整地」ボタン(10)
      • 押下でカテゴリ「整地」メニューへ
    • カテゴリ「建築」ボタン(12)
      • 未実装
    • カテゴリ「ログイン」ボタン(14)
      • 押下でカテゴリ「ログイン」メニューへ
    • カテゴリ「やりこみ」ボタン(16)
      • 押下でカテゴリ「やりこみ」メニューへ
    • カテゴリ「特殊」ボタン(22)
      • 押下でカテゴリ「特殊」メニューへ
    • ホームへボタン
      • 押下で木の棒メニュー1ページ目へ

パッシブスキルブックメニュー

  • パッシブスキルメニュー
    • 複数種類同時破壊スキルボタン(0)
      • 押下で複数種類同時破壊スキル(ON/OFF)
    • チェスト破壊切り替えボタン(1)
      • 押下でチェスト破壊切り替え(ON/OFF)
    • GiganticBerserkボタン(9)
      • 押下で進化(?)

リファクタリングでデータベース初期化のコードが壊れてしまっている

#44 による変更で、playerdataの初期化が正しく行われないようになっています。

元の動作は、playerdata以外のテーブルをまず初期化し、その後プラグインクラスにstaticでくっついたフィールドを変更し、そのデータに基づいてplayerdataを初期化する、というものでした。

playerdataテーブルのカラムが読み込まれたデータに依存しているため、初期化を逐次的に行うか、テーブルスキーマを全部変更してしまうかの修正が必要です。

Maven -> Gradleに乗り換え

#64 によりFlywayを入れたいが、fat jarをmavenで生成したいとなると設定が煩雑になりがちなのでいっそgradleにしたい

PlayerHeadの初回読み込み時にサーバーがプチフリーズする

1.10.2 -> 1.12.2にした際にPlayerHead読み込みの挙動が変わり、読み込み開始〜完了までの間サーバーがフリーズしている模様。特に大量のPlayerHeadを読み込む各種ランキング表示時の影響が大きい。

PlayerHeadの読み込みを一律非同期化させる必要がある。

新たなステータスSeichiEXPの追加

MCLvがExperienceManagerでオーバーフローしているため、MCLv1200程度で経験値が増えなくなるというバグが発生するという報告があるので別な独自ステータスを用意したい。
そこでMCEXPと相互変換可能なステータス、SeichiEXPを提案する

例えば、MCEXPを消費する独自機能(fly,自分の頭取り出すやつ)をSeichiEXPを消費するように変更する。

参照:https://red.minecraftserver.jp/issues/2528

Menuとして使用しているInventory周りの改良

現状

現状では、MenuInventoryDataクラスでInventoryを管理し、PlayerInventoryListenerにおいてInventoryの操作を感知し動作を行わせている。

問題点

現状で述べたような方式を採用すると、

  • Inventoryのデータと処理が分離し分かりずらい
  • Inventoryのデータを作成する際にPlayerDataを利用したい時に困ってしまう(今のようにPlayerを引数に取り、Inventoryを返すような関数を大量に作成する必要がある)
  • Inventoryのデータとして保持しているItemStackの作成のコード量が多く、重複が多い(メニュー移動の矢印等)

以上のような問題が発生すると考える。

改善策・設計

そこで以上の問題点を解決すべくこのissueを作成した。まずは検討している設計について述べる。
まずはInventoryを構成するSlotの概念を導入する。

Slot

SlotとはBukkitのInventoryの1つのマスのことである。
SlotはItemStackとBukkitのInventoryにおける配置番号を持つ。
interfaceにより設計され、以下の継承クラスを持つ。

  • BaseSlot:何の機能も有しないSlotであり、Inventoryに設置できるItemStackとして利用できる。
  • Button:動作を付与できるSlotであり、Inventoryに設置し、MenuのButtonとして利用できる。動作の付与方法は後述する。

上記二つのクラスは共にBuilderを持ち、容易に生成することが可能である。

  • AbstractSlotBuilder: Slotのベースとなる抽象Builderクラス。再帰的ジェネリクスを利用し具象型クラスのインスタンスを返すことができるようにしている。
    • SlotBuilder:BaseSlotのBuilder。
    • ButtonBuilder:ButtonのBuilder。

ItemStackBuilder

ItemStackを容易に生成することができるBuilder。SlotBuilderとともに利用することを想定している。

  • BaseIconComponent: ItemStackの各情報を集約し、各Builderクラスに必要なインスタンスを付与する。
  • AbstractItemStackBuilder: 各Builderのベースとなる抽象Builderクラス。
    • ItemStackBuilder : ItemStackのBuilderクラス。
    • SkullItemStackBuilder : Skullを作成するためのBuilderクラス。

Menu

Menuとして働くInvenotry

  • Menu : Menuのベースとなるクラス。
    • ChestMenu : Chestを利用したMenuを作成する際に使用するクラス。

共にBuilderクラスを持つ。

  • MenuBuilder : MenuのBuilder。
    • ChestMenuBuilder : ChestMenuのBuilder。
  • MenuHandler : Menuを管理するクラス。InventoryClickEventMenuに与える役割を持つ。

具体例

Buttonの生成

public static Button playerInfo = ButtonBuilder
        .from(
            SkullItemStackBuilder
                .of()
                .playerSkull()
                .title(data -> Text.of(data.name + "の統計データ"))
                .lore(PlayerData::getPlayerInfoLore)
        )
        .at(0)
        .handler(new SlotActionHandler(
            Triggers.RIGHT_CLICK,
            //TODO: WIP
            event -> {}
        ))
        .build();

Menuの生成

public static Menu stickMenu = ChestMenuBuilder.of()
                .size(4 * 9)
                .slots(
                    PlayerDataButtons.playerInfo
                )
                .build();

Gachaコマンドの表示・入力に関する不具合

/gacha helpで表示されるコマンド使用方法一覧における/gacha addmsは以下のようになっている

sender.sendMessage(ChatColor.RED + "/gacha addms <名前> <レベル> <ID>");
sender.sendMessage("指定したガチャリストのIDを指定した名前とレベル(実際のレベルではないことに注意)でMineStack用ガチャリストに追加");

一方でコードを見てみると、違った説明が記載されており、引数チェックも誤っている。

}else if(args[0].equalsIgnoreCase("addms")){
if(args.length != 3){
sender.sendMessage("/gacha addms <名前> <ID> のように、追加したいアイテムの名前とIDを入力してください");
return true;
}
int level = Util.toInt(args[2]);
int num = Util.toInt(args[3]);
Gachaaddms(sender, args[1],level,num);
return true;

連続投票カウントの更新ロジックが誤っている

LoadPlayerDataTaskRunnable.java

Date TodayDate = sdf.parse(sdf.format(cal.getTime()));
Date LastDate = sdf.parse(lastvote);
long TodayLong = TodayDate.getTime();
long LastLong = LastDate.getTime();

long datediff = (TodayLong - LastLong)/(1000 * 60 * 60 * 24 );
if(datediff <= 1 || datediff >= 0){
	playerdata.ChainVote = rs.getInt("chainvote");
}else{
	playerdata.ChainVote = 0;
}

PlayerDataManipulator.java

Date TodayDate = sdf.parse(sdf.format(cal.getTime()));
Date LastDate = sdf.parse(lastvote);
long TodayLong = TodayDate.getTime();
long LastLong = LastDate.getTime();

long datediff = (TodayLong - LastLong)/(1000 * 60 * 60 * 24 );
if(datediff <= 1 || datediff >= 0){
    count ++ ;
}else {
    count = 1;
}

これらのif文はともに恒真式です。結果として、chainvoteが必ずインクリメントされるようになっています。
また、ロジックが全く同じなのでどこかに切り出せます。

凝固スキルの説明のミス

凝固スキルの必要ポイントを変えようとしてメニューに表示される必要ポイントを変更したが、結局変更しなかったので、現状食い違っている。
私のミスなので早急に修正したい。

[SQL]接続復旧処理がダブる

プレイヤーが2人以上且つDB接続が切れてしまった状態でPlayerDataBackupTaskRunnableが走ると、ensureConnection()が非同期でプレイヤー人数分実行されてしまっている。
試しにDBをモニタリングしたところ、コネクション数がプレイヤー数分張られてしまっている模様。気持ち悪いのでそのうち直す。

synchronized拡張子とやらを使えばいけるらしいが、同一インスタンス内からの呼び出しのみ正常に機能するとか。なんもわからん
https://www.google.co.jp/search?q=synchronized+java+%E6%84%8F%E5%91%B3&ie=UTF-8&oe=UTF-8&hl=ja-jp

MineStackのアイテム登録の簡略化

現時点ではソースコードに全アイテムを記載してMineStackのアイテムを管理している。
この方法では、ソースコード編集作業を行わなければならず、開発者が必要となる。

そのため、現在のMineStackのガチャアイテム登録のシステムのような、手に持ったアイテムをコマンドを打つことによってMineStackに登録できるような機能を追加したい。

メビウス図鑑機能作成

メビウスをただ集めるだけでは面白さに欠けるため、メビウスの図鑑が欲しい。
追加する情報の例は以下の通り。

  • 今までに発見したメビウスの数
    (出来るのなら発見した鯖やワールドも)
  • 最大レベルまで育てたメビウスの数
  • 崩壊してしまったメビウスの数
  • 付与したエンチャント一覧
  • 発見したセリフ一覧
    (メビウスが発言した回数なども)
  • (テクスチャ案が通れば)テクスチャのバリエーションの一覧

参照:https://red.minecraftserver.jp/issues/4059

プレイヤー間における、アイテムのMinestacks内での取引・受け渡しを楽にできるような機能の追加

必要な根拠としては、「大量なアイテムの取引・受け渡し」をするとき、既存のトレードシステムでは最大で64×16このアイテムしか1度に受け渡しできません。
さらに、地面にアイテムを撒いて受け取るにも、サーバに負荷がかかってしまうことが容易に想像できます。
しかし、Minestacks内での取引・受け渡しが可能になれば、大量のアイテムを1度に移動でき、サーバに負荷も与えにくくなると思われます。
また、手間が減るため、プレイヤー間の取引もより活発になることが想像できます。

From RedMine#2505

各種メニューのページ送り・戻りの不具合

時々、各種メニューのページの送り・戻りが出来なくなる事がある。大変利便性が悪い。
これはAPIの制限によりページの送り・戻りのボタンとして使用している頭が読み込めなくなってしまうためである。

以下が現在使用しているコード。getOwner()で正しいOwnerが取得できなくなる事が原因である。

itemstackcurrent.getType().equals(Material.SKULL_ITEM) && ((SkullMeta)itemstackcurrent.getItemMeta()).getOwner().equals("MHF_ArrowRight")

これを読み込みの成否にかかわらず、使用できるようにしたい。

コードスタイルの統一

同じソースコードを長期間にわたって複数人で開発しているため、ところどころ開発者各々でコードスタイルが違う場所がある。可能な限り統一を目指すことで、可読性を向上できると考える。
なお、コードスタイルバイオレーションはIDEの設定ファイル等で自動検知できるようにするのが望ましい。

MineStackへのアイテム登録や履歴表示に関するバグ

内部処理的な問題で同じアイテムで異なるLoreや名前のアイテムをMineStackに入れた際、正常な動作をしない。
例えば、現時点ではガチャアイテムである「ホームランバット」を取り出したとしても履歴に表示されるのは「ブレイズロッド」となっている。

凝固スキルの仕様変更

目的1:ホワイトブレス、アプソリュートゼロ、ダイヤモンドダストの取得ptを緩和する。その代わりヴェンダーブリザードの取得をアサルト解放条件に含める。
目的2:現在は「自分中心に凝固スキルが発動」してるためエターナルなどのスキルと凝固範囲がずれてしまう。「自分の前、その下」が凝固範囲になるように変更したい。

幅、奥行き、高さ(足元深さ含む)
・ホワブレ7 8 10 20pt アブ11 12 18 40pt ダイヤ15 16 26 70ptに変更
で、正面&正面の下足元が凍結するように調整
図:A案で十分だが、B案の方が便利なため、B案を実装できるならB案を採用したい(より高度なプログラムが必要)
https://gyazo.com/76c45d1050d6beaff158f5ab053286b1
https://gyazo.com/e996fcac663420f98894b6e47daced1a

ガチャを手に持って"MineStackガチャテーブルに"追加する機能が動作していない

今、ガチャの方の「手に持ったアイテムがマインスタックに追加される」機能、バグってるのかなんなのか不可能なんですけど…

ガチャはもともと手に持って追加するコマンドがあるんですよ!(コードどこに書いてあるか忘れた:innocent: ) でも正常に動いてないんです:joy:
レベルは収納レベルのことだと思いますが私もよくわからないです…でも無視してちゃんと登録されてるなら良いのでは:thinking:

交換券を無理やり突っ込もうとしたんですけどうまく格納されなくて…

(#plugin開発 で kawakuroさんによる)

整地量30分ランキングの仕様変更

建築ワールドにおいては整地を行わないため、30分ランキングを表示する必要がない。
そのため、以下のように変更したい

  • サーバ毎に表示非表示を切り替えることができる。
  • 指定方法はConfigにて行う。Configにはサーバを識別するservernumが存在するため、それを使用すると良い

    SeichiAssist/config.yml

    Lines 12 to 14 in 8f602e4

    # サーバ識別設定
    # 複数サーバ構成にする場合はこの値をサーバごとに変更します
    servernum: '1'

ランキングテーブル更新失敗時、ランキング関連実績が不正解除されてしまう


上の処理がcommunication error等でこけた場合に


同タイミングで回る実績解除処理で本来解禁されるはずのない実績が解除される。
(例:整地量ランキングで1位を取っていないにもかかわらず整地神の称号が貰えてしまう)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.