Commit 67a46224 authored by Danny SMc's avatar Danny SMc

Current version, added profiles and all other code parts, now to add new features

parent c52ccfbc
......@@ -13,13 +13,13 @@ Plugin.example = {};
--// Create init function
function Plugin.example.entry()
--// Sets screen colour
base.screen.colour("lightBlue")
--base.screen.colour("lightBlue")
--// Center text and write
base.draw.textc("Initialising Example Plugin", 9, false, "white", "lightBlue")
--base.draw.textc("Initialising Example Plugin", 9, false, "white", "lightBlue")
--// Wait one second
sleep(1)
--sleep(1)
--// This is the logo for the home menu
local exampleicon = {
......@@ -30,10 +30,10 @@ function Plugin.example.entry()
};
--// Will add the menu icon into the existing icon library
DiscoverApp.Register.MenuIcon("ExamplePlugin", exampleicon);
--DiscoverApp.Register.MenuIcon("ExamplePlugin", exampleicon);
--// Will register a menu entry
DiscoverApp.Register.MenuEntry("ExamplePlugin", "example", "new", "NewEx", false);
--DiscoverApp.Register.MenuEntry("ExamplePlugin", "example", "new", "NewEx", false);
end
--// Create actual function
......
Discover App Documentation:
===========================
-> Registering Plugins / Extensions
To register a plugin it's as easy as using the API code. This is an internal registering system that shall register event listeners, commands and other for your plugin, most of the time we aim to say try not to use too many otherwise you will make the App unstable due to it's internal clock. Anyway, when creating a new plugin you will need a basic plugin.yml file which should be in it's own folder inside .DA_PLUGINS folder. Here the App will parse and read your details, then install them to the program at runtime. Then it will look for a main or main.lua file. This should have your main code in, of course you can use other files, but that name is the entry point. When that program is called it shall pass over it's API environment, so you can then work with the environment.
-> Adding a menu item
This is relatively straight forward, you will need an icon which is 14 x 4 wide, which should use the custom image format. Once you have this image, it needs to be in your program as a table so then we can pass it to the menu manager. So to do this, you need to use the following:
- DiscoverApp.Register.MenuIcon(icon_name, icon_data);
- Icon name is the name of the icon in the icon database.
- Icon data is of course the table of the icon format.
Now you have registered your new image you will need to register the actual menu entry, this is done like so:
- DiscoverApp.Register.MenuEntry(icon_name, api_name, func_name, thread_name, requires login)
- Icon name is what you set when you registered the icon.
- api_name should be the middle part of the function it will run.
- func name, this is the function name that it will invoke, so the name of the function you created for it, this is the entry point into your own code.
- thread_name, this is the text that will come up in the task switcher.
- requires login is a true or false, and this will check if the user requires to be logged in to use the system, if they are not loggedin, there is no exposed user data.
Now that will register your menu entry.
\ No newline at end of file
This diff is collapsed.
......@@ -21,6 +21,7 @@ local paths = {
"main/main.credits.lua";
"main/main.updates.lua";
"main/main.help.lua";
"main/main.finder.lua";
"apps/apps.all.lua";
"apps/apps.view.lua";
"apps/apps.download.lua";
......@@ -33,12 +34,20 @@ local paths = {
"apps/apps.upload.lua";
"apps/apps.update.lua";
"apps/apps.edit.lua";
"profile/profile.main.lua";
"profile/profile.view.lua";
"profile/profile.edit.lua";
"feed/feed.view.lua";
"cloud/cloud.main.lua";
"mail/mail.main.lua";
"account/account.login.lua";
"account/account.logout.lua";
"account/account.manage.lua";
"apps/apps.packages.lua";
"snippets/snippets.main.lua";
"snippets/snippets.all.lua";
"snippets/snippets.view.lua";
"snippets/snippets.upload.lua";
"snippets/snippets.owned.lua";
"core/core.footer.lua";
}
......
function program.cloud.main()
base.screen.colour("white")
program.draw.menubar("Cloud")
local rscroll = 0
local lscroll = 0
local localfiles = {}
local lfiles = fs.list("/")
for _,v in ipairs(lfiles) do
if not fs.isDir(v) then
table.insert(localfiles, v)
end
end
local fileoptions = {"Rename"}
base.draw.textc("Listing your files, please wait...", 10, false, "red", "white")
local ok, filelist = Discover.Cloud:List()
if filelist then
base.draw.box(1, 51, 10, 1, " ", "white", "white")
else
base.gui.alert(tostring(err))
sleep(1.5)
base.thread.remove("Cloud")
base.thread.switch("Home")
end
base.draw.box(26,1, 3, 17, " ", "grey", "grey")
base.draw.box(1, 51, 19, 1, " ", "grey", "grey")
base.draw.texta("- Local Files -", 5, 3, false, "lightGrey", "white")
base.draw.texta("- Remote Files -", 32, 3, false, "lightGrey", "white")
base.draw.textr("Scroll Enabled ", 19, false, "orange", "grey")
local function runr(rscroll)
if #filelist > 0 then
for i=1, 14 do
if #filelist >= i + rscroll then
base.draw.box(27, 24, i+4, 1, " ", "white", "white")
base.draw.texta(filelist[i+rscroll].filename:sub(1, 19), 28, i+4, false, "cyan", "white")
base.draw.texta("<", 48, i+4, false, "lightBlue", "white")
base.draw.texta("X", 50, i+4, false, "red", "white")
else
break
end
end
else
base.draw.texta("No files to show", 31, 10, false, "red", "white")
end
end
local function runl(lscroll)
if #localfiles > 0 then
for i=1, 14 do
if #localfiles >= i + lscroll then
base.draw.box(2, 24, i+4, 1, " ", "white", "white")
base.draw.texta(localfiles[i+lscroll]:sub(1, 19), 2, i+4, false, "cyan", "white")
base.draw.texta(">", 22, i+4, false, "lightBlue", "white")
base.draw.texta("X", 24, i+4, false, "red", "white")
else
break
end
end
else
base.draw.texta("No files to show", 2, 10, false, "red", "white")
end
end
runr(rscroll)
runl(lscroll)
while true do
local args = { os.pullEvent() }
if args[1] == "timer" then
program.draw.menubar("Cloud")
elseif args[1] == "mouse_click" then
if args[4] >= 1 and args[4] <= 2 then
program.draw.menu.handler("Cloud", args[3], args[4])
elseif (args[3] == 22) and (args[4] >= 4 and args[4] <= 17) then
-- Push local file
local curid = args[4] - 4 + lscroll
if (curid > 0 and curid <= #localfiles) then
if fs.exists(localfiles[curid]) then
base.gui.alert("Converting file for upload, please wait");sleep(0.25)
local status = Discover.Cloud:Create(localfiles[curid])
if status then
base.gui.alert("File pushed to server!")
sleep(0.5)
program.cloud.main()
else
base.gui.alert("File could not be pushed!")
sleep(0.5)
program.cloud.main()
end
else
base.gui.alert("File doesn't exist!")
sleep(0.5)
program.cloud.main()
end
end
elseif (args[3] >= 1 and args[3] <= 22) and (args[4] >= 4 and args[4] <= 17) then
-- Load options for local
local curid = args[4] - 4 + lscroll
if (curid > 0 and curid <= #localfiles) then
base.draw.texta(table.concat(fileoptions, " | "), 2, 19, false, "cyan", "grey")
local arg = { os.pullEvent("mouse_click") }
if (arg[3] >= 2 and arg[3] <= 7) and (arg[4] == 19) then
-- Rename
base.draw.box(8, 36, 9, 2, " ", "grey", "grey")
base.draw.box(10, 32, 10, 1, " ", "lightGrey", "lightGrey")
base.draw.textc("New File Name", 9, false, "white", "grey")
base.colour.set("black", "lightGrey")
term.setCursorPos(10, 10)
write(": ")
local newname = tostring(base.io.limitRead(30))
fs.move(localfiles[curid], newname)
base.gui.alert("File Renamed!")
sleep(0.5)
program.cloud.main()
else
base.draw.box(1, 30, 19, 1, " ", "grey", "grey")
end
end
elseif (args[3] >= 27 and args[3] <= 47) and (args[4] >= 4 and args[4] <= 17) then
-- Load options for remote
local curid = args[4] - 4 + rscroll
if (curid > 0 and curid <= #filelist) then
base.draw.texta(table.concat(fileoptions, " | "), 2, 19, false, "cyan", "grey")
local arg = { os.pullEvent("mouse_click") }
if (arg[3] >= 2 and arg[3] <= 7) and (arg[4] == 19) then
-- Rename
base.draw.box(8, 36, 9, 2, " ", "grey", "grey")
base.draw.box(10, 32, 10, 1, " ", "lightGrey", "lightGrey")
base.draw.textc("New File Name", 9, false, "white", "grey")
base.colour.set("black", "lightGrey")
term.setCursorPos(10, 10)
write(": ")
local newname = tostring(base.io.limitRead(30))
local status = Discover.Cloud:Rename(filelist[curid].id, newname)
if status then
base.gui.alert("File was renamed!")
sleep(0.5)
program.cloud.main()
else
base.gui.alert("File could not be renamed!")
sleep(0.5)
program.cloud.main()
end
else
base.draw.box(1, 30, 19, 1, " ", "grey", "grey")
end
end
elseif (args[3] == 24) and (args[4] >= 4 and args[4] <= 17) then
-- Delete local file
local curid = args[4] - 4 + lscroll
if (curid > 0 and curid <= #localfiles) then
if fs.exists(localfiles[curid]) then
fs.delete(localfiles[curid])
base.gui.alert("File Deleted!")
sleep(0.5)
program.cloud.main()
else
base.gui.alert("File doesn't exist!")
sleep(0.5)
program.cloud.main()
end
end
elseif (args[3] == 48) and (args[4] >= 4 and args[4] <= 17) then
-- Pull remote file
local curid = args[4] - 4 + rscroll
if (curid > 0 and curid <= #filelist) then
local f = fs.open(filelist[curid].filename, "w")
f.write(base.base64.decode(filelist[curid].filedata))
f.close()
base.gui.alert("File was pulled from server!")
sleep(0.5)
program.cloud.main()
end
elseif (args[3] == 50) and (args[4] >= 4 and args[4] <= 17) then
-- Delete remote file
local curid = args[4] - 4 + rscroll
if (curid > 0 and curid <= #filelist) then
local status = Discover.Cloud:Delete(filelist[curid].id)
if status then
base.gui.alert("File was deleted!")
sleep(0.5)
program.cloud.main()
else
base.gui.alert("File could not be deleted!")
sleep(0.5)
program.cloud.main()
end
end
end
elseif args[1] == "mouse_scroll" then
if (args[3] >= 1 and args[3] <= 25) and (args[4] >= 4 and args[4] <= 17) then
if args[2] == -1 then
if lscroll > 0 then
lscroll = lscroll - 1
runl(lscroll)
end
elseif args[2] == 1 then
if lscroll + 13 < #localfiles then
lscroll = lscroll + 1
runl(lscroll)
end
end
elseif (args[3] >= 27 and args[3] <= 51) and (args[4] >= 4 and args[4] <= 17) then
if args[2] == -1 then
if rscroll > 0 then
rscroll = rscroll - 1
runr(rscroll)
end
elseif args[2] == 1 then
if rscroll + 13 < #filelist then
rscroll = rscroll + 1
runr(rscroll)
end
end
end
end
end
end
......@@ -26,6 +26,14 @@ DiscoverApp = {
return true;
end;
};
MenuBar = {
Render = function( self, name )
program.draw.menubar(name)
end;
Handler = function( self, name, x, y )
program.draw.menu.handler(name, x, y)
end;
};
Alerts = {
Create = function(atitle, amessage, afunction)
new = {
......
......@@ -5,7 +5,7 @@
tArgs = { ... }
program = {}; program.core = {}; program.apps = {}; program.snippets = {}; program.cloud = {}; program.mail = {}; program.feed = {}; program.draw = {}; program.main = {}; program.draw.menu = {}; program.chat = {}; program.profiles = {}; program.account = {};
program = {}; program.core = {}; program.apps = {}; program.snippets = {}; program.cloud = {}; program.mail = {}; program.feed = {}; program.draw = {}; program.main = {}; program.draw.menu = {}; program.chat = {}; program.profiles = {}; program.account = {}; program.profile = {};
Plugin = {};
Internal = {
......
......@@ -111,7 +111,6 @@ function program.core.init()
end
end
-- Initialise Threads
base.thread.create("Home", program.main.home)
base.thread.switch("Home")
......
......@@ -193,6 +193,74 @@ Discover = {
end
end;
};
Profiles = {
View = function( self, username )
if username then
local query = "cmd=profile-view&username=".. textutils.urlEncode(tostring(username))
local req = http.post(Discover.Data.Urls.Store, query, Discover.Data.Headers)
local req = textutils.unserialize(req.readAll())
if req.status then
return unpack({true, req.data})
else
return unpack({false, "Could not find profile"})
end
else
return unpack({false, "Please give username as argument"})
end
end;
Edit = function( self, name, birthday, location, bio, website )
if name and birthday and location and bio and website then
local query = "cmd=profile-edit&key=" .. textutils.urlEncode(tostring(Discover.User.Data.AuthKey)) .. "&name=" .. textutils.urlEncode(tostring(name)) .. "&birthday=" .. textutils.urlEncode(tostring(birthday)) .. "&location=" .. textutils.urlEncode(tostring(location)) .. "&bio=" .. textutils.urlEncode(tostring(bio)) .. "&website=" .. textutils.urlEncode(tostring(website))
local req = http.post(Discover.Data.Urls.Store, query, Discover.Data.Headers)
local req = textutils.unserialize(req.readAll())
if req.status then
return unpack({true, "Profile edit was successful"})
else
return unpack({false, "Could not edit profile"})
end
else
return unpack({false, "Please give all arguments"})
end
end;
List = function( self )
local query = "cmd=profile-list";
local req = http.post(Discover.Data.Urls.Store, query, Discover.Data.Headers)
local req = textutils.unserialize(req.readAll())
if req.status then
return unpack({true, req.data})
else
return unpack({false, "Could not list profiles"})
end
end;
};
Chat = {
Send = function( self, ctype, cid, message )
-- ChatID can be username, group or 'global'
end;
View = function( self, ctype, cid )
-- ChatID can be username, group or 'global'
end;
};
Forums = {
List = function( self, ltype )
-- Ltype is either 'global', 'categories', 'sub-categories'
--[[
So on list on global it should list all global categories
on a category it should list all sub-categories if it is a parent,
if not parent list all posts
Once in a post, list all comments and data, which will then be parsed by Lua in a markdown fashion for rendering on screen.
]]
end;
Create = function( self )
-- type is category, sub-category or post
end;
Pin = function( self )
-- Allowing pinning for posts, categories or sub-categories
end;
Stats = function( self )
-- List all stats
end;
};
Apps = {
Upload = function( self, appname, appdesc, appvers, appcate, appstat, appdata, appraw )
if not appraw then
......
This diff is collapsed.
This diff is collapsed.
--[[
Name: main.finder
Desc: System screen finder
--]]
function program.main.finder()
base.screen.colour("white")
program.draw.menubar("Finder")
local functions = {}; local scroll = 0;
base.draw.box(1, 51, 19, 1, " ", "grey", "grey")
local function export(data, id)
for k,v in pairs(data) do
if type(v) == "table" then
functions[tostring(k)] = {};
export(v, tostring(k))
else
if id then
table.insert(functions[tostring(id)], tostring(k))
end
end
end
end
export(program);
local function parse(data)
local new = {};
for k,v in pairs(data) do
table.insert(new, "+" .. tostring(k))
for a,b in ipairs(v) do
table.insert(new, tostring("-" .. tostring(b)))
end
end
return new;
end
local function render(data)
for i=1, 14 do
if #data >= i+scroll then
base.draw.box(1, 20, i+3, 1, " ", "white", "white")
if data[i+scroll]:sub(1,1) == "+" then
base.draw.texta(tostring(data[i+scroll]), 3, i+3, false, "cyan", "white")
elseif data[i+scroll]:sub(1,1) == "-" then
base.draw.texta(tostring(data[i+scroll]), 6, i+3, false, "lightGrey", "white")
end
end
end
end
local text = "On the left is all functions inside the DiscoverApp. To run one please click the function, if you wish to run with arguments, right click it instead. Run with caution, as these should only be run needed when by the application, meaning you may cause instability.";
for k,v in ipairs(base.data.wordwrap(text, 29)) do
base.draw.texta(v, 21, k+3, false, "orange", "white");
end
local content = parse(functions); render(content);
while true do
local args = { os.pullEvent() }
if args[1] == "timer" then
program.draw.menubar("Finder")
elseif args[1] == "mouse_click" then
if args[4] >= 1 and args[4] <= 2 then
program.draw.menu.handler("Finder", args[3], args[4])
end
elseif args[1] == "mouse_scroll" then
if args[2] == -1 then
if scroll > 0 then
scroll = scroll - 1
render(content);
end
elseif args[2] == 1 then
if scroll + 14 < #content then
scroll = scroll + 1
render(content);
end
end
end
end
end
\ No newline at end of file
This diff is collapsed.
......@@ -43,7 +43,7 @@ function program.main.home()
{
["icon_name"] = "snippetStore";
["base_func"] = "snippets";
["func_name"] = "all";
["func_name"] = "main";
["thrd_name"] = "Snippets";
["req_login"] = false;
};
......@@ -57,7 +57,7 @@ function program.main.home()
{
["icon_name"] = "mailbox";
["base_func"] = "mail";
["func_name"] = "inbox";
["func_name"] = "main";
["thrd_name"] = "Mail";
["req_login"] = true;
};
......@@ -77,9 +77,9 @@ function program.main.home()
};
{
["icon_name"] = "profiles";
["base_func"] = "profiles";
["base_func"] = "profile";
["func_name"] = "main";
["thrd_name"] = "Profiles";
["thrd_name"] = "Profile";
["req_login"] = true;
};
{
......@@ -148,6 +148,7 @@ function program.main.home()
end
end
base.draw.textl(" Page: " .. tostring(page) .. " / " .. tostring(pages), screeny, false, "cyan", "grey")
base.draw.textr("Finder ", screeny, false, "orange", "grey")
end
render();
......@@ -162,6 +163,11 @@ function program.main.home()
elseif args[1] == "mouse_click" then
if (args[3] >= 1 and args[3] <= screenx) and (args[4] >= 1 and args[4] <= 2) then
program.draw.menu.handler("Home", args[3], args[4])
elseif (args[3] >= 45 and args[3] <= 50) and (args[4] == 19) then
if not base.thread.find("Finder") then
base.thread.create("Finder", program.main.finder)
end
base.thread.switch("Finder")
elseif (args[3] >= 1 and args[3] <= screenx) and (args[4] >= 3 and args[4] <= screeny-1) then
local cpage = page * 9 - 9
if (args[3] >= 3 and args[3] <= 16) and (args[4] >= 4 and args[4] <= 7) then
......
function program.main.updates(name)
tData = {
{
["name"] = "Update: 7.0.9 (Beta)";
["content"] = "The complete re-code. This update features a full re-design and full code overhaul to help the store look more attractive, as well as a new design on the menu, plus a ton of awesome new features for you to test out.";
["name"] = "Update: 7.0.1 (Beta)";
["content"] = "First public release. This is a complete re-code of most of the core inner workings of the store including new task manager, menu bar, and home page, as well as better settings screen and also gives access for better plugin support, allowing you to create plugins to install menu tiles to the home screen. I have also added a new CLI based interface, which is internal to the app, but will come out as an external program, that will link directly into the CraftOS shell.";
};
{
["name"] = "Update: 6.9.4 (Beta)";
["content"] = "Small updates being pushed ready for the end product. These updates include some minor tweaks to the Discover API that will enable a more controlled functional use for other developers in the long run.";
};
{
["name"] = "Update: 6.4.8 (Alpha)";
......
Brewing is how potions and splash potions are made in Minecraft.
Recipes: Despite the complicated web of potions that can be brewed from other potions, to brew a specific potion from the water bottle most efficiently the options are quite simple. The following table gives the most efficient way to brew each potion without wasting extra ingredients. Cases where the order of ingredients is irrelevant or two different ingredients are interchangeable are included. The potion of weakness, the only one which can be brewed without starting with a nether wart, can still be brewed from an awkward potion if the player wishes to convert all water bottles to awkward potions in preparation for brewing.
Weakness > fermented spider eye
Weakness E > fermented spider eye and redstone (if brewed from an awkward potion the fermented spider eye must be added first)
Strength > nether wart > blaze powder
Strength E > nether wart > blaze powder > redstone
Strength II > nether wart > blaze powder > glowstone
Regeneration > nether wart > ghast tear
Regeneration E > nether wart > ghast tear > redstone
Regeneration II > nether wart > ghast tear > glowstone
Swiftness > nether wart > sugar
Swiftness E > nether wart > sugar > redstone
Swiftness II > nether wart > sugar > glowstone
Slowness > nether wart > sugar or magma cream > fermented spider eye
Slowness E > nether wart > sugar or magma cream > fermented spider eye > redstone
Health > nether wart > glistering melon
Health II > nether wart > glistering melon > glowstone
Harming > nether wart > glistering melon or spider eye > fermented spider eye
Harming II > nether wart > glistering melon or spider eye > fermented spider eye and glowstone
Poison > nether wart > spider eye
Poison E > nether wart > spider eye > redstone
Poison II > nether wart > spider eye > glowstone
Fire Resistance > nether wart > magma cream
Fire Resistance E > nether wart > magma cream > redstone
History: Initially, the Cauldron was where potions were brewed. Code in Beta 1.9 pre2 revealed that Potions were brewed by adding water to the Cauldron followed by certain reagents. Correctly combined reagents would confer purely beneficial potion effects, and incorrect combinations added negative effects. The system was complicated, lacked a GUI, and formed many duplicate potions (i.e. two potions that were exactly the same could be made in several different ways), so Notch and Jeb came up with a new brewing method using a Brewing Stand.[1] The Cauldron's role in brewing was relegated to being a slightly more efficient storage vessel for water. Brewing was greatly streamlined and simplified when a brewing GUI was added and most duplicate potions were removed (the total possible potions went down from 150 combinations to only 25 different potions in 31 combinations). However, this new system made some potion effects available in earlier 1.9 pre-releases inaccessible (e.g. Nausea, Blindness and Invisibility).
Throwable Splash Potions were introduced in Beta 1.9 Pre4 and brewed by placing gunpowder and any potion together in a brewing stand. This pre-release also introduced Glistering Melon as an alchemical reagent to replace the instant health effect conferred by the Ghast Tear, which then added the effect of regeneration instead. This version also converted certain reagents into base-secondary reagents (the Spider Eye, Glistering Melon and Blaze Powder made Mundane Potion when brewed into a water bottle in addition to their previous functions), bringing the potion total to 28 different potions in 35 combinations.
Trivia:Only 1 ingredient is needed to brew into up to 3 potions. These three potions do not necessarily have to be the same.
Upgrading effect of potion that has no time parameter (i.e. Instant Health, Harming) with glowstone dust has no downsides.
Upgrading a Fire Resistance Potion with redstone dust has no downsides.
Although Jeb said that in the 1.9 pre-release 3 there were 161 possible different potion combinations with 2,653 in the future, in the actual third pre-release only 22 different potions could be made without the use of external programs. Of those, 19 potions had one of 8 different effects.
The Mundane Potion made from redstone has a different metadata (64) than the mundane potion made from any other ingredient (8192). Unlike Mundane 64, Mundane 8192 can be made into a Splash Mundane Potion by adding gunpowder that is, like its base potion, without any effect.
There are many Potions that were left behind from 1.9 pre-releases that fill up different metadatas that otherwise cannot be brewed or obtained without a SMP server command or inventory editor. These potions include but are not limited to: Bungling Potion, Buttering Potion, Debonair Potion, Refined Potion.
Splash potions can be fired by Dispensers.
Cauldrons can be entirely circumvented from the brewing process with no ill effects, as bottles can be filled by right-clicking on a water source block. This is an improvement from cauldrons, as one does not have to replenish the source block every three bottles, or indeed at all. This, however can not be done in the Nether, where cauldrons become essential.
Some splash potions have the opposite effect on undead mobs such as zombies and skeletons.
\ No newline at end of file
According to Wikipedia, biomes are climatically and geographically defined as similar climatic conditions on the Earth, such as communities of plants, animals, and soil organisms, and are often referred to as ecosystems.
In Minecraft, from the Halloween Update onwards, this means that different areas with varying heights, temperatures, humidity ratings and foliage colors are created.
Before the Halloween Update, when a map was generated it had either a Snowy or Grassy theme. But after the update, a single world includes all themes in a logical fashion determined from the biomes graph.
Biome Types Biome types may be easily distinguished by the differentiating grass and leaf colors in conjunction with the kind of blocks present, like cacti in deserts and pine trees in pine forests. They are randomly created during the generation of the world and are affected by the starting seed.
There are nine biomes in Minecraft 1.0.
Biome Description Features Image
Forest (Oak/Birch Forest) A biome with many trees and a fair amount of tall grass. Birch trees can be found in this biome. Oak and Birch Trees, Grass, Flowers, Tall Grass.
Taiga (Pine Forest) A biome with many pine/spruce trees and dull grey-blue grass. Wolves are also found on this biome more commonly than others. As of 1.8, it is most likely to spawn in one of these biomes. Snow and Ice occur in this biome after Minecraft 11w48a. Pine Trees, Grass, Flowers, Wolves, Tall Grass.
Swampland A flat biome with swamp-like trees with vines and shallow pools of clay, sand and dirt. The water, grass, leaves, vines and trees are much darker. The water can have floating lily pads. Mushrooms are also moderately common in swamps. There is a green-ish color in the water. Trees can sometimes spawn in the water in this biome. Oak Trees, Grass, Vines, Lily Pads, Clay, Mushrooms.
Extreme Hills (Mountains) A highly mountainous biome with dull grey-blue grass and few trees, added in the 1.8 Adventure Update. Prior to this update, mountains were found in all types of biomes, but now are very rare outside this type of land. More underground cave systems are present here than any other biome. Oak Trees, Grass.
Desert A very flat biome consisting mostly of sand, dead shrubs and cacti. No rain occurs in this biome. Sugar Cane can be found sometimes next to pools of water. NPC Villages spawn mostly in this biome. Sand, Cacti, Dead Bushes, Sandstone, Sugar Cane.
Plains A relatively flat biome with rolling hills and a large amount of tall grass (more than in any other type of land). The occasional tree does exist, although very rarely. Gulleys are also quite common in this biome. Tall Grass, Grass, Oak Trees.
Ocean A very big, flat open biome made entirely of water, with underwater reliefs such as small mountains and plains and usually includes sand and clay at its bottom. Ocean biomes can go down to 30 blocks deep and the occasional island may exist, as a small version of other biome types. Entrances to underground ravines can be also found at the bottom of the ocean, as well as Abandoned Mine Shafts (whose upper parts are mostly flooded due to the proximity of the ocean). Oceans can be larger than ten thousand blocks wide and long. Water, Sand, Clay.
Tundra A relatively flat biome covered in snow. Lakes and rivers are mostly frozen over and trees (only regular types are spawned) are scarce. Sugar canes do spawn in this biome, but are destroyed and dropped when the chunks load because of the ice that spreads over open water sources. Snow, Snowfall, Oak Trees, Ice, Sugar Cane.
Mushroom This biome consists of flat landscapes and high hills, has Mycelium instead of grass as its common surface block, and tends to appear as islands far from the spawn of a map and any significant landmass. It is the only biome where Huge Mushrooms can spawn and grow naturally, where mushrooms grow in full sunlight, and where Mooshrooms spawn.
It's actually composed of two different "biomes" - the shoreline, which is flat, and the mainland, which is more undulating (hilly). Contrary to popular belief, trees can be grown in this biome, but not next to Mycelium which will take over the dirt square from the sapling and un-plant the sapling. A player can create a Mycelium-free zone with cobblestone and grow a tree in the middle of it on freshly placed dirt. A player is also able to place saplings on mycelium and use bonemeal on the sapling to grow it. Otherwise, it is advised to collect wood (and saplings) before settling here.
No mobs other than Mooshrooms (including hostile mobs at night) spawn in this biome. This includes caves, abandoned mines, etc... below Mushroom Biomes, meaning exploring underground is relatively safe. Dungeons with spawners will still spawn mobs, however, and caution should still be taken when exploring (as sometimes "fingers" of other biomes project into mushroom biomes).
As of 1.0.0 player made structures in this biome are exempt from the "no mob spawn" rule: Only mushroom terrain originally created with the map seems to prevent mob spawning.
History: Biomes were added in Alpha 1.2.0, also known as the Halloween Update. In Beta 1.8, biomes got an overhaul, removing some biomes and others replaced with nine fractal-based biomes - some old, some new.
Difficulty: It can be difficult to play and gather sufficient resources if one starts in the middle of a biome with no trees, such as the desert, savanna, tundra, and especially the ocean.
There have been multiple reports of players spawning on tiny islands in the middle of a vast ocean with no trees for several Minecraft days in any direction. It appears that these desert islands generate in the Ocean biome, where animals cannot spawn (on the water); sometimes the island spawns with no trees so players have to delete the world and start again, swim great distances to a landmass, or search for nearby underwater openings into abandoned mineshafts to acquire wood. This is not quite as bad a problem if one starts the map in Creative Mode since the player is able to fly, make a boat, or plant trees. It is still undetermined whether this feature is a bug or not (Notch didn't say it was a bug, but the community seems to think it is).
\ No newline at end of file
According to Wikipedia, biomes are climatically and geographically defined as similar climatic conditions on the Earth, such as communities of plants, animals, and soil organisms, and are often referred to as ecosystems.
In Minecraft, from the Halloween Update onwards, this means that different areas with varying heights, temperatures, humidity ratings and foliage colors are created.
Before the Halloween Update, when a map was generated it had either a Snowy or Grassy theme. But after the update, a single world includes all themes in a logical fashion determined from the biomes graph.
Biome Types Biome types may be easily distinguished by the differentiating grass and leaf colors in conjunction with the kind of blocks present, like cacti in deserts and pine trees in pine forests. They are randomly created during the generation of the world and are affected by the starting seed.
There are nine biomes in Minecraft 1.0.
Biome Description Features Image
Forest (Oak/Birch Forest) A biome with many trees and a fair amount of tall grass. Birch trees can be found in this biome. Oak and Birch Trees, Grass, Flowers, Tall Grass.
Taiga (Pine Forest) A biome with many pine/spruce trees and dull grey-blue grass. Wolves are also found on this biome more commonly than others. As of 1.8, it is most likely to spawn in one of these biomes. Snow and Ice occur in this biome after Minecraft 11w48a. Pine Trees, Grass, Flowers, Wolves, Tall Grass.
Swampland A flat biome with swamp-like trees with vines and shallow pools of clay, sand and dirt. The water, grass, leaves, vines and trees are much darker. The water can have floating lily pads. Mushrooms are also moderately common in swamps. There is a green-ish color in the water. Trees can sometimes spawn in the water in this biome. Oak Trees, Grass, Vines, Lily Pads, Clay, Mushrooms.
Extreme Hills (Mountains) A highly mountainous biome with dull grey-blue grass and few trees, added in the 1.8 Adventure Update. Prior to this update, mountains were found in all types of biomes, but now are very rare outside this type of land. More underground cave systems are present here than any other biome. Oak Trees, Grass.
Desert A very flat biome consisting mostly of sand, dead shrubs and cacti. No rain occurs in this biome. Sugar Cane can be found sometimes next to pools of water. NPC Villages spawn mostly in this biome. Sand, Cacti, Dead Bushes, Sandstone, Sugar Cane.
Plains A relatively flat biome with rolling hills and a large amount of tall grass (more than in any other type of land). The occasional tree does exist, although very rarely. Gulleys are also quite common in this biome. Tall Grass, Grass, Oak Trees.
Ocean A very big, flat open biome made entirely of water, with underwater reliefs such as small mountains and plains and usually includes sand and clay at its bottom. Ocean biomes can go down to 30 blocks deep and the occasional island may exist, as a small version of other biome types. Entrances to underground ravines can be also found at the bottom of the ocean, as well as Abandoned Mine Shafts (whose upper parts are mostly flooded due to the proximity of the ocean). Oceans can be larger than ten thousand blocks wide and long. Water, Sand, Clay.
Tundra A relatively flat biome covered in snow. Lakes and rivers are mostly frozen over and trees (only regular types are spawned) are scarce. Sugar canes do spawn in this biome, but are destroyed and dropped when the chunks load because of the ice that spreads over open water sources. Snow, Snowfall, Oak Trees, Ice, Sugar Cane.
Mushroom This biome consists of flat landscapes and high hills, has Mycelium instead of grass as its common surface block, and tends to appear as islands far from the spawn of a map and any significant landmass. It is the only biome where Huge Mushrooms can spawn and grow naturally, where mushrooms grow in full sunlight, and where Mooshrooms spawn.
It's actually composed of two different "biomes" - the shoreline, which is flat, and the mainland, which is more undulating (hilly). Contrary to popular belief, trees can be grown in this biome, but not next to Mycelium which will take over the dirt square from the sapling and un-plant the sapling. A player can create a Mycelium-free zone with cobblestone and grow a tree in the middle of it on freshly placed dirt. A player is also able to place saplings on mycelium and use bonemeal on the sapling to grow it. Otherwise, it is advised to collect wood (and saplings) before settling here.
No mobs other than Mooshrooms (including hostile mobs at night) spawn in this biome. This includes caves, abandoned mines, etc... below Mushroom Biomes, meaning exploring underground is relatively safe. Dungeons with spawners will still spawn mobs, however, and caution should still be taken when exploring (as sometimes "fingers" of other biomes project into mushroom biomes).
As of 1.0.0 player made structures in this biome are exempt from the "no mob spawn" rule: Only mushroom terrain originally created with the map seems to prevent mob spawning.
History: Biomes were added in Alpha 1.2.0, also known as the Halloween Update. In Beta 1.8, biomes got an overhaul, removing some biomes and others replaced with nine fractal-based biomes - some old, some new.
Difficulty: It can be difficult to play and gather sufficient resources if one starts in the middle of a biome with no trees, such as the desert, savanna, tundra, and especially the ocean.
There have been multiple reports of players spawning on tiny islands in the middle of a vast ocean with no trees for several Minecraft days in any direction. It appears that these desert islands generate in the Ocean biome, where animals cannot spawn (on the water); sometimes the island spawns with no trees so players have to delete the world and start again, swim great distances to a landmass, or search for nearby underwater openings into abandoned mineshafts to acquire wood. This is not quite as bad a problem if one starts the map in Creative Mode since the player is able to fly, make a boat, or plant trees. It is still undetermined whether this feature is a bug or not (Notch didn't say it was a bug, but the community seems to think it is).
\ No newline at end of file
Blaze is a type of mob found in The Nether. In their searching state they are confined to the ground and do not blow smoke. They will not start flying unless they spot the player. When pursuing, they catch fire briefly before shooting a three round burst of fireballs. A short cool down period occurs between attacks. Their bodies are made up of a head atop a central column of smoke, and three rotating sections, each rotating section contains four floating yellow rods. They drop Blaze Rods, and can only spawn in Nether Fortresses, from Mob Spawners. Their fireballs set players and mobs alike on fire. Despite being similar to a Ghast fireball, Blaze Fireballs are not explosive, and cannot be deflected.
Combat: Blazes are one of the most difficult mobs to fight, due to their ranged, unblockable attacks and rapid rate of fire. Their ability to fly usually leaves the player's sword useless, while a player's bow's charging time and move speed leaves the player highly vulnerable to attack. On the other hand, Blaze have a much shorter attack range, which makes it more feasible to snipe them from afar. Blaze can only spawn in light level 12 or lower (at the lower half of their body). Much like Ghasts, the Blaze's ability to fly can make it difficult to recover their loot after killing them. However, a viable tactic of combat is to fight them at close range by reeling them in with a fishing rod first. The use of a potion of fire resistance is extremely helpful when fighting Blazes.
Blaze spawners occur in Nether Fortresses, and will start spawning Blazes once the player gets within 16 blocks. The spawners have a chance of spawning 1-6 Blazes at once. 'Camping' at a Blaze spawner is an effective way to gather Blaze Rods, as they will always appear close enough to attack with a sword, and there is a delay in their attack after they spawn because they have to charge first. This is best done in combination with the fire resistance potion in effect, which makes the player immune to the Blaze's attacks and can be brewed by adding Magma Cream to awkward potions. You can also build a doorway, 2 blocks tall and 1 block wide, where you can camp and kill the blazes as they come down. This strategy is extremely effective if you cover up the roof of the spawner room and camp in the doorway with a diamond sword.
A Blaze suffers damage upon contact with water or from snowballs, making a small army of Snow Golems a great way to kill them or even make Golem-based Blaze grinders, provided the player has enough ingredients to replace the fallen golems, a safe place to hide while making new golems, as well as that the initial attack is made with enough snowmen to defeat the first wave of Blazes, before more Blazes can arrive and turn the Blaze grinder into a Snow Golem grinder. Be aware with Blaze spawners as these can quickly create new waves of Blaze, outnumbering the golems. In SMP, this tactic is one of the easiest ways (if not THE easiest way) to kill Blazes, as another player can be assigned the mission to gather snow from dead snow golems and turn this into blocks, letting the golem maker work without stopping to get more snow. Systems like this can in practical use take out several spawners with the only resource requirement being pumpkins for new golems, making the Blaze killing process almost self-sustaining. A pumpkin farm could produce unlimited pumpkins, making it fairly sustainable, although the snow would run out if the dead golems' snowballs weren't collected.
History: Blazes were introduced in Beta 1.9 Pre-release 1. Starting from Beta 1.9 Pre-release 4(verify version) they only drop items when they aren't on fire (about to attack).
Trivia: The light level of an area to disable a spawnable area has to be 12 or higher.
Blaze cannot shoot if trapped in a Cobweb.
Blaze do not have a body, unlike other mobs. They are simply floating heads over a cloud of smoke surrounded by spinning rods.
Unlike Ghasts, projectiles fired by a Blaze cannot be deflected, so hitting the projectiles would be pointless.
Blaze projectiles will set whatever they hit on fire, which includes solid blocks, mobs, and the player.
With a 'fire resistance potion' in effect, the blaze is the only mob whose attacks are capable of being neutralized, including their knockback effect. However, they are able to hit players when up close with a melee attack when they are on fire and ONLY when they are on fire.
The player and Snow Golems can kill a blaze with snowballs, although Snow Golems will be killed quickly by the Blazes' attacks.
Each snowball deals 3 () damage, so it takes 7 snowballs to kill one Blaze.
Blazes will take damage from rain and snowy weather if spawned into the over-world.
As of Beta 1.9 Pre-release 5, Blaze only drop a Blaze Rod when killed by the player.
As of Version RC2, Blaze now have their own sounds. They make "breath" sounds and make metallic clunks when hurt.
Blazes, despite their almost alien morphology, share a recolored face with The Player and other humanoid mobs.
When this mob is not in pursuit of the player, they are bound to the ground. One can observe this as they may jump to get onto higher blocks and drop when going off an edge.
One may also observe that when they make contact with a block below they make footstepping noises appropriate to the block, as any earth-bound mob with feet would make, despite being a floating mob.
Once fired, the Blaze's fireball has an infinite range. However, The Player still needs to be within 'attack range' of the Blaze to attack.
Blazes take damage from water.
\ No newline at end of file
This diff is collapsed.