ProGiple
Пользователь
- Сообщения
- 80
- Решения
- 1
Привет, разработчики! В разработке немного, поэтому хочу спросить: "почему не работает генерация новых предметов в сундуках при первом их открытии?"
Предмет и плагин работют, всё выдаётся, но при открытии сундука, даже если на предмете шанс 99 или 100%, то это всё равно не работает...
Код:
package org.satellite.progiple.sateitemgen;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.world.LootGenerateEvent;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
public final class SateItemGen extends JavaPlugin implements Listener {
@Override
public void onEnable() {
saveDefaultConfig();
reloadConfig();
getServer().getPluginManager().registerEvents(this, this);
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
Bukkit.getPluginManager().registerEvents(this, this);
} else {
Bukkit.getPluginManager().disablePlugin(this);
}
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { //
new checkitem().register(); //
}
}
@Override
public void onDisable() {
// Plugin shutdown logic
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (sender.hasPermission("sateitemgen.admin")) {
if (args[0].equalsIgnoreCase("reload")) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a Плагин перезагружен!"));
reloadConfig();
}
else if (args[0].equalsIgnoreCase("give")) {
if (args.length > 2) {
Player player = getServer().getPlayer(args[1]);
if (player != null) {
player.getInventory().addItem(item(args[2]));
}
}
}
else if (args[0].equalsIgnoreCase("remove")) {
if (args.length > 3) {
Player player = getServer().getPlayer(args[1]);
int amount = Integer.parseInt(args[3]);
ItemStack item = item(args[2]);
item.setAmount(amount);
assert player != null;
player.getInventory().remove(item);
}
}
}
else {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c У вас нет права на использование!"));
}
return true;
}
@EventHandler
public void onGenLoot(LootGenerateEvent e) {
String world = e.getWorld().getName();
ConfigurationSection section = getConfig().getConfigurationSection("items");
assert section != null;
Set<String> set = section.getKeys(false);
List<String> items = new ArrayList<>(set);
for (String name : items) {
ItemStack item = item(name);
PersistentDataContainer data = item.getItemMeta().getPersistentDataContainer();
Double chanceInt = data.get(new NamespacedKey(this, "sigchance"), PersistentDataType.DOUBLE);
double chance = 0.05;
double random = Math.random();
if (chanceInt != null) {
chance = chanceInt / 100;
}
if (Objects.requireNonNull(data.get(new NamespacedKey(this, "sigworld"), PersistentDataType.STRING)).equalsIgnoreCase("world")) {
if (world.equalsIgnoreCase("world")) {
if (chance >= random) {
e.getLoot().add(item);
}
}
break;
}
else if (Objects.requireNonNull(data.get(new NamespacedKey(this, "sigworld"), PersistentDataType.STRING)).equalsIgnoreCase("nether")) {
if (world.equalsIgnoreCase("world_nether")) {
if (chance >= random) {
e.getLoot().add(item);
}
}
break;
}
else if (Objects.requireNonNull(data.get(new NamespacedKey(this, "sigworld"), PersistentDataType.STRING)).equalsIgnoreCase("end")) {
if (world.equalsIgnoreCase("world_the_end")) {
if (chance >= random) {
e.getLoot().add(item);
}
}
break;
}
else {
if (chance >= random) {
e.getLoot().add(item);
}
break;
}
}
}
@EventHandler
public void inInventory(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Inventory inv = e.getClickedInventory();
if (inv instanceof AnvilInventory) {
assert item != null;
if (item.getItemMeta().hasCustomModelData() && item.getItemMeta().getCustomModelData() == 980089) {
e.setCancelled(true);
}
}
}
@EventHandler
public void Place(BlockPlaceEvent e) {
Block block = e.getBlock();
ItemStack item = e.getItemInHand();
if (item.getItemMeta().hasCustomModelData() && item.getItemMeta().getCustomModelData() == 980089) {
if (block.getType() == item.getType()) {
e.setCancelled(true);
}
}
}
private ItemStack item(String itemName) {
String path = "items." + itemName;
ItemStack item = new ItemStack(Material.valueOf(getConfig().getString(path + ".material")));
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(str(path + ".name"));
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_DYE);
ConfigurationSection section = getConfig().getConfigurationSection(path);
assert section != null;
List<String> lines = section.getStringList("lore");
List<String> lore = new ArrayList<>();
for (String line : lines) {
lore.add(ChatColor.translateAlternateColorCodes('&', line));
}
meta.setCustomModelData(980089);
String action = str(path + ".dungWorld");
meta.getPersistentDataContainer().set(new NamespacedKey(this, "sigworld"), PersistentDataType.STRING, action);
String type = str(path + ".container");
meta.getPersistentDataContainer().set(new NamespacedKey(this, "sigitemtype"), PersistentDataType.STRING, type);
double chance = getConfig().getDouble(path + ".chance");
meta.getPersistentDataContainer().set(new NamespacedKey(this, "sigchance"), PersistentDataType.DOUBLE, chance);
if (getConfig().getBoolean(path + ".glowing")) {
item.addUnsafeEnchantment(Enchantment.LURE, 2);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
}
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
private String str(String path) {
return ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(getConfig().getString(path)));
}
}