Untitled
unknown
plain_text
2 years ago
22 kB
6
Indexable
package org.lifestealsmp.lifestealcore;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.attribute.Attribute;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import github.scarsz.discordsrv.DiscordSRV;
import github.scarsz.discordsrv.dependencies.jda.api.EmbedBuilder;
import github.scarsz.discordsrv.dependencies.jda.api.JDA;
import github.scarsz.discordsrv.dependencies.jda.api.entities.MessageEmbed;
import github.scarsz.discordsrv.dependencies.jda.api.entities.TextChannel;
public class main extends JavaPlugin implements Listener {
private FileConfiguration data;
private File dfile;
ArrayList<String> deathReason = new ArrayList<String>();
public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(this, (Plugin) this);
saveDefaultConfig();
setupFiles();
}
public void setupFile(File file) {
if (!file.exists())
try {
file.createNewFile();
} catch (IOException e) {
Bukkit.getServer().getLogger().severe(ChatColor.RED + "Could not create " + file.getName() + "!");
}
}
public void saveFile(FileConfiguration config, File file) {
try {
config.save(file);
} catch (IOException e) {
Bukkit.getServer().getLogger().severe(ChatColor.RED + "Could not save " + file.getName() + "!");
}
}
public void setupFiles() {
this.dfile = new File(getDataFolder(), "data.yml");
setupFile(this.dfile);
this.data = (FileConfiguration) YamlConfiguration.loadConfiguration(this.dfile);
}
public FileConfiguration getData() {
return this.data;
}
public void saveData() {
saveFile(this.data, this.dfile);
}
public void reloadData() {
this.data = (FileConfiguration) YamlConfiguration.loadConfiguration(this.dfile);
}
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
Player player = event.getEntity();
deathReason.clear();
deathReason.add(event.getDeathMessage());
removeHeart(player);
if (event.getEntity().getKiller() instanceof Player) {
Player killer = event.getEntity().getKiller();
double currentHealth = killer.getMaxHealth();
if (currentHealth == 40.0D) {
ItemStack item = new ItemStack(Material.PAPER);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§4Claimable Heart");
meta.setCustomModelData(10012);
item.setItemMeta(meta);
Location location = player.getLocation();
World world = player.getWorld();
world.dropItemNaturally(location, item);
} else {
killer.setMaxHealth(currentHealth + 2.0D);
}
}
}
public void addHeart(Player player) {
double currentHealth = player.getMaxHealth();
if (currentHealth == 40.0D) {
int num = getData().getInt(player.getUniqueId() + ".Hearts-Deposited");
getData().set(player.getUniqueId() + ".Hearts-Deposited", Integer.valueOf(num + 1));
saveData();
} else {
player.setMaxHealth(currentHealth + 2.0D);
}
}
public void removeHeart(Player player) {
double currentHealth = player.getMaxHealth();
if (currentHealth <= 2.0D) {
deathBan(player);
} else {
player.setMaxHealth(currentHealth - 2.0D);
}
}
public void deathBan(Player player) {
getData().set(player.getUniqueId() + ".Death-Reason", deathReason);
getData().set(player.getUniqueId() + ".Death-Banned", Boolean.valueOf(true));
// Format the current date and set Time-Banned
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
String currentDate = dateFormat.format(new Date());
getData().set(player.getUniqueId() + ".Time-Banned", currentDate);
saveData();
String kickMessage = "You have been death banned!";
player.kickPlayer(kickMessage);
String playerName = player.getName();
try {
String imageUrl = "https://mc-heads.net/player/" + playerName;
EmbedBuilder embedBuilder = new EmbedBuilder();
embedBuilder.setTitle(String.valueOf(playerName) + " has been death banned!!");
embedBuilder.setImage(imageUrl);
embedBuilder.setColor(Color.RED);
MessageEmbed embed = embedBuilder.build();
JDA jda = DiscordSRV.getPlugin().getJda();
TextChannel channel = jda.getTextChannelById("1119383259328040980");
if (channel != null) {
channel.sendMessageEmbeds(embed, new MessageEmbed[0]).queue(
success -> System.out.println("Embed sent successfully!"), error -> error.printStackTrace());
} else {
System.out.println("Channel not found!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
@EventHandler
public void PlayerLoginEvent(PlayerLoginEvent event) {
Player player = event.getPlayer();
boolean deathBanned = getData().getBoolean(player.getUniqueId() + ".Death-Banned");
if (deathBanned) {
String kickMessage = "You have been death banned!";
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, kickMessage);
}
}
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("LifeStealCore")) {
if (!sender.hasPermission("LifeStealCore.Admin"))
return true;
if (args.length == 3 && args[0].equalsIgnoreCase("give")) {
int amount;
try {
amount = Integer.parseInt(args[2]);
} catch (NumberFormatException e) {
sender.sendMessage("Invalid amount!");
return true;
}
if (args[1].equalsIgnoreCase("all")) {
for (Player player : Bukkit.getOnlinePlayers())
adjustPlayerHealth(player, amount);
} else {
Player target = Bukkit.getPlayerExact(args[1]);
if (target != null) {
adjustPlayerHealth(target, amount);
} else {
sender.sendMessage("Player not found!");
}
}
return true;
}
}
if (command.getName().equalsIgnoreCase("ReviveStation") && sender instanceof Player) {
Player player = (Player) sender;
ReviveStationInventory(player);
}
return false;
}
private void adjustPlayerHealth(Player player, int amount) {
double currentMaxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue();
double potentialNewMaxHealth = currentMaxHealth + (amount * 2);
if (potentialNewMaxHealth <= 40.0D) {
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(potentialNewMaxHealth);
} else {
player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(40.0D);
double excessHearts = (potentialNewMaxHealth - 40.0D) / 2.0D;
double num = 0.0D;
if (getData().contains(player.getUniqueId() + ".Hearts-Deposited"))
num = getData().getDouble(player.getUniqueId() + ".Hearts-Deposited");
getData().set(player.getUniqueId() + ".Hearts-Deposited", Double.valueOf(num + excessHearts));
saveData();
}
}
public void ReviveStationInventory(Player player) {
Inventory inv = Bukkit.createInventory(null, 27, "Revive Station");
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
ItemMeta blankMeta = blank.getItemMeta();
blankMeta.setDisplayName("§r");
blankMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ENCHANTS });
blank.setItemMeta(blankMeta);
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null)
inv.setItem(i, blank);
}
ItemStack deathbans = new ItemStack(Material.PAPER);
ItemMeta deathbansMeta = deathbans.getItemMeta();
deathbansMeta.setDisplayName("Death Bans");
deathbansMeta.setCustomModelData(Integer.valueOf(10013));
deathbansMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
deathbans.setItemMeta(deathbansMeta);
ItemStack heartCount = new ItemStack(Material.PAPER);
ItemMeta heartCountMeta = heartCount.getItemMeta();
heartCountMeta.setDisplayName("Hearts Deposited");
heartCountMeta.setCustomModelData(Integer.valueOf(10012));
heartCountMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
int hearts = getData().getInt(player.getUniqueId() + ".Hearts-Deposited");
if (hearts == 0) {
heartCount.setAmount(1);
} else {
heartCount.setAmount(getData().getInt(player.getUniqueId() + ".Hearts-Deposited"));
}
heartCount.setItemMeta(heartCountMeta);
ItemStack withdrawHearts = new ItemStack(Material.PAPER);
ItemMeta withdrawHeartsMeta = withdrawHearts.getItemMeta();
withdrawHeartsMeta.setDisplayName("Withdraw Hearts");
withdrawHeartsMeta.setCustomModelData(Integer.valueOf(10014));
withdrawHeartsMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
withdrawHearts.setItemMeta(withdrawHeartsMeta);
ItemStack depositHearts = new ItemStack(Material.PAPER);
ItemMeta depositHeartsMeta = depositHearts.getItemMeta();
depositHeartsMeta.setDisplayName("Deposit Hearts");
depositHeartsMeta.setCustomModelData(Integer.valueOf(10015));
depositHeartsMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
depositHearts.setItemMeta(depositHeartsMeta);
inv.setItem(10, deathbans);
inv.setItem(12, heartCount);
inv.setItem(14, withdrawHearts);
inv.setItem(16, depositHearts);
player.openInventory(inv);
}
public void openDeathBansInventory(Player player, int page) {
FileConfiguration data = getData();
List<UUID> bannedPlayers = new ArrayList<>();
for (String key : data.getKeys(false)) {
if (data.getBoolean(key + ".Death-Banned")) {
try {
UUID uuid = UUID.fromString(key);
bannedPlayers.add(uuid);
} catch (IllegalArgumentException e) {
// Handle invalid UUIDs
}
}
}
Inventory inv = Bukkit.createInventory(null, 27, "Death Bans Page " + page);
// Filling inventory with placeholder items
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
ItemMeta blankMeta = blank.getItemMeta();
blankMeta.setDisplayName("§r");
blankMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
blank.setItemMeta(blankMeta);
for (int i = 0; i < inv.getSize(); i++) {
inv.setItem(i, blank);
}
// Calculate indices for pagination
int startIndex = (page - 1) * 21;
int endIndex = Math.min(startIndex + 21, bannedPlayers.size());
// Set player heads in the inventory
for (int i = startIndex; i < endIndex; i++) {
UUID playerUUID = bannedPlayers.get(i);
ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1);
SkullMeta headMeta = (SkullMeta) head.getItemMeta();
String playerName = Bukkit.getOfflinePlayer(playerUUID).getName();
if (playerName != null) {
headMeta.setDisplayName("§a" + playerName); // You can change the color code as needed
}
// Set the owning player to display the correct head
headMeta.setOwningPlayer(Bukkit.getOfflinePlayer(playerUUID));
// Fetch the Time-Banned info
String timeBanned = data.getString(playerUUID + ".Time-Banned");
String banReason = data.getString(playerUUID + ".Death-Reason");
if (timeBanned != null) {
// Create lore and add it to the headMeta
List<String> lore = new ArrayList<>();
lore.add("§7Time Banned: §c" + timeBanned);
lore.add("§7Ban Reason: §c" + banReason);
lore.add("");
lore.add("§aClick to open revive menu!");
headMeta.setLore(lore);
}
// Apply the modified meta to the head
head.setItemMeta(headMeta);
// Place the head in the inventory
inv.setItem((i - startIndex), head);
}
// Adding previous and next page buttons
if (page > 1) {
ItemStack prevPage = new ItemStack(Material.ARROW);
ItemMeta prevPageMeta = prevPage.getItemMeta();
prevPageMeta.setDisplayName("§cPrevious Page");
prevPage.setItemMeta(prevPageMeta);
inv.setItem(25, prevPage); // Bottom left slot for 'previous' button
}
if (endIndex < bannedPlayers.size()) {
ItemStack nextPage = new ItemStack(Material.ARROW);
ItemMeta nextPageMeta = nextPage.getItemMeta();
nextPageMeta.setDisplayName("§aNext Page");
nextPage.setItemMeta(nextPageMeta);
inv.setItem(26, nextPage); // Bottom right slot for 'next' button
}
player.openInventory(inv);
}
@EventHandler
public void onInventoryClickTwo(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
if (event.getView().getTitle().startsWith("Death Bans")) {
event.setCancelled(true);
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem == null || clickedItem.getType() == Material.AIR)
return;
if (clickedItem.getType() == Material.PLAYER_HEAD) {
// Extract the player's name from the skull
SkullMeta skullMeta = (SkullMeta) clickedItem.getItemMeta();
if (skullMeta.hasOwner()) {
String skullOwnerName = skullMeta.getOwningPlayer().getName();
// Open a new inventory with the title "Name's Revive"
openReviveInventory(player, skullOwnerName);
return;
}
}
// Existing pagination code
String title = event.getView().getTitle();
int currentPage = Integer.parseInt(title.split(" ")[3]);
if (clickedItem.getType() == Material.ARROW) {
if (clickedItem.getItemMeta().getDisplayName().contains("Previous Page")) {
openDeathBansInventory(player, currentPage - 1);
} else if (clickedItem.getItemMeta().getDisplayName().contains("Next Page")) {
openDeathBansInventory(player, currentPage + 1);
}
}
}
}
private HashMap<Player, Integer> playerScores = new HashMap<>();
// Example method to add or update a player's score
public void setPlayerScore(Player player, int score) {
playerScores.put(player, score);
}
// Example method to get a player's score
public Integer getPlayerScore(Player player) {
if(playerScores.containsKey(player)) {
return playerScores.get(player);
} else {
return 0;
}
}
public void openReviveInventory(Player player, String playerName) {
int totalHearts = getData().getInt(player.getUniqueId() + ".Hearts-Deposited") + countCustomPaperItems(player);
int count = getPlayerScore(player);
Inventory inv = Bukkit.createInventory(null, 27, "[" + playerName + "] Your Hearts: " + totalHearts);
ItemStack blank = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
ItemMeta blankMeta = blank.getItemMeta();
blankMeta.setDisplayName("§r");
blankMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ENCHANTS });
blank.setItemMeta(blankMeta);
for (int i = 0; i < inv.getSize(); i++) {
if (inv.getItem(i) == null)
inv.setItem(i, blank);
}
ItemStack heartCount = new ItemStack(Material.PAPER);
ItemMeta heartCountMeta = heartCount.getItemMeta();
heartCountMeta.setDisplayName("Use " + getPlayerScore(player) + " heart(s) to revive this player!");
heartCountMeta.setCustomModelData(Integer.valueOf(10012));
heartCountMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
if (count == 0) {
ItemStack zeroHearts = new ItemStack(Material.BEDROCK);
ItemMeta zeroHeartsMeta = heartCount.getItemMeta();
zeroHeartsMeta.setDisplayName("Add Hearts!");
zeroHearts.setItemMeta(zeroHeartsMeta);
inv.setItem(13, zeroHearts);
} else {
heartCount.setAmount(count);
heartCount.setItemMeta(heartCountMeta);
inv.setItem(13, heartCount);
}
ItemStack withdrawHearts = new ItemStack(Material.PAPER);
ItemMeta withdrawHeartsMeta = withdrawHearts.getItemMeta();
withdrawHeartsMeta.setDisplayName("Remove heart from revive");
withdrawHeartsMeta.setCustomModelData(Integer.valueOf(10014));
withdrawHeartsMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
withdrawHearts.setItemMeta(withdrawHeartsMeta);
ItemStack depositHearts = new ItemStack(Material.PAPER);
ItemMeta depositHeartsMeta = depositHearts.getItemMeta();
depositHeartsMeta.setDisplayName("Add heart to revive");
depositHeartsMeta.setCustomModelData(Integer.valueOf(10015));
depositHeartsMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
depositHearts.setItemMeta(depositHeartsMeta);
inv.setItem(21, withdrawHearts);
inv.setItem(23, depositHearts);
player.openInventory(inv);
}
@EventHandler
public void onInventoryClickThree(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
if (event.getView().getTitle().contains("Your Hearts:")) {
event.setCancelled(true);
if (event.getSlot() == 21) {
int num = getPlayerScore(player);
if(num != 0) {
setPlayerScore(player, num - 1);
} else {
return;
}
}
if (event.getSlot() == 23) {
int totalHearts = getData().getInt(player.getUniqueId() + ".Hearts-Deposited") + countCustomPaperItems(player);
int num = getPlayerScore(player);
if(num < totalHearts && num < 20) {
setPlayerScore(player, num + 1);
}
}
Inventory inv = player.getOpenInventory().getTopInventory();
updateInventoryItems(inv, player);
player.updateInventory();
}
}
public void updateInventoryItems(Inventory inv, Player player) {
ItemStack heartCount = new ItemStack(Material.PAPER);
ItemMeta heartCountMeta = heartCount.getItemMeta();
heartCountMeta.setDisplayName("Use " + getPlayerScore(player) + " heart(s) to revive this player!");
heartCountMeta.setCustomModelData(Integer.valueOf(10012));
heartCountMeta.addItemFlags(new ItemFlag[] { ItemFlag.HIDE_ATTRIBUTES });
if (getPlayerScore(player) == 0) {
ItemStack zeroHearts = new ItemStack(Material.BEDROCK);
ItemMeta zeroHeartsMeta = heartCount.getItemMeta();
zeroHeartsMeta.setDisplayName("Add Hearts!");
zeroHearts.setItemMeta(zeroHeartsMeta);
inv.setItem(13, zeroHearts);
} else {
heartCount.setAmount(getPlayerScore(player));
heartCount.setItemMeta(heartCountMeta);
inv.setItem(13, heartCount); // Assuming 13 is the slot of the heart count item
}
}
public int countCustomPaperItems(Player player) {
int count = 0;
for (ItemStack item : player.getInventory().getContents()) {
if (item != null && item.getType() == Material.PAPER) {
ItemMeta meta = item.getItemMeta();
if (meta != null && meta.hasCustomModelData() && meta.getCustomModelData() == 10012) {
count += item.getAmount();
}
}
}
return count;
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
Player player = (Player) event.getPlayer();
if(playerScores.containsKey(player)) {
playerScores.remove(player);
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
if (event.getView().getTitle().startsWith("Revive Station")) {
event.setCancelled(true);
if (event.getSlot() == 10) {
openDeathBansInventory(player, 1);
}
if (event.getSlot() == 14) {
double hearts = getData().getInt(player.getUniqueId() + ".Hearts-Deposited");
if (hearts != 0) {
getData().set(player.getUniqueId() + ".Hearts-Deposited", hearts - 1);
saveData();
double currentMaxHealth = player.getMaxHealth();
if (currentMaxHealth == 40) {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(),
"iagive " + player.getName() + " custom_texture_items:heart 1 silent");
} else {
player.setMaxHealth(currentMaxHealth + 2);
}
ReviveStationInventory(player);
}
}
if (event.getSlot() == 16) {
ItemStack[] items = event.getWhoClicked().getInventory().getContents();
int count = 0;
for (ItemStack item : items) {
if (item != null && item.getType() == Material.PAPER && item.hasItemMeta()
&& item.getItemMeta().hasCustomModelData()
&& item.getItemMeta().getCustomModelData() == 10012) {
count++;
}
}
if (count > 0) {
double hearts = getData().getInt(event.getWhoClicked().getUniqueId() + ".Hearts-Deposited");
if (event.isShiftClick()) {
// Remove all items and update hearts for all items
for (ItemStack item : items) {
if (item != null && item.getType() == Material.PAPER && item.hasItemMeta()
&& item.getItemMeta().hasCustomModelData()
&& item.getItemMeta().getCustomModelData() == 10012) {
int amount = item.getAmount();
item.setAmount(0); // Remove the item
hearts += 1.0D * amount;
}
}
} else {
// Remove only one item and update hearts for one item
for (ItemStack item : items) {
if (item != null && item.getType() == Material.PAPER && item.hasItemMeta()
&& item.getItemMeta().hasCustomModelData()
&& item.getItemMeta().getCustomModelData() == 10012) {
if (item.getAmount() > 1) {
item.setAmount(item.getAmount() - 1);
} else {
item.setAmount(0); // Remove the item
}
hearts += 1.0D;
break;
}
}
}
getData().set(event.getWhoClicked().getUniqueId() + ".Hearts-Deposited", hearts);
saveData();
ReviveStationInventory(player);
}
}
}
}
}
Editor is loading...
Leave a Comment