【Bukkit】【Spigot】めっちゃ便利!インベントリをファイルに保存して活用する方法【プラグイン開発】

簡単にインベントリをファイルに保存する方法です。

拡張インベントリを作るときに便利だと思います!

組み込み型なので自作プラグインに埋め込んでください!

 

※お借りしたコード

https://jyn.jp/ – CustomConfig 

 

1.完成例

完成して実際に動かしたものの動画があります!

 

2.制作環境について

IDE Eclipse 

Java java7

Spigot 1.14.4

 

3.保存形式

YAMLにて保存しました

 

4.コード

とってもシンプルです。

※プラグインの無効化時にクリーン処理を挟んでください。 InventorySQL.clean();

※プレイヤーが退出したときにクリーン処理を挟んでください。 InventorySQL.clean(Player#getUniqueId());

※インベントリをそのまま保存しておくとメモリリークが心配なので毎回作成していますが、必要に応じて変更してください。

※ファイル名、フォルダを追加する場合は必要に応じて引数を変更してください。


import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

import CustomConfig;

public class InventorySQL{
private static HashMap<UUID, InventorySQL> datas = new HashMap<>();
public static InventorySQL getData(UUID key) {
if (!datas.containsKey(key)) {
return new InventorySQL(key);
}
return datas.get(key);
}

public static void clean() {
for (UUID key : datas.keySet()) {
clean(key);
}
}
public static void clean(UUID key) {
if (datas.containsKey(key)) {
datas.get(key).save();
datas.remove(key);
}
}

private UUID key;
private ItemStack[] contents;
public InventorySQL(UUID key) {
this.key = key;

reload();


datas.put(key, this);
}

public void reload() {
contents = new ItemStack[9 * 6];
try {
CustomConfig CC = new CustomConfig(key.toString() + ".inv.yml");
FileConfiguration config = CC.getConfig();

if (config.contains("inventory")) {
List<?> list = config.getList("inventory");
int max = list.size();
for (int cur = 0; cur < max; cur++) {
Object obj = list.get(cur);
if (obj instanceof ItemStack) {
contents[cur] = (ItemStack) obj;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

public void open(Player p) {
Inventory inv = Bukkit.createInventory(null, 9 * 6, "§eBackPack");
inv.setContents(contents);
p.openInventory(inv);
}

public void closeInventory(Player p, Inventory inv) {
contents = inv.getContents();
}

public void save() {
CustomConfig CC = new CustomConfig(key.toString() + ".inv.yml");
FileConfiguration config = CC.getConfig();

/**
* Save as list type
*/
List<ItemStack> list = new ArrayList<>(Arrays.asList(contents));

config.set("inventory", list);
CC.saveConfig();
}
}

 

今回はやりませんでしたが、Blob形式に変換できればSQLにも保存できると思います。

 

【Hypixel】ラグを解消! 最強アドレス!!

こんにちは、kemasama です。

今回、Hypixel のラグを解消する方法を紹介します!

これであなたも快適なHypixelライフが!!

 

今回MineStatsというアプリケーションを使用して、PINGの測定を行いました。

後日実際のプレイによるPINGの測定結果も載せる予定です!

 

1.従来のアドレス(mc.hypixel.net)

2.新規のアドレス(mc.hypixel.io)

 

この画像、計測結果のLatencyを見ていただければわかるようにだいぶ差があることがわかり、

新規の 【mc.hypixel.io】の方がPINGがいいということがわかります!

つまり、この新規のアドレスを使用すればPINGが改善するということですね!

 

日本製マイクラサーバーを紹介!!

わたしが運営している日本製(当たり前だけどね)の紹介をします。 サーバーの拠点が日本なのでピングの遅延は少ないです。(お使いの回線によっては遅いかもです)  

ゲーム

FreeForAll や TeamDeathMatch、TheSimplePitがメインのPVPサーバーです。   PVPに飽きた方向け、苦手な方向けに生活鯖も用意しております。  

FreeForAll

自分以外は全員敵! 広大なマップの中でできるだけ長く生き残れ!!

多彩なキット、アイテム、イベント(デバッグ中)があり、これだけでも十分楽しめると思います。 ボウスパムはキックされるので注意、最大までためて打てばキックされません。  

TeamDeathMatch

4チームでもっともキルの多いチームの勝ち! チームで協力してたくさんキルをしよう! 多彩なパーク(敷居高いかもです)、楽しいマップがあり、個人戦が苦手な人でもチームの人と協力して楽しめます。  

TheSimplePit

広大なマップでできるだけ長く生き残ることが目標です。 とても強力なパークがありそれを集めたりストリークをためてバウンティーをためたり楽しみ方は様々です。 ボウスパムしてもキックされません。 クロスチーミングしてもバンされません。 アイテムやパークを駆使してできるだけ長く生き残れ!  

生活鯖

自分の世界を広げていこう、カスタムレシピとアイテムによって強化されたマインクラフト!! 経済(お金)、レベルの概念が存在し、お金でアイテムを買ったり、売ったりすること街でできます。 オークションの機能を実施する予定です。 シンプルだけど楽しいサバイバルとなります。 ガチ勢の人だともうレベル100超えの人います。   今回はサクッと雑に紹介しましたが、とある方がこの鯖を丁寧に紹介してくれていますので、そのリンクを貼っておきます。 アドレスもこちら↓↓↓で確認できます。 https://ameblo.jp/kaguya-takenoko/entry-12452744157.html たけのこ様(モデレーターの方です)