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
|
|
@ -7,6 +7,7 @@ import dev.loki.loparkour.config.Option;
|
||||||
import dev.loki.loparkour.hook.HoloHook;
|
import dev.loki.loparkour.hook.HoloHook;
|
||||||
import dev.loki.loparkour.hook.PAPIHook;
|
import dev.loki.loparkour.hook.PAPIHook;
|
||||||
import dev.loki.loparkour.mode.DefaultMode;
|
import dev.loki.loparkour.mode.DefaultMode;
|
||||||
|
import dev.loki.loparkour.mode.ElytraMode;
|
||||||
import dev.loki.loparkour.mode.GravityShiftMode;
|
import dev.loki.loparkour.mode.GravityShiftMode;
|
||||||
import dev.loki.loparkour.mode.HardcoreMode;
|
import dev.loki.loparkour.mode.HardcoreMode;
|
||||||
import dev.loki.loparkour.mode.Modes;
|
import dev.loki.loparkour.mode.Modes;
|
||||||
|
|
@ -106,6 +107,7 @@ public final class LoParkour extends ViPlugin {
|
||||||
Registry.register(new SpeedrunMode());
|
Registry.register(new SpeedrunMode());
|
||||||
Registry.register(new GravityShiftMode());
|
Registry.register(new GravityShiftMode());
|
||||||
Registry.register(new HardcoreMode());
|
Registry.register(new HardcoreMode());
|
||||||
|
Registry.register(new ElytraMode());
|
||||||
|
|
||||||
Modes.init();
|
Modes.init();
|
||||||
Menu.init(this);
|
Menu.init(this);
|
||||||
|
|
|
||||||
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 SpeedrunMode SPEEDRUN;
|
||||||
public static GravityShiftMode GRAVITY_SHIFT;
|
public static GravityShiftMode GRAVITY_SHIFT;
|
||||||
public static HardcoreMode HARDCORE;
|
public static HardcoreMode HARDCORE;
|
||||||
|
public static ElytraMode ELYTRA;
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
DEFAULT = (DefaultMode) Registry.getMode("default");
|
DEFAULT = (DefaultMode) Registry.getMode("default");
|
||||||
|
|
@ -16,5 +17,6 @@ public class Modes {
|
||||||
SPEEDRUN = (SpeedrunMode) Registry.getMode("speedrun");
|
SPEEDRUN = (SpeedrunMode) Registry.getMode("speedrun");
|
||||||
GRAVITY_SHIFT = (GravityShiftMode) Registry.getMode("gravity-shift");
|
GRAVITY_SHIFT = (GravityShiftMode) Registry.getMode("gravity-shift");
|
||||||
HARDCORE = (HardcoreMode) Registry.getMode("hardcore");
|
HARDCORE = (HardcoreMode) Registry.getMode("hardcore");
|
||||||
|
ELYTRA = (ElytraMode) Registry.getMode("elytra");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -343,6 +343,22 @@ modes:
|
||||||
# Reset all rewards on fall
|
# Reset all rewards on fall
|
||||||
reset-rewards: true
|
reset-rewards: true
|
||||||
|
|
||||||
|
# -= Elytra mode =-
|
||||||
|
elytra:
|
||||||
|
# Enable elytra mode
|
||||||
|
enabled: true
|
||||||
|
# Distance between rings
|
||||||
|
ring-distance-min: 20
|
||||||
|
ring-distance-max: 40
|
||||||
|
# Ring size (radius)
|
||||||
|
ring-size: 5
|
||||||
|
# Firework boost power
|
||||||
|
boost-power: 1.5
|
||||||
|
# Firework cooldown in seconds
|
||||||
|
firework-cooldown: 3
|
||||||
|
# Starting fireworks amount
|
||||||
|
starting-fireworks: 64
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# -= Scoring options =-
|
# -= Scoring options =-
|
||||||
|
|
|
||||||
|
|
@ -258,3 +258,8 @@ other:
|
||||||
material: "elytra"
|
material: "elytra"
|
||||||
name: "�D4FF<bold>Flying"
|
name: "�D4FF<bold>Flying"
|
||||||
lore: "&#A0A0A0Parkour with elytra!"
|
lore: "&#A0A0A0Parkour with elytra!"
|
||||||
|
|
||||||
|
modes:
|
||||||
|
elytra:
|
||||||
|
name: "�D4FF<bold>Elytra"
|
||||||
|
description: "&#A0A0A0Fly through rings!||&#A0A0A0Use fireworks to boost"
|
||||||
|
|
|
||||||
|
|
@ -257,3 +257,8 @@ other:
|
||||||
material: "elytra"
|
material: "elytra"
|
||||||
name: "�D4FF<bold>Полёт"
|
name: "�D4FF<bold>Полёт"
|
||||||
lore: "&#A0A0A0Паркур с элитрами!"
|
lore: "&#A0A0A0Паркур с элитрами!"
|
||||||
|
|
||||||
|
modes:
|
||||||
|
elytra:
|
||||||
|
name: "�D4FF<bold>Элитры"
|
||||||
|
description: "&#A0A0A0Летайте через кольца!||&#A0A0A0Используйте фейерверки для ускорения"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue