Alejandro Martinez

BlogTagsPodcastPortfolio Youtube

17 January, 2015IoTGame DevelopmentScriptingLuaRuby🕐 2min read

Connecting Minecraft and the Real World™

For those who don’t know me I have to say that I’m a big fan of Minecraft (1 and 2). And I’ve always wanted to connect the things that happen in that virtual world with the things in our real world (and other people have done great things; House light sync, controlling a Christmas tree. Now that I have one of the pieces of the puzzle I am available to do it, so this morning I started writing some code and in a couple of hours I accomplished my objective.

We can think of connecting the two worlds as to different steps:

  • Extracting data from Minecraft to a real computer.
  • Make the real computer do something in the real world.

Note: obviously you can also do it the other way around. Change things in your Minecraft world in response of things that happen in the real world.

Update: Check this other post to know how I've sync the real weather of my city info Minecraft.

To extract information from Minecraft I’ve used ComputerCraft, a mod that adds computers and turtles to the game. I’ve used a computer with a simple program that detects the changes on a Redstone signal and writes the state into a file. That file is the bridge between Minecraft and your real computer.

{% highlight lua %} local SIDE = "back"

function fillFile(file) local signal = redstone.getInput(SIDE) file.write(signal) end

while true do f = fs.open('bridge.out','w') fillFile(f) f.close()

sleep(1) end {% endhighlight %}

Then I’ve wrote a script that reacts to changes in that file. Every time that the computer in Minecraft changes the file, the script on the real computer has the chance to do something.

{% highlight ruby %} require 'listen'

tolisten = "" // computer craft folder

previous = false

listener = Listen.to(tolisten, only: /.out$/) do |modified, added, removed| if modified.count > 0 then file = File.open(modified[1]) contents = file.read file.close() puts "-" + contents + "-" if contents.include? "true" then if !previous then puts "on" system "wemo switch sol on" end previous = true else if previous then puts "off" system "wemo switch sol off" end previous = false end puts "done" end end listener.start # not blocking sleep {% endhighlight %}

This is the last piece of the puzzle that I was talking about, a WeMo Switch. You need something that you can control with a computer, and now that Home Automation (domotique) is so accessible is a good moment to try things like this. As you can see I use ouimeaux to send commands to the WeMo Switch. It’s the most reliable API that I’ve found to do it.

So that’s it! Combining Minecraft, Computercraft, LUA, Ruby, a Python program and a WeMo Switch I can connect Minecraft with the Real World™. A funny Saturday morning! :D

👉🏻 If you have any feedback you can reach me at alexito4

Real world weather into MinecraftPost-Publicity Personalities

Alejandro Martinez
alexito4@gmail.com

Buka pintu

alexito4
alexito4