Wednesday, December 29, 2010

IIS 7 Tutorial

-------------------------STEVES TUT FOR IIS 7------------------------------------------------------------

okay guys i decided to simplify and tidy up my tut on w/e pagw iposted it on XD so here we go...
this is aimed at people who have just got a fresh install of winserver 08
ok well it no too hard or complicated to understand to be fair.
all we have to do is these wonderful steps to set up IIS for minecraft and dynmap

SETTING UP OF IIS
1. Run the Server manager application in Windows. If the "Web Server (IIS)" role is not already enabled, click the "Add Roles" link and add the "Web Server (IIS)" role.
2.and select the following services:
"Common HTTP Features" except for "WebDAV Publishing",
everything under "Application Development",
only "HTTP Logging" and "Request Monitor" under "Health and Diagnostics",
and everything under "Security"
then continue with the install thingy..

Installing PHP5
1. download and run this http://windows.php.net/downloads/release...C9-x86.msi
2.when asked for Select the web server you wish to setup choose:
IIS FastCGI
3. when asked Choose Items to install under extensions i install all..
but if you personally dont want to just skip this bit as it installs the minimum of what we need Smile
4.once installed goto X:\Program Files (x86)\PHP\ (where X: is is the drive youve installed your windows srv on) the open up php.ini
and press ctrl+g and type 911
cgi.force_redirect = 1 and replace with cgi.force_redirect=0
;fastcgi.impersonate = 1
;fastcgi.logging = 0 and replace with this fastcgi.logging=1

5. we need to make one more change in the php.ini file. find ;date.timezone = uncomment it and set an appropriate timezone value in my case its Europe/London as i live in wales and my box is in my house heres the list of timezones http://us3.php.net/manual/en/timezones.php
6. save and close the php.ini

SETTING UP MySQL WITH PHPMYADMIN
1. download and run this http://www.mysql.com/get/Downloads/MySQL...mysql.com/
NOTE: WARNING: IF YOUR NOT ON A X64 O/S DO NOE DOWNLOAD TOP LINK DOWNLOAD THIS ONEhttp://www.mysql.com/get/Downloads/MySQL...mysql.com/
2.on the installer choose typical
3. once its finished it should launch the config utility if it doesnt got to start and launch it (should be the first in the list)
4.ok do these:
1.next
2.detailed configuration. next
3.developer machine. next
4.multifuncional database newxt
5.leave as is and push next
6.decission support next
7.leave as is but add the tick into add fire wall exception
8.leave as is next
9.leave as is next
10. enter your pasword for root database user then push next
11. push execute
optional
if you want to add another user and only allow that to use the mysql.... do it ...(im not gona go through that since im the only user thatll have access to my mysql)

SETTING UP PHPMYADMIN
1 download this http://sourceforge.net/projects/phpmyadm...941ab47535
2. whiles its downloading make a folder in X:\inetpub\wwwroot\ called phpmyadmin
3. once downloaded extract the files in the zipped folder to X:\inetpub\wwwroot\phpmyadmin
4.go to the iis manager and under default web site there should be phpmyadmin, right click on that and go convert to application and another window pops up and just go OK
5. goto http://localhost/phpmyadmin and log in with the root and password you set up
6. make a database called minecraft go ok.

SETTING UP MINECRAFT AND PLUGIN
1. download minecraft and extract to X:/Users/Administrator/MC_Server
2. cut everything but the .sh file and the 32 bit bat file (if your using 64) to the root of the MC_Server
3.Delete the rest apart from the .sql files and the .jar and the bat file
4. run the the .bat file as admin then close it again in the properties. change it to whatever you want but since were using MySQL if the files got the data-source=flatfile line just change it to MySQL if not add data-source=mysql and save then run it again
5.it'll error out.. so once it has errored close it then modify the mysql.properties
6. add your mysql password to it and dont change a thing if you have done the same as me soo far.
7. save it and close
8. log into phpmyadmin,
9. select the minecraft database then go import.
10. import all the .sql files in the MC_Server folder startin with minecraft.sql
11. once you have done that go to the users table and add your name and others if you wish thne log out of phpmyadmin.
DYNAMIC MAP SETUP
1. download this http://www.fescen9.com/Minecraft/Plugins...escen9.rar
2. using winrar extract that folder to say. downloads
3. then go into that folder you extracted
4. copy the map.jar to the MC_Server/plugins/
5.copy the colors.txt to MC_Server/
6. copy the contents of web folder to X:/inetpub/wwwroot/map/
7. modify the map.js in the map folder to bve something like this
Code:
var setup = {
tileUrl: 'http://stevesminecraft.dyndns.org/tiles/',
updateUrl: '/map/up/default.aspx?lasttimestamp=', // Or if using ASP.NET: http://www.yourdomain.com/minecraft/up/default.aspx?lasttimestamp=
updateRate: 2000, //Seconds the map should poll for updates. (Seconds) * 1000. The default is 2000 (every 2 seconds).
showPortraitsOnMap: true,
showPortraitsInPlayerList: true,
showPlayerNameOnMap: false
};
NOTE:WARNING: this updateUrl: '/map/up/default.aspx?lasttimestamp=', is very very very important since were using iis 7 and its using ASP.NET it must look like that no matter what (your update URL only has to look like that)
8. save that file and close it
9. go to the server.properties file in the MC_Server folder and add map to the plugin line
10. run the server again then wait for it to gen the map, and then when its finished close it down again
11. go to the server.properties file again and edit the line that says map-tilepath=tiles/
to X:/inetpub/wwwroot/map/tiles
i do it that way as i find it easier to get to work than shortcuts or symlinks.
NOTE: where X is is the hardrive letter your server o/s is working from
12. save that file and close it.
13. final step. right click on your wwwroot folder and goto the security tab and go edit click on the IIS_USRS and tick every box except the deny boxes. do the same for the users/computername
13 (i) then go add type in the box at the bottom Everyone then click check names and go ok
13 (ii) make sure all the boxes except the deny boxes are ticked on everyone as well then go apply and ok.
that step makews sure that the Minecraft has access to write to the tiles folder in the wwwroot folder.....

