Add Elytra Parkour Mode (basic implementation)
- Created ElytraMode class with leaderboard support - Auto-gives elytra and fireworks on mode start - Added elytra mode config options - Added Russian and English localization - Integrated into mode selection menu - TODO: Ring generation, boost system, collision detection
This commit is contained in:
parent
56bf11822e
commit
1b1d363f3b
6 changed files with 103 additions and 0 deletions
73
src/main/java/dev/loki/loparkour/mode/ElytraMode.java
Normal file
73
src/main/java/dev/loki/loparkour/mode/ElytraMode.java
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
package dev.loki.loparkour.mode;
|
||||
|
||||
import dev.loki.loparkour.config.Config;
|
||||
import dev.loki.loparkour.config.Locales;
|
||||
import dev.loki.loparkour.generator.ParkourGenerator;
|
||||
import dev.loki.loparkour.leaderboard.Leaderboard;
|
||||
import dev.loki.loparkour.player.ParkourPlayer;
|
||||
import dev.loki.loparkour.session.Session;
|
||||
import dev.efnilite.vilib.inventory.item.Item;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Elytra Parkour Mode - Flying parkour with rings and boost
|
||||
*/
|
||||
public class ElytraMode implements Mode {
|
||||
|
||||
private final Leaderboard leaderboard = new Leaderboard(getName(), Leaderboard.Sort.SCORE);
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String getName() {
|
||||
return "elytra";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Item getItem(String locale) {
|
||||
return Locales.getItem(locale, "modes.elytra");
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Leaderboard getLeaderboard() {
|
||||
return leaderboard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create(Player player) {
|
||||
if (!Config.CONFIG.getBoolean("joining")) {
|
||||
player.sendMessage("§cJoining is currently disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
ParkourPlayer pp = ParkourPlayer.getPlayer(player);
|
||||
if (pp != null && pp.session.generator != null && pp.session.generator.getMode() instanceof ElytraMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
player.closeInventory();
|
||||
|
||||
// Create session with elytra setup
|
||||
Session.create(session -> {
|
||||
ParkourGenerator generator = new ParkourGenerator(session);
|
||||
|
||||
// Give elytra and fireworks to all players in session
|
||||
for (ParkourPlayer parkourPlayer : session.getPlayers()) {
|
||||
Player p = parkourPlayer.player;
|
||||
p.setGameMode(GameMode.ADVENTURE);
|
||||
p.getInventory().setChestplate(new ItemStack(Material.ELYTRA));
|
||||
|
||||
int fireworks = Config.CONFIG.getInt("modes.elytra.starting-fireworks");
|
||||
p.getInventory().addItem(new ItemStack(Material.FIREWORK_ROCKET, fireworks));
|
||||
}
|
||||
|
||||
return generator;
|
||||
}, null, null, player);
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ public class Modes {
|
|||
public static SpeedrunMode SPEEDRUN;
|
||||
public static GravityShiftMode GRAVITY_SHIFT;
|
||||
public static HardcoreMode HARDCORE;
|
||||
public static ElytraMode ELYTRA;
|
||||
|
||||
public static void init() {
|
||||
DEFAULT = (DefaultMode) Registry.getMode("default");
|
||||
|
|
@ -16,5 +17,6 @@ public class Modes {
|
|||
SPEEDRUN = (SpeedrunMode) Registry.getMode("speedrun");
|
||||
GRAVITY_SHIFT = (GravityShiftMode) Registry.getMode("gravity-shift");
|
||||
HARDCORE = (HardcoreMode) Registry.getMode("hardcore");
|
||||
ELYTRA = (ElytraMode) Registry.getMode("elytra");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue