diff --git a/src/main/java/de/polyfish0/survivalGames/SurvivalGames.java b/src/main/java/de/polyfish0/survivalGames/SurvivalGames.java index 3c8e095..f147019 100644 --- a/src/main/java/de/polyfish0/survivalGames/SurvivalGames.java +++ b/src/main/java/de/polyfish0/survivalGames/SurvivalGames.java @@ -13,7 +13,6 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; -import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.HashSet; @@ -32,13 +31,13 @@ public final class SurvivalGames extends JavaPlugin { plugin = this; new ConfigManager(this); - PlayerRepository playerRepository = new PlayerRepository(); + /*PlayerRepository playerRepository = new PlayerRepository(); PlayerEntity player = new PlayerEntity(0L, "Mika", 1, 2, 3, 4, 5); playerRepository.save(player).thenRun(() -> { Bukkit.getScheduler().runTask(plugin, () -> { Bukkit.broadcastMessage("Spieler Gepseichert!"); }); - }); + });*/ register(); } diff --git a/src/main/java/de/polyfish0/survivalGames/gui/menus/MainMenu.java b/src/main/java/de/polyfish0/survivalGames/gui/menus/MainMenu.java index 3a91df7..db0a987 100644 --- a/src/main/java/de/polyfish0/survivalGames/gui/menus/MainMenu.java +++ b/src/main/java/de/polyfish0/survivalGames/gui/menus/MainMenu.java @@ -24,7 +24,7 @@ public class MainMenu extends Menu { menu.addButton( new SGButton( new ItemBuilder(Material.ANVIL).name("Settings").build() - ).withListener(e -> GuiManager.getInstance().openInventory(Bukkit.getPlayer(e.getWhoClicked().getUniqueId()), WorldMenu.class)) + ).withListener(e -> GuiManager.getInstance().openInventory(Bukkit.getPlayer(e.getWhoClicked().getUniqueId()), SettingsMenu.class)) ); } } diff --git a/src/main/java/de/polyfish0/survivalGames/gui/menus/SettingsMenu.java b/src/main/java/de/polyfish0/survivalGames/gui/menus/SettingsMenu.java index aef486a..f3d66bd 100644 --- a/src/main/java/de/polyfish0/survivalGames/gui/menus/SettingsMenu.java +++ b/src/main/java/de/polyfish0/survivalGames/gui/menus/SettingsMenu.java @@ -3,8 +3,10 @@ package de.polyfish0.survivalGames.gui.menus; import com.samjakob.spigui.buttons.SGButton; import com.samjakob.spigui.item.ItemBuilder; import com.samjakob.spigui.menu.SGMenu; +import de.polyfish0.survivalGames.config.ConfigValues; import de.polyfish0.survivalGames.gui.GuiManager; import lombok.Getter; +import org.bukkit.Bukkit; import org.bukkit.Material; @Getter @@ -13,5 +15,13 @@ public class SettingsMenu extends Menu { public SettingsMenu() { menu = GuiManager.getSpiGui().create("Settings", 3); + menu.addButton( + new SGButton(new ItemBuilder(Material.PAPER).name("Max Worldboarder size").build()) + .withListener(e -> GuiManager.getInstance().openSettingInAnvilGui(ConfigValues.Game.MAXWORLDRADIUS, Bukkit.getPlayer(e.getWhoClicked().getUniqueId()), "Max Worldborder size")) + ); + menu.addButton( + new SGButton(new ItemBuilder(Material.PAPER).name("Min Worldboarder size").build()) + .withListener(e -> GuiManager.getInstance().openSettingInAnvilGui(ConfigValues.Game.MAXWORLDRADIUS, Bukkit.getPlayer(e.getWhoClicked().getUniqueId()), "Max Worldborder size")) + ); } } diff --git a/src/main/java/de/polyfish0/survivalGames/managers/GameManager.java b/src/main/java/de/polyfish0/survivalGames/managers/GameManager.java index 3fc872d..d008c4a 100644 --- a/src/main/java/de/polyfish0/survivalGames/managers/GameManager.java +++ b/src/main/java/de/polyfish0/survivalGames/managers/GameManager.java @@ -2,17 +2,27 @@ package de.polyfish0.survivalGames.managers; import de.polyfish0.survivalGames.SurvivalGames; import de.polyfish0.survivalGames.annotations.EventClass; +import de.polyfish0.survivalGames.config.ConfigManager; +import de.polyfish0.survivalGames.config.ConfigValues; import de.polyfish0.survivalGames.events.StartGameEvent; import lombok.Getter; import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.World; import org.bukkit.WorldCreator; +import org.bukkit.damage.DamageType; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.ExperienceOrb; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.ItemStack; -import java.io.File; import java.io.IOException; @Getter @@ -25,15 +35,96 @@ public class GameManager implements Listener { if (world != null) { world.getPlayers().forEach(p -> p.teleport(Bukkit.getWorlds().getFirst().getSpawnLocation(), TeleportCause.PLUGIN)); Bukkit.unloadWorld(world, false); + try { FileUtils.deleteDirectory(world.getWorldFolder()); } catch (IOException ex) { throw new RuntimeException(ex); } + world = null; } - world = SurvivalGames.plugin.getServer().createWorld(new WorldCreator("sg_map")); + world = Bukkit.createWorld(new WorldCreator("sg_map")); + + if(world == null) { + e.getExecutor().sendMessage(SurvivalGames.prefix + "Could not generate the world!"); + return; + } + + world.getWorldBorder().setCenter(world.getSpawnLocation()); + world.getWorldBorder().setSize(((Integer) ConfigManager.getInstance().getValue(ConfigValues.Game.MAXWORLDRADIUS)) * 2); Bukkit.getOnlinePlayers().forEach(p -> p.teleport(world.getSpawnLocation(), TeleportCause.PLUGIN)); } + + @EventHandler + public void onPlayerDeath(EntityDamageEvent e) { + if(!(e.getEntity() instanceof Player)) + return; + + Player p = (Player) e.getEntity(); + + if((p.getHealth() - e.getFinalDamage()) > 0) + return; + + e.setCancelled(true); + + for(ItemStack is : p.getInventory().getContents()) { + if(is == null) + continue; + + p.getWorld().dropItem(p.getLocation().add(0, 1, 0), is); + } + p.getInventory().clear(); + + int playerExp = getPlayerExp(p); + if(playerExp > 0) { + ExperienceOrb orb = (ExperienceOrb) p.getWorld().spawnEntity(p.getLocation().add(0, 1, 0), EntityType.EXPERIENCE_ORB); + orb.setExperience(playerExp); + p.setLevel(0); + } + + p.setGameMode(GameMode.SPECTATOR); + + String damageReason; + if(e.getDamageSource().getCausingEntity() != null) + damageReason = e.getDamageSource().getCausingEntity().getName(); + else + damageReason = "stupidity"; + + Bukkit.broadcastMessage(SurvivalGames.prefix + p.getDisplayName() + " got killed by " + damageReason); + } + + public int getPlayerExp(Player player){ + int exp = 0; + int level = player.getLevel(); + + // Get the amount of XP in past levels + exp += getExpAtLevel(level); + + // Get amount of XP towards next level + exp += Math.round(getExpToLevelUp(level) * player.getExp()); + + return exp; + } + + public int getExpAtLevel(int level){ + if(level <= 16){ + return (int) (Math.pow(level, 2) + 6 * level); + } else if(level <= 31){ + return (int) (2.5 * Math.pow(level, 2) - 40.5 * level + 360.0); + } else { + return (int) (4.5 * Math.pow(level, 2) - 162.5 * level + 2220.0); + } + } + + public int getExpToLevelUp(int level){ + if(level <= 15){ + return 2 * level + 7; + } else if(level <= 30){ + return 5 * level - 38; + } else { + return 9 * level - 158; + } + } }