Skip to content

Commit b9bc7f4

Browse files
committed
add "Examples" page
1 parent 1a93f90 commit b9bc7f4

4 files changed

Lines changed: 344 additions & 3 deletions

File tree

_includes/head.html

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,18 @@
2020

2121
aside .simplebar-content-wrapper {
2222

23-
/* Currently, the first entry is 'Home' and last one is 'Reference' */
24-
li:first-child, li:last-child {
23+
li:first-child, li:nth-last-child(2) {
2524
margin-top: 0.75em;
2625
padding-top: 0.75em;
26+
border-top: 1px solid color-mix(in srgb, gray 12.5%, transparent);
27+
}
28+
29+
/* Currently, the first entry is 'Home' and last one is 'Reference' */
30+
li:first-child, li:last-child {
2731
margin-bottom: 0.75em;
2832
padding-bottom: 0.75em;
2933
border-bottom: 1px solid color-mix(in srgb, gray 12.5%, transparent);
30-
border-top: 1px solid color-mix(in srgb, gray 12.5%, transparent);
34+
3135
}
3236

3337
}

examples.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
icon: play
3+
order: 94
4+
---
5+
# Examples
6+
In this section you can find some example scripts written with LuaLink. Want to see your script here? **[Submit a PR](https://github.com/LuaLink/docs/pulls)** and we'll add it to the list.
7+
8+
<br />
9+
10+
## :icon-flame: Ragemode
11+
Basic **One In The Chamber** (OIC) like gamemode, inspired by [Freggy's version](https://github.com/freggy/ragemode-lua) for LuaLink v1.
12+
13+
{.compact}
14+
| Notes |
15+
| ----- |
16+
| 1. This script assumes that you are using the map **hijacked**. This map can be found in [Freggy's original repository](https://github.com/freggy/ragemode-lua). |
17+
18+
[!file](examples/ragemode.lua)
19+
==- :icon-code: &ensp; Code
20+
:::code source="examples/ragemode.lua":::
21+
==-
22+
23+
<br />
24+
25+
## :icon-tools: Gamemode Commands
26+
A basic script that provides shorthand commands for changing gamemodes.
27+
28+
{.compact}
29+
| Command | Description | Permission |
30+
| ---------------- | -------------------------- | ---------------------------------------------- |
31+
| `/gma [player]` | Set game mode to Adventure | `minecraft.command.gamemode.adventure[.other]` |
32+
| `/gmsp [player]` | Set game mode to Spectator | `minecraft.command.gamemode.spectator[.other]` |
33+
| `/gms [player]` | Set game mode to Survival | `minecraft.command.gamemode.survival[.other]` |
34+
| `/gmc [player]` | Set game mode to Creative | `minecraft.command.gamemode.creative[.other]` |
35+
36+
{.compact}
37+
| Notes |
38+
| ----- |
39+
| 1. The `[player]` argument is optional. If omitted, the command affects the sender. |
40+
| 2. To change another player's gamemode, the sender must have the base permission plus `.other`. |
41+
| 3. You can use `@a` as the player argument to affect all players. This also requires the `.other` permission extension. |
42+
43+
[!file](examples/gamemode_commands.lua)
44+
45+
==- :icon-code: &ensp; Code
46+
:::code source="examples/gamemode_commands.lua":::
47+
==-

examples/gamemode_commands.lua

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
local GameMode = java.import "org.bukkit.GameMode"
2+
3+
local function setGameMode(player, mode)
4+
5+
if player == "@a" then
6+
for _, onlinePlayer in ipairs(totable(server:getOnlinePlayers())) do
7+
onlinePlayer:setGameMode(mode)
8+
end
9+
else
10+
if type(player) == "string" then
11+
player = server:getPlayer(player)
12+
end
13+
if player == nil then
14+
return "<red>Player not found"
15+
end
16+
player:setGameMode(mode)
17+
end
18+
19+
return nil -- Success, no error message
20+
end
21+
22+
local function sendMessage(sender, target, mode)
23+
if target == "@a" then
24+
sender:sendRichMessage("<green>Game mode set to <yellow>" .. mode .. " <green>for all players")
25+
return
26+
end
27+
28+
if sender:getName() == target then
29+
sender:sendRichMessage("<green>Game mode set to <yellow>" .. mode)
30+
else
31+
sender:sendRichMessage("<green>Game mode set to <yellow>" .. mode .. " <green>for <yellow>" .. target)
32+
end
33+
end
34+
35+
36+
-- GMC
37+
script:registerCommand(function(sender, args)
38+
local playerName;
39+
if #args > 0 then
40+
playerName = args[1]
41+
end
42+
if playerName ~= nil and playerName ~= sender:getName() and not sender:hasPermission("minecraft.command.gamemode.creative.other") then
43+
sender:sendRichMessage("<red>You do not have permission to change the gamemode of other players")
44+
return
45+
end
46+
local result = setGameMode(playerName or sender, GameMode.CREATIVE)
47+
if result then
48+
sender:sendRichMessage(result)
49+
else
50+
sendMessage(sender, playerName or sender:getName(), "Creative")
51+
end
52+
end, {
53+
name = "gmc",
54+
description = "Set game mode to Creative",
55+
usage = "/gmc [player]",
56+
permission = "minecraft.command.gamemode.creative"
57+
})
58+
59+
-- GMS
60+
script:registerCommand(function(sender, args)
61+
local playerName;
62+
if #args > 0 then
63+
playerName = args[1]
64+
end
65+
if playerName ~= nil and playerName ~= sender:getName() and not sender:hasPermission("minecraft.command.gamemode.survival.other") then
66+
sender:sendRichMessage("<red>You do not have permission to change the gamemode of other players")
67+
return
68+
end
69+
local result = setGameMode(playerName or sender, GameMode.SURVIVAL)
70+
if result then
71+
sender:sendRichMessage(result)
72+
else
73+
sendMessage(sender, playerName or sender:getName(), "Survival")
74+
end
75+
end, {
76+
name = "gms",
77+
description = "Set game mode to Survival",
78+
usage = "/gms [player]",
79+
permission = "minecraft.command.gamemode.survival"
80+
})
81+
82+
-- GMSP
83+
84+
script:registerCommand(function(sender, args)
85+
local playerName;
86+
if #args > 0 then
87+
playerName = args[1]
88+
end
89+
90+
if playerName ~= nil and playerName ~= sender:getName() and not sender:hasPermission("minecraft.command.gamemode.spectator.other") then
91+
sender:sendRichMessage("<red>You do not have permission to change the gamemode of other players")
92+
return
93+
end
94+
local result = setGameMode(playerName or sender, GameMode.SPECTATOR)
95+
if result then
96+
sender:sendRichMessage(result)
97+
else
98+
sendMessage(sender, playerName or sender:getName(), "Spectator")
99+
end
100+
end, {
101+
name = "gmsp",
102+
description = "Set game mode to Spectator",
103+
usage = "/gmsp [player]",
104+
permission = "minecraft.command.gamemode.spectator"
105+
})
106+
107+
-- GMA
108+
109+
script:registerCommand(function(sender, args)
110+
local playerName;
111+
if #args > 0 then
112+
playerName = args[1]
113+
end
114+
115+
if playerName ~= nil and playerName ~= sender:getName() and not sender:hasPermission("minecraft.command.gamemode.adventure.other") then
116+
sender:sendRichMessage("<red>You do not have permission to change the gamemode of other players")
117+
return
118+
end
119+
local result = setGameMode(playerName or sender, GameMode.ADVENTURE)
120+
if result then
121+
sender:sendRichMessage(result)
122+
else
123+
sendMessage(sender, playerName or sender:getName(), "Adventure")
124+
end
125+
end, {
126+
name = "gma",
127+
description = "Set game mode to Adventure",
128+
usage = "/gma [player]",
129+
permission = "minecraft.command.gamemode.adventure"
130+
})

examples/ragemode.lua

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
local ItemStack = java.import "org.bukkit.inventory.ItemStack"
2+
local Material = java.import "org.bukkit.Material"
3+
local Location = java.import "org.bukkit.Location"
4+
local GameRule = java.import "org.bukkit.GameRule"
5+
local Difficulty = java.import "org.bukkit.Difficulty"
6+
local Bukkit = java.import "org.bukkit.Bukkit"
7+
local Player = java.import "org.bukkit.entity.Player"
8+
local EntityDamageEvent = java.import "org.bukkit.event.entity.EntityDamageEvent"
9+
local MiniMessage = java.import "net.kyori.adventure.text.minimessage.MiniMessage":miniMessage()
10+
local TagResolver = java.import "net.kyori.adventure.text.minimessage.tag.resolver.TagResolver"
11+
local Placeholder = java.import "net.kyori.adventure.text.minimessage.tag.resolver.Placeholder"
12+
local Sound = java.import "org.bukkit.Sound"
13+
local PotionEffect = java.import "org.bukkit.potion.PotionEffect"
14+
local PotionEffectType = java.import "org.bukkit.potion.PotionEffectType"
15+
16+
local lastDamager = {}
17+
18+
local MESSAGES = {
19+
["player_join"] = "<green>Welcome to </green><yellow>RageMode</yellow>",
20+
["player_kill"] = "<green><killer> <red>killed <victim>",
21+
}
22+
23+
local world = Bukkit:getWorld("world")
24+
local spawns = {
25+
Location(world, -496, 31, 149),
26+
Location(world, -496, 31, 165),
27+
Location(world, -487, 31, 151),
28+
Location(world, -487, 31, 162),
29+
Location(world, -461, 33, 166),
30+
Location(world, -464, 33, 147),
31+
Location(world, -434, 35, 140),
32+
Location(world, -394, 36, 153),
33+
Location(world, -394, 35, 160),
34+
Location(world, -404, 35, 152),
35+
Location(world, -404, 35, 159),
36+
Location(world, -414, 35, 155),
37+
Location(world, -442, 35, 156),
38+
Location(world, -442, 37, 171),
39+
Location(world, -469, 32, 160),
40+
}
41+
42+
local function getRandomSpawn()
43+
return spawns[math.random(#spawns)]
44+
end
45+
46+
local function printf(str, ...)
47+
return print(str:format(...))
48+
end
49+
50+
local function applySwiftness(player)
51+
local swiftness = PotionEffect(PotionEffectType.SPEED, 999999, 1, false, false, true)
52+
player:addPotionEffect(swiftness)
53+
end
54+
55+
local function giveKit(player)
56+
local inventory = player:getInventory()
57+
inventory:clear()
58+
59+
local bow = ItemStack:of(Material.BOW)
60+
local meta = bow:getItemMeta()
61+
meta:setUnbreakable(true)
62+
bow:setItemMeta(meta)
63+
64+
inventory:setItemInMainHand(bow)
65+
inventory:setItem(1, ItemStack:of(Material.ARROW, 1))
66+
67+
applySwiftness(player)
68+
end
69+
70+
local function giveArrow(player)
71+
local inventory = player:getInventory()
72+
inventory:setItem(1, ItemStack:of(Material.ARROW, 1))
73+
end
74+
75+
local function broadcastKill(killer, victim)
76+
local tags = TagResolver:builder()
77+
:resolver(Placeholder:unparsed("killer", killer:getName()))
78+
:resolver(Placeholder:unparsed("victim", victim:getName()))
79+
:build()
80+
local message = MESSAGES["player_kill"]
81+
82+
Bukkit:getServer():broadcast(MiniMessage:deserialize(message, tags))
83+
world:playSound(victim:getLocation(), Sound.ENTITY_FIREWORK_ROCKET_BLAST, 1.0, 1.0)
84+
end
85+
86+
script:onLoad(function(event)
87+
world:setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false)
88+
world:setGameRule(GameRule.DO_MOB_SPAWNING, false)
89+
world:setGameRule(GameRule.DO_IMMEDIATE_RESPAWN, true)
90+
world:setGameRule(GameRule.DO_WEATHER_CYCLE, false)
91+
world:setDifficulty(Difficulty.EASY)
92+
world:setTime(1000)
93+
94+
for _, player in ipairs(Bukkit:getOnlinePlayers()) do
95+
applySwiftness(player)
96+
end
97+
end)
98+
99+
script:registerListener("org.bukkit.event.entity.EntityDamageByEntityEvent", function(event)
100+
local damaged = event:getEntity()
101+
local damager = event:getDamager()
102+
103+
if Player.class:isInstance(damaged) and Player.class:isInstance(damager) then
104+
lastDamager[damaged:getUniqueId():toString()] = damager
105+
printf("Damage: %s damaged by %s", damaged:getName(), damager:getName())
106+
end
107+
end)
108+
109+
script:registerListener("org.bukkit.event.entity.PlayerDeathEvent", function(event)
110+
event:setDeathMessage("")
111+
event:setKeepInventory(true)
112+
event:getDrops():clear()
113+
114+
local victim = event:getEntity()
115+
local victimId = victim:getUniqueId():toString()
116+
local killer = lastDamager[victimId]
117+
118+
if killer then
119+
printf("Kill: %s killed %s", killer:getName(), victim:getName())
120+
giveArrow(killer)
121+
broadcastKill(killer, victim)
122+
lastDamager[victimId] = nil
123+
end
124+
end)
125+
126+
script:registerListener("org.bukkit.event.entity.ProjectileHitEvent", function(event)
127+
local projectile = event:getEntity()
128+
local hitEntity = event:getHitEntity()
129+
local shooter = projectile:getShooter()
130+
131+
if projectile:getType():name() == "ARROW" and
132+
hitEntity and Player.class:isInstance(hitEntity) and
133+
shooter and Player.class:isInstance(shooter) then
134+
lastDamager[hitEntity:getUniqueId():toString()] = shooter
135+
hitEntity:damage(100.0, shooter)
136+
end
137+
138+
projectile:remove()
139+
end)
140+
141+
script:registerListener("org.bukkit.event.entity.EntityShootBowEvent", function(event)
142+
event:setConsumeItem(false)
143+
end)
144+
145+
script:registerListener("org.bukkit.event.player.PlayerDropItemEvent", function(event)
146+
event:setCancelled(true)
147+
end)
148+
149+
script:registerListener("org.bukkit.event.player.PlayerRespawnEvent", function(event)
150+
local player = event:getPlayer()
151+
event:setRespawnLocation(getRandomSpawn())
152+
giveKit(player)
153+
end)
154+
155+
script:registerListener("org.bukkit.event.player.PlayerJoinEvent", function(event)
156+
local player = event:getPlayer()
157+
giveKit(player)
158+
player:teleport(getRandomSpawn())
159+
player:sendMessage(MiniMessage:deserialize(MESSAGES["player_join"]))
160+
end)

0 commit comments

Comments
 (0)