things to remember
there will be occasionally some access denied erros in the console window... but thats ok, as the tile does get made and modified its justa sily thing thats all..
ALSO WHER X:/ IS REFERS TO THE HDD LETTER YOU HAVE YOUR SERVER INSTALLED TO..

OPTIONAL FOR X64 USers only:
you can download the x64 bit of java to remove the 1.5gb limit
to do that download it and install it then modify the .bat file you use and remove the (x86)
so it looks like this
Code:
@echo off
"%ProgramFiles%\Java\jre6\bin\java.exe" -Xms4G -Xmx4G -jar Minecraft_Mod.jar nogui
pause
ENDING NOTE...
if you have troubles on people connecting to you go to your firewall and add the port number your minecraft uses to it in the tcp and udp ports to make sure....

if you stilll have problems pm me either your teamviewer or skype details and ill be able to help you

Sunday, December 19, 2010

Wand-er-ing Off

I've made my Wand plugin official! I've released it on the hMod forums here:

[MECH] Wand

I'll be supporting it there, but probably not adding anything major to it in the future. The core functionality will find its way into the RPG framework, though in a slightly different form.

Thursday, December 16, 2010

Wand-er

For my RPG plugin, I've veered off slightly, first making a "magic wand" interface.

The commands to use the plugin are:

/wand bind <command> : "Enchants" your wand (stick) with a spell (command)
/wand unbind <command> : Remove a spell from your wand
/wand list : List all spells bound to your wand

You control your wand with the mouse:

left-click: Cast the currently active wand spell
right-click: Cycle through enchanted spells

So far, it's been a lot of fun to use.

My ultimate goal is to have this tie into a "spell" system, which will be a framework for spell names, costs, and requirements.

I also think it would be nice to restrict enchanting the spell to a workbench or some other specialty block- so you can't add new spells to your wand on the fly.

I'm currently thinking it would be great if each spell could be associated with a specific object. Then, to bind your wand to a spell, you would place the wand and that object in your workbench.

These are all loose ideas, of course. Currently I'm just having fun blinking around and then boom'ing up the world like some kind of insane evil wizard.

Wednesday, December 15, 2010

RPG Mod Started!

After a good bit of thinking and research, I dove into code today and got my first "plugin" written!

This plugin is eventually meant to be a general framework for turning Minecraft into an RPG-style game.

This will include a class system, experience points, and some sort of "magic points" for ability use.

Right now, the first thing I wanted to play with was creating a magic wand. It was super easy!

My first try, I hooked up the "boom" spell from the really-fun "MagicSpells" plugin. Basically, I made it so that whenever you swing a stick (your wand), it casts "boom" at whatever you're aiming at.

Wow, it was fun! But, oh-so dangerous. And I'm still not convinced that "boom" behaves well with Cuboid permissions- something I'd need to fix before I let any dark wizards loose on my server...

Anyway, I quickly changed the wand to cast "blink" instead, making it a super handy teleport tool.

I'm considering how best to approach this- obviously I want different spells to be assignable to a wand- but I could also use a unique item for each spell, reservering wand for the assignable one. Not sure. In any case, I can already tell I'm going to have a lot of fun with this.

Tuesday, December 14, 2010

Configuring the Dynamic Map Plugin for hMod

The dynamic map plugin for hMod is awesome. If you haven't seen it, check it out on my server here:

mine.elmakers.com

The forum post is here, originally describing the plugin. It supports dynamic regeneration of map tiles (based on add/remove block notification), and live updating of player locations, and (of course) has a Google Maps client interface.

The newest version (as of this posting) also shows warp locations, home locations, and the spawn point. It even shows player face icons. (Awesome!)

