http://www.github.com/enebo/Purugin
Purugin is a Ruby-based plugin framework for Minecraft which is written on top of Bukkit.
Motivation
Minecraft is a fun game by itself. If it stayed the way it is today, then people would continue enjoying Minecraft for a long time to come. However, all players are critics and all players love the ability to change things in a game here and there. Since Minecraft is written in Java, many plugin initiatives have sprung up to allow just that. The sheer number of mods available for the game is staggering. In looking at the source of several of these mods one thing which struck me was....Damn! I would rather write these things in Ruby. Fortunately, JRuby exists...
Purugin is written using JRuby and it layers on top of Bukkit. Bukkit is an API which maps to the obfuscated Minecraft APIs and it also provides many conveniences for writing server-side plugins. The Bukkit API by itself is not particularly tough to use, but because it is Java and because it cannot make use of blocks/closures it ends up having more syntax/ceremony than what you can do in a Ruby syntax. Purugin is a Bukkit plugin which allows you to register plugins written in Ruby. Yay....
Getting Started
(Note: This assumes you have purchased and installed Minecraft already...kind of tough to mod a game you don’t actually have ;) )
In order to install Purugin you must first get CraftBukkit. CraftBukkit is a companion piece to the Bukkit library which manages Minecraft servers. Install CraftBukkit (instructions) and then get a copy of Purugin.jar and place it in your CraftBukkit plugins directory. Now also put in an example Purugin plugin player_joined.rb into the plugins directory as well. Finally, you need a copy of jruby-complete.jar (http://www.jruby.org/download) at the root of your CraftBukkit directory. Once you have did all this your CraftBukkit dir should now have these things added to it:
CraftBukkit/plugins/Purugin.jar
/player_joined.rb
/jruby-complete-1.6.1.jar
Now startup CraftBukkit:
java -Xms1024M -Xmx1024M -cp jruby-complete-1.6.1.jar:craftbukkit-0.0.1-SNAPSHOT.jar org.bukkit.craftbukkit.Main
When it starts you should see the console come up and you will see a couple of noteworthy lines:
17:38:36 [INFO] [PuruginPlugin] version 0.1 ENABLED
17:38:36 [INFO] [PlayerJoined] version 0.1 ENABLED
So, at this point if you run Minecraft and enter the Multiplayer game at localhost (or whatever host you are running your server), you should see the message: Player {your_name} has joined.

Let’s look at the source for the player_joined.rb plugin:
purugin('PlayerJoined', 0.1) do
def on_enable
# Tell everyone in players world that they have joined
event(:player_join) do |e|
e.player.world.players.each do |p|
p.send_message "Player #{e.player.name} has joined"
end
end
# Tell everyone in players world that they have quit
event(:player_quit) do |e|
e.player.world.players.each do |p|
p.send_message "Player #{e.player.name} has quit"
end
end
end
end
Just scanning down this source I think it is fairly obvious how your were sent the Player joined message. Let’s example a few other aspects of writing any plugin. For starters there is a purugin method. This method contains the name of the plugin and the version along with a block which is the logic for the plugin. Using a block-based method for this stuff is sometimes inadequate since block scoping is a little more limiting than defining a class. For a more traditional definition using a class look at https://github.com/enebo/Purugin/blob/master/examples/player_joined_full_class.rb. I prefer using the short method-based definition up until the point it becomes a pain. For short plugins like this the method-based definition makes the plugin that much more concise. To each their own...
The next interesting bit is the lifecycle method on_enable. There are three lifecycle methods you will be concerned with: on_load, on_enable, and on_disable. You can refer to Bukkit documentation for the exact definition, but I think they are fairly intuitive. For most people you probably will only use on_enable. on_load will sometimes be used if you want something loaded before any plugin in the system has been enabled.
Inside of on_enable you will typically register events. In this case, we register listeners for :player_joined and :player_quit, but there are many many many events that you can register. You can monitor virtually anything. See the examples directory in Purugin’s source for more. [Note: :player_joined or any event name is not actually a symbol in Bukkit. This is Purugin trying to make the API look a little cleaner. At this point the documentation for Purugin is lacking, but the source is fairly small and tables for events or block types will not take long to find. Please consider helping me document things via rdoc patches of documentation on the wiki associated with this project].
Early Days
At this point, I have made a small collection of examples that are included with the source. I recommend looking at these as a way to get started. commands.rb is a plugin for registering commands. locs_plus.rb is a plugin which uses commands.rb for registering it’s own commands. ports.rb is a simple teleporter plugin (out of specially marked signs) which shows how to look at blocks.
Over time, I (someone) will make some more guides and help flush out the API better. This is a very humble start with an API I knew very little about. Expect change and perhaps help facilitate that change via Github issues and pull requests (or editing the wiki).
This. Is. So. Awesome.
ReplyDeleteI had wished for quite a while that there was a ruby API to build minecraft plugins.
This is spectacular, and I'm so glad you've done the work to make it possible.
Thank you so much for this :D
Any recommendations for hosting companies? I'd rather not run the whole thing myself as I already have a full time job...
ReplyDeleteAwesome dispatch! I am indeed getting apt to over this info, is truly neighborly my buddy. Likewise fantastic blog here among many of the costly info you acquire. Reserve up the beneficial process you are doing here. 한국야동
ReplyDeleteAlso feel free to visit may web page 야한동영상
I am really happy to say it’s an interesting post to read. I learn new information from your article , you are doing a great job. Keep it up 야설
ReplyDeleteAlso feel free to visit may web page 한국야동
Wonderful web site. Plenty of helpful information here. I am sending it to a few pals and additionally sharing in delicious. And obviously, thank you to your sweat! 야동
ReplyDeleteAlso feel free to visit may web page 일본야동
Good way of explaining, and pleasant post to obtain information about my presentation focus, which i am going to present in college 한국야동
ReplyDeleteAlso feel free to visit may web page 야설
Stay up the good work! You know, many people are looking round for this info, you could aid them greatly.
ReplyDelete토토
온라인경마
경마사이트
There is definately a great deal too find out about this topic.
ReplyDeleteI love all of the points you have made.
카지노사이트
토토사이트
Awesome dispatch! I am indeed getting apt to over this info,Reserve up the beneficial process you are doing here.Dissertation Help Uk
ReplyDeleteIf Minecraft were to remain the same, it would be a great game in itself. But I don't know if it's luck or not, but Minecraft is not what it used to be, and it's not easy for people to learn to use. Coursework Writing Services
ReplyDeleteMinecraft is perhaps one of the best nonviolent, educational games available. It may teach children the principles of programming, teamwork, problem-solving, and project management, as well as providing a wonderful setting in which to promote creativity and "out of the box" thinking.
ReplyDeleteSource: Digital Marketing Services in Australia
ReplyDeleteThanks for sharing.I found a lot of interesting information here. A really good post, very thankful and hopeful that you will write many more posts like this one.Source: Web Design Bolt
Hello there and thank you for your information – I've definitely picked up anything new from right here. I did however expertise a few technical points using this website, since I experienced to reload the site a lot of times previous to I could get it to load properly. I had been wondering if your web host is OK?
ReplyDelete야한소설
대딸방
마사지
건전마사지
바카라사이트
Mine craft is one my most favorite game and i really enjoy it.
ReplyDeleteprofessional copywriting services
A Recruitment Management System (RMS) is a set of tools designed to automate and manage your organization's recruiting and staffing operations. From posting your jobs to keeping applicants connected and engaged throughout, Zoho Recruit's RMS lets you manage your entire recruiting process. I am using cordis.us services they offered large variety of business management services in affordable rates,deals in real estate softwares for large companies they have different packages for small medium and large corporate sectors for more information visit websites recruitment management software
ReplyDeleteYour post is so amazing i read this post it's very helpful for us. roseland furniture discount code We also provide a washing machine repair services.
ReplyDelete
ReplyDeleteThe global smart waste management market size was valued at $1,684.1 million in 2019, and is expected to reach $4,103.7 million by 2027, registering a CAGR of 15.3% from 2020 to 2027. Smart waste management is the concept that uses sensors in waste to track live status of city waste collection services when bins are ready to be emptied, or filled. It also monitors historical data collected by sensors and databases, which can be used to identify and optimize driver routes, fill patterns, reduce operational costs, and schedules. Remote monitoring, and IoT based waste bins are more feasible to collect waste effectively. It also reduces routing and fuel prices. The Smart Waste Management Market covers the trends that are promoting the growth of technologies, such as sensors, RFID, GPS, cloud-based software solutions for effectively managing the waste (from collection to disposal) generated across the residential and commercial sectors. The commercial sector includes waste generated from the food and beverages industry electronics manufacturers, pharmaceutical industries, paper industries, healthcare industries, among others.
Here if you like to see more of reports : Asia Pacific Vaccine Market, Micro Inverter Market, Albumin Market, Middle East and Africa Cybersecurity Market,Digital Blood Pressure Monitor Market, Vegetable Concentrates Market, Learning Management System Market, States Flooring Market, Sports and Energy Drinks Market, Brazil Healthcare, Sterilisation Services Market, Media Monitoring Tools Market
We will be perceived as the confided in discussion tax check car, for examination and answers lastly deals.
ReplyDeleteThe market for business jets has seen substantial growth due to factors such as the increasing number of staff and the introduction of fresh aircraft programs. Also, increased knowledge across different segments offers an enormous market opportunity for key players in the business jets market. The light aircraft segment is expected to grow at the fastest rate during the forecast period.
ReplyDeleteAlso Read: europe covid-19 diagnostics market, middle east and africa covid-19 diagnostics market
Marriage is a fantastic Thing to happen, we are happy you both have been working out your components well
ReplyDeletedua islamic anniversary wishes for husband
Stark tutor provides online physics tution for our students and in our online course library, which contains more than 350 questions covered.
ReplyDeleteI'm delighted to notice some excellent articles on your website. I sincerely appreciate it; thank you for sharing.
ReplyDeleteNew Jersey uncontested divorce lawyer
Students can expect timely delivery of their assignments from myassignmenthelp.sg . The team works efficiently to ensure that every assignment help Singapore is completed within the given deadline, allowing students to submit their work on time and without stress.
ReplyDeleteMinecraft the name is enough for me to read this blog post. Initially I thought that this post will show some mods or tricks in the game. After reading entire post, so much of information are working by the developers. This is amazing. Game developers has to be more knowledgeable. Really good. I like the way you explained about technical things in Minecraft. Thanks for sharing this beautiful post. Keep sharing more technical as well as game related post. DUI Lawyer Henrico VA
ReplyDeleteI found the discussion on code comments to be thought-provoking. While comments can be helpful in explaining complex logic or providing context, I agree with the author that self-explanatory code is ideal. Cheap Dissertation Writing Services UK
ReplyDeleteThis article is an absolute gem! 🌟 The insights shared here are truly eye-opening and inspiring. ¿Qué Rápidamente Puede Obtener una Divorciar en Nueva York? I'm grateful for the valuable information and fresh perspectives. Kudos to the author for delivering such uplifting content! Can't wait to see more posts like this. 💯
ReplyDeleteI learned something new from your essay; keep up the good work.
ReplyDeleteTEAS Test Online