forked from mtcontrib/mob_horse
Compare commits
17 Commits
0919faf76e
...
d0ccec70cb
Author | SHA1 | Date | |
---|---|---|---|
d0ccec70cb | |||
7650e9ba5c | |||
0cbaa0b223 | |||
aa399a6ef9 | |||
23ab8bddbd | |||
decb1c384c | |||
e16866479f | |||
9130b43ef8 | |||
22f52abc6c | |||
2ac1e816ed | |||
d7a5b88fb4 | |||
d2c0afcff2 | |||
aa867c3fa0 | |||
70f40e2fb4 | |||
858167c386 | |||
5f26b248b1 | |||
8dfead83c6 |
170
init.lua
170
init.lua
@ -1,23 +1,27 @@
|
||||
|
||||
-- Load support for intllib.
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname()) .. "/"
|
||||
local S = minetest.get_translator and minetest.get_translator("mob_horse") or
|
||||
dofile(MP .. "/intllib.lua")
|
||||
dofile(MP .. "intllib.lua")
|
||||
|
||||
|
||||
-- 0.4.17 or 5.0 check
|
||||
local y_off = 20
|
||||
if minetest.registered_nodes["default:permafrost"] then
|
||||
if minetest.features.object_independent_selectionbox then
|
||||
y_off = 10
|
||||
end
|
||||
|
||||
|
||||
-- horse shoes (speed, jump, break, overlay texture)
|
||||
local shoes = {
|
||||
["mobs:horseshoe_steel"] = {7, 4, 2, "mobs_horseshoe_steelo.png"},
|
||||
["mobs:horseshoe_bronze"] = {7, 4, 4, "mobs_horseshoe_bronzeo.png"},
|
||||
["mobs:horseshoe_mese"] = {9, 5, 8, "mobs_horseshoe_meseo.png"},
|
||||
["mobs:horseshoe_diamond"] = {10, 6, 6, "mobs_horseshoe_diamondo.png"}
|
||||
["mobs:horseshoe_diamond"] = {10, 6, 6, "mobs_horseshoe_diamondo.png"},
|
||||
["mobs:horseshoe_crystal"] = {11, 6, 9, "mobs_horseshoe_crystalo.png"}
|
||||
}
|
||||
|
||||
|
||||
-- rideable horse
|
||||
mobs:register_mob("mob_horse:horse", {
|
||||
type = "animal",
|
||||
@ -29,11 +33,16 @@ mobs:register_mob("mob_horse:horse", {
|
||||
speed_normal = 15,
|
||||
speed_run = 30,
|
||||
stand_start = 25,
|
||||
stand_end = 75,
|
||||
stand_end = 50, -- 75
|
||||
stand2_start = 25,
|
||||
stand2_end = 25,
|
||||
stand3_start = 55,
|
||||
stand3_end = 75,
|
||||
stand3_loop = false,
|
||||
walk_start = 75,
|
||||
walk_end = 100,
|
||||
run_start = 75,
|
||||
run_end = 100,
|
||||
run_end = 100
|
||||
},
|
||||
textures = {
|
||||
{"mobs_horse.png"}, -- textures by Mjollna
|
||||
@ -71,6 +80,7 @@ mobs:register_mob("mob_horse:horse", {
|
||||
self.terrain_type = 3
|
||||
self.driver_attach_at = {x = 0, y = y_off, z = -2}
|
||||
self.driver_eye_offset = {x = 0, y = 3, z = 0}
|
||||
self.driver_scale = {x = 0.8, y = 0.8} -- shrink driver to fit model
|
||||
end
|
||||
|
||||
-- if driver present allow control of horse
|
||||
@ -86,22 +96,28 @@ mobs:register_mob("mob_horse:horse", {
|
||||
|
||||
on_die = function(self, pos)
|
||||
|
||||
-- drop saddle when horse is killed while riding
|
||||
-- also detach from horse properly
|
||||
-- detach player from horse properly
|
||||
if self.driver then
|
||||
|
||||
minetest.add_item(pos, "mobs:saddle")
|
||||
|
||||
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
|
||||
end
|
||||
|
||||
self.saddle = nil
|
||||
-- drop saddle if found
|
||||
if self.saddle then
|
||||
minetest.add_item(pos, "mobs:saddle")
|
||||
end
|
||||
|
||||
-- drop any horseshoes added
|
||||
if self.shoed then
|
||||
minetest.add_item(pos, self.shoed)
|
||||
end
|
||||
end,
|
||||
|
||||
do_punch = function(self, hitter)
|
||||
|
||||
-- don't cut the branch you're... ah, that's not about that
|
||||
if hitter ~= self.driver then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
|
||||
on_rightclick = function(self, clicker)
|
||||
@ -121,8 +137,10 @@ mobs:register_mob("mob_horse:horse", {
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = clicker:get_player_name()
|
||||
|
||||
-- make sure tamed horse is being clicked by owner only
|
||||
if self.tamed and self.owner == clicker:get_player_name() then
|
||||
if self.tamed and self.owner == player_name then
|
||||
|
||||
local inv = clicker:get_inventory()
|
||||
local tool = clicker:get_wielded_item()
|
||||
@ -133,29 +151,27 @@ mobs:register_mob("mob_horse:horse", {
|
||||
|
||||
mobs.detach(clicker, {x = 1, y = 0, z = 1})
|
||||
|
||||
-- add saddle back to inventory
|
||||
if inv:room_for_item("main", "mobs:saddle") then
|
||||
inv:add_item("main", "mobs:saddle")
|
||||
else
|
||||
minetest.add_item(clicker:get_pos(), "mobs:saddle")
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
self.saddle = nil
|
||||
|
||||
-- attach player to horse
|
||||
elseif (not self.driver and not self.child
|
||||
and clicker:get_wielded_item():get_name() == "mobs:saddle")
|
||||
or self.saddle then
|
||||
|
||||
self.object:set_properties({stepheight = 1.1})
|
||||
mobs.attach(self, clicker)
|
||||
|
||||
-- take saddle from inventory
|
||||
if not self.saddle then
|
||||
inv:remove_item("main", "mobs:saddle")
|
||||
end
|
||||
-- attach saddle to horse
|
||||
if not self.driver
|
||||
and not self.child
|
||||
and clicker:get_wielded_item():get_name() == "mobs:saddle"
|
||||
and not self.saddle then
|
||||
|
||||
self.saddle = true
|
||||
self.order = "stand"
|
||||
self.object:set_properties({stepheight = 1.1})
|
||||
|
||||
-- take saddle from inventory
|
||||
inv:remove_item("main", "mobs:saddle")
|
||||
|
||||
self.texture_mods = self.texture_mods .. "^mobs_saddle_overlay.png"
|
||||
|
||||
self.object:set_texture_mod(self.texture_mods)
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
-- apply horseshoes
|
||||
@ -180,37 +196,62 @@ mobs:register_mob("mob_horse:horse", {
|
||||
-- apply horseshoe overlay to current horse texture
|
||||
if overlay then
|
||||
self.texture_mods = "^" .. overlay
|
||||
|
||||
if self.saddle then
|
||||
self.texture_mods = self.texture_mods
|
||||
.. "^mobs_saddle_overlay.png"
|
||||
end
|
||||
|
||||
self.object:set_texture_mod(self.texture_mods)
|
||||
end
|
||||
|
||||
-- show horse speed and jump stats with shoes fitted
|
||||
minetest.chat_send_player(clicker:get_player_name(),
|
||||
minetest.chat_send_player(player_name,
|
||||
S("Horse shoes fitted -")
|
||||
.. S(" speed: ") .. speed
|
||||
.. S(" , jump height: ") .. jump
|
||||
.. S(" , stop speed: ") .. reverse)
|
||||
|
||||
tool:take_item() ; clicker:set_wielded_item(tool)
|
||||
tool:take_item()
|
||||
|
||||
clicker:set_wielded_item(tool)
|
||||
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- used to capture horse with magic lasso
|
||||
mobs:capture_mob(self, clicker, 0, 0, 80, false, nil)
|
||||
end,
|
||||
if mobs:capture_mob(self, clicker, nil, nil, 100, false, nil) then return end
|
||||
|
||||
-- ride horse if saddled
|
||||
if self.saddle and self.owner == player_name then
|
||||
mobs.attach(self, clicker)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
mobs:spawn({
|
||||
name = "mob_horse:horse",
|
||||
nodes = {"default:dirt_with_grass", "ethereal:dry_dirt"},
|
||||
min_light = 14,
|
||||
interval = 60,
|
||||
chance = 16000,
|
||||
min_height = 10,
|
||||
max_height = 31000,
|
||||
day_toggle = true,
|
||||
})
|
||||
|
||||
-- check for custom spawn.lua
|
||||
local input = io.open(MP .. "spawn.lua", "r")
|
||||
|
||||
if input then
|
||||
input:close()
|
||||
input = nil
|
||||
dofile(MP .. "spawn.lua")
|
||||
else
|
||||
|
||||
mobs:spawn({
|
||||
name = "mob_horse:horse",
|
||||
nodes = {"default:dirt_with_grass", "ethereal:dry_dirt"},
|
||||
min_light = 14,
|
||||
interval = 60,
|
||||
chance = 16000,
|
||||
min_height = 10,
|
||||
max_height = 31000,
|
||||
day_toggle = true
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mob_horse:horse", S("Horse"), "wool_brown.png", 1)
|
||||
|
||||
@ -226,14 +267,14 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"", "default:steelblock", ""},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
-- bronze horseshoes
|
||||
minetest.register_craftitem(":mobs:horseshoe_bronze", {
|
||||
description = S("Bronze HorseShoes (use on horse to apply)"),
|
||||
inventory_image = "mobs_horseshoe_bronze.png",
|
||||
inventory_image = "mobs_horseshoe_bronze.png"
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -241,14 +282,14 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"", "default:bronzeblock", ""},
|
||||
{"default:bronze_ingot", "", "default:bronze_ingot"},
|
||||
{"default:bronze_ingot", "", "default:bronze_ingot"},
|
||||
{"default:bronze_ingot", "", "default:bronze_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
-- mese horseshoes
|
||||
minetest.register_craftitem(":mobs:horseshoe_mese", {
|
||||
description = S("Mese HorseShoes (use on horse to apply)"),
|
||||
inventory_image = "mobs_horseshoe_mese.png",
|
||||
inventory_image = "mobs_horseshoe_mese.png"
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -256,14 +297,14 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"", "default:mese", ""},
|
||||
{"default:mese_crystal_fragment", "", "default:mese_crystal_fragment"},
|
||||
{"default:mese_crystal_fragment", "", "default:mese_crystal_fragment"},
|
||||
{"default:mese_crystal_fragment", "", "default:mese_crystal_fragment"}
|
||||
}
|
||||
})
|
||||
|
||||
-- diamond horseshoes
|
||||
minetest.register_craftitem(":mobs:horseshoe_diamond", {
|
||||
description = S("Diamond HorseShoes (use on horse to apply)"),
|
||||
inventory_image = "mobs_horseshoe_diamond.png",
|
||||
inventory_image = "mobs_horseshoe_diamond.png"
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -271,10 +312,30 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"", "default:diamondblock", ""},
|
||||
{"default:diamond", "", "default:diamond"},
|
||||
{"default:diamond", "", "default:diamond"},
|
||||
{"default:diamond", "", "default:diamond"}
|
||||
}
|
||||
})
|
||||
|
||||
-- crystal horseshoes
|
||||
if minetest.get_modpath("ethereal") then
|
||||
|
||||
minetest.register_craftitem(":mobs:horseshoe_crystal", {
|
||||
description = S("Crystal HorseShoes (use on horse to apply)"),
|
||||
inventory_image = "mobs_horseshoe_crystal.png"
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mobs:horseshoe_crystal",
|
||||
recipe = {
|
||||
{"", "ethereal:crystal_block", ""},
|
||||
{"ethereal:crystal_ingot", "", "ethereal:crystal_ingot"},
|
||||
{"ethereal:crystal_ingot", "", "ethereal:crystal_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- lucky blocks
|
||||
if minetest.get_modpath("lucky_block") then
|
||||
|
||||
@ -283,6 +344,7 @@ lucky_block:add_blocks({
|
||||
{"dro", {"mobs:horseshoe_bronze"}},
|
||||
{"dro", {"mobs:horseshoe_mese"}},
|
||||
{"dro", {"mobs:horseshoe_diamond"}},
|
||||
{"dro", {"mobs:horseshoe_crystal"}}
|
||||
})
|
||||
|
||||
end
|
||||
|
3
license.txt
Normal file
3
license.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Code: MIT
|
||||
Textures: CC-BY-SA 3.0 by Mjollna
|
||||
Model: MIT by KrupnovPavel
|
4
mod.conf
Normal file
4
mod.conf
Normal file
@ -0,0 +1,4 @@
|
||||
name = mob_horse
|
||||
depends = mobs
|
||||
optional_depends = lucky_block, intllib
|
||||
description = Adds a rideable horse into game with horse shoe upgrades.
|
@ -7,12 +7,16 @@ There are three different horse textures (white, brown, black) which will spawn
|
||||
### Taming
|
||||
Horses can be tamed with 10x wheat, apple, barley, oats of corn which then allows the player to pick up the horse using a lasso and ride by right-clicking with a saddle.
|
||||
|
||||
---
|
||||
### Saddle
|
||||
Right clicking a horse with a saddle equips it and the horse will be ordered to stand still until you wish to ride.
|
||||
|
||||
---
|
||||
### Horseshoes
|
||||
Horseshoes can be crafted using steel, bronze, mese and diamond (4x ingots - 2 down either side with 1x block top middle) and placed on a horse by right clicking with the item. These can make horses run faster or jump higher while riding depending on tier.
|
||||
Horseshoes can be crafted using steel, bronze, mese, diamond and crystal (4x ingots - 2 down either side with 1x block top middle) and placed on a horse by right clicking with the item. These can make horses run faster or jump higher while riding depending on tier.
|
||||
|
||||
---
|
||||
### Dead Horse
|
||||
When riding a horse monsters will generally attack the horse first to get to player riding it, when horse dies the player is dismounted and it will drop any shoes or saddles in use as well as some horse meat.
|
||||
|
||||
#### Lucky Blocks: 4
|
||||
#### Lucky Blocks: 5
|
||||
|
72
spawn_example.lua
Normal file
72
spawn_example.lua
Normal file
@ -0,0 +1,72 @@
|
||||
|
||||
--[[ Spawn Template, defaults to values shown if line not provided
|
||||
|
||||
mobs:spawn({
|
||||
|
||||
name = "",
|
||||
|
||||
- Name of mob, must be provided e.g. "mymod:my_mob"
|
||||
|
||||
nodes = {"group:soil, "group:stone"},
|
||||
|
||||
- Nodes to spawn on top of.
|
||||
|
||||
neighbors = {"air"},
|
||||
|
||||
- Nodes to spawn beside.
|
||||
|
||||
min_light = 0,
|
||||
|
||||
- Minimum light level.
|
||||
|
||||
max_light = 15,
|
||||
|
||||
- Maximum light level, 15 is sunlight only.
|
||||
|
||||
interval = 30,
|
||||
|
||||
- Spawn interval in seconds.
|
||||
|
||||
chance = 5000,
|
||||
|
||||
- Spawn chance, 1 in every 5000 nodes.
|
||||
|
||||
active_object_count = 1,
|
||||
|
||||
- Active mobs of this type in area.
|
||||
|
||||
min_height = -31000,
|
||||
|
||||
- Minimum height level.
|
||||
|
||||
max_height = 31000,
|
||||
|
||||
- Maximum height level.
|
||||
|
||||
day_toggle = nil,
|
||||
|
||||
- Daytime toggle, true to spawn during day, false for night, nil for both
|
||||
|
||||
on_spawn = nil,
|
||||
|
||||
- On spawn function to run when mob spawns in world
|
||||
|
||||
on_map_load = nil,
|
||||
|
||||
- On map load, when true mob only spawns in newly generated map areas
|
||||
})
|
||||
]]--
|
||||
|
||||
|
||||
-- Horse
|
||||
|
||||
mobs:spawn({
|
||||
name = "mob_horse:horse",
|
||||
nodes = {"default:dirt_with_grass", "ethereal:dry_dirt"},
|
||||
min_light = 14,
|
||||
interval = 60,
|
||||
chance = 16000,
|
||||
min_height = 10,
|
||||
max_height = 31000,
|
||||
day_toggle = true
|
||||
})
|
BIN
textures/mobs_horseshoe_crystal.png
Normal file
BIN
textures/mobs_horseshoe_crystal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 153 B |
BIN
textures/mobs_horseshoe_crystalo.png
Normal file
BIN
textures/mobs_horseshoe_crystalo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 106 B |
BIN
textures/mobs_saddle_overlay.png
Normal file
BIN
textures/mobs_saddle_overlay.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
Reference in New Issue
Block a user