creeperpit/src/main/java/eu/creeper/mc/creeperPit/Main.java

160 lines
6.3 KiB
Java

package eu.creeper.mc.creeperPit;
import eu.creeper.mc.creeperPit.worldguard.Handler;
import eu.creeper.mc.creeperPit.worldguard.Region;
import eu.creeper.mc.creeperPit.worldguard.WGManager;
import org.bukkit.*;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
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.player.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import eu.creeper.mc.creeperPit.config.CFGInit;
import java.util.Objects;
public final class Main extends JavaPlugin implements Listener {
private Location spawnLocation;
@Override
public void onEnable() {
World world = getMainWorld();
this.spawnLocation = new Location(world, -643.5D, 36D, 444.5D, -180F, 0F);
Bukkit.getPluginManager().registerEvents(this, this);
Bukkit.getPluginManager().registerEvents(new Handler(), this);
registerRegions(world);
initConfig();
}
private World getMainWorld() {
World world = Bukkit.getWorld("world");
if (world == null) {
world = Bukkit.getWorlds().get(0);//fallback
}
return world;
}
private void registerRegions(World world) {
Region spawn = new Region("spawn", new Location(world, -659.0D, 36.0D, 402.0D), new Location(world, -629.0D, 55.0D, 448.0D), "Safe");
spawn.setAllowBuild(false);
spawn.setAllowBreak(false);
spawn.setAllowDrop(false);
spawn.setAllowPvp(false);
Region spawnReg = new Region("spawnreg", new Location(world, -650.0D, 0.0D, 423.0D), new Location(world, -639.0D, 255.0D, 411.0D), "Safe");
spawnReg.setAllowBuild(false);
spawnReg.setAllowBreak(false);
spawnReg.setAllowDrop(true);
spawnReg.setAllowPvp(false);
WGManager.registerRegion(spawn);
WGManager.registerRegion(spawnReg);
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
event.setJoinMessage(ChatColor.GREEN + "" + ChatColor.BOLD + "[+] " + ChatColor.RESET + ChatColor.YELLOW + player.getName());
setupPlayer(player);
}
@EventHandler
public void onQuit(PlayerQuitEvent event) {
event.setQuitMessage(ChatColor.RED + "" + ChatColor.BOLD + "[-] " + ChatColor.RESET + ChatColor.YELLOW + event.getPlayer().getName());
}
@EventHandler
public void onItemDrop(PlayerDropItemEvent event) {
Region reg = WGManager.getRegionAt(event.getPlayer().getLocation());
if (reg == null || !reg.canDrop()) event.setCancelled(true);
ItemStack item = event.getItemDrop().getItemStack();
Material type = item.getType();
boolean forbiddenArmor =
type == Material.IRON_HELMET ||
type == Material.IRON_CHESTPLATE ||
type == Material.IRON_LEGGINGS ||
type == Material.IRON_BOOTS;
boolean forbiddenStaff =
type == Material.BLAZE_ROD &&
item.hasItemMeta() &&
Objects.equals(item.getItemMeta().getDisplayName(), ChatColor.GOLD + "CreeperStaff Manager");
event.setCancelled(forbiddenArmor || forbiddenStaff);
}
@EventHandler
public void onDeath(PlayerDeathEvent event) {
Player victim = event.getEntity();
Player killer = victim.getKiller();
event.setDeathMessage(killer != null ? ChatColor.RED + victim.getName() + " got stabbed by " + killer.getName() : ChatColor.RED + victim.getName() + " magically respawned");
event.getDrops().removeIf(item -> {
Material type = item.getType();
if (type.name().startsWith("IRON_") || type == Material.BOW || type == Material.FISHING_ROD) return true;
return type == Material.BLAZE_ROD &&
item.hasItemMeta() &&
item.getItemMeta().hasDisplayName() &&
item.getItemMeta().getDisplayName().equals(ChatColor.GOLD + "CreeperStaff Manager");
});
}
@EventHandler
public void onRespawn(PlayerRespawnEvent event) {
Bukkit.getScheduler().runTaskLater(this, () -> setupPlayer(event.getPlayer()), 5L);
}
private void setupPlayer(Player player) {
player.teleport(spawnLocation);
player.setGameMode(GameMode.SURVIVAL);
PlayerInventory inv = player.getInventory();
inv.clear();
inv.setHelmet(new ItemStack(Material.IRON_HELMET));
inv.setChestplate(new ItemStack(Material.IRON_CHESTPLATE));
inv.setLeggings(new ItemStack(Material.IRON_LEGGINGS));
inv.setBoots(new ItemStack(Material.IRON_BOOTS));
inv.addItem(new ItemStack(Material.IRON_SWORD), new ItemStack(Material.FISHING_ROD), new ItemStack(Material.BOW), new ItemStack(Material.ARROW, 16), new ItemStack(Material.GOLDEN_APPLE, 2));
player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0, true, false));
player.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, Integer.MAX_VALUE, 0, true, false));
player.setHealth(20.0);
player.setFoodLevel(20);
}
private void initConfig() {
CFGInit cfgInit = new CFGInit(this);
cfgInit.itemShop.save("[]");
cfgInit.effectShop.save("[]");
FileConfiguration wgCfgFile = cfgInit.worldguard.get();
ConfigurationSection globalSection = wgCfgFile.getConfigurationSection("global");
if (globalSection == null) {
globalSection = wgCfgFile.createSection("global");
//coord
globalSection.set("x1", true);
globalSection.set("y1", true);
globalSection.set("z1", true);
globalSection.set("x2", true);
globalSection.set("y2", true);
globalSection.set("z2", true);
//can do x thing
globalSection.set("canBuild", true);
globalSection.set("canBreak", true);
globalSection.set("canPvp", true);
globalSection.set("canDrop", true);
}
cfgInit.worldguard.save();
}
}