DefendLützerath
A minigame based on a true story
It has many unique features and can be customized in lots of different ways: ingame, in configs or even by coding your own parts!
Take a look at out documentation for installation guide and consider joining my Discord (german) if you have any further questions, or just ask them below! I will help if i can!
About DefendLützerath
DefendLützerath is a minecraft-minigame based on true events which happened in germany 2022 & 2023. Some day i was bored and wanted to make new, so i started making this minigame.
Commands
- /dl - Main Command for the plugin
- /dl edit - Edit an existing arena
- /dl create - Create a new arena
- /dl lang - Change the language
- /dl game - Manage a running game
- /dl debug - Debug command for development
- /dl assets Manage assets for an arena
⚠ Dependencies ⚠
This plugin can be used on any server and does now have any known incompatibilities. However to run this plugin you need to have FastAsyncWorldedit installed. It is also compatible MultiverseCore.
Config
The plugin creates 2 main config-files: One for the plugin config and the other one where arena data is stored. Inside the "lang" folder are more files for the translations.
default config
# =====================================================================================================
# _____ __ _ _ _ _ _
# | __ \ / _| | | | / /| | | | | |
# | | | | ___| |_ ___ _ __ __| | | _ _| |_ _______ _ __ __ _| |_| |__
# | | | |/ _ \ _/ _ \ '_ \ / _` | | | | | | __|_ / _ \ '__/ _` | __| '_ \
# | |__| | __/ || __/ | | | (_| | |___| |_| | |_ / / __/ | | (_| | |_| | | |
# |_____/ \___|_| \___|_| |_|\__,_|______\__,_|\__/___\___|_| \__,_|\__|_| |_|
#
# =====================================================================================================
# © Dwarslooper 2023
# =====================================================================================================
# The language the plugin, default "en_us". Can be configured in-game as well.
language: de_de
# Minimum amount of spawns that have to be set to register an arena
min_enemy_spawns: 10
# Game-Difficulty. This feature is experimental and may cause bugs when modifying!
difficulty: 4
# Ticks between specific actions to prevent lag
ratelimit: 40
# If the player(s) should be notified when a protester dies
notify-death: false
# If short-commands like /start, /join <arena> or /leave should be enabled
short-commands: false
# If the players inventory should be saved. Useful when having items in your inventory
inventory-manager: true
# Commands which should be blocked ingame (without "/"); leave empty to disable
blocked-commands:
- ec
- enderchest
# How many points to add to the balance when killing an enemy
points-on-kill: 2
# How many points to lose when a protester dies
points-on-death: 4
# If picking up mud should be enabled
pickup-mud: true
# How many points assets should generate (set to 0 to disable)
points-from-assets: 1
# The delay in which assets should generate points in ticks (points have to be greater than 0)
asset-generate-points-delay: 160
# Delay in which enemies should spawn (in ticks!)
spawn-delay: 80
# ================================================
# Used by the plugin internally. Do not modify!
# ================================================
has-init: false
version: 8
# That's it! You've reached the end! But.. Where's the dragon?
example arena file
arenas:
luetzi:
id: luetzi
name: '''§c§lLuetzi'''
isfinished: true
assets:
treehouse:
id: treehouse
name: Treehouse
file: treehouse1.schem
cost: 30
location:
==: org.bukkit.Location
world: world
x: -544.4577684784463
y: 116.0
z: 455.4672715416385
pitch: -0.30034935
yaw: -56.118652
ignoreair: false
frontbarrier:
id: frontbarrier
name: Brandbarriere
file: barrier5.schem
cost: 41
location:
==: org.bukkit.Location
world: world
x: -550.4193944364503
y: 116.0
z: 432.4292367045594
pitch: 90.0
yaw: -154.96768
ignoreair: false
smallbarrier:
id: smallbarrier
name: Feuerbarriere
file: barrier4.schem
cost: 10
location:
==: org.bukkit.Location
world: world
x: -544.4729272755648
y: 116.0
z: 529.6612069986382
pitch: 55.800106
yaw: -5.1205444
ignoreair: false
signs:
- ==: org.bukkit.Location
world: lol
x: 129.0
y: 64.0
z: -57.0
pitch: 0.0
yaw: 0.0
- ==: org.bukkit.Location
world: world
x: -752.0
y: 132.0
z: 137.0
pitch: 0.0
yaw: 0.0
- ==: org.bukkit.Location
world: world
x: 94.0
y: 85.0
z: 61.0
pitch: 0.0
yaw: 0.0
- ==: org.bukkit.Location
world: world
x: -782.0
y: 131.0
z: 443.0
pitch: 0.0
yaw: 0.0
- ==: org.bukkit.Location
world: world
x: -546.0
y: 114.0
z: 395.0
pitch: 0.0
yaw: 0.0
status: 0
center:
==: org.bukkit.Location
world: world
x: -549.4382898088267
y: 116.0
z: 420.4892420672443
pitch: -1.4996707
yaw: -0.7746582
spawns:
- ==: org.bukkit.Location
world: world
x: -568.4180708900261
y: 116.0
z: 428.66656336795467
pitch: 13.650265
yaw: 31.947683
- ==: org.bukkit.Location
world: world
x: -575.3882121174585
y: 116.0
z: 471.21587760161333
pitch: 17.70028
yaw: -76.50238
- ==: org.bukkit.Location
world: world
x: -568.3898707696181
y: 117.0
z: 514.0536217773682
pitch: 11.700293
yaw: -68.70241
- ==: org.bukkit.Location
world: world
x: -548.4258699549844
y: 116.0
z: 576.7393530921174
pitch: 16.200287
yaw: -82.20242
- ==: org.bukkit.Location
world: world
x: -521.972086904113
y: 117.0
z: 487.93211980196315
pitch: 4.0503006
yaw: -124.95223
- ==: org.bukkit.Location
world: world
x: -536.1700286668336
y: 117.0
z: 471.3450436331918
pitch: 4.950537
yaw: 133.19684
- ==: org.bukkit.Location
world: world
x: -560.7126628340282
y: 116.0
z: 421.8546409102836
pitch: 0.45054305
yaw: -65.70247
- ==: org.bukkit.Location
world: world
x: -574.7040278549426
y: 116.0
z: 435.2174005303472
pitch: 14.550531
yaw: 43.34753
- ==: org.bukkit.Location
world: world
x: -533.8639264290802
y: 116.0
z: 423.2572814119909
pitch: 0.30068368
yaw: 140.69826
- ==: org.bukkit.Location
world: world
x: -558.2731270686152
y: 116.0
z: 431.5572706003032
pitch: 4.8006935
yaw: 74.54809
[/LEFT]
en_us.yml
activist.monk: Dark Monk
activist.aggressive: The Aggressive
activist.protester: Protester
activist.chemist: Chemist
enemy.rweworker: RWE Worker
enemy.police: Policeman
gui.main: Main Menu
gui.characters: §2Charakters
gui.shop: §2Shop
gui.skills: §2Skills
gui.settings: §2Settings
gui.editarena: Edit Arena
gui.close: §cClose
gui.back: §cBack
gui.description.characters: §aGet more Protesters
gui.description.skills: §aLearn new Skills
gui.description.shop: §aBuy special Items
gui.description.settings: §aConfigure the game
gui.confirm: Aktion bestätigen
gui.action.confirm: §a§lConfirm
gui.action.cancel: §c§lCancel
mapsetting.center.title: §eCenter
mapsetting.center.desc: §aWhere the map is loaded from
mapsetting.schem.title: §eSchematic
mapsetting.schem.desc: §aMap-Schematic File
mapsetting.schem.expl: '§eThe schematic file has to be located in the folder of the arena and has to be named "arena.schem".'
mapsetting.spawn.title: §eAdd spawn
mapsetting.spawn.desc: §aManage spawnpoint for enemys
mapsetting.spawn.right: '§e§o(Add: Right-Click)'
mapsetting.spawn.left: '§e§o(Delete all: Left-Click)'
mapsetting.delete.title: §4Delete
mapsetting.delete.desc: §aPermanently delete this arena
mapsetting.assets.title: §eAssets
mapsetting.assets.desc: §aEdit assets for this arena
mapsetting.assets.expl: '§eTo edit the assets, use §6/dl assets %s%§e!'
mapsetting.status.set: '§a✔ Set'
mapsetting.status.unset: '§c❌ Unset'
mapsetting.status.numset: '§a✔ (%s% / %s%)'
mapsetting.status.numunset: '§c❌ (%s% / %s%)'
mapsetting.helper.change: ' §e§o(Click to change)'
mapsetting.signs.title: §eSigns
mapsetting.signs.desc: §aSigns for joining a game
mapsetting.signs.right: '§e§o(Add: Right-Click)'
mapsetting.signs.left: '§e§o(Delete: Left-Click)'
mapsetting.signs.added: '§aSign added!'
mapsetting.signs.removed: '§aSign removed!'
mapsetting.signs.not_existing: '§cThis is not a sign of this arena!'
mapsetting.signs.already_existing: '§cThis sign is already registered!'
mapsetting.signs.look_at: '§cYou have to look at a sign!'
mapsetting.signs.must_be_registered: '§cThe arena has to be registered to edit the signs!'
mapsetting.finish.title: §eRegister arena
mapsetting.finish.desc0: §aIf everything is ready, you
mapsetting.finish.desc1: §acan register the arena here
mapsetting.finish.task0: §cYou have one or more features not configured!
mapsetting.finish.task1: §c- Center point
mapsetting.finish.task2: §c- Schematic
mapsetting.finish.task3: §c- %s%+ spawns
mapsetting.finish.success: §aArena §6%s% §aregistered successfully!
mapsetting.finish.already_done: §cThe arena §6%s% §cis already registered!
game.create.already_existing: §cThere already is a running game in §6%s%§c!
game.create.success: §aThe game in arena §6%s% §cwas started successfully!
game.reset.success: §aThe game in arena §6%s% §cwas ended successfully!
game.spawn.error: §cYou have to specify a valid asset!
game.spawn.not_existing: §cAn asset with name §6%s% §cdoes not exist!
game.setbal.must_be_integer: §cIngame points have to be a number!
game.start.error: §cThere is currently no game running in §6%s%§c!
game.kick.specify_player: §cYou have to specify a game!
game.kick.no_such_player: §cThe player §6%s% §cis not in this game!
game.kick.success: §cThe player §6%s% §cwas kicked from the game!
game.kick.message: §cYou have been kicked from §6%s%§c!
game.message.already_in_game: §cYou are already in this game!
game.message.already_started: §cThis game has already started!
game.message.not_in_game: §cYou are not in a game!
game.message.joined: §aYou have joined %s%§a!
game.message.left: §aYou left %s%§a!
game.message.ratelimited: §cPlease wait a bit!
game.status.inactive: §7§lINACTIVE
game.status.waiting: §e§lSTARTING
game.status.running: §a§lRUNNING
game.status.resetting: §c§lRESETTING
game.status.unknown: §d§lUNKNOWN
ingame.blocked_command: "§cThis command can't be used ingame"
ingame.protester_death: "§eA protester has died!"
ingame.asset.buy: §e§o(Click to buy §8§o| §6§o%s%◎§e§o)
ingame.asset.too_expensive: §cYou dont have enough ◎ for §6%s%§c!
ingame.asset.already_bought: §cYou already bought §6%s%§c!
ingame.lost.title: "§c§lVILLAGE EVACUATED!"
ingame.lost.subtitle: "§eVillage saved for §6%s%d§e, §6%s%h§e, §6%s%m§e, §6%s%s§e!"
ingame.lost.chat: "§cOh no! The village has been evacuated! But not bad! §4The arena will be resetted in §620 §4seconds!"
ingame.welcome.chat: "§aWelcome to the village §6%s%§a! Help the activist protect the village from RWE, through building assets, leveling skills and getting more activists!"
ingame.welcome.title: §a§lWelcome!
ingame.welcome.subtitle: §eNice to see you, §6%s%§e!
ingame.talk.water: §c§oHey!
ingame.talk.enemy:
- I have no time to talk
- Just get out.
- I have work to do
- The village will be evacuated
ingame.talk.fellow:
- Do everything you can
- We have to stop them!
- F*ck them
- The village stays!
- EVACUATION? Not with us!
ingame.gui.shop.tnt.title: §cTNT
ingame.gui.shop.molotow.title: §cMolotow
ingame.gui.shop.water.title: §cWater
ingame.gui.shop.buff.title: §cBuff.
ingame.gui.shop.sword.title: §cSword
ingame.gui.shop.mud.title: §cMud
ingame.gui.skills.pe.title: §cMaterial Arts
ingame.gui.skills.pe.desc: §aDo more damage against enemys
ingame.gui.skills.points.title: §cPoints
ingame.gui.skills.points.desc: §aGet more points for specific actions
ingame.gui.skills.speed.title: §cSpeed
ingame.gui.skills.speed.desc: §aIncrease your speed
ingame.gui.skills.throw.title: §cThrowing
ingame.gui.skills.throw.desc: §aThrow things further
ingame.hud.start: §a§lStart game
ingame.hud.leave: §c§lLeave game
confirm.delete_arena.prompt: §cDelete arena §6§o%s% §cpermanently?
confirm.delete_arena.success: §aArena §6%s% §ahas been deleted successfully!
confirm.delete_spawns.prompt: §cDelete all spawns in §6%s% §c?
confirm.delete_spawns.success: §aAll spawns deleted in §6%s%§a!
text.cost: '§aCost§8: §6%s%◎'
text.skills: '§aSkills§8: §e§o(Right-Click)'
text.no_permission: '§cYou are lacking the permission node: §6%s%§c!'
command.short.only_ingame: §cYou have to play to execute this command!
command.lang.error: §cYou have to specify a language!
command.lang.success: §aThe language has been set to §6%s%§a!
command.reload.success: §aConfig files reloaded! You might have to restart the server to apply all changes!
command.translate.error: §cYou have to specify a text to be translated!
command.create.error: §cYou have to specify a valid arena name!
command.create.already_exists: §cAn arena with this name already exists!
command.create.banned_chars: §cThe name of your arena must not only contain special characters!
command.create.success: §aYour arena §6%s% §ahas been created successfully! Edit it with §e/dl edit §6%s%§a!
command.edit.error: §cYou have to specify a valid arena!
command.edit.not_existing: §cThe arena §6%s% §cdoes not exist!
command.asset.error: §cYou have to specify an arena as well as an action!
command.asset.not_existing: §cThe asset §6%s% §cdoes not exist!
command.game.usage: '§cUse: §6%s%'
setup.asset.exit: §aAsset setup cancelled!
setup.asset.invalid_params: §cYou have to specify a valid parameter! (§6%s%§c)
setup.asset.prompt: §cCreate new asset?
setup.asset.delete.prompt: §cDelete asset §6%s% §cpermanently?
setup.asset.delete.success: §cAsset §6%s% §cdeleted successfully!
setup.asset.success: §aA new asset with ID §6%s% §ahas been created successfully!
setup.asset.step0: §aEnter the ID of the asset in chat. §e(EXIT to cancel)
setup.asset.step1: §aEnter the display name of the asset in chat. §e(EXIT to cancel)
setup.asset.step2: §aEnter the file name of the schematic in chat. §e(EXIT to cancel)
setup.asset.step3: §aEnter the price of the asset in chat §e(EXIT to cancel)
setup.asset.step4: '§aBitte stelle dich an den Punkt von wo aus die Schematic platziert werden soll und wo auch im Spiel das Asset angezeigt wird und gebe §6confirm §aein. §e(EXIT to cancel)'
system.exception: §cOoops.. An unknown error has occured! Please contact the developer and open an issue on github containing the exception printed in the console!
I found a bug or want to suggest something!
If you have a suggestion on how to improve the plugin, ideas for new features or found a bug, create an issue on GitHub.
Can i add my language?
If you want to create a new language, create a new file inside the "lang" folder of the plugin with the name of your country code. Now you can use the command /dl lang to select your language. If you want to contribute to the plugin you can submit your language on GitHub by creating an issue. You will get credited if you do.
We're open-source! This project's code is available on Github!