summaryrefslogtreecommitdiffstats
path: root/MCServer
diff options
context:
space:
mode:
Diffstat (limited to 'MCServer')
-rw-r--r--MCServer/Plugins/APIDump/APIDesc.lua2
-rw-r--r--MCServer/Plugins/APIDump/Hooks/OnPlayerPlacedBlock.lua10
-rw-r--r--MCServer/Plugins/APIDump/Hooks/OnPlayerPlacingBlock.lua10
-rw-r--r--MCServer/Plugins/APIDump/Hooks/OnServerPing.lua5
-rw-r--r--MCServer/monsters.ini195
-rw-r--r--MCServer/webadmin/template.lua2
6 files changed, 125 insertions, 99 deletions
diff --git a/MCServer/Plugins/APIDump/APIDesc.lua b/MCServer/Plugins/APIDump/APIDesc.lua
index ba3763724..b2c7108e9 100644
--- a/MCServer/Plugins/APIDump/APIDesc.lua
+++ b/MCServer/Plugins/APIDump/APIDesc.lua
@@ -1840,7 +1840,9 @@ a_Player:OpenWindow(Window);
MoveToWorld = { Params = "WorldName", Return = "bool", Return = "Moves the player to the specified world. Returns true if successful." },
OpenWindow = { Params = "{{cWindow|Window}}", Return = "", Notes = "Opens the specified UI window for the player." },
PermissionMatches = { Params = "Permission, Template", Return = "bool", Notes = "(STATIC) Returns true if the specified permission matches the specified template. The template may contain wildcards." },
+ PlaceBlock = { Params = "BlockX, BlockY, BlockZ, BlockType, BlockMeta", Return = "bool", Notes = "Places a block while impersonating the player. The {{OnPlayerPlacingBlock|HOOK_PLAYER_PLACING_BLOCK}} hook is called before the placement, and if it succeeds, the block is placed and the {{OnPlayerPlacedBlock|HOOK_PLAYER_PLACED_BLOCK}} hook is called. Returns true iff the block is successfully placed. Assumes that the block is in a currently loaded chunk." },
Respawn = { Params = "", Return = "", Notes = "Restores the health, extinguishes fire, makes visible and sends the Respawn packet." },
+ SendBlocksAround = { Params = "BlockX, BlockY, BlockZ, [Range]", Return = "", Notes = "Sends all the world's blocks in Range from the specified coords to the player, as a BlockChange packet. Range defaults to 1 (only one block sent)." },
SendMessage = { Params = "Message", Return = "", Notes = "Sends the specified message to the player." },
SendMessageFailure = { Params = "Message", Return = "", Notes = "Prepends Rose [INFO] / colours entire text (depending on ShouldUseChatPrefixes()) and sends message to player. For a command that failed to run because of insufficient permissions, etc." },
SendMessageFatal = { Params = "Message", Return = "", Notes = "Prepends Red [FATAL] / colours entire text (depending on ShouldUseChatPrefixes()) and sends message to player. For something serious, such as a plugin crash, etc." },
diff --git a/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacedBlock.lua b/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacedBlock.lua
index 54888a6db..6445a76b4 100644
--- a/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacedBlock.lua
+++ b/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacedBlock.lua
@@ -12,7 +12,11 @@ return
Use the {{cPlayer}}:GetWorld() function to get the world to which the block belongs.</p>
<p>
See also the {{OnPlayerPlacingBlock|HOOK_PLAYER_PLACING_BLOCK}} hook for a similar hook called
- before the placement.
+ before the placement.</p>
+ <p>
+ If the client action results in multiple blocks being placed (such as a bed or a door), each separate
+ block is reported through this hook. All the blocks are already present in the world before the first
+ instance of this hook is called.
]],
Params =
{
@@ -20,10 +24,6 @@ return
{ Name = "BlockX", Type = "number", Notes = "X-coord of the block" },
{ Name = "BlockY", Type = "number", Notes = "Y-coord of the block" },
{ Name = "BlockZ", Type = "number", Notes = "Z-coord of the block" },
- { Name = "BlockFace", Type = "number", Notes = "Face of the existing block upon which the player interacted. One of the BLOCK_FACE_ constants" },
- { Name = "CursorX", Type = "number", Notes = "X-coord of the cursor within the block face (0 .. 15)" },
- { Name = "CursorY", Type = "number", Notes = "Y-coord of the cursor within the block face (0 .. 15)" },
- { Name = "CursorZ", Type = "number", Notes = "Z-coord of the cursor within the block face (0 .. 15)" },
{ Name = "BlockType", Type = "BLOCKTYPE", Notes = "The block type of the block" },
{ Name = "BlockMeta", Type = "NIBBLETYPE", Notes = "The block meta of the block" },
},
diff --git a/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacingBlock.lua b/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacingBlock.lua
index 2a928390b..4241a09aa 100644
--- a/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacingBlock.lua
+++ b/MCServer/Plugins/APIDump/Hooks/OnPlayerPlacingBlock.lua
@@ -15,7 +15,11 @@ return
Use the {{cPlayer}}:GetWorld() function to get the world to which the block belongs.</p>
<p>
See also the {{OnPlayerPlacedBlock|HOOK_PLAYER_PLACED_BLOCK}} hook for a similar hook called after
- the placement.
+ the placement.</p>
+ <p>
+ If the client action results in multiple blocks being placed (such as a bed or a door), each separate
+ block is reported through this hook and only if all of them succeed, all the blocks are placed. If
+ any one of the calls are refused by the plugin, all the blocks are refused and reverted on the client.
]],
Params =
{
@@ -23,10 +27,6 @@ return
{ Name = "BlockX", Type = "number", Notes = "X-coord of the block" },
{ Name = "BlockY", Type = "number", Notes = "Y-coord of the block" },
{ Name = "BlockZ", Type = "number", Notes = "Z-coord of the block" },
- { Name = "BlockFace", Type = "number", Notes = "Face of the existing block upon which the player is interacting. One of the BLOCK_FACE_ constants" },
- { Name = "CursorX", Type = "number", Notes = "X-coord of the cursor within the block face (0 .. 15)" },
- { Name = "CursorY", Type = "number", Notes = "Y-coord of the cursor within the block face (0 .. 15)" },
- { Name = "CursorZ", Type = "number", Notes = "Z-coord of the cursor within the block face (0 .. 15)" },
{ Name = "BlockType", Type = "BLOCKTYPE", Notes = "The block type of the block" },
{ Name = "BlockMeta", Type = "NIBBLETYPE", Notes = "The block meta of the block" },
},
diff --git a/MCServer/Plugins/APIDump/Hooks/OnServerPing.lua b/MCServer/Plugins/APIDump/Hooks/OnServerPing.lua
index 76b6d1517..430465786 100644
--- a/MCServer/Plugins/APIDump/Hooks/OnServerPing.lua
+++ b/MCServer/Plugins/APIDump/Hooks/OnServerPing.lua
@@ -7,7 +7,10 @@ return
Desc = [[
A plugin may implement an OnServerPing() function and register it as a Hook to process pings from
clients in the server server list. It can change the logged in players and player capacity, as well
- as the server description and the favicon, that are displayed to the client in the server list.
+ as the server description and the favicon, that are displayed to the client in the server list.</p>
+ <p>
+ The client handle already has its protocol version assigned to it, so the plugin can check that; however,
+ there's no username associated with the client yet, and no player object.
]],
Params = {
{ Name = "ClientHandle", Type = "{{cClientHandle}}", Notes = "The client handle that pinged the server" },
diff --git a/MCServer/monsters.ini b/MCServer/monsters.ini
index c4bc8c810..af1938e3e 100644
--- a/MCServer/monsters.ini
+++ b/MCServer/monsters.ini
@@ -1,44 +1,52 @@
-[Spider]
+[Bat]
AttackRange=2.0
AttackRate=1
-AttackDamage=2.0
+AttackDamage=0.0
SightDistance=25.0
-MaxHealth=16
+MaxHealth=6
-[Chicken]
+[Blaze]
+AttackRange=15.0
+AttackRate=1
+AttackDamage=6.0
+SightDistance=25.0
+MaxHealth=20
+IsFireproof=1
+
+[CaveSpider]
AttackRange=2.0
AttackRate=1
-AttackDamage=1.0
+AttackDamage=2.0
SightDistance=25.0
-MaxHealth=4
+MaxHealth=12
-[Cow]
+[Chicken]
AttackRange=2.0
AttackRate=1
-AttackDamage=1.0
+AttackDamage=0.0
SightDistance=25.0
-MaxHealth=10
+MaxHealth=4
-[Pig]
+[Cow]
AttackRange=2.0
AttackRate=1
-AttackDamage=1.0
+AttackDamage=0.0
SightDistance=25.0
MaxHealth=10
-[Sheep]
-AttackRange=2.0
+[Creeper]
+AttackRange=3.0
AttackRate=1
-AttackDamage=1.0
+AttackDamage=0.0
SightDistance=25.0
-MaxHealth=8
+MaxHealth=20
-[Squid]
+[EnderDragon]
AttackRange=2.0
AttackRate=1
-AttackDamage=1.0
+AttackDamage=6.0
SightDistance=25.0
-MaxHealth=10
+MaxHealth=200
[Enderman]
AttackRange=2.0
@@ -47,27 +55,6 @@ AttackDamage=4.0
SightDistance=64.0
MaxHealth=40
-[ZombiePigman]
-AttackRange=2.0
-AttackRate=1
-AttackDamage=7.0
-SightDistance=25.0
-MaxHealth=20
-IsFireproof=1
-
-[CaveSpider]
-AttackRange=2.0
-AttackRate=1
-AttackDamage=2.0
-SightDistance=25.0
-MaxHealth=12
-
-[Creeper]
-AttackRange=3.0
-AttackRate=1
-AttackDamage=0.0
-SightDistance=25.0
-MaxHealth=20
[Ghast]
AttackRange=50.0
@@ -77,118 +64,150 @@ SightDistance=50.0
MaxHealth=10
IsFireproof=1
-[Silverfish]
+[Giant]
AttackRange=2.0
AttackRate=1
-AttackDamage=1.0
+AttackDamage=6.0
SightDistance=25.0
-MaxHealth=8
-
-[Skeleton]
-AttackRange=15.0
-AttackRate=1
-SightDistance=40.0
-MaxHealth=20
+MaxHealth=100
-[Slime]
+[Guardian]
AttackRange=2.0
-AttackRate=1
-AttackDamage=4.0
+AttackRate=1
+AttackDamage=9.0
SightDistance=25.0
-MaxHealth=16
+MaxHealth=30
-[Zombie]
+[Horse]
AttackRange=2.0
AttackRate=1
-AttackDamage=4.0
+AttackDamage=6.0
SightDistance=25.0
-MaxHealth=20
+MaxHealth=30
-[Wolf]
+[IronGolem]
AttackRange=2.0
AttackRate=1
-AttackDamage=4.0
+AttackDamage=6.0
SightDistance=25.0
-MaxHealth=20
+MaxHealth=100
-[Blaze]
-AttackRange=15.0
+[MagmaCube]
+AttackRange=2.0
AttackRate=1
AttackDamage=6.0
SightDistance=25.0
-MaxHealth=20
+MaxHealth=16
IsFireproof=1
-[Villager]
+[Mooshroom]
AttackRange=2.0
AttackRate=1
AttackDamage=0.0
SightDistance=25.0
-MaxHealth=20
-IsFireproof=0
+MaxHealth=10
-[Witch]
+[Ocelot]
AttackRange=2.0
AttackRate=1
AttackDamage=0.0
SightDistance=25.0
-MaxHealth=26
-
+MaxHealth=10
-[Ocelot]
+[Pig]
AttackRange=2.0
AttackRate=1
AttackDamage=0.0
SightDistance=25.0
MaxHealth=10
-[Mooshroom]
+[Rabbit]
AttackRange=2.0
AttackRate=1
AttackDamage=0.0
SightDistance=25.0
MaxHealth=10
-[MagmaCube]
+[Sheep]
AttackRange=2.0
AttackRate=1
-AttackDamage=6.0
+AttackDamage=0.0
SightDistance=25.0
-MaxHealth=16
-IsFireproof=1
+MaxHealth=8
-[Horse]
+[Silverfish]
AttackRange=2.0
AttackRate=1
-AttackDamage=6.0
+AttackDamage=1.0
SightDistance=25.0
-MaxHealth=30
+MaxHealth=8
-[EnderDragon]
+[Skeleton]
+AttackRange=15.0
+AttackRate=1
+SightDistance=40.0
+MaxHealth=20
+
+[Slime]
AttackRange=2.0
AttackRate=1
-AttackDamage=6.0
+AttackDamage=4.0
SightDistance=25.0
-MaxHealth=200
+MaxHealth=16
-[Giant]
+[SnowGolem]
AttackRange=2.0
AttackRate=1
-AttackDamage=6.0
+AttackDamage=0.0
SightDistance=25.0
-MaxHealth=100
+MaxHealth=4
-[IronGolem]
+[Spider]
+AttackRange=2.0
+AttackRate=1
+AttackDamage=2.0
+SightDistance=25.0
+MaxHealth=16
+
+[Squid]
AttackRange=2.0
AttackRate=1
-AttackDamage=6.0
+AttackDamage=0.0
SightDistance=25.0
-MaxHealth=100
+MaxHealth=10
-[Bat]
+[Villager]
AttackRange=2.0
-AttackRate=1
+AttackRate=1
AttackDamage=0.0
SightDistance=25.0
-MaxHealth=6
+MaxHealth=20
+[Witch]
+AttackRange=2.0
+AttackRate=1
+AttackDamage=0.0
+SightDistance=25.0
+MaxHealth=26
+
+[Wolf]
+AttackRange=2.0
+AttackRate=1
+AttackDamage=4.0
+SightDistance=25.0
+MaxHealth=20
+
+[Zombie]
+AttackRange=2.0
+AttackRate=1
+AttackDamage=4.0
+SightDistance=25.0
+MaxHealth=20
+
+[ZombiePigman]
+AttackRange=2.0
+AttackRate=1
+AttackDamage=7.0
+SightDistance=25.0
+MaxHealth=20
+IsFireproof=1
diff --git a/MCServer/webadmin/template.lua b/MCServer/webadmin/template.lua
index 4d3934da8..6ea7b69bc 100644
--- a/MCServer/webadmin/template.lua
+++ b/MCServer/webadmin/template.lua
@@ -58,6 +58,7 @@ function ShowPage(WebAdmin, TemplateRequest)
SiteContent = {}
local BaseURL = WebAdmin:GetBaseURL(TemplateRequest.Request.Path)
local Title = "MCServer WebAdmin"
+ local NumPlayers = cRoot:Get():GetServer():GetNumPlayers()
local MemoryUsageKiB = cRoot:GetPhysicalRAMUsage()
local NumChunks = cRoot:Get():GetTotalChunkCount()
local PluginPage = WebAdmin:GetPage(TemplateRequest.Request)
@@ -102,6 +103,7 @@ function ShowPage(WebAdmin, TemplateRequest)
<div class="wrapper">
<ul class="menu top_links">
<li><a>Server Name: <strong>]] .. cRoot:Get():GetServer():GetServerID() .. [[</strong></a></li>
+ <li><a>Players online: <strong>]] .. NumPlayers .. [[</strong></a></li>
<li><a>Memory: <strong>]] .. MemoryUsageKiB / 1024 .. [[MB</strong></a></li>
<li><a>Chunks: <strong>]] .. NumChunks .. [[</strong></a></li>
</ul>