implements new death logic to disable the vanilla death screen
This commit is contained in:
parent
be5f91df88
commit
5c1868ab82
@ -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();
|
||||
}
|
||||
|
@ -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))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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"))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user