Skip to content
This repository was archived by the owner on Apr 30, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,7 @@
import world.arainu.core.metaverseplugin.commands.CommandiPhone;
import world.arainu.core.metaverseplugin.gui.Gui;
import world.arainu.core.metaverseplugin.gui.MenuItem;
import world.arainu.core.metaverseplugin.iphone.Bank;
import world.arainu.core.metaverseplugin.iphone.ChestLock;
import world.arainu.core.metaverseplugin.iphone.Drilling;
import world.arainu.core.metaverseplugin.iphone.LinkDiscord;
import world.arainu.core.metaverseplugin.iphone.MoveSurvival;
import world.arainu.core.metaverseplugin.iphone.Municipal;
import world.arainu.core.metaverseplugin.iphone.Spawn;
import world.arainu.core.metaverseplugin.iphone.TrapTower;
import world.arainu.core.metaverseplugin.iphone.Worldteleport;
import world.arainu.core.metaverseplugin.iphone.iPhoneEnderDragon;
import world.arainu.core.metaverseplugin.iphone.*;
import world.arainu.core.metaverseplugin.listener.AdvancementListener;
import world.arainu.core.metaverseplugin.listener.BankListener;
import world.arainu.core.metaverseplugin.listener.ChestLockListener;
Expand Down Expand Up @@ -189,6 +180,7 @@ private void loadGuis() {
chestMeta.lore(Arrays.asList(Component.text("チェストに向かって使用することで"), Component.text("チェストを個人用チェストにすることができます。"), Component.text("300円/個").color(NamedTextColor.GOLD)));
chestItem.setItemMeta(chestMeta);
iPhoneStore.addGuiItem(new MenuItem("チェストの鍵を購入する", new ChestLock()::executeGui, true, chestItem), (p) -> Objects.equals(ServerStore.getServerName(), "survival"));
iPhoneStore.addGuiItem(new MenuItem("Metazon", new Metazon()::executeGui, true, Material.CHEST), (p) -> Objects.equals(ServerStore.getServerName(), "survival"));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
import org.bukkit.entity.Villager;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.MerchantRecipe;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.jetbrains.annotations.NotNull;
import world.arainu.core.metaverseplugin.iphone.Bank;
import world.arainu.core.metaverseplugin.utils.ChatUtil;
import world.arainu.core.metaverseplugin.utils.sqlUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.*;

/**
* プラグイン特有のmobをスポーンさせるコマンドを定義している関数
Expand All @@ -24,13 +25,13 @@
*/
public class CommandSpawn extends CommandPlayerOnlyBase {
@Getter
private final CommandSpawn Instance;
private static final Map<String, String> METAZON_VILLAGER = Map.of("mason-villager", "鉱石店員","stone-villager", "石工店員","mason-villager-shop","お金店員(鉱石)", "stone-villager-shop","お金店員(石系)", "mob-villager-shop","モブ店員", "sandstone-villager","砂岩砂利店員", "sandstone-villager-shop","お金店員(砂岩系&砂利)");

/**
* プラグイン特有のmobをスポーンさせるコマンドを定義している関数
*/
public CommandSpawn() {
this.Instance = this;
@Getter
private static CommandSpawn instance;

public CommandSpawn(){
instance = this;
}

/**
Expand Down Expand Up @@ -71,28 +72,30 @@ public static MerchantRecipe createRecipe2(int yen, int quantity, ItemStack ingr
* @param player プレイヤー(ここの座標に作成する)
* @return 村人
*/
public static Villager createVillager(String name, Villager.Profession type, Player player) {
public static Villager createVillager(String name, Villager.Profession type, Player player,String[] args) {
Villager villager = (Villager) player.getWorld().spawnEntity(player.getLocation(), EntityType.VILLAGER);
villager.setProfession(type);
villager.setVillagerLevel(5);
villager.setCustomName(name);
villager.setCustomNameVisible(true);
villager.setAI(false);
villager.setInvulnerable(true);
if(args.length == 2) {
if (Objects.equals(args[1], "invisible")) {
villager.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 9999, 255, false, false));
}
}
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
return villager;
}

@Override
public boolean execute(Player player, String[] args) {
if (args.length == 1) {
if (args.length == 1 || args.length == 2) {
switch (args[0]) {
case "casino-villager" -> {
Villager villager = createVillager("スロットマン", Villager.Profession.MASON, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
}
case "casino-villager" -> createVillager("スロットマン", Villager.Profession.MASON, player,args);
case "mason-villager" -> {
Villager villager = createVillager("鉱石店員", Villager.Profession.MASON, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
Villager villager = createVillager(METAZON_VILLAGER.get(args[0]), Villager.Profession.MASON, player,args);
List<MerchantRecipe> recipes = new ArrayList<>();
recipes.add(createRecipe(1, 50, new ItemStack(Material.COAL)));
recipes.add(createRecipe(5, 40, new ItemStack(Material.RAW_COPPER)));
Expand All @@ -104,8 +107,7 @@ public boolean execute(Player player, String[] args) {
villager.setRecipes(recipes);
}
case "mason-villager-shop" -> {
Villager villager = createVillager("お金店員(鉱石)", Villager.Profession.MASON, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
Villager villager = createVillager(METAZON_VILLAGER.get(args[0]), Villager.Profession.MASON, player,args);
List<MerchantRecipe> recipes = new ArrayList<>();
recipes.add(createRecipe2(1, 50, new ItemStack(Material.COAL)));
recipes.add(createRecipe2(5, 40, new ItemStack(Material.RAW_COPPER)));
Expand All @@ -117,8 +119,7 @@ public boolean execute(Player player, String[] args) {
villager.setRecipes(recipes);
}
case "stone-villager" -> {
Villager villager = createVillager("石工店員", Villager.Profession.MASON, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
Villager villager = createVillager(METAZON_VILLAGER.get(args[0]), Villager.Profession.MASON, player,args);
List<MerchantRecipe> recipes = new ArrayList<>();
recipes.add(createRecipe(1, 3, new ItemStack(Material.COBBLESTONE)));
recipes.add(createRecipe(1, 5, new ItemStack(Material.MOSSY_COBBLESTONE)));
Expand Down Expand Up @@ -170,8 +171,7 @@ public boolean execute(Player player, String[] args) {
villager.setRecipes(recipes);
}
case "stone-villager-shop" -> {
Villager villager = createVillager("お金店員(石系)", Villager.Profession.MASON, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
Villager villager = createVillager(METAZON_VILLAGER.get(args[0]), Villager.Profession.MASON, player,args);
List<MerchantRecipe> recipes = new ArrayList<>();
recipes.add(createRecipe2(1, 3, new ItemStack(Material.COBBLESTONE)));
recipes.add(createRecipe2(1, 5, new ItemStack(Material.MOSSY_COBBLESTONE)));
Expand Down Expand Up @@ -222,9 +222,8 @@ public boolean execute(Player player, String[] args) {
recipes.add(createRecipe2(1, 5, new ItemStack(Material.POINTED_DRIPSTONE)));
villager.setRecipes(recipes);
}
case "mob-villager" -> {
Villager villager = createVillager("モブ店員", Villager.Profession.FARMER, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0] + "-shop");
case "mob-villager-shop" -> {
Villager villager = createVillager(METAZON_VILLAGER.get(args[0]), Villager.Profession.FARMER, player,args);
List<MerchantRecipe> recipes = new ArrayList<>();
recipes.add(createRecipe2(1000, 5, new ItemStack(Material.AXOLOTL_SPAWN_EGG)));
recipes.add(createRecipe2(500, 5, new ItemStack(Material.BEE_SPAWN_EGG)));
Expand Down Expand Up @@ -257,8 +256,7 @@ public boolean execute(Player player, String[] args) {

}
case "sandstone-villager" -> {
Villager villager = createVillager("砂岩砂利店員", Villager.Profession.MASON, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
Villager villager = createVillager(METAZON_VILLAGER.get(args[0]), Villager.Profession.MASON, player,args);
List<MerchantRecipe> recipes = new ArrayList<>();
recipes.add(createRecipe(1, 5, new ItemStack(Material.GRAVEL)));
recipes.add(createRecipe(1, 5, new ItemStack(Material.SANDSTONE)));
Expand All @@ -272,8 +270,7 @@ public boolean execute(Player player, String[] args) {
villager.setRecipes(recipes);
}
case "sandstone-villager-shop" -> {
Villager villager = createVillager("お金店員(砂岩系&砂利)", Villager.Profession.MASON, player);
sqlUtil.setuuidtype(villager.getUniqueId(), args[0]);
Villager villager = createVillager(METAZON_VILLAGER.get(args[0]), Villager.Profession.MASON, player,args);
List<MerchantRecipe> recipes = new ArrayList<>();
recipes.add(createRecipe2(1, 5, new ItemStack(Material.GRAVEL)));
recipes.add(createRecipe2(1, 5, new ItemStack(Material.SANDSTONE)));
Expand All @@ -299,6 +296,8 @@ public boolean execute(Player player, String[] args) {
@Override
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String label,
String[] args) {
return List.of("casino-villager", "mason-villager", "stone-villager", "mason-villager-shop", "stone-villager-shop", "mob-villager", "sandstone-villager", "sandstone-villager-shop");
List<String> r = new ArrayList<>(METAZON_VILLAGER.keySet());
r.add("casino-villager");
return r;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package world.arainu.core.metaverseplugin.iphone;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.entity.Villager;
import world.arainu.core.metaverseplugin.MetaversePlugin;
import world.arainu.core.metaverseplugin.commands.CommandSpawn;
import world.arainu.core.metaverseplugin.gui.Gui;
import world.arainu.core.metaverseplugin.gui.MenuItem;
import world.arainu.core.metaverseplugin.listener.VillagerListener;
import world.arainu.core.metaverseplugin.utils.sqlUtil;

import java.util.Objects;
import java.util.stream.Collectors;

public class Metazon extends iPhoneBase {
@Override
public void executeGui(MenuItem menuItem) {
Gui.getInstance().openMenu(menuItem.getClicker(), "Metazon", CommandSpawn.getMETAZON_VILLAGER().entrySet().stream().map((n) -> new MenuItem(n.getValue(),this::openMetazon, true,Material.STONE,n.getKey())).collect(Collectors.toList()));
}

private void openMetazon(MenuItem menuItem){
Player p = menuItem.getClicker();
// テスト鯖でデバッグ時に例外が発生しないようにするコード
if(Objects.requireNonNull(sqlUtil.getuuidsbytype((String) menuItem.getCustomData())).size() == 0){
MetaversePlugin.logger().warning("Villager entityが存在しないため、新規作成します(自動破棄されます)");
CommandSpawn.getInstance().execute(p, new String[]{(String) menuItem.getCustomData(),"invisible"});
}
VillagerListener.getInstance().open(p, (Villager) Objects.requireNonNull(Bukkit.getEntity(Objects.requireNonNull(sqlUtil.getuuidsbytype((String) menuItem.getCustomData())).get(0))), (int) p.getWorld().getSpawnLocation().distance(p.getLocation()));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package world.arainu.core.metaverseplugin.listener;

import lombok.Getter;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.milkbowl.vault.economy.Economy;
Expand All @@ -21,6 +22,7 @@
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.potion.PotionEffectType;
import world.arainu.core.metaverseplugin.MetaversePlugin;
import world.arainu.core.metaverseplugin.gui.Gui;
import world.arainu.core.metaverseplugin.gui.MenuItem;
Expand Down Expand Up @@ -49,6 +51,11 @@
*/
public class VillagerListener implements Listener {
private final HashMap<Inventory, GuiData> invMap = new HashMap<>();
@Getter private static VillagerListener instance;

public VillagerListener(){
instance = this;
}

/**
* インベントリ内のお金を取得する関数
Expand All @@ -68,6 +75,25 @@ public static ReturnMoney getTotalmoney(Inventory inv) {
return new ReturnMoney(money_list, total_money);
}

public void open(Player player, Villager villager,int fee){
AtomicInteger i = new AtomicInteger(-1);
List<MenuItem> tradeitems = villager.getRecipes().stream().map((recipe) -> {
i.getAndIncrement();
return new Mapdata(recipe, i.get(), villager, fee);
})
.map((recipe) -> new MenuItem(
this::onClick,
true,
Bank.isMoney(recipe.recipe.getResult()) ? recipe.recipe.getIngredients().get(0) : recipe.recipe.getResult(),
recipe,
false,
-1,
-1))
.collect(Collectors.toList());

Gui.getInstance().openMenu(player, villager.getName(), tradeitems);
}

/**
* プレイヤーが右クリックしたときに特定の村人の場合は独自UIを表示させるリスナー
*
Expand All @@ -83,22 +109,7 @@ public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
obj.start(e.getPlayer());
} else {
Villager villager = (Villager) e.getRightClicked();
AtomicInteger i = new AtomicInteger(-1);
List<MenuItem> tradeitems = villager.getRecipes().stream().map((recipe) -> {
i.getAndIncrement();
return new Mapdata(recipe, i.get(), villager);
})
.map((recipe) -> new MenuItem(
this::onClick,
true,
Bank.isMoney(recipe.recipe.getResult()) ? recipe.recipe.getIngredients().get(0) : recipe.recipe.getResult(),
recipe,
false,
-1,
-1))
.collect(Collectors.toList());

Gui.getInstance().openMenu(e.getPlayer(), villager.getName(), tradeitems);
open(e.getPlayer(),villager, 0);
}
}
}
Expand Down Expand Up @@ -250,8 +261,7 @@ public void onInventoryClick(InventoryClickEvent e) {
if (inv.getType() == InventoryType.MERCHANT) {
HashMap<Integer, ? extends ItemStack> items = inv.all(Material.EMERALD);
List<Boolean> isMoney = items.values().stream()
.map(itemStack -> itemStack.getItemMeta().getPersistentDataContainer().has(BankStore.getKey(), PersistentDataType.INTEGER))
.collect(Collectors.toList());
.map(itemStack -> itemStack.getItemMeta().getPersistentDataContainer().has(BankStore.getKey(), PersistentDataType.INTEGER)).toList();
MerchantRecipe recipe = ((MerchantInventory) inv).getSelectedRecipe();
if (recipe != null && isMoney.contains(true)) {
recipe.setUses(recipe.getUses() - 1);
Expand All @@ -276,6 +286,10 @@ public void onInventoryClose(InventoryCloseEvent e) {
if (item == null) continue;
ItemUtil.addItem(item, e.getPlayer().getInventory(), (Player) e.getPlayer());
}
if(invMap.get(inv).villager().getPotionEffect(PotionEffectType.INVISIBILITY) != null){
sqlUtil.removeuuidtype(invMap.get(inv).villager().getUniqueId());
invMap.get(inv).villager().remove();
}
invMap.remove(inv);
}

Expand All @@ -284,8 +298,8 @@ private void onClick(MenuItem e) {
int index = ((Mapdata) e.getCustomData()).index;
Villager villager = ((Mapdata) e.getCustomData()).villager;
boolean isPurchase = Bank.isMoney(recipe.getResult());
ItemStack money = Bank.isMoney(recipe.getResult()) ? recipe.getResult() : recipe.getIngredients().get(0);
int price = money.getAmount() * Objects.requireNonNull(money.getItemMeta().getPersistentDataContainer().get(BankStore.getKey(), PersistentDataType.INTEGER));
ItemStack money = isPurchase ? recipe.getResult() : recipe.getIngredients().get(0);
int price = money.getAmount() * Objects.requireNonNull(money.getItemMeta().getPersistentDataContainer().get(BankStore.getKey(), PersistentDataType.INTEGER)) + ((Mapdata) e.getCustomData()).fee() * (isPurchase ? -1 : 1);
final Inventory inv;
if (isPurchase) {
inv = Bukkit.createInventory(null, 27, e.getIcon().displayName().append(Component.text(" を買取")).color(NamedTextColor.BLACK));
Expand Down Expand Up @@ -356,7 +370,7 @@ private void onClick(MenuItem e) {
/**
* Mapのreturnに使うやつ
*/
record Mapdata(MerchantRecipe recipe, int index, Villager villager) {
record Mapdata(MerchantRecipe recipe, int index, Villager villager,int fee) {
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ public void run() {
AtomicInteger i = new AtomicInteger();
AtomicInteger j = new AtomicInteger();
Bukkit.advancementIterator().forEachRemaining(advancement -> {
Bukkit.getScheduler().runTaskLater(MetaversePlugin.getInstance(),() -> addPlayerAdvancement(advancement, p),j.get());
Bukkit.getScheduler().runTaskLaterAsynchronously(MetaversePlugin.getInstance(),() -> addPlayerAdvancement(advancement, p),j.get());
i.getAndIncrement();
if(i.get()%50 == 0){
j.set(j.get()+2);
if(i.get()%150 == 0){
j.set(j.get()+5);
}
});
MetaversePlugin.logger().info("synced");
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/world/arainu/core/metaverseplugin/utils/sqlUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,23 @@ public static void setuuidtype(UUID uuid, String type) {
}
}

/**
* 何かしらのタイプとUUIDの紐付けを解除する関数
*
* @param uuid UUID
*/
public static void removeuuidtype(UUID uuid) {
try {
create_uuidtype_table();
PreparedStatement ps = conn.prepareStatement("DELETE FROM `uuidtype` WHERE `uuid` LIKE ?");
ps.setString(1,uuid.toString());
ps.executeUpdate();
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

/**
* 何かしらのタイプとUUIDを紐付ける関数。
*
Expand Down