mirror of
https://github.com/CarmJos/UltraDepository.git
synced 2026-06-04 08:38:25 +08:00
完成收集监听与变量部分
This commit is contained in:
@@ -21,6 +21,5 @@ items:
|
|||||||
"DIAMOND":
|
"DIAMOND":
|
||||||
original: true #只允许无任何特殊属性的物品被收入
|
original: true #只允许无任何特殊属性的物品被收入
|
||||||
slot: 5
|
slot: 5
|
||||||
limit: 500
|
|
||||||
price: 10
|
price: 10
|
||||||
name: "&b&l钻石"
|
name: "&b&l钻石"
|
||||||
@@ -101,6 +101,9 @@
|
|||||||
# %UltraBackpack_remain_<背包ID>_<物品ID>%
|
# %UltraBackpack_remain_<背包ID>_<物品ID>%
|
||||||
- 得到对应背包内对应物品的剩余可售出数量
|
- 得到对应背包内对应物品的剩余可售出数量
|
||||||
- $剩余可售出数量 = $每日售出限制 - $今日售出数量
|
- $剩余可售出数量 = $每日售出限制 - $今日售出数量
|
||||||
|
|
||||||
|
# %UltraBackpack_capacity_<背包ID>%
|
||||||
|
- 得到对应背包的容量
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import cc.carm.plugin.ultrabackpack.api.UltraBackpackAPI;
|
|||||||
import cc.carm.plugin.ultrabackpack.api.util.ColorParser;
|
import cc.carm.plugin.ultrabackpack.api.util.ColorParser;
|
||||||
import cc.carm.plugin.ultrabackpack.api.util.MessageUtil;
|
import cc.carm.plugin.ultrabackpack.api.util.MessageUtil;
|
||||||
import cc.carm.plugin.ultrabackpack.configuration.PluginConfig;
|
import cc.carm.plugin.ultrabackpack.configuration.PluginConfig;
|
||||||
|
import cc.carm.plugin.ultrabackpack.hooker.UBExpansion;
|
||||||
import cc.carm.plugin.ultrabackpack.listener.CollectListener;
|
import cc.carm.plugin.ultrabackpack.listener.CollectListener;
|
||||||
import cc.carm.plugin.ultrabackpack.listener.UserListener;
|
import cc.carm.plugin.ultrabackpack.listener.UserListener;
|
||||||
import cc.carm.plugin.ultrabackpack.manager.BackpackManager;
|
import cc.carm.plugin.ultrabackpack.manager.BackpackManager;
|
||||||
@@ -84,7 +85,7 @@ public class Main extends JavaPlugin {
|
|||||||
|
|
||||||
if (MessageUtil.hasPlaceholderAPI()) {
|
if (MessageUtil.hasPlaceholderAPI()) {
|
||||||
log("注册变量...");
|
log("注册变量...");
|
||||||
|
new UBExpansion(this).register();
|
||||||
} else {
|
} else {
|
||||||
log("检测到未安装PlaceholderAPI,跳过变量注册。");
|
log("检测到未安装PlaceholderAPI,跳过变量注册。");
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -34,8 +34,7 @@ public class BackpackConfiguration {
|
|||||||
public @NotNull String getName() {
|
public @NotNull String getName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public @NotNull GUIConfiguration getGUIConfiguration() {
|
public @NotNull GUIConfiguration getGUIConfiguration() {
|
||||||
return this.guiConfiguration;
|
return this.guiConfiguration;
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-11
@@ -3,7 +3,6 @@ package cc.carm.plugin.ultrabackpack.hooker;
|
|||||||
import cc.carm.plugin.ultrabackpack.Main;
|
import cc.carm.plugin.ultrabackpack.Main;
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -12,14 +11,17 @@ import java.util.List;
|
|||||||
public class UBExpansion extends PlaceholderExpansion {
|
public class UBExpansion extends PlaceholderExpansion {
|
||||||
|
|
||||||
private static final List<String> PLACEHOLDERS = Arrays.asList(
|
private static final List<String> PLACEHOLDERS = Arrays.asList(
|
||||||
"%UltraBackpack_%",
|
"%UltraBackpack_amount_<BackpackID>_<ItemTypeID>%",
|
||||||
"%UltraBackpack_%"
|
"%UltraBackpack_sold_<BackpackID>_<ItemTypeID>%",
|
||||||
|
"%UltraBackpack_price_<BackpackID>_<ItemTypeID>%",
|
||||||
|
"%UltraBackpack_remain_<BackpackID>_<ItemTypeID>%",
|
||||||
|
"%UltraBackpack_capacity_<BackpackID>%"
|
||||||
);
|
);
|
||||||
|
|
||||||
JavaPlugin plugin;
|
Main main;
|
||||||
|
|
||||||
public UBExpansion(JavaPlugin plugin) {
|
public UBExpansion(Main main) {
|
||||||
this.plugin = plugin;
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -34,17 +36,17 @@ public class UBExpansion extends PlaceholderExpansion {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getAuthor() {
|
public @NotNull String getAuthor() {
|
||||||
return plugin.getDescription().getAuthors().toString();
|
return main.getDescription().getAuthors().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getIdentifier() {
|
public @NotNull String getIdentifier() {
|
||||||
return plugin.getDescription().getName();
|
return main.getDescription().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getVersion() {
|
public @NotNull String getVersion() {
|
||||||
return plugin.getDescription().getVersion();
|
return main.getDescription().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -75,14 +77,14 @@ public class UBExpansion extends PlaceholderExpansion {
|
|||||||
Integer sold = Main.getUserManager().getData(player).getItemSold(args[2], args[3]);
|
Integer sold = Main.getUserManager().getData(player).getItemSold(args[2], args[3]);
|
||||||
if (sold == null) return "背包或物品不存在";
|
if (sold == null) return "背包或物品不存在";
|
||||||
|
|
||||||
Integer limit = Main.getBackpackManager().getItemLimit(args[2], args[3]);
|
Integer limit = Main.getBackpackManager().getItemSellLimit(args[2], args[3]);
|
||||||
if (limit == null) return "背包或物品不存在";
|
if (limit == null) return "背包或物品不存在";
|
||||||
|
|
||||||
return Integer.toString(limit - sold);
|
return Integer.toString(limit - sold);
|
||||||
}
|
}
|
||||||
case "limit": {
|
case "limit": {
|
||||||
if (args.length < 3) return "参数不足";
|
if (args.length < 3) return "参数不足";
|
||||||
Integer limit = Main.getBackpackManager().getItemLimit(args[2], args[3]);
|
Integer limit = Main.getBackpackManager().getItemSellLimit(args[2], args[3]);
|
||||||
if (limit == null) return "背包或物品不存在";
|
if (limit == null) return "背包或物品不存在";
|
||||||
else return limit.toString();
|
else return limit.toString();
|
||||||
}
|
}
|
||||||
|
|||||||
+41
-10
@@ -1,8 +1,12 @@
|
|||||||
package cc.carm.plugin.ultrabackpack.listener;
|
package cc.carm.plugin.ultrabackpack.listener;
|
||||||
|
|
||||||
|
import cc.carm.plugin.ultrabackpack.Main;
|
||||||
import cc.carm.plugin.ultrabackpack.configuration.PluginConfig;
|
import cc.carm.plugin.ultrabackpack.configuration.PluginConfig;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
@@ -14,34 +18,61 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class CollectListener implements Listener {
|
public class CollectListener implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onBreak(BlockBreakEvent event) {
|
public void onBreak(BlockBreakEvent event) {
|
||||||
if (!PluginConfig.Collect.BREAK.get()) return;
|
if (event.isCancelled() || !event.isDropItems() || !PluginConfig.Collect.BREAK.get()) return;
|
||||||
Player player = event.getPlayer();
|
|
||||||
|
|
||||||
Collection<ItemStack> drops = event.getBlock().getDrops();
|
Player player = event.getPlayer();
|
||||||
|
if (!Main.getUserManager().isCollectEnabled(player)) return;
|
||||||
|
|
||||||
|
Location location = event.getBlock().getLocation();
|
||||||
|
World world = event.getBlock().getWorld();
|
||||||
|
|
||||||
|
Collection<ItemStack> drops;
|
||||||
|
if (player.getItemInUse() == null) {
|
||||||
|
drops = event.getBlock().getDrops();
|
||||||
|
} else {
|
||||||
|
drops = event.getBlock().getDrops(player.getItemInUse(), player.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (drops.isEmpty()) return;
|
||||||
|
event.setDropItems(false);
|
||||||
|
|
||||||
|
Collection<ItemStack> finalDrops = Main.getBackpackManager().collectItem(player, drops);
|
||||||
|
finalDrops.forEach(finalDrop -> world.dropItemNaturally(location, finalDrop));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onBreak(EntityDeathEvent event) {
|
public void onDeath(EntityDeathEvent event) {
|
||||||
if (!PluginConfig.Collect.KILL.get()) return;
|
if (!PluginConfig.Collect.KILL.get()) return;
|
||||||
|
|
||||||
Player player = event.getEntity().getKiller();
|
Player player = event.getEntity().getKiller();
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
if (!Main.getUserManager().isCollectEnabled(player)) return;
|
||||||
|
|
||||||
Collection<ItemStack> drops = event.getDrops();
|
Collection<ItemStack> finalDrops = Main.getBackpackManager().collectItem(player, event.getDrops());
|
||||||
|
event.getDrops().clear();
|
||||||
|
event.getDrops().addAll(finalDrops);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPickup(EntityPickupItemEvent event) {
|
public void onPickup(EntityPickupItemEvent event) {
|
||||||
if (!PluginConfig.Collect.PICKUP.get()) return;
|
if (event.isCancelled() || !PluginConfig.Collect.PICKUP.get()) return;
|
||||||
if (!(event.getEntity() instanceof Player)) return;
|
if (!(event.getEntity() instanceof Player)) return;
|
||||||
Player player = (Player) event.getEntity();
|
|
||||||
|
|
||||||
|
Player player = (Player) event.getEntity();
|
||||||
|
if (!Main.getUserManager().isCollectEnabled(player)) return;
|
||||||
|
|
||||||
|
// 自己扔出去的东西不计入背包
|
||||||
UUID thrower = event.getItem().getThrower();
|
UUID thrower = event.getItem().getThrower();
|
||||||
if (thrower != null && thrower.equals(player.getUniqueId())) return;
|
if (thrower != null && thrower.equals(player.getUniqueId())) return;
|
||||||
|
|
||||||
ItemStack item = event.getItem().getItemStack();
|
ItemStack item = event.getItem().getItemStack();
|
||||||
|
if (Main.getBackpackManager().collectItem(player, item)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.getItem().remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+67
-2
@@ -1,12 +1,18 @@
|
|||||||
package cc.carm.plugin.ultrabackpack.manager;
|
package cc.carm.plugin.ultrabackpack.manager;
|
||||||
|
|
||||||
|
import cc.carm.plugin.ultrabackpack.Main;
|
||||||
import cc.carm.plugin.ultrabackpack.configuration.backpack.BackpackConfiguration;
|
import cc.carm.plugin.ultrabackpack.configuration.backpack.BackpackConfiguration;
|
||||||
import cc.carm.plugin.ultrabackpack.configuration.backpack.BackpackItem;
|
import cc.carm.plugin.ultrabackpack.configuration.backpack.BackpackItem;
|
||||||
|
import cc.carm.plugin.ultrabackpack.data.UserData;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class BackpackManager {
|
public class BackpackManager {
|
||||||
|
|
||||||
@@ -40,6 +46,52 @@ public class BackpackManager {
|
|||||||
return getBackpacks().get(backpackID);
|
return getBackpacks().get(backpackID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<BackpackConfiguration> getItemBackpacks(ItemStack itemStack) {
|
||||||
|
return getItemBackpacks(itemStack.getType(), itemStack.getDurability());
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Set<BackpackConfiguration> getItemBackpacks(Material material, int data) {
|
||||||
|
return Optional.ofNullable(itemMap.get(getItemTypeID(material, data)))
|
||||||
|
.map(set -> set.stream().map(this::getBackpack).collect(Collectors.toSet()))
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<BackpackConfiguration> getPlayerUsableBackpack(Player player, ItemStack itemStack) {
|
||||||
|
String typeID = getItemTypeID(itemStack);
|
||||||
|
return getItemBackpacks(itemStack).stream().filter(configuration -> {
|
||||||
|
int currentAmount = Optional.ofNullable(Main.getUserManager().getData(player)
|
||||||
|
.getItemAmount(configuration.getIdentifier(), typeID)).orElse(0);
|
||||||
|
int backpackCapacity = configuration.getCapacity().getPlayerCapacity(player);
|
||||||
|
return currentAmount + itemStack.getAmount() <= backpackCapacity;
|
||||||
|
}).collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getItemTypeID(Material material, int data) {
|
||||||
|
return material.name() + ":" + data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getItemTypeID(ItemStack itemStack) {
|
||||||
|
return getItemTypeID(itemStack.getType(), itemStack.getDurability());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<ItemStack> collectItem(Player player, Collection<ItemStack> items) {
|
||||||
|
if (!Main.getUserManager().isCollectEnabled(player)) return new ArrayList<>();
|
||||||
|
else return items.stream().filter(item -> collectItem(player, item)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean collectItem(Player player, ItemStack item) {
|
||||||
|
if (!Main.getUserManager().isCollectEnabled(player)) return false;
|
||||||
|
Set<BackpackConfiguration> usableBackpacks = getPlayerUsableBackpack(player, item);
|
||||||
|
if (usableBackpacks.size() < 1) return false;
|
||||||
|
BackpackConfiguration configuration = usableBackpacks.stream().findFirst().orElse(null);
|
||||||
|
|
||||||
|
String typeID = getItemTypeID(item);
|
||||||
|
UserData data = Main.getUserManager().getData(player);
|
||||||
|
int itemAmount = item.getAmount();
|
||||||
|
data.addItemAmount(configuration.getIdentifier(), typeID, itemAmount);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得某背包配置中的某件物品单价,最低为0。
|
* 获得某背包配置中的某件物品单价,最低为0。
|
||||||
*
|
*
|
||||||
@@ -62,7 +114,7 @@ public class BackpackManager {
|
|||||||
* @param itemTypeID 物品ID
|
* @param itemTypeID 物品ID
|
||||||
* @return 若为空,则该背包或该物品不存在。
|
* @return 若为空,则该背包或该物品不存在。
|
||||||
*/
|
*/
|
||||||
public @Nullable Integer getItemLimit(@NotNull String backpackID, @NotNull String itemTypeID) {
|
public @Nullable Integer getItemSellLimit(@NotNull String backpackID, @NotNull String itemTypeID) {
|
||||||
BackpackConfiguration configuration = getBackpack(backpackID);
|
BackpackConfiguration configuration = getBackpack(backpackID);
|
||||||
if (configuration == null) return null;
|
if (configuration == null) return null;
|
||||||
BackpackItem item = configuration.getItems().get(itemTypeID);
|
BackpackItem item = configuration.getItems().get(itemTypeID);
|
||||||
@@ -70,5 +122,18 @@ public class BackpackManager {
|
|||||||
return item.getLimit();
|
return item.getLimit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得某背包配置中的某件物品每日售出限制,最低为0。
|
||||||
|
*
|
||||||
|
* @param backpack 背包
|
||||||
|
* @param itemTypeID 物品ID
|
||||||
|
* @return 若为空,则该背包或该物品不存在。
|
||||||
|
*/
|
||||||
|
public @Nullable Integer getItemSellLimit(@NotNull BackpackConfiguration backpack, @NotNull String itemTypeID) {
|
||||||
|
BackpackItem item = backpack.getItems().get(itemTypeID);
|
||||||
|
if (item == null) return null;
|
||||||
|
return item.getLimit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -39,5 +39,11 @@ public class UserManager implements UBUserManager {
|
|||||||
return new UserData(userUUID, Main.getStorage(), new HashMap<>(), new Date(System.currentTimeMillis()));
|
return new UserData(userUUID, Main.getStorage(), new HashMap<>(), new Date(System.currentTimeMillis()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isCollectEnabled(Player player) {
|
||||||
|
return player.hasPermission("UltraBackpack.use") &&
|
||||||
|
player.hasPermission("UltraBackpack.auto") &&
|
||||||
|
player.hasPermission("UltraBackpack.auto.enable");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user