It's definitely worth setting up on any Minecraft server, if you have enough control of the server to do so. It is a bit trickier to get going than your standard plugin, which is why I'm offering this tutorial. I'm hoping it helps!

Server Setup

Much of the server-side setup I have Shagnasticator's post on page 2 to thank for.

My server setup is CentOS, but this guide shouldn't be too different for other flavors of Linux.

First, get the plugin. Currently, in fescen9's signature, the link to the most recent is here:

http://www.fescen9.com/Minecraft/Plugins/DynamicMap.rar

The source code is in an SVN repository here: https://port70.net/svn/dynmap/trunk.  You only need the source if you want to modify the plugin.

Once you have downloaded the file, unrar it.You should see a map.jar, this is the actual plugin.

Setting Up the Plugin


Install map.jar like any other plugin- put it in the plugins folder, add it to "plugins" in server.properties, and then reload both the server config and the map plugin (or restart the server).

Configuration options go right in server.properties, and should be there after the plugin is loaded. The main thing you'll need to modify is "map-tilepath" (possibly- I left mine alone). Make note of "map-serverport", which should be 8123, and check out the other options.

Setting Up the Tiles Folder


Setting up the tiles folder is one of the trickiest parts. I don't claim to have done this the best or most secure way, so the standard disclaimers apply. Please feel free to add a comment if you've got a better setup and I'll be happy to modify this tutorial! And, please don't grief my server using the information I'm providing to try to help people...

So, I went in my web root- this is the folder where Apache serves up your web files. By default, this is /var/www/html. If you want your map to be in the root of your webserver, this is the folder you'll use.

Go into this folder and "mkdir tiles" to create the tiles folder. Make sure it is owned by the same user that the web server runs under (check the owner of "html", it may be root). And, here is the nasty part- make it world-writeable (777). There is probably a better way to do this, setting up a group shared by web and minecraft users, but I haven't gotten here yet, myself.

Now you have a "tiles" folder that the web service can access and that the minecraft user can write to.

Go back to your minecraft server folder, and create a symlink to the tiles folder: "ln -s /var/www/html/tiles tiles". This will let the plugin write there without having to fully path out the tiles folder.

There are obviously other ways to set up tiles so that the webserver can access it, but for me this was the easiest and least prone to errors.

Setting up the Webserver


The webserver is responsible for serving up 3 things to make the map work:

  • The map tiles, dynamically created by the plugin
  • The map index.html, javascript, images, and other static resource
  • An XHR interface for providing live information about the map (player locations, updated tiles, etc).
So far, the first part should be working. Load up your server, walk around a bit, break some blocks. Then go check your "tiles" folder- you should see some png's in there. If not, check server.log for access violation or other errors. If you can't find anything wrong, we may be stuck.

If you've got png's, then great! Let's get the map working. 

This part is pretty easy: first, we need to edit two lines in map.js (inside of the "web" folder from the RAR you downloaded), right at the very top:

tileUrl: Point this to the URL of your tile folder
updateUrl: Points to your update URL, which we'll set up later

If you're following this guide and are using the root of your webserver for your map, then you can just change the example domain name to your domain. Otherwise, change these URLs appropriately, and save the file.

If you don't have a domain, then you'll want to use the public IP address of your webserver.

Then, simply copy the files in the "web" folder to your "/var/www/html" folder on the webserver. You should now be able to navigate to your server and see the map load, and it should even show the tiles that you've created. Success! (Hopefully).

The only problem is you'll get the "error getting update data" message, and player locations/warps/etc won't be shown.

Setting up the Update URL

Now things get a little tricky, and I really have to rely on the groundwork laid out by ShagNasticator. 

The problem is that the plugin serves up its update information on port 8123. Most webservers are firewalled, and wouldn't let anyone connect to that port- and I'm not even sure that the XSS blocking wouldn't catch different ports anyway.

So, you've got to set Apache up to serve that port as a "virtual" address.

For CentOS, I did not have to do this part, but Shagnasticator mentions first having to turn on some Apache modules (all of this will be in httpd.conf - /etc/httpd/conf/httpd.conf on CentOS):

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Then, on to the important stuff- basically copy+paste this into your httpd.conf, at the very bottom- that's what I did.

<VirtualHost *:80>
RewriteEngine on
RewriteRule /up/(.*) http://localhost:8123/$1 [P,L]
</VirtualHost> 

<VirtualHost 127.0.0.1>
ServerName localhost
</Virtualhost>

<Proxy http://localhost:8123/*>
Order deny,allow
Allow from all
</Proxy>

This sets up a rewrite rule that will map "/up/" to port 8123 on your local machine. This means that the XHR requests sent by the map client will get routed to the plugin, which will be able to report back its status.

Restart apache (apachectl restart), and jump on your mapserver while logged into Minecraft.

If all went well, you should see your player show up!

If not, check the minecraft server logs and check the httpd logs for any errors. And, if all else fails, come back to the forums!