Format code

This commit is contained in:
2026-05-16 23:08:09 +02:00
parent 81dd8045f2
commit d110df924e
562 changed files with 11025 additions and 10059 deletions
+17 -17
View File
@@ -8,24 +8,24 @@ EndTime: 200
Barrier: true
Arena:
MinX: 0
MaxX: 0
MinY: 0
MinZ: 0
MaxZ: 0
MinX: 0
MaxX: 0
MinY: 0
MinZ: 0
MaxZ: 0
Red:
PortalZ: -60
SpawnX: 0
SpawnY: 0
SpawnZ: 0
SpawnYaw: 0
SpawnPitch: 0
PortalZ: -60
SpawnX: 0
SpawnY: 0
SpawnZ: 0
SpawnYaw: 0
SpawnPitch: 0
Blue:
PortalZ: 60
SpawnX: 0
SpawnY: 0
SpawnZ: 0
SpawnYaw: 0
SpawnPitch: 0
PortalZ: 60
SpawnX: 0
SpawnY: 0
SpawnZ: 0
SpawnYaw: 0
SpawnPitch: 0
@@ -110,14 +110,10 @@ public class Config {
String blueLeader = System.getProperty("blueLeader", null);
String redLeader = System.getProperty("redLeader", null);
if (blueLeader != null)
BlueLeader = UUID.fromString(blueLeader);
else
BlueLeader = null;
if (redLeader != null)
RedLeader = UUID.fromString(redLeader);
else
RedLeader = null;
if (blueLeader != null) BlueLeader = UUID.fromString(blueLeader);
else BlueLeader = null;
if (redLeader != null) RedLeader = UUID.fromString(redLeader);
else RedLeader = null;
Barrier = config.getBoolean("Barrier", false);
Space = config.getBoolean("Space", false);
@@ -20,7 +20,7 @@
package de.steamwar.misslewars;
public enum FightState {
WAITING, // waiting for at least 2 players
FIGHTING, // no one has won
END // fight ended for some reason
WAITING, // waiting for at least 2 players
FIGHTING, // no one has won
END // fight ended for some reason
}
@@ -39,33 +39,33 @@ public class FightWorld {
private static final World world = Bukkit.getWorlds().get(0);
private static double posToChunk(int pos){
private static double posToChunk(int pos) {
return pos / 16.0;
}
private static int getMinChunkX(){
private static int getMinChunkX() {
return (int) Math.floor(posToChunk(Config.ArenaMinX));
}
private static int getMaxChunkX(){
private static int getMaxChunkX() {
return (int) Math.ceil(posToChunk(Config.ArenaMaxX));
}
private static int getMinChunkZ(){
private static int getMinChunkZ() {
return (int) Math.floor(posToChunk(Config.ArenaMinZ));
}
private static int getMaxChunkZ(){
private static int getMaxChunkZ() {
return (int) Math.ceil(posToChunk(Config.ArenaMaxZ));
}
private static void forEachChunk(ObjIntConsumer<Integer> executor) {
for(int x = getMinChunkX(); x <= getMaxChunkX(); x++)
for(int z = getMinChunkZ(); z <= getMaxChunkZ(); z++)
for (int x = getMinChunkX(); x <= getMaxChunkX(); x++)
for (int z = getMinChunkZ(); z <= getMaxChunkZ(); z++)
executor.accept(x, z);
}
public static void resetWorld(){
public static void resetWorld() {
world.getEntities().stream().filter(entity -> entity.getType() != EntityType.PLAYER).forEach(Entity::remove);
World backup = new WorldCreator(world.getName() + "/backup").createWorld();
@@ -84,7 +84,7 @@ public class FightWorld {
worldChunk.heightmaps.clear();
worldChunk.heightmaps.putAll(backupChunk.heightmaps);
for(Player p : Bukkit.getOnlinePlayers()) {
for (Player p : Bukkit.getOnlinePlayers()) {
CraftbukkitWrapper.sendChunk(p, x, z);
}
}
@@ -64,10 +64,11 @@ public class MWTeam {
this.color = color;
this.spawn = spawn;
this.portalZ = portalZ;
if (FightScoreboard.getScoreboard().getTeam(teamName) == null)
if (FightScoreboard.getScoreboard().getTeam(teamName) == null) {
sbteam = FightScoreboard.getScoreboard().registerNewTeam(teamName);
else
} else {
sbteam = FightScoreboard.getScoreboard().getTeam(teamName);
}
assert sbteam != null;
sbteam.setAllowFriendlyFire(false);
sbteam.setColor(ChatColor.getByChar(color.charAt(1)));
@@ -196,8 +197,9 @@ public class MWTeam {
p.getInventory().clear();
p.setDisplayName("§7" + p.getName());
if (players.isEmpty() && MissileWars.getFightState() == FightState.FIGHTING)
if (players.isEmpty() && MissileWars.getFightState() == FightState.FIGHTING) {
MissileWars.end(WinReasons.NO_ENEMY, enemy());
}
sbteam.removePlayer(p);
}
@@ -223,9 +225,7 @@ public class MWTeam {
}
private MWTeam enemy() {
if (this == MissileWars.getRedTeam())
return MissileWars.getBlueTeam();
if (this == MissileWars.getRedTeam()) return MissileWars.getBlueTeam();
return MissileWars.getRedTeam();
}
@@ -37,24 +37,24 @@ import java.util.UUID;
import java.util.stream.Collectors;
public class MissileWars extends JavaPlugin {
private static MissileWars plugin;
private static MWTeam redTeam; //red has South side -> spawns missles towards north
private static MWTeam blueTeam;
private static FightState fightState;
private static MissileWars plugin;
private static MWTeam redTeam; //red has South side -> spawns missles towards north
private static MWTeam blueTeam;
private static FightState fightState;
/**
* create teams, ect
*/
@Override
public void onLoad() {
plugin = this;
fightState = FightState.WAITING;
}
/**
* create teams, ect
*/
@Override
public void onLoad() {
plugin = this;
fightState = FightState.WAITING;
}
@Override
public void onEnable() {
redTeam = new MWTeam(Config.TeamRedColor, Config.RedSpawn, Config.TeamRedName, Config.RedPortalZ);
blueTeam = new MWTeam(Config.TeamBlueColor, Config.BlueSpawn, Config.TeamBlueName, Config.BluePortalZ);
@Override
public void onEnable() {
redTeam = new MWTeam(Config.TeamRedColor, Config.RedSpawn, Config.TeamRedName, Config.RedPortalZ);
blueTeam = new MWTeam(Config.TeamBlueColor, Config.BlueSpawn, Config.TeamBlueName, Config.BluePortalZ);
SpigotLinker spigotLinker = new SpigotLinker(this, null) {
@Override
@@ -71,128 +71,117 @@ public class MissileWars extends JavaPlugin {
}
Missile.init();
CustomItem.init();
CustomItem.init();
StateDependent.setupState(fightState);
StateDependent.setupState(fightState);
Bukkit.getScheduler().runTaskTimer(this, new FightInfoPacketSender(), 20, 20);
Bukkit.getScheduler().runTaskTimer(this, new FightInfoPacketSender(), 20, 20);
Bukkit.getWorlds().forEach(world -> {
world.setGameRule(GameRule.KEEP_INVENTORY, true);
world.setGameRule(GameRule.MOB_GRIEFING, true);
world.setGameRule(GameRule.DO_TILE_DROPS, false);
});
Bukkit.getWorlds().forEach(world -> {
world.setGameRule(GameRule.KEEP_INVENTORY, true);
world.setGameRule(GameRule.MOB_GRIEFING, true);
world.setGameRule(GameRule.DO_TILE_DROPS, false);
});
// TODO: Enable Item Dropping, and the own team can pick them up! Add config value for that?
}
// TODO: Enable Item Dropping, and the own team can pick them up! Add config value for that?
}
public static void waiting() {
if (fightState == FightState.END) {
fightState = FightState.WAITING;
StateDependent.setupState(fightState);
public static void waiting() {
if (fightState == FightState.END) {
fightState = FightState.WAITING;
StateDependent.setupState(fightState);
SlowMoRunner.resetSlowMoTime();
SlowMoRunner.resetSlowMoTime();
Set<UUID> uuidList = Bukkit.getOnlinePlayers().stream().map(Entity::getUniqueId).collect(Collectors.toSet());
if (!uuidList.contains(Config.RedLeader) || !uuidList.contains(Config.BlueLeader)) {
Config.RedLeader = null;
Config.BlueLeader = null;
}
Set<UUID> uuidList = Bukkit.getOnlinePlayers().stream().map(Entity::getUniqueId).collect(Collectors.toSet());
if (!uuidList.contains(Config.RedLeader) || !uuidList.contains(Config.BlueLeader)) {
Config.RedLeader = null;
Config.BlueLeader = null;
}
redTeam.reset();
blueTeam.reset();
}
}
redTeam.reset();
blueTeam.reset();
}
}
/**
* call to change fightstate from WAITING to INGAME
*/
static void startRound() {
if (fightState != FightState.WAITING) // anti dual-call
return;
fightState = FightState.FIGHTING;
StateDependent.setupState(fightState);
}
/**
* call to change fightstate from WAITING to INGAME
*/
static void startRound() {
if (fightState != FightState.WAITING) // anti dual-call
return;
fightState = FightState.FIGHTING;
StateDependent.setupState(fightState);
}
/**
* Fight beenden
* @param reason Grund fürs ende
* @param winner Gewinner (oder null)
*/
public static void end(WinReasons reason, MWTeam winner) {
if (fightState == FightState.END) //verhindern dass es mehrfach gecallt wird
return;
fightState = FightState.END;
StateDependent.setupState(fightState);
/**
* Fight beenden
*
* @param reason Grund fürs ende
* @param winner Gewinner (oder null)
*/
public static void end(WinReasons reason, MWTeam winner) {
if (fightState == FightState.END) //verhindern dass es mehrfach gecallt wird
return;
fightState = FightState.END;
StateDependent.setupState(fightState);
for(Player player : Bukkit.getOnlinePlayers()) {
player.playSound(player.getLocation(), Sound.ENTITY_ENDER_DRAGON_DEATH, 100f, 1f);
player.setGameMode(GameMode.SPECTATOR);
}
for (Player player : Bukkit.getOnlinePlayers()) {
player.playSound(player.getLocation(), Sound.ENTITY_ENDER_DRAGON_DEATH, 100f, 1f);
player.setGameMode(GameMode.SPECTATOR);
}
byte ergebnis = winner == blueTeam ? (byte) 1 : (byte) 2;
if (Config.isEvent()) {
Config.EventKampf.setErgebnis(ergebnis);
}
if (Config.isEvent() || Config.isChallenge()) {
FightEndsPacket packet = FightEndsPacket.builder()
.gameMode("MissileWars")
.duration((int)((System.currentTimeMillis() - FightScoreboard.getStartTime()) / 1000))
.win(ergebnis)
.bluePlayers(blueTeam.getPlayers().stream().map(Player::getUniqueId).map(SteamwarUser::get).map(SteamwarUser::getId).collect(Collectors.toList()))
.redPlayers(redTeam.getPlayers().stream().map(Player::getUniqueId).map(SteamwarUser::get).map(SteamwarUser::getId).collect(Collectors.toList()))
.blueSchem(-1)
.redSchem(-1)
.build();
NetworkSender.send(packet);
}
byte ergebnis = winner == blueTeam ? (byte) 1 : (byte) 2;
if (Config.isEvent()) {
Config.EventKampf.setErgebnis(ergebnis);
}
if (Config.isEvent() || Config.isChallenge()) {
FightEndsPacket packet = FightEndsPacket.builder().gameMode("MissileWars").duration((int) ((System.currentTimeMillis() - FightScoreboard.getStartTime()) / 1000)).win(ergebnis).bluePlayers(blueTeam.getPlayers().stream().map(Player::getUniqueId).map(SteamwarUser::get).map(SteamwarUser::getId).collect(Collectors.toList())).redPlayers(redTeam.getPlayers().stream().map(Player::getUniqueId).map(SteamwarUser::get).map(SteamwarUser::getId).collect(Collectors.toList())).blueSchem(-1).redSchem(-1).build();
NetworkSender.send(packet);
}
switch (reason) {
case PORTAL_DESTROYED:
Bukkit.getServer().broadcastMessage(winner.getColoredName() + ChatColor.RESET + " §7hat das gegnerische Portal zerstört");
break;
case NO_ENEMY:
default:
Bukkit.getServer().broadcastMessage("§7Team " + winner.getColoredName() + ChatColor.RESET + " §7hat aufgrund fehlenden Gegners gewonnen");
break;
}
}
switch (reason) {
case PORTAL_DESTROYED:
Bukkit.getServer().broadcastMessage(winner.getColoredName() + ChatColor.RESET + " §7hat das gegnerische Portal zerstört");
break;
case NO_ENEMY:
default:
Bukkit.getServer().broadcastMessage("§7Team " + winner.getColoredName() + ChatColor.RESET + " §7hat aufgrund fehlenden Gegners gewonnen");
break;
}
}
public static MissileWars getPlugin() {
return plugin;
}
public static MissileWars getPlugin() {
return plugin;
}
public static FightState getFightState() {
return fightState;
}
public static FightState getFightState() {
return fightState;
}
public static MWTeam getRedTeam() {
return redTeam;
}
public static MWTeam getRedTeam() {
return redTeam;
}
public static MWTeam getBlueTeam() {
return blueTeam;
}
public static MWTeam getBlueTeam() {
return blueTeam;
}
public static MWTeam getTeam(Player p) {
if(blueTeam.hasPlayer(p))
return blueTeam;
if(redTeam.hasPlayer(p))
return redTeam;
return null;
}
public static MWTeam getTeam(Player p) {
if (blueTeam.hasPlayer(p)) return blueTeam;
if (redTeam.hasPlayer(p)) return redTeam;
return null;
}
public static MWTeam getInvitation(Player p) {
if(blueTeam.hasInvite(p))
return blueTeam;
if(redTeam.hasInvite(p))
return redTeam;
return null;
}
public static MWTeam getInvitation(Player p) {
if (blueTeam.hasInvite(p)) return blueTeam;
if (redTeam.hasInvite(p)) return redTeam;
return null;
}
public static void leave(Player p) {
MissileWars.getBlueTeam().leave(p);
MissileWars.getRedTeam().leave(p);
}
public static void leave(Player p) {
MissileWars.getBlueTeam().leave(p);
MissileWars.getRedTeam().leave(p);
}
}
@@ -30,54 +30,57 @@ import org.bukkit.scheduler.BukkitTask;
public class SpawnPlatformCreator {
private final Player player;
private final Location spawn;
private final BukkitTask task;
private final Player player;
private final Location spawn;
private final BukkitTask task;
private Block currentBlock;
private int ticks;
private Block currentBlock;
private int ticks;
public SpawnPlatformCreator(Player player){
this.player = player;
MWTeam team = MissileWars.getTeam(player);
if(team == null)
this.spawn = Config.BlueSpawn;
else
this.spawn = team.getSpawn();
ticks = Config.PlatformTime;
currentBlock = null;
task = Bukkit.getScheduler().runTaskTimer(MissileWars.getPlugin(), this::createPlatform, 0, 1);
}
public SpawnPlatformCreator(Player player) {
this.player = player;
MWTeam team = MissileWars.getTeam(player);
if (team == null) {
this.spawn = Config.BlueSpawn;
} else {
this.spawn = team.getSpawn();
}
ticks = Config.PlatformTime;
currentBlock = null;
task = Bukkit.getScheduler().runTaskTimer(MissileWars.getPlugin(), this::createPlatform, 0, 1);
}
private void createPlatform(){
Location playerLoc = player.getLocation();
playerLoc.setY(spawn.getY() - 1);
private void createPlatform() {
Location playerLoc = player.getLocation();
playerLoc.setY(spawn.getY() - 1);
if(currentBlock == null || !currentBlock.getLocation().equals(playerLoc)){
if(currentBlock != null){
if(currentBlock.getType() == Material.OBSIDIAN)
currentBlock.setType(Material.AIR);
currentBlock = null;
}
if (currentBlock == null || !currentBlock.getLocation().equals(playerLoc)) {
if (currentBlock != null) {
if (currentBlock.getType() == Material.OBSIDIAN)
currentBlock.setType(Material.AIR);
currentBlock = null;
}
Block newBlock = playerLoc.getBlock();
if(newBlock.getType() == Material.AIR){
newBlock.setType(Material.OBSIDIAN);
currentBlock = newBlock;
}
}
Block newBlock = playerLoc.getBlock();
if (newBlock.getType() == Material.AIR) {
newBlock.setType(Material.OBSIDIAN);
currentBlock = newBlock;
}
}
if(currentBlock != null && player.getLocation().getY() - 1 < currentBlock.getY())
player.teleport(playerLoc.add(0, 1, 0));
if (currentBlock != null && player.getLocation().getY() - 1 < currentBlock.getY()) {
player.teleport(playerLoc.add(0, 1, 0));
}
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("Spawnplattform§8: §c§l" + String.format("%.2f", ticks / 20f) + "§8s"));
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("Spawnplattform§8: §c§l" + String.format("%.2f", ticks / 20f) + "§8s"));
if(ticks == 0){
if(currentBlock != null && currentBlock.getType() == Material.OBSIDIAN)
currentBlock.setType(Material.AIR);
if (ticks == 0) {
if (currentBlock != null && currentBlock.getType() == Material.OBSIDIAN) {
currentBlock.setType(Material.AIR);
}
task.cancel();
}
ticks--;
}
task.cancel();
}
ticks--;
}
}
@@ -23,32 +23,33 @@ import java.util.HashSet;
import java.util.Set;
public abstract class StateDependent {
private static Set<StateDependent> listeners = new HashSet<>();
private static Set<StateDependent> listeners = new HashSet<>();
private final Set<FightState> active;
private boolean running;
private final Set<FightState> active;
private boolean running;
public StateDependent(final Set<FightState> active){
this.active = active;
running = false;
listeners.add(this);
}
public StateDependent(final Set<FightState> active) {
this.active = active;
running = false;
listeners.add(this);
}
public abstract void enable();
public abstract void disable();
public abstract void enable();
static void setupState(FightState state){
if (state == FightState.FIGHTING) {
FightScoreboard.startTime();
}
for(StateDependent listener : listeners){
if(listener.running && !listener.active.contains(state)){
listener.disable();
listener.running = false;
}else if(!listener.running && listener.active.contains(state)){
listener.enable();
listener.running = true;
}
}
}
public abstract void disable();
static void setupState(FightState state) {
if (state == FightState.FIGHTING) {
FightScoreboard.startTime();
}
for (StateDependent listener : listeners) {
if (listener.running && !listener.active.contains(state)) {
listener.disable();
listener.running = false;
} else if (!listener.running && listener.active.contains(state)) {
listener.enable();
listener.running = true;
}
}
}
}
@@ -20,6 +20,6 @@
package de.steamwar.misslewars;
public enum WinReasons {
NO_ENEMY,
PORTAL_DESTROYED
NO_ENEMY,
PORTAL_DESTROYED
}
@@ -51,7 +51,7 @@ public class EndCountdown extends StateDependent {
private void stop() {
//Staggered kick to prevent lobby overloading
if(Bukkit.getOnlinePlayers().isEmpty()){
if (Bukkit.getOnlinePlayers().isEmpty()) {
Bukkit.shutdown();
return;
}
@@ -62,7 +62,6 @@ public class EndCountdown extends StateDependent {
@Override
public void disable() {
if (task != null && !task.isCancelled())
task.cancel();
if (task != null && !task.isCancelled()) task.cancel();
}
}
@@ -34,41 +34,40 @@ import java.util.EnumSet;
@Linked
public class ItemCountdown extends StateDependent {
private BukkitTask task;
private int lastTime = 0;
private int currenTime = 0;
private BukkitTask task;
private int lastTime = 0;
private int currenTime = 0;
public ItemCountdown() {
super(EnumSet.of(FightState.FIGHTING));
}
public ItemCountdown() {
super(EnumSet.of(FightState.FIGHTING));
}
private void run() {
currenTime++;
private void run() {
currenTime++;
int teamCount = Math.max(MissileWars.getBlueTeam().size(), MissileWars.getRedTeam().size());
if (teamCount == 0) return;
int timeDelay = Config.ItemTime / teamCount;
int teamCount = Math.max(MissileWars.getBlueTeam().size(), MissileWars.getRedTeam().size());
if (teamCount == 0) return;
int timeDelay = Config.ItemTime / teamCount;
if (lastTime + timeDelay < currenTime) {
lastTime = currenTime;
if (lastTime + timeDelay < currenTime) {
lastTime = currenTime;
ItemStack itemStack = SpecialItem.getRandomItem();
MissileWars.getBlueTeam().givePlayerItem(itemStack);
MissileWars.getRedTeam().givePlayerItem(itemStack);
}
ItemStack itemStack = SpecialItem.getRandomItem();
MissileWars.getBlueTeam().givePlayerItem(itemStack);
MissileWars.getRedTeam().givePlayerItem(itemStack);
}
MissileWars.getBlueTeam().countdown(timeDelay, currenTime - lastTime);
MissileWars.getRedTeam().countdown(timeDelay, currenTime - lastTime);
}
MissileWars.getBlueTeam().countdown(timeDelay, currenTime - lastTime);
MissileWars.getRedTeam().countdown(timeDelay, currenTime - lastTime);
}
@Override
public void enable() {
task = Bukkit.getScheduler().runTaskTimer(MissileWars.getPlugin(), this::run, 0, 1);
}
@Override
public void enable() {
task = Bukkit.getScheduler().runTaskTimer(MissileWars.getPlugin(), this::run, 0, 1);
}
@Override
public void disable() {
if(task != null && !task.isCancelled())
task.cancel();
}
@Override
public void disable() {
if (task != null && !task.isCancelled()) task.cancel();
}
}
@@ -32,23 +32,23 @@ import java.util.EnumSet;
@Linked
public class WaitingCountdown extends StateDependent {
private BukkitTask task;
private BukkitTask task;
public WaitingCountdown() {
super(EnumSet.of(FightState.WAITING));
}
public WaitingCountdown() {
super(EnumSet.of(FightState.WAITING));
}
@Override
public void enable() {
task = Bukkit.getScheduler().runTaskLater(MissileWars.getPlugin(), () -> {
if(Bukkit.getOnlinePlayers().isEmpty())
Bukkit.shutdown();
}, Config.WaitingTime);
}
@Override
public void enable() {
task = Bukkit.getScheduler().runTaskLater(MissileWars.getPlugin(), () -> {
if (Bukkit.getOnlinePlayers().isEmpty()) {
Bukkit.shutdown();
}
}, Config.WaitingTime);
}
@Override
public void disable() {
if(task != null && !task.isCancelled())
task.cancel();
}
@Override
public void disable() {
if (task != null && !task.isCancelled()) task.cancel();
}
}
@@ -64,7 +64,9 @@ public class CustomItem extends SpecialItem {
public static void init() {
File itemsFolder = new File(MissileWars.getPlugin().getDataFolder(), "items");
if (!itemsFolder.exists() || !itemsFolder.canRead() || !itemsFolder.isDirectory()) throw new SecurityException("Items could not be loaded");
if (!itemsFolder.exists() || !itemsFolder.canRead() || !itemsFolder.isDirectory()) {
throw new SecurityException("Items could not be loaded");
}
for (File itemFile : Objects.requireNonNull(itemsFolder.listFiles())) {
if (!itemFile.canRead() || !itemFile.isFile()) continue;
try {
@@ -48,88 +48,90 @@ import java.util.Objects;
public class Missile extends SpecialItem {
private static final World world = new BukkitWorld(Bukkit.getWorlds().get(0));
private static final World world = new BukkitWorld(Bukkit.getWorlds().get(0));
private final Clipboard clipboard;
private final ItemStack item;
private final Clipboard clipboard;
private final ItemStack item;
private Missile(File missileFile) {
String[] strings = missileFile.getName().split("\\.");
String name = strings[0];
String material = strings[1];
if (!material.endsWith("_SPAWN_EGG")) material += "_SPAWN_EGG";
Material itemType = Material.valueOf(material);
private Missile(File missileFile) {
String[] strings = missileFile.getName().split("\\.");
String name = strings[0];
String material = strings[1];
if (!material.endsWith("_SPAWN_EGG")) material += "_SPAWN_EGG";
Material itemType = Material.valueOf(material);
ClipboardFormat format = ClipboardFormats.findByFile(missileFile);
try {
assert format != null;
clipboard = format.getReader(new FileInputStream(missileFile)).read();
} catch (IOException e) {
throw new SecurityException("Corrupt missile");
}
ClipboardFormat format = ClipboardFormats.findByFile(missileFile);
try {
assert format != null;
clipboard = format.getReader(new FileInputStream(missileFile)).read();
} catch (IOException e) {
throw new SecurityException("Corrupt missile");
}
List<String> lore = new ArrayList<>();
lore(lore, strings, 2, "§7Speed");
lore(lore, strings, 3, "§7Size");
List<String> lore = new ArrayList<>();
lore(lore, strings, 2, "§7Speed");
lore(lore, strings, 3, "§7Size");
EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);
BlockTypeMask blockTypeMask = new BlockTypeMask(clipboard, BlockTypes.TNT);
lore.add("§7TNT §8: §e" + e.countBlocks(clipboard.getRegion(), blockTypeMask));
EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);
BlockTypeMask blockTypeMask = new BlockTypeMask(clipboard, BlockTypes.TNT);
lore.add("§7TNT §8: §e" + e.countBlocks(clipboard.getRegion(), blockTypeMask));
item = createItem(itemType, "§c" + name, 1, lore);
}
item = createItem(itemType, "§c" + name, 1, lore);
}
private void lore(List<String> lore, String[] args, int index, String tag) {
if (args.length > index) {
lore.add(tag + " §8: §e" + Integer.parseInt(args[index]) + "§8/§77");
} else {
lore.add(tag + " §8: §e0§8/§77");
}
}
private void lore(List<String> lore, String[] args, int index, String tag) {
if (args.length > index) {
lore.add(tag + " §8: §e" + Integer.parseInt(args[index]) + "§8/§77");
} else {
lore.add(tag + " §8: §e0§8/§77");
}
}
@Override
public ItemStack getItem() {
return item;
}
@Override
public ItemStack getItem() {
return item;
}
@Override
public boolean handleUse(Player p) {
BlockVector3 dimensions = clipboard.getDimensions();
Location location = p.getLocation();
BlockVector3 v = BlockVector3.ZERO;
BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin());
AffineTransform aT = new AffineTransform();
@Override
public boolean handleUse(Player p) {
BlockVector3 dimensions = clipboard.getDimensions();
Location location = p.getLocation();
BlockVector3 v = BlockVector3.ZERO;
BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin());
AffineTransform aT = new AffineTransform();
double yaw = (p.getLocation().getYaw() + 360f) % 360;
if (yaw > 45 && yaw <= 135) aT = aT.rotateY(270);
else if (yaw > 135 && yaw <= 225) aT = aT.rotateY(180);
else if (yaw > 225 && yaw <= 315) aT = aT.rotateY(90);
double yaw = (p.getLocation().getYaw() + 360f) % 360;
if (yaw > 45 && yaw <= 135) aT = aT.rotateY(270);
else if (yaw > 135 && yaw <= 225) aT = aT.rotateY(180);
else if (yaw > 225 && yaw <= 315) aT = aT.rotateY(90);
v = v.subtract(dimensions.x()/2, dimensions.y() + 2, -2).subtract(offset);
v = aT.apply(v.toVector3()).toBlockPoint();
v = v.add(location.getBlockX(), location.getBlockY(), location.getBlockZ());
v = v.subtract(dimensions.x() / 2, dimensions.y() + 2, -2).subtract(offset);
v = aT.apply(v.toVector3()).toBlockPoint();
v = v.add(location.getBlockX(), location.getBlockY(), location.getBlockZ());
EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);
ClipboardHolder ch = new ClipboardHolder(clipboard);
ch.setTransform(aT);
Operations.completeBlindly(ch.createPaste(e).to(v).ignoreAirBlocks(true).build());
e.flushSession();
return true;
}
EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);
ClipboardHolder ch = new ClipboardHolder(clipboard);
ch.setTransform(aT);
Operations.completeBlindly(ch.createPaste(e).to(v).ignoreAirBlocks(true).build());
e.flushSession();
return true;
}
@Override
public boolean isMissile() {
return true;
}
@Override
public boolean isMissile() {
return true;
}
public static void init() {
File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "missiles");
if (!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()) throw new SecurityException("Missiles could not be loaded");
for (File missileFile : Objects.requireNonNull(missileFolder.listFiles())) {
if (!missileFile.canRead() || !missileFile.isFile()) continue;
if (!missileFile.getName().endsWith(".schem")) continue;
new Missile(missileFile);
}
}
public static void init() {
File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "missiles");
if (!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()) {
throw new SecurityException("Missiles could not be loaded");
}
for (File missileFile : Objects.requireNonNull(missileFolder.listFiles())) {
if (!missileFile.canRead() || !missileFile.isFile()) continue;
if (!missileFile.getName().endsWith(".schem")) continue;
new Missile(missileFile);
}
}
}
@@ -39,94 +39,103 @@ import java.util.Random;
public abstract class SpecialItem {
private static final Random random = new Random();
private static double count = 0;
private static int consecutiveSupportItems = 0;
private static final Random random = new Random();
private static double count = 0;
private static int consecutiveSupportItems = 0;
private static List<SpecialItem> supportItems = new ArrayList<>();
private static List<SpecialItem> missileItems = new ArrayList<>();
private static List<SpecialItem> supportItems = new ArrayList<>();
private static List<SpecialItem> missileItems = new ArrayList<>();
SpecialItem() {
if (this.isMissile()) missileItems.add(this);
else supportItems.add(this);
}
SpecialItem() {
if (this.isMissile()) missileItems.add(this);
else supportItems.add(this);
}
private String materialName = null;
public abstract ItemStack getItem();
public abstract boolean handleUse(Player p);
public void handleThrow(Entity e) {}
public void handleHit(Entity e, Location l) {}
public boolean isMissile() {
return false;
}
private String materialName = null;
public ItemStack createItem(Material material, String name, int amount, List<String> lore) {
ItemStack item = new ItemStack(material, amount);
ItemMeta meta = item.getItemMeta();
assert meta != null;
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
meta.setLore(lore);
meta.setDisplayName(name);
item.setItemMeta(meta);
return item;
}
public abstract ItemStack getItem();
public static boolean handleUse(ItemStack item, Player player) {
if (player.hasPotionEffect(PotionEffectType.LEVITATION)) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu kannst dieses Item derzeit nicht nutzen!"));
return false;
}
return handleUse(item, player, missileItems) || handleUse(item, player, supportItems);
}
public abstract boolean handleUse(Player p);
private static boolean handleUse(ItemStack item, Player player, List<SpecialItem> items) {
for (SpecialItem specialItem : items)
if (item.isSimilar(specialItem.getItem())) return specialItem.handleUse(player);
return false;
}
public void handleThrow(Entity e) {
}
public static void handleThrow(ProjectileLaunchEvent e) {
String name = e.getEntity().getClass().getName().toLowerCase();
for (SpecialItem specialItem : supportItems) {
if (specialItem.materialName == null)
specialItem.materialName = specialItem.getItem().getType().name().toLowerCase();
if (name.contains(specialItem.materialName))
specialItem.handleThrow(e.getEntity());
}
}
public void handleHit(Entity e, Location l) {
}
public static void handleHit(ProjectileHitEvent e) {
String name = e.getEntity().getClass().getName().toLowerCase();
public boolean isMissile() {
return false;
}
Location location = null;
if (e.getHitEntity() != null) location = e.getHitEntity().getLocation();
else if (e.getHitBlock() != null) location = e.getHitBlock().getLocation();
if (location == null) return;
public ItemStack createItem(Material material, String name, int amount, List<String> lore) {
ItemStack item = new ItemStack(material, amount);
ItemMeta meta = item.getItemMeta();
assert meta != null;
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
meta.setLore(lore);
meta.setDisplayName(name);
item.setItemMeta(meta);
return item;
}
for (SpecialItem specialItem : supportItems) {
if (name.contains(((CustomItem) specialItem).getScriptedItem().getEntityName())) {
specialItem.handleHit(e.getEntity(), location);
}
}
}
public static boolean handleUse(ItemStack item, Player player) {
if (player.hasPotionEffect(PotionEffectType.LEVITATION)) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu kannst dieses Item derzeit nicht nutzen!"));
return false;
}
return handleUse(item, player, missileItems) || handleUse(item, player, supportItems);
}
public static ItemStack getRandomItem() {
if (Config.MissileChance == 0) {
return supportItems.get(random.nextInt(supportItems.size())).getItem();
}
if (Config.MissileChance == 1 || consecutiveSupportItems > 1) {
consecutiveSupportItems = 0;
return missileItems.get(random.nextInt(missileItems.size())).getItem();
}
private static boolean handleUse(ItemStack item, Player player, List<SpecialItem> items) {
for (SpecialItem specialItem : items)
if (item.isSimilar(specialItem.getItem())) return specialItem.handleUse(player);
return false;
}
double missileChance = Config.MissileChance + count * 0.1;
if (random.nextDouble() > missileChance) {
count += Config.MissileChance;
consecutiveSupportItems++;
return supportItems.get(random.nextInt(supportItems.size())).getItem();
} else {
count -= 1 - Config.MissileChance;
return missileItems.get(random.nextInt(missileItems.size())).getItem();
}
}
public static void handleThrow(ProjectileLaunchEvent e) {
String name = e.getEntity().getClass().getName().toLowerCase();
for (SpecialItem specialItem : supportItems) {
if (specialItem.materialName == null) {
specialItem.materialName = specialItem.getItem().getType().name().toLowerCase();
}
if (name.contains(specialItem.materialName)) {
specialItem.handleThrow(e.getEntity());
}
}
}
public static void handleHit(ProjectileHitEvent e) {
String name = e.getEntity().getClass().getName().toLowerCase();
Location location = null;
if (e.getHitEntity() != null) location = e.getHitEntity().getLocation();
else if (e.getHitBlock() != null) location = e.getHitBlock().getLocation();
if (location == null) return;
for (SpecialItem specialItem : supportItems) {
if (name.contains(((CustomItem) specialItem).getScriptedItem().getEntityName())) {
specialItem.handleHit(e.getEntity(), location);
}
}
}
public static ItemStack getRandomItem() {
if (Config.MissileChance == 0) {
return supportItems.get(random.nextInt(supportItems.size())).getItem();
}
if (Config.MissileChance == 1 || consecutiveSupportItems > 1) {
consecutiveSupportItems = 0;
return missileItems.get(random.nextInt(missileItems.size())).getItem();
}
double missileChance = Config.MissileChance + count * 0.1;
if (random.nextDouble() > missileChance) {
count += Config.MissileChance;
consecutiveSupportItems++;
return supportItems.get(random.nextInt(supportItems.size())).getItem();
} else {
count -= 1 - Config.MissileChance;
return missileItems.get(random.nextInt(missileItems.size())).getItem();
}
}
}
@@ -39,47 +39,48 @@ import java.util.Objects;
@Linked
public class ArenaListener extends BasicListener {
public ArenaListener() {
super(EnumSet.allOf(FightState.class));
}
@EventHandler
public void onMove(PlayerMoveEvent e) {
Location location = e.getTo();
Player p = e.getPlayer();
assert location != null;
if(location.getY() < Config.ArenaMinY){
if(p.getGameMode() == GameMode.SPECTATOR)
p.teleport(e.getFrom());
else if(MissileWars.getFightState() == FightState.WAITING)
p.teleport(Objects.requireNonNull(MissileWars.getTeam(p)).getSpawn());
else
p.damage(20.0f);
}else if(
location.getX() < Config.ArenaMinX ||
location.getX() > Config.ArenaMaxX ||
location.getZ() < Config.ArenaMinZ ||
location.getZ() > Config.ArenaMaxZ){
p.teleport(e.getFrom());
}
}
@EventHandler
public void onArrowPickup(PlayerPickupArrowEvent e){
e.setCancelled(true);
}
public ArenaListener() {
super(EnumSet.allOf(FightState.class));
}
@EventHandler
public void onHunger(FoodLevelChangeEvent e){
e.setCancelled(true);
}
public void onMove(PlayerMoveEvent e) {
Location location = e.getTo();
Player p = e.getPlayer();
@EventHandler(ignoreCancelled = true)
public void onInventoryOpen(InventoryOpenEvent event) {
if(event.getView().getType() != InventoryType.PLAYER &&
event.getView().getType() != InventoryType.CRAFTING &&
event.getView().getType() != InventoryType.CREATIVE)
event.setCancelled(true);
}
assert location != null;
if (location.getY() < Config.ArenaMinY) {
if (p.getGameMode() == GameMode.SPECTATOR) {
p.teleport(e.getFrom());
} else if (MissileWars.getFightState() == FightState.WAITING) {
p.teleport(Objects.requireNonNull(MissileWars.getTeam(p)).getSpawn());
} else {
p.damage(20.0f);
}
} else if (
location.getX() < Config.ArenaMinX ||
location.getX() > Config.ArenaMaxX ||
location.getZ() < Config.ArenaMinZ ||
location.getZ() > Config.ArenaMaxZ) {
p.teleport(e.getFrom());
}
}
@EventHandler
public void onArrowPickup(PlayerPickupArrowEvent e) {
e.setCancelled(true);
}
@EventHandler
public void onHunger(FoodLevelChangeEvent e) {
e.setCancelled(true);
}
@EventHandler(ignoreCancelled = true)
public void onInventoryOpen(InventoryOpenEvent event) {
if (event.getView().getType() != InventoryType.PLAYER &&
event.getView().getType() != InventoryType.CRAFTING &&
event.getView().getType() != InventoryType.CREATIVE)
event.setCancelled(true);
}
}
@@ -31,17 +31,17 @@ import java.util.Set;
public abstract class BasicListener extends StateDependent implements Listener {
protected BasicListener(final Set<FightState> active){
super(active);
}
protected BasicListener(final Set<FightState> active) {
super(active);
}
@Override
public void enable(){
Bukkit.getPluginManager().registerEvents(this, MissileWars.getPlugin());
}
@Override
public void enable() {
Bukkit.getPluginManager().registerEvents(this, MissileWars.getPlugin());
}
@Override
public void disable(){
HandlerList.unregisterAll(this);
}
@Override
public void disable() {
HandlerList.unregisterAll(this);
}
}
@@ -33,26 +33,26 @@ import java.util.EnumSet;
@Linked
public class ChatListener extends BasicListener {
public ChatListener() {
super(EnumSet.allOf(FightState.class));
}
public ChatListener() {
super(EnumSet.allOf(FightState.class));
}
@EventHandler
public void onChat(AsyncPlayerChatEvent e) {
e.setCancelled(true);
@EventHandler
public void onChat(AsyncPlayerChatEvent e) {
e.setCancelled(true);
Player p = e.getPlayer();
MWTeam team = MissileWars.getTeam(p);
String message = e.getPlayer().getDisplayName() + "§8» §7" + e.getMessage();
if (team == null) {
Bukkit.broadcastMessage(message);
} else {
if (e.getMessage().startsWith("+")) {
String teamMessage = "§8[" + team.getColorCode() + "TEAM§8] " + e.getPlayer().getDisplayName() + "§8» §7" + e.getMessage().substring(1);
team.getPlayers().forEach(player -> player.sendMessage(teamMessage));
} else {
Bukkit.broadcastMessage(message);
}
}
}
Player p = e.getPlayer();
MWTeam team = MissileWars.getTeam(p);
String message = e.getPlayer().getDisplayName() + "§8» §7" + e.getMessage();
if (team == null) {
Bukkit.broadcastMessage(message);
} else {
if (e.getMessage().startsWith("+")) {
String teamMessage = "§8[" + team.getColorCode() + "TEAM§8] " + e.getPlayer().getDisplayName() + "§8» §7" + e.getMessage().substring(1);
team.getPlayers().forEach(player -> player.sendMessage(teamMessage));
} else {
Bukkit.broadcastMessage(message);
}
}
}
}
@@ -34,30 +34,30 @@ import org.bukkit.event.player.PlayerQuitEvent;
import java.util.EnumSet;
@Linked
public class ConnectionListener extends BasicListener{
public class ConnectionListener extends BasicListener {
public ConnectionListener(){
super(EnumSet.allOf(FightState.class));
}
public ConnectionListener() {
super(EnumSet.allOf(FightState.class));
}
@EventHandler(priority = EventPriority.HIGH)
public void onJoin(PlayerJoinEvent e) {
e.getPlayer().setDisplayName("§7" + e.getPlayer().getName());
e.getPlayer().setGameMode(GameMode.SPECTATOR);
e.getPlayer().teleport(MissileWars.getRedTeam().getSpawn().toVector().midpoint(MissileWars.getBlueTeam().getSpawn().toVector()).toLocation(e.getPlayer().getWorld()));
if(Config.test()) {
e.getPlayer().setOp(true);
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onJoin(PlayerJoinEvent e) {
e.getPlayer().setDisplayName("§7" + e.getPlayer().getName());
e.getPlayer().setGameMode(GameMode.SPECTATOR);
e.getPlayer().teleport(MissileWars.getRedTeam().getSpawn().toVector().midpoint(MissileWars.getBlueTeam().getSpawn().toVector()).toLocation(e.getPlayer().getWorld()));
if (Config.test()) {
e.getPlayer().setOp(true);
}
}
@EventHandler
public void onLeave(PlayerQuitEvent e) {
MWTeam.removeInvitations(e.getPlayer());
MissileWars.leave(e.getPlayer());
@EventHandler
public void onLeave(PlayerQuitEvent e) {
MWTeam.removeInvitations(e.getPlayer());
MissileWars.leave(e.getPlayer());
if (Bukkit.getOnlinePlayers().isEmpty() || (Bukkit.getOnlinePlayers().contains(e.getPlayer()) && Bukkit.getOnlinePlayers().size() == 1)) {
Bukkit.shutdown();
}
}
if (Bukkit.getOnlinePlayers().isEmpty() || (Bukkit.getOnlinePlayers().contains(e.getPlayer()) && Bukkit.getOnlinePlayers().size() == 1)) {
Bukkit.shutdown();
}
}
}
@@ -42,50 +42,49 @@ import java.util.Set;
@Linked
public class DeathListener extends BasicListener {
private static final Vector ZERO = new Vector(0, 0, 0);
private final Set<Player> respawnedPlayers = new HashSet<>();
private static final Vector ZERO = new Vector(0, 0, 0);
private final Set<Player> respawnedPlayers = new HashSet<>();
public DeathListener() {
super(EnumSet.allOf(FightState.class));
}
public DeathListener() {
super(EnumSet.allOf(FightState.class));
}
@EventHandler
public void onDeath(PlayerDeathEvent e) {
e.setDeathMessage(null);
if(Bukkit.getOnlinePlayers().size() > 10) {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
onlinePlayer.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(e.getEntity().getDisplayName() + " §cstarb"));
}
} else {
Bukkit.broadcastMessage(e.getEntity().getDisplayName() + " §cstarb");
}
}
@EventHandler
public void onDeath(PlayerDeathEvent e) {
e.setDeathMessage(null);
if (Bukkit.getOnlinePlayers().size() > 10) {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
onlinePlayer.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(e.getEntity().getDisplayName() + " §cstarb"));
}
} else {
Bukkit.broadcastMessage(e.getEntity().getDisplayName() + " §cstarb");
}
}
@EventHandler
public void onRespawn(PlayerRespawnEvent e){
Player p = e.getPlayer();
p.setFireTicks(0);
MWTeam team = MissileWars.getTeam(p);
if(team == null)
return;
@EventHandler
public void onRespawn(PlayerRespawnEvent e) {
Player p = e.getPlayer();
p.setFireTicks(0);
MWTeam team = MissileWars.getTeam(p);
if (team == null) return;
e.setRespawnLocation(team.getSpawn());
e.getPlayer().setVelocity(ZERO);
respawnedPlayers.add(p);
}
e.setRespawnLocation(team.getSpawn());
e.getPlayer().setVelocity(ZERO);
respawnedPlayers.add(p);
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if (respawnedPlayers.isEmpty()) return;
Player player = event.getPlayer();
if (!respawnedPlayers.contains(player)) return;
respawnedPlayers.remove(player);
new SpawnPlatformCreator(player);
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if (respawnedPlayers.isEmpty()) return;
Player player = event.getPlayer();
if (!respawnedPlayers.contains(player)) return;
respawnedPlayers.remove(player);
new SpawnPlatformCreator(player);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
respawnedPlayers.remove(event.getPlayer());
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
respawnedPlayers.remove(event.getPlayer());
}
}
@@ -30,13 +30,13 @@ import java.util.EnumSet;
@Linked
public class EndListener extends BasicListener {
public EndListener(){
super(EnumSet.of(FightState.END));
}
public EndListener() {
super(EnumSet.of(FightState.END));
}
@EventHandler
public void onJoin(PlayerJoinEvent e) {
e.setJoinMessage(null);
e.getPlayer().setGameMode(GameMode.SPECTATOR);
}
@EventHandler
public void onJoin(PlayerJoinEvent e) {
e.setJoinMessage(null);
e.getPlayer().setGameMode(GameMode.SPECTATOR);
}
}
@@ -31,19 +31,19 @@ import java.util.EnumSet;
@Linked
public class FightListener extends BasicListener {
public FightListener() {
super(EnumSet.of(FightState.FIGHTING));
}
public FightListener() {
super(EnumSet.of(FightState.FIGHTING));
}
@EventHandler
public void onDamage(EntityDamageByEntityEvent e){
if(!(e.getDamager() instanceof Player && e.getEntity() instanceof Player))
return;
@EventHandler
public void onDamage(EntityDamageByEntityEvent e) {
if (!(e.getDamager() instanceof Player && e.getEntity() instanceof Player)) return;
Player damager = (Player)e.getDamager();
Player reciever = (Player)e.getEntity();
Player damager = (Player) e.getDamager();
Player reciever = (Player) e.getEntity();
if(MissileWars.getTeam(damager) == MissileWars.getTeam(reciever))
e.setCancelled(true);
}
if (MissileWars.getTeam(damager) == MissileWars.getTeam(reciever)) {
e.setCancelled(true);
}
}
}
@@ -43,83 +43,80 @@ import java.util.Set;
@Linked
public class ItemListener extends BasicListener {
private Set<Integer> RED_ITEMS = new HashSet<>();
private Set<Integer> BLUE_ITEMS = new HashSet<>();
private Set<Integer> RED_ITEMS = new HashSet<>();
private Set<Integer> BLUE_ITEMS = new HashSet<>();
public ItemListener() {
super(EnumSet.of(FightState.FIGHTING));
}
public ItemListener() {
super(EnumSet.of(FightState.FIGHTING));
}
@Override
public void enable() {
super.enable();
RED_ITEMS.clear();
BLUE_ITEMS.clear();
}
@Override
public void enable() {
super.enable();
RED_ITEMS.clear();
BLUE_ITEMS.clear();
}
@EventHandler
public void onItemClick(PlayerInteractEvent e) {
ItemStack item = e.getItem();
if (item == null)
return;
if (e.getPlayer().hasCooldown(item.getType())) return;
@EventHandler
public void onItemClick(PlayerInteractEvent e) {
ItemStack item = e.getItem();
if (item == null) return;
if (e.getPlayer().hasCooldown(item.getType())) return;
if (e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.RIGHT_CLICK_AIR) return;
if (e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.RIGHT_CLICK_AIR)
return;
if (SpecialItem.handleUse(item, e.getPlayer()) && item.getType() != Material.SPLASH_POTION) {
item.setAmount(item.getAmount() - 1);
e.getPlayer().updateInventory();
e.setCancelled(true);
}
}
if (SpecialItem.handleUse(item, e.getPlayer()) && item.getType() != Material.SPLASH_POTION) {
item.setAmount(item.getAmount()-1);
e.getPlayer().updateInventory();
e.setCancelled(true);
}
}
@EventHandler
public void onThrow(ProjectileLaunchEvent e) {
SpecialItem.handleThrow(e);
}
@EventHandler
public void onThrow(ProjectileLaunchEvent e) {
SpecialItem.handleThrow(e);
}
@EventHandler
public void onHit(ProjectileHitEvent e) {
SpecialItem.handleHit(e);
}
@EventHandler
public void onHit(ProjectileHitEvent e) {
SpecialItem.handleHit(e);
}
@EventHandler
public void onItemDrop(PlayerDropItemEvent e) {
MWTeam mwTeam = MissileWars.getTeam(e.getPlayer());
if (mwTeam == null) {
e.setCancelled(true);
return;
}
if (e.getItemDrop().getItemStack().isSimilar(MWTeam.bow)) {
e.setCancelled(true);
return;
}
if (mwTeam == MissileWars.getRedTeam()) {
RED_ITEMS.add(e.getItemDrop().getEntityId());
} else {
BLUE_ITEMS.add(e.getItemDrop().getEntityId());
}
}
@EventHandler
public void onItemDrop(PlayerDropItemEvent e){
MWTeam mwTeam = MissileWars.getTeam(e.getPlayer());
if (mwTeam == null) {
e.setCancelled(true);
return;
}
if (e.getItemDrop().getItemStack().isSimilar(MWTeam.bow)) {
e.setCancelled(true);
return;
}
if (mwTeam == MissileWars.getRedTeam()) {
RED_ITEMS.add(e.getItemDrop().getEntityId());
} else {
BLUE_ITEMS.add(e.getItemDrop().getEntityId());
}
}
@EventHandler
public void onEntityPickupItem(EntityPickupItemEvent e) {
Player player = (Player) e.getEntity();
MWTeam mwTeam = MissileWars.getTeam(player);
if (mwTeam == null) {
e.setCancelled(true);
return;
}
if (mwTeam == MissileWars.getRedTeam() && !RED_ITEMS.contains(e.getItem().getEntityId())) {
e.setCancelled(true);
} else if (mwTeam == MissileWars.getBlueTeam() && !BLUE_ITEMS.contains(e.getItem().getEntityId())) {
e.setCancelled(true);
}
}
@EventHandler
public void onEntityPickupItem(EntityPickupItemEvent e) {
Player player = (Player) e.getEntity();
MWTeam mwTeam = MissileWars.getTeam(player);
if (mwTeam == null) {
e.setCancelled(true);
return;
}
if (mwTeam == MissileWars.getRedTeam() && !RED_ITEMS.contains(e.getItem().getEntityId())) {
e.setCancelled(true);
} else if (mwTeam == MissileWars.getBlueTeam() && !BLUE_ITEMS.contains(e.getItem().getEntityId())) {
e.setCancelled(true);
}
}
@EventHandler
public void onItemDespawn(ItemDespawnEvent event) {
RED_ITEMS.remove(event.getEntity().getEntityId());
BLUE_ITEMS.remove(event.getEntity().getEntityId());
}
@EventHandler
public void onItemDespawn(ItemDespawnEvent event) {
RED_ITEMS.remove(event.getEntity().getEntityId());
BLUE_ITEMS.remove(event.getEntity().getEntityId());
}
}
@@ -34,70 +34,70 @@ import java.util.EnumSet;
@Linked
public class JoinListener extends BasicListener {
public JoinListener(){
super(EnumSet.of(FightState.WAITING, FightState.FIGHTING));
}
public JoinListener() {
super(EnumSet.of(FightState.WAITING, FightState.FIGHTING));
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onJoin(PlayerJoinEvent e){
e.setJoinMessage("§a» " + e.getPlayer().getDisplayName());
join(e.getPlayer());
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onJoin(PlayerJoinEvent e) {
e.setJoinMessage("§a» " + e.getPlayer().getDisplayName());
join(e.getPlayer());
}
public static void join(Player p) {
if (Config.isEvent()) {
joinEvent(p);
return;
}
public static void join(Player p) {
if (Config.isEvent()) {
joinEvent(p);
return;
}
if (Config.isChallenge()) {
joinChallenge(p);
return;
}
if (Config.isChallenge()) {
joinChallenge(p);
return;
}
joinNormal(p);
}
joinNormal(p);
}
private static void joinEvent(Player p) {
if (Config.EventTeamRedID == 0 && Config.EventTeamBlueID == 0) {
joinNormal(p);
return;
}
private static void joinEvent(Player p) {
if (Config.EventTeamRedID == 0 && Config.EventTeamBlueID == 0) {
joinNormal(p);
return;
}
int teamId = SteamwarUser.get(p.getUniqueId()).getTeam();
if (teamId != Config.EventTeamRedID && teamId != Config.EventTeamBlueID) {
teamId = 0;
}
if (teamId == Config.EventTeamRedID && MissileWars.getRedTeam().size() < Config.MaximumTeamMembers) {
MissileWars.getRedTeam().join(p);
} else if (teamId == Config.EventTeamBlueID && MissileWars.getBlueTeam().size() < Config.MaximumTeamMembers) {
MissileWars.getBlueTeam().join(p);
} else {
p.teleport(MissileWars.getRedTeam().getSpawn().toVector().midpoint(MissileWars.getBlueTeam().getSpawn().toVector()).toLocation(p.getWorld()));
}
}
int teamId = SteamwarUser.get(p.getUniqueId()).getTeam();
if (teamId != Config.EventTeamRedID && teamId != Config.EventTeamBlueID) {
teamId = 0;
}
if (teamId == Config.EventTeamRedID && MissileWars.getRedTeam().size() < Config.MaximumTeamMembers) {
MissileWars.getRedTeam().join(p);
} else if (teamId == Config.EventTeamBlueID && MissileWars.getBlueTeam().size() < Config.MaximumTeamMembers) {
MissileWars.getBlueTeam().join(p);
} else {
p.teleport(MissileWars.getRedTeam().getSpawn().toVector().midpoint(MissileWars.getBlueTeam().getSpawn().toVector()).toLocation(p.getWorld()));
}
}
private static void joinChallenge(Player p) {
if (Config.RedLeader.equals(p.getUniqueId())) {
MissileWars.getRedTeam().join(p);
} else if (Config.BlueLeader.equals(p.getUniqueId())) {
MissileWars.getBlueTeam().join(p);
} else {
p.teleport(MissileWars.getRedTeam().getSpawn().toVector().midpoint(MissileWars.getBlueTeam().getSpawn().toVector()).toLocation(p.getWorld()));
}
}
private static void joinChallenge(Player p) {
if (Config.RedLeader.equals(p.getUniqueId())) {
MissileWars.getRedTeam().join(p);
} else if (Config.BlueLeader.equals(p.getUniqueId())) {
MissileWars.getBlueTeam().join(p);
} else {
p.teleport(MissileWars.getRedTeam().getSpawn().toVector().midpoint(MissileWars.getBlueTeam().getSpawn().toVector()).toLocation(p.getWorld()));
}
}
private static void joinNormal(Player p) {
if (MissileWars.getRedTeam().size() == MissileWars.getBlueTeam().size()) {
if (Math.random() > 0.5) {
MissileWars.getRedTeam().join(p);
} else {
MissileWars.getBlueTeam().join(p);
}
} else if (MissileWars.getRedTeam().size() < MissileWars.getBlueTeam().size()) {
MissileWars.getRedTeam().join(p);
} else {
MissileWars.getBlueTeam().join(p);
}
}
private static void joinNormal(Player p) {
if (MissileWars.getRedTeam().size() == MissileWars.getBlueTeam().size()) {
if (Math.random() > 0.5) {
MissileWars.getRedTeam().join(p);
} else {
MissileWars.getBlueTeam().join(p);
}
} else if (MissileWars.getRedTeam().size() < MissileWars.getBlueTeam().size()) {
MissileWars.getRedTeam().join(p);
} else {
MissileWars.getBlueTeam().join(p);
}
}
}
@@ -35,30 +35,29 @@ import java.util.EnumSet;
@Linked
public class PortalDestructListener extends BasicListener {
public PortalDestructListener(){
super(EnumSet.of(FightState.FIGHTING));
}
public PortalDestructListener() {
super(EnumSet.of(FightState.FIGHTING));
}
@EventHandler
public void onBlockupdate(BlockPhysicsEvent e) {
if (e.getBlock().getType() != Material.NETHER_PORTAL)
return;
int z = e.getBlock().getZ();
if (z == MissileWars.getRedTeam().getPortalZ())
MissileWars.end(WinReasons.PORTAL_DESTROYED, MissileWars.getBlueTeam());
if (z == MissileWars.getBlueTeam().getPortalZ())
MissileWars.end(WinReasons.PORTAL_DESTROYED, MissileWars.getRedTeam());
}
@EventHandler
public void onBlockupdate(BlockPhysicsEvent e) {
if (e.getBlock().getType() != Material.NETHER_PORTAL) return;
int z = e.getBlock().getZ();
if (z == MissileWars.getRedTeam().getPortalZ()) {
MissileWars.end(WinReasons.PORTAL_DESTROYED, MissileWars.getBlueTeam());
}
if (z == MissileWars.getBlueTeam().getPortalZ()) {
MissileWars.end(WinReasons.PORTAL_DESTROYED, MissileWars.getRedTeam());
}
}
@EventHandler
public void onExplosion(EntityExplodeEvent e){
if(e.getEntityType() != EntityType.FIREBALL)
return;
@EventHandler
public void onExplosion(EntityExplodeEvent e) {
if (e.getEntityType() != EntityType.FIREBALL) return;
double z = e.getLocation().getZ();
double distRed = Math.abs(Config.RedPortalZ + 0.5 - z);
double distBlue = Math.abs(Config.BluePortalZ + 0.5 - z);
if(distRed < 2 || distBlue < 2)
e.setCancelled(true);
}
double z = e.getLocation().getZ();
double distRed = Math.abs(Config.RedPortalZ + 0.5 - z);
double distBlue = Math.abs(Config.BluePortalZ + 0.5 - z);
if (distRed < 2 || distBlue < 2) e.setCancelled(true);
}
}
@@ -30,20 +30,19 @@ import java.util.EnumSet;
@Linked
public class WaitingListener extends BasicListener {
public WaitingListener() {
super(EnumSet.of(FightState.WAITING));
}
public WaitingListener() {
super(EnumSet.of(FightState.WAITING));
}
@EventHandler
public void onDisconnect(PlayerQuitEvent e){
if (Bukkit.getOnlinePlayers().isEmpty() || (Bukkit.getOnlinePlayers().contains(e.getPlayer()) && Bukkit.getOnlinePlayers().size() == 1)) {
Bukkit.shutdown();
}
}
@EventHandler
public void onDisconnect(PlayerQuitEvent e) {
if (Bukkit.getOnlinePlayers().isEmpty() || (Bukkit.getOnlinePlayers().contains(e.getPlayer()) && Bukkit.getOnlinePlayers().size() == 1)) {
Bukkit.shutdown();
}
}
@EventHandler
public void onDamage(EntityDamageEvent e){
if(e.getCause() != EntityDamageEvent.DamageCause.VOID)
e.setCancelled(true);
}
@EventHandler
public void onDamage(EntityDamageEvent e) {
if (e.getCause() != EntityDamageEvent.DamageCause.VOID) e.setCancelled(true);
}
}
@@ -33,7 +33,7 @@ public class CooldownScript implements RunnableScript {
public CooldownScript(JsonObject object) {
JsonPrimitive primitive = object.getAsJsonPrimitive("cooldown");
if(primitive.isNumber()) cooldown = primitive.getAsInt();
if (primitive.isNumber()) cooldown = primitive.getAsInt();
}
@Override
@@ -67,11 +67,9 @@ public class PasteScript implements RunnableScript {
centered = getBoolean(paste, "centered", false);
ignoreAir = getBoolean(paste, "ignoreAir", false);
if (paste.has("offset"))
return;
if (paste.has("offset")) return;
JsonArray jsonArray = paste.getAsJsonArray("offset");
if (jsonArray.size() == 3)
return;
if (jsonArray.size() == 3) return;
xOffset = jsonArray.get(0).getAsInt();
yOffset = jsonArray.get(1).getAsInt();
zOffset = jsonArray.get(2).getAsInt();
@@ -26,7 +26,8 @@ import org.bukkit.entity.Player;
public class RemoveScript implements RunnableScript {
public RemoveScript(JsonObject jsonObject) {}
public RemoveScript(JsonObject jsonObject) {
}
@Override
public boolean execute(RunnableScriptEvent runnableScriptEvent) {
@@ -37,7 +37,7 @@ public class SlowMoRunner {
static {
Bukkit.getScheduler().runTaskTimer(MissileWars.getPlugin(), () -> {
if(currentTime > 0) {
if (currentTime > 0) {
current += 1;
if (current % 5 == 0) {
SlowMoUtils.unfreeze();
+9 -9
View File
@@ -2,16 +2,16 @@ name: MissileWars
prefix: MW
main: de.steamwar.misslewars.MissileWars
authors:
- Jan9103
- Lixfel
- YoyoNow
- Jan9103
- Lixfel
- YoyoNow
version: "1.0"
api-version: "1.13"
depend:
- WorldEdit
- SpigotCore
- WorldEdit
- SpigotCore
commands:
spectate:
invite:
accept:
decline:
spectate:
invite:
accept:
decline: