<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.hackslashmine.net/hsmwiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.hackslashmine.net/hsmwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=69.246.185.35</id>
		<title>Hack/Mine Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.hackslashmine.net/hsmwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=69.246.185.35"/>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Special:Contributions/69.246.185.35"/>
		<updated>2026-07-04T07:33:25Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Spellscript</id>
		<title>Spellscript</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Spellscript"/>
				<updated>2013-06-11T01:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: /* Spellscript Hooks in Hack/Mine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:ss_ide.png|400px|thumb|right|The Spellscript IDE displaying the contents of ''maze.ss'']]&lt;br /&gt;
&lt;br /&gt;
Spellscript is a programming language for Minecraft, introduced in Hack/Mine v0.6.4 and planned for eventual status as an independent Minecraft mod.  Spellscript allows you to mod Minecraft while in-game, ''no recompilation required.''  In other words, there's no installation hassle, no fiddling with jars, etc-- just writing or copy/pasting code into an in-game text editor, and you're done.  Minecraft objects are represented in Spellscript as first-class objects, just like they are in Java, and you're given complete access to JVM libraries, allowing for all sorts of amazing possibilities...&lt;br /&gt;
&lt;br /&gt;
Spellscript is still in the early development stages, so:&lt;br /&gt;
*Note that the amount of things that can be scripted or modified is still growing (see the section below for currently available hooks)&lt;br /&gt;
*Be prepared to report bugs!&lt;br /&gt;
&lt;br /&gt;
==Important Places==&lt;br /&gt;
*For a Spellscript tutorial geared towards beginner programmers, see [[Spellscript Tutorial]].&lt;br /&gt;
*For details on how to use the IDE (i.e. code editor), see [[Spellscript IDE]].&lt;br /&gt;
*For a list of bugs, see [[Spellscript Bugs]] (since we're in the initial phases, this is a '''must read'''!)&lt;br /&gt;
*For a [http://www.sublimetext.com/2 Sublime Text 2] language package, see [http://www.mediafire.com/download.php?foak1j6b381huzz here].&lt;br /&gt;
*For a general-purpose language reference, read on...&lt;br /&gt;
&lt;br /&gt;
==Spellscript Hooks in Hack/Mine==&lt;br /&gt;
Hack/Mine outsources a growing amount of its functionality to Spellscript, such that users can thoroughly customize their RPG experience.  Currently, all of the spells and item effects are implemented with Spellscript.  Also, currently, '''only admins can create Spellscript scripts!'''  Of course, users can ''run'' these scripts, provided they've been setup to do so.&lt;br /&gt;
&lt;br /&gt;
Admins may currently employ Spellscript in the following ways:&lt;br /&gt;
&lt;br /&gt;
===In-Game Hooks===&lt;br /&gt;
*[[Spellscript blocks]] (placeable from the Creative Inventory)&lt;br /&gt;
*[[Schedulable scripts]] (brought up by pressing 'tilde' by default)&lt;br /&gt;
*[[Console scripts]] (brought up via 'ss edit &amp;lt;scriptName&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
===External Hooks===&lt;br /&gt;
*Command-line Access&lt;br /&gt;
*Files in the &amp;quot;.minecraft/spells&amp;quot; directory&lt;br /&gt;
&lt;br /&gt;
==Language Mechanics==&lt;br /&gt;
{{mbox|text=This section is totally a work-in-progress, y'all.}}&lt;br /&gt;
{{mbox|text=Note: you'll need to be viewing Minecraft's console output if you want to see expressions output via the ''print'' statement ([[Viewing Spellscript Output|instructions]]).}}&lt;br /&gt;
&lt;br /&gt;
Spellscript is best construed as a healthy mix of Java and Python.  Like Java, it is statically typed and features single-inheritance.  Like Python, lexical scopes are signified by indentation and the syntax is relatively terse.  Where Java would normally require explicit typing, Spellscript does its best to infer type implicitly.  Where Python's flexibility allows unsound behavior, Spellscript introduces robustness to keep things sane.&lt;br /&gt;
&lt;br /&gt;
===Basic Syntax===&lt;br /&gt;
At the highest level, Spellscript is a list of ''statements''.  As mentioned, lexical scoping is accomplished in Spellscript via indentation.  Additionally, statements in Spellscript are delimited with newlines-- semi-colons may be used to concatenate statements into a single-line snippet of code.&lt;br /&gt;
&lt;br /&gt;
Here's the context-free grammar (CFG) for Spellscript-- note that &amp;quot;decl&amp;quot; is short for &amp;quot;declaration&amp;quot;, and that ''identifiers'' are any string of characters containing only letters, numbers, and underscores, and not beginning with a number:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;script&amp;gt; =&amp;gt; &amp;lt;statement_list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;statement_list&amp;gt; =&amp;gt; &amp;lt;statement_line&amp;gt; [NEW_LINE &amp;lt;statement_list&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;statement_line&amp;gt; =&amp;gt; &amp;lt;statement&amp;gt; [';' &amp;lt;statement_line&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;statement&amp;gt; =&amp;gt; 'pass'&lt;br /&gt;
               'print' &amp;lt;expression&amp;gt;&lt;br /&gt;
               &amp;lt;variable_decl&amp;gt;&lt;br /&gt;
               &amp;lt;assignment&amp;gt;&lt;br /&gt;
               &amp;lt;control_statement&amp;gt;&lt;br /&gt;
               &amp;lt;function_decl&amp;gt;&lt;br /&gt;
               &amp;lt;class_decl&amp;gt;&lt;br /&gt;
               'return' [&amp;lt;expression&amp;gt;]&lt;br /&gt;
               'break' | 'continue'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;variable_decl&amp;gt; =&amp;gt; &amp;lt;type&amp;gt; &amp;lt;inner_var_decl&amp;gt;&lt;br /&gt;
&amp;lt;inner_var_decl&amp;gt; =&amp;gt; IDENTIFIER ['=' &amp;lt;expression&amp;gt;] [',' &amp;lt;inner_var_decl&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;type&amp;gt; =&amp;gt; &amp;lt;basic_type&amp;gt; | &amp;lt;class_type&amp;gt; | (&amp;lt;type&amp;gt; '[' ']') | &amp;lt;func_ptr_type&amp;gt;&lt;br /&gt;
&amp;lt;basic_type&amp;gt; =&amp;gt; 'bool' | 'int' | 'float' | 'double' | 'str'&lt;br /&gt;
&amp;lt;class_type&amp;gt; =&amp;gt; IDENTIFIER ['&amp;lt;' &amp;lt;class_type&amp;gt; {',' &amp;lt;class_type&amp;gt;} '&amp;gt;']&lt;br /&gt;
&amp;lt;func_ptr_type&amp;gt; =&amp;gt; &amp;lt;type&amp;gt; '$' '(' [&amp;lt;type&amp;gt; {',' &amp;lt;type&amp;gt;}] ')'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;assignment&amp;gt; =&amp;gt; IDENTIFIER ('=' | '+=' | '-=' | '/=' | '%=')&amp;lt;expression&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''expression'',  ''control_statement'', ''function_decl'', ''class_decl'', will all be defined later.&lt;br /&gt;
&lt;br /&gt;
===Type System===&lt;br /&gt;
Spellscript features classes, strings, lists, and function pointers (which follow a pass-by-reference model), and primitive types (which follow a pass-by-value model).  The primitive types are analagous to those of Java: ''bool'', ''long'', ''int'', ''short'', ''char'', ''byte'', ''float'', and ''double''.&lt;br /&gt;
&lt;br /&gt;
Assuming you had a class ''MyClass'' in scope, and a function ''int someFunction(int, float)'' in scope, some variable declarations would look like...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;bool b = True&lt;br /&gt;
int i = 3&lt;br /&gt;
float f = 2f&lt;br /&gt;
double d = 1d&lt;br /&gt;
str s = &amp;quot;Hello world!&amp;quot;&lt;br /&gt;
str t = None&lt;br /&gt;
MyClass m = MyClass()&lt;br /&gt;
int$(int, float) funcPtr = someFunction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Furthermore, Spellscript features the ''var'' keyword, analagous to that of C#.  A variable declaration with ''var'' will infer the type of the declaration for you, at compile-time.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;var mc = MyClass()&lt;br /&gt;
var s = &amp;quot;Hi again!&amp;quot;&lt;br /&gt;
var fp = someFunction&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A notable distinction from Python is that variables '''must''' be declared before they are used.&lt;br /&gt;
&lt;br /&gt;
====Generic Types====&lt;br /&gt;
Spellscript also features generic types, analogous to those of Java.  Classes may accept ''type parameters'' when instantiated, which the current implementation erases at compile-time.  Methods may also accept type parameters, which the compiler will infer if omitted from method calls.  [http://docs.oracle.com/javase/tutorial/java/generics/ This tutorial on Java generics] would be an excellent read on the topic, especially since there are only a few differences in generics between Spellscript and Java.&lt;br /&gt;
&lt;br /&gt;
Generics in Spellscript currently differ from those of Java in the following ways:&lt;br /&gt;
*There are no &amp;quot;raw types&amp;quot;&lt;br /&gt;
*Regarding wildcards, &amp;quot;? extends X&amp;quot; and &amp;quot;? super X&amp;quot; are replaced with &amp;quot;out X&amp;quot; and &amp;quot;in X&amp;quot;, respectively.&lt;br /&gt;
*While type parameters may be passed (e.g., to existing methods in Java libraries), type parameters have yet to be made declarable.  I.e., you cannot yet define classes or methods accepting type parameters.&lt;br /&gt;
&lt;br /&gt;
===Expressions===&lt;br /&gt;
The best way to describe expressions in a language is define some basic literals and the operations available on them, along with their order of precedence.  So, here you are...&lt;br /&gt;
&lt;br /&gt;
====Literals====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type || Literals&lt;br /&gt;
|-&lt;br /&gt;
! bool&lt;br /&gt;
| True, False&lt;br /&gt;
|-&lt;br /&gt;
! int&lt;br /&gt;
| 0, -15, 2, 0xf931, etc&lt;br /&gt;
|-&lt;br /&gt;
! float&lt;br /&gt;
| 3.1412f, 1f, -3.f, 0F, .1F, etc&lt;br /&gt;
|-&lt;br /&gt;
! double&lt;br /&gt;
| 3.1412, 1., -3d, 0D, etc&lt;br /&gt;
|-&lt;br /&gt;
! string&lt;br /&gt;
| None, &amp;quot;hello world&amp;quot;, &amp;quot;oh hai!&amp;quot;, &amp;quot;&amp;quot;, etc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that all reference-types (strings, class instances, function pointers, etc) may be assigned ''None''.&lt;br /&gt;
&lt;br /&gt;
Literals for all primitives are still being added, but until then, you may safely rely on implicit and explicit coercion to do the job.  (In the case of literals, the coercion will generally occur at compile-time.)&lt;br /&gt;
&lt;br /&gt;
====Operations====&lt;br /&gt;
This table lists all the available operations in their order of precedence.  In other words, operations towards the top of the table are bound later than operations toward the bottom (so for example, ''a and b or c and d'' would be executed as ''(a and b) or (c and d)'')&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Operator || Description || Order&lt;br /&gt;
|-&lt;br /&gt;
! = += -= *= /= %=&lt;br /&gt;
| Assignment, Compound Assignment&lt;br /&gt;
| Right-to-Left&lt;br /&gt;
|-&lt;br /&gt;
! is, is not&lt;br /&gt;
| Identity Tests&lt;br /&gt;
| Right-to-Left&lt;br /&gt;
|-&lt;br /&gt;
! == !=&lt;br /&gt;
| Equality Tests&lt;br /&gt;
| Right-to-Left&lt;br /&gt;
|-&lt;br /&gt;
! isa, isnota, as&lt;br /&gt;
| Type Tests, Safe-Cast/Coercion&lt;br /&gt;
| --&lt;br /&gt;
|-&lt;br /&gt;
! or&lt;br /&gt;
| Boolean OR&lt;br /&gt;
| Left-to-Right&lt;br /&gt;
|-&lt;br /&gt;
! and&lt;br /&gt;
| Boolean AND&lt;br /&gt;
| Left-to-Right&lt;br /&gt;
|-&lt;br /&gt;
! not ''x''&lt;br /&gt;
| Inversion&lt;br /&gt;
| Right-to-Left&lt;br /&gt;
|-&lt;br /&gt;
! in, not in&lt;br /&gt;
| Containment Testing&lt;br /&gt;
| Left-to-Right&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt; &amp;lt;= &amp;gt;= &amp;gt;&lt;br /&gt;
| Comparison&lt;br /&gt;
| Left-to-Right&lt;br /&gt;
|-&lt;br /&gt;
! + -&lt;br /&gt;
| Addition, Subtraction&lt;br /&gt;
| Left-to-Right&lt;br /&gt;
|-&lt;br /&gt;
! * / %&lt;br /&gt;
| Multiplication, Division, Modulo&lt;br /&gt;
| Left-to-Right&lt;br /&gt;
|-&lt;br /&gt;
! -''x''&lt;br /&gt;
| Negation&lt;br /&gt;
| Right-to-Left&lt;br /&gt;
|-&lt;br /&gt;
! ''**''&lt;br /&gt;
| Exponentiation&lt;br /&gt;
| Right-to-Left&lt;br /&gt;
|-&lt;br /&gt;
! ''x''.''y'', ''x''[''y''], (''x'')&lt;br /&gt;
| Method/Field Reference, Array Indexing, Grouping&lt;br /&gt;
| Left-to-Right&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Control Statements===&lt;br /&gt;
The general structure of a ''&amp;lt;control statement&amp;gt;'' is as follows:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;control_statement&amp;gt; =&amp;gt; &amp;lt;control_header&amp;gt; ':' &amp;lt;suite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;suite&amp;gt; =&amp;gt; &amp;lt;statement_line&amp;gt;&lt;br /&gt;
           INDENT &amp;lt;statement_list&amp;gt; UNINDENT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;control_header&amp;gt; =&amp;gt; ('while' | 'until') &amp;lt;expression&amp;gt;&lt;br /&gt;
                    ('if' | 'elif') &amp;lt;expression&amp;gt;&lt;br /&gt;
                    'else'&lt;br /&gt;
                    'for' [&amp;lt;type&amp;gt;] IDENTIFIER 'in' &amp;lt;expression&amp;gt; ['to' &amp;lt;expression&amp;gt;]&lt;br /&gt;
                    'try'&lt;br /&gt;
                    'except' &amp;lt;type&amp;gt; IDENTIFIER&lt;br /&gt;
                    'finally'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
And here are some use cases:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;int i = 0&lt;br /&gt;
&lt;br /&gt;
while i &amp;lt; 15:&lt;br /&gt;
    print &amp;quot;loop!&amp;quot;&lt;br /&gt;
    i += 1&lt;br /&gt;
&lt;br /&gt;
until i &amp;lt;= 0:&lt;br /&gt;
    print &amp;quot;more loop!&amp;quot;&lt;br /&gt;
    i -= 1&lt;br /&gt;
&lt;br /&gt;
if i == 0:&lt;br /&gt;
    print &amp;quot;yep, i sure is 0!&amp;quot;&lt;br /&gt;
elif i &amp;gt; 0:&lt;br /&gt;
    print &amp;quot;i is positive!&amp;quot;&lt;br /&gt;
else:&lt;br /&gt;
    print &amp;quot;i is negative!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for i in [3, 4, 2, 17]:&lt;br /&gt;
    print i&lt;br /&gt;
&lt;br /&gt;
for i in 0 to 15:&lt;br /&gt;
    print i&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    print &amp;quot;try!&amp;quot;&lt;br /&gt;
except Error e:&lt;br /&gt;
    print e&lt;br /&gt;
finally:&lt;br /&gt;
    print &amp;quot;finally!&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Careful with the looping constructs: as with any programming language, getting stuck in an infinite loop is a real possibility.&lt;br /&gt;
&lt;br /&gt;
The for loop can iterate over either a list or a range of integers over ''[bound1..bound2)''.  Note that if the second bound is less than or equal to the first, no iteration will take place.  Also, note that if the for loop's optional component is omitted and the first bound is an integer, it will treat the first bound as &amp;quot;0&amp;quot; and the second bound as the one it was given.&lt;br /&gt;
&lt;br /&gt;
''break'' and ''continue'' statements are available within the ''while'', ''until'', and ''for'' control-statements.  The ''break'' statement will exit the inner-most applicable construct, whereas ''continue'' will skip to its next iteration.  The ''return'' statement has the effect of ceasing all control-statements immediately, up until the &amp;quot;top level&amp;quot; is reached (generally, the current function declaration's lowest scope).  Naturally, if the function has a return type, ''return &amp;lt;value&amp;gt;'' may be used to return that value.  (If no return type is specified but values are given, one will be inferred for the function declaration.)&lt;br /&gt;
&lt;br /&gt;
===Lists===&lt;br /&gt;
A List is an ordered collection of objects.  Lists have one type parameter, which limits which kinds of objects can be added to them, but guarantee which kind of objects we retrieve from them.  Here's an example of List creation and usage:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;int[] numbers = [2, 4, 5, 4]&lt;br /&gt;
float[] reals = &amp;lt;float&amp;gt;[0f, 1f, 4f]&lt;br /&gt;
int[] emptyList = &amp;lt;int&amp;gt;[]&lt;br /&gt;
&lt;br /&gt;
for var n in numbers:&lt;br /&gt;
    print n&lt;br /&gt;
&lt;br /&gt;
numbers.add(17)&lt;br /&gt;
&lt;br /&gt;
for int i in numbers.size():&lt;br /&gt;
    print numbers[i]&lt;br /&gt;
&lt;br /&gt;
for var j in [1, 2, 3, 4, 5]:&lt;br /&gt;
    print j&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the beginning, you'll notice the list type may be either explicitly given or omitted-- if the list is empty, the type ''must'' be made explicit, or else the compiler won't be able to deduce it's type and will throw an error.&lt;br /&gt;
&lt;br /&gt;
We then iterate through each element of the list, and print it to the console.  Next, we append '17' to the list, then print the whole thing again.&lt;br /&gt;
&lt;br /&gt;
Finally, we show a convenient way of iterating through some specific numbers, simply by instantiating the list in the for loop's declaration.&lt;br /&gt;
&lt;br /&gt;
===Maps===&lt;br /&gt;
A Map is a collection of associations from one type of object to another (keys and values, respectively).  Essentially, values may be added to the Map along with a unique key, by which the value may later be retrieved.  Maps accept two type parameters, for types of keys and values, respectively.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;var animalNoises = { &amp;quot;dog&amp;quot; : &amp;quot;bark&amp;quot;, &amp;quot;duck&amp;quot; : &amp;quot;quack&amp;quot; }&lt;br /&gt;
Map&amp;lt;Str, Int&amp;gt; bookRankings = { &amp;quot;Huck Finn&amp;quot; : 4, &amp;quot;The Grapes of Wrath&amp;quot; : 1 }&lt;br /&gt;
Map&amp;lt;Int, Int&amp;gt; emptyMap = &amp;lt;Int, Int&amp;gt;{}&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Animal noises:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for var entry in animalNoises.entrySet():&lt;br /&gt;
    print &amp;quot;The &amp;quot; + entry.getKey() + &amp;quot; goes '&amp;quot; + entry.getValue() + &amp;quot;'!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
animalNoises[&amp;quot;frog&amp;quot;] = &amp;quot;ribbit&amp;quot;&lt;br /&gt;
animalNoises[&amp;quot;cow&amp;quot;] = &amp;quot;moo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;&amp;quot;&lt;br /&gt;
print &amp;quot;New noises:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for var key in animalNoises.keySet():&lt;br /&gt;
    print &amp;quot;The &amp;quot; + key + &amp;quot; goes '&amp;quot; + animalNoises[key] + &amp;quot;'!&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the beginning, you'll notice the map's types may be either explicitly given or omitted-- if the map is empty, the type ''must'' be made explicit, or else the compiler won't be able to deduce it's types and will throw an error.&lt;br /&gt;
&lt;br /&gt;
We then iterate through each entry of the map, and print it to the console.  Next, we add a few entries to the map, then print the whole thing again.&lt;br /&gt;
&lt;br /&gt;
===Functions===&lt;br /&gt;
A function is essentially a snippet of code that can be defined then executed later (or 'declared' and 'called' later, in programmer jargon).  Functions can accept ''parameters'', which are basically variables you can pass it which can in turn be used by the function itself.  Functions may also optionally ''return'' a variable to the caller.  The CFG for a function declaration is as follows:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;function_decl&amp;gt; =&amp;gt; 'def' IDENTIFIER '(' [&amp;lt;param_list&amp;gt;] ')' ['as' &amp;lt;return_type&amp;gt;] ':' &amp;lt;suite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;return_type&amp;gt; =&amp;gt; &amp;lt;type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;param_list&amp;gt; =&amp;gt; &amp;lt;parameter&amp;gt; [',' &amp;lt;param_list&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;parameter&amp;gt; =&amp;gt; &amp;lt;type&amp;gt; IDENTIFIER&lt;br /&gt;
&lt;br /&gt;
&amp;lt;suite&amp;gt; =&amp;gt; &amp;lt;statement_line&amp;gt;&lt;br /&gt;
           INDENT &amp;lt;statement_list&amp;gt; UNINDENT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
And here are some example function declarations and calls:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;def helloWorld():&lt;br /&gt;
    print &amp;quot;Hello world!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Print &amp;quot;Hello world!&amp;quot; to the console&lt;br /&gt;
helloWorld()&lt;br /&gt;
&lt;br /&gt;
def foo(int a, int b) as int:&lt;br /&gt;
    return a + b&lt;br /&gt;
&lt;br /&gt;
# Print '5' to the console&lt;br /&gt;
print foo(2, 3)&lt;br /&gt;
&lt;br /&gt;
# This time, we omit the return type and Spellscript infers it automatically&lt;br /&gt;
def bar(int x):&lt;br /&gt;
    return x * 2&lt;br /&gt;
&lt;br /&gt;
# Print '14' to the console&lt;br /&gt;
print bar(foo(3, 4))&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Classes and Objects===&lt;br /&gt;
Like many programming languages, Spellscript is ''object-oriented''.  This basically means you can organize your code into ''classes'' (or types), creates ''instances'' of those classes, then pass those instances around just like any other variable.  Special functions called ''methods'' may bound to classes, and called through instances of those classes via the ''dot operator'' ('.').  Variables termed ''fields'' may also be bound to classes, meaning instances of those classes will have those variables bound to them, and may also be accessed via the dot operator.&lt;br /&gt;
&lt;br /&gt;
In Spellscript, classes may also ''inherit'' from other classes and ''override'' their methods (in C++ jargon, all methods in Spellscript are virtual).  Spellscript follows a single-inheritance model, and will feature Java-style multiple-inheritance with ''interfaces'' in the future.&lt;br /&gt;
&lt;br /&gt;
The CFG for a class declaration is as follows:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;class_decl&amp;gt; =&amp;gt; 'class' IDENTIFIER ['(' IDENTIFIER ')'] ':' INDENT ('pass' | &amp;lt;class_body&amp;gt;) UNINDENT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class_body&amp;gt; =&amp;gt; &amp;lt;method_decl&amp;gt; | &amp;lt;field_decl&amp;gt; [NEWLINES &amp;lt;class_body&amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;field_decl&amp;gt;'' is a special kind of variable declaration, since it must not be an assignment-declaration (this may be supported in the future.)  For now, initial assignments should occur in the ''constructor'', which will be discussed later.&lt;br /&gt;
&lt;br /&gt;
In the case of ''&amp;lt;method_decl&amp;gt;'', 'def' may be replaced with 'redef' if requirement of an overridden method is desired.  Also note that, unlike Python (and as was previously required), there is no 'self' parameter on methods.&lt;br /&gt;
&lt;br /&gt;
Here's an example class declaration, creation, and method call:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;class MyClass:&lt;br /&gt;
&lt;br /&gt;
    int my_field&lt;br /&gt;
&lt;br /&gt;
    def __init__():&lt;br /&gt;
        self.my_field = 2&lt;br /&gt;
&lt;br /&gt;
    def someMethod(int i):&lt;br /&gt;
        return self.my_field * i&lt;br /&gt;
&lt;br /&gt;
MyClass some_class = MyClass()&lt;br /&gt;
print some_class.someMethod(3)&lt;br /&gt;
&lt;br /&gt;
# prints &amp;quot;6&amp;quot; to the console!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice two method definitions in the class body: the first is a special method called the ''constructor'', whereas the second is just a regular method accepting one parameter, ''i''.  In the above example, calling &amp;quot;some_class.someMethod(3)&amp;quot; passes &amp;quot;some_class&amp;quot; as the ''self'' parameter and ''3'' as the ''i'' parameter.&lt;br /&gt;
&lt;br /&gt;
The ''constructor'' is declared by specifying a method with name ''__init__'', and is called when the class is first instantiated.  Like any other method, it can accept an arbitrary set of parameters; however, its return type must remain unspecified.  A class instantiation is simply a function call with the class's name as the function name, and a set of parameters passed to it as defined by the constructor-- the newly created class instance is the instantiation's return value.&lt;br /&gt;
&lt;br /&gt;
===Function Pointers===&lt;br /&gt;
Function pointers' syntax is highly subject to change at the time of this writing, so if things stop working (or there's any general doubt), consult this section of the wiki for the current syntax.&lt;br /&gt;
&lt;br /&gt;
The type of a function pointer is declared as follows: ''&amp;lt;param_type&amp;gt; '$' '(' [&amp;lt;param_type&amp;gt; {',' &amp;lt;param_type&amp;gt;}] ')' ''&lt;br /&gt;
&lt;br /&gt;
Meanwhile, a function pointer is ''referenced'' as follows: '' 'IDENTIFIER '$' '(' [&amp;lt;param&amp;gt; {',' &amp;lt;param&amp;gt;}] ')' '', where ''&amp;lt;param&amp;gt;'' is '' '$'&amp;lt;param_type&amp;gt; | &amp;lt;expression&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Here's some code to demonstrate valid usage:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;def globalFunc(int i, int j):&lt;br /&gt;
  return i + j&lt;br /&gt;
&lt;br /&gt;
def execute(int$(int, int) func, int a, int b):&lt;br /&gt;
  return func(a, b)&lt;br /&gt;
  &lt;br /&gt;
print execute(globalFunc($int, $int), 4, 5)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Function pointers can also have variables bound to them, resulting in a function pointer with the newly bound parameters removed.  Consider the following:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;def globalFunc(int i, int j):&lt;br /&gt;
  return i + j&lt;br /&gt;
&lt;br /&gt;
int$(int) ptr = globalFunc$($int, 3)&lt;br /&gt;
print ptr(4)&lt;br /&gt;
# 7 should be printed to the console&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is implicitly what happens when a function pointer is referenced from a class instance (i.e. the instance is bound to the function pointer as the hidden ''self'' parameter).&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Dire_Chicken</id>
		<title>Dire Chicken</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Dire_Chicken"/>
				<updated>2013-06-07T19:36:39Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:seethewing.png|thumb|right|An image of a Dire Chicken which spawned with a different name and a colour difference/palette swap.]]'''Dire Chickens '''are a mob exclusive to the Hack/Mine mod.&lt;br /&gt;
&lt;br /&gt;
Dire Chickens can spawn in any hazardous biome, and can also spawn from Dire Chicken Spawners. Dire Chickens also have the ability to hover/flutter like normal chickens, which can become a nuisance. They have low HP and inflict a moderate amount of damage, reaching deadly amounts in the higher levels.&lt;br /&gt;
&lt;br /&gt;
[[File:2012-04-25_16.49.17.png|right|thumb|350px|Dire Chickens have a similar texture to regular Chickens, yet their eyes are red and their feathers are slightly darker.]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mobs]]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Dire_Chicken</id>
		<title>Dire Chicken</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Dire_Chicken"/>
				<updated>2013-06-07T19:36:30Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:seethewing.png|thumb|right|An image of a Dire Chicken which spawned with a different name and a colour difference/palette swap.]]'''Dire Chickens '''are a mob exclusive to the Hack/Mine mod.&lt;br /&gt;
&lt;br /&gt;
Dire Chickens can spawn in any hazardous biome, and can also spawn from Dire Chicken Spawners. Dire Chickens also have the ability to hover/flutter like normal chickens, which can become a nuisance. They have low HP and inflict a moderate amount of damage, reaching deadly amounts in the higher levels.&lt;br /&gt;
&lt;br /&gt;
[[File:2012-04-25_16.49.17.png|right|thumb|350px|Dire Chickens have a similar texture to regular Chickens, yet their eyes are red and their feathers are slightly darker.]]&lt;br /&gt;
&lt;br /&gt;
[http://www.google.com google]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mobs]]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T03:43:49Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
[http://www.google.com goggle]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T03:40:25Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
[http://www.yahoo.com goggle]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T03:40:09Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
[http://www.google.com goggle]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T03:39:59Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
[http://www.google.com  google]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T03:39:44Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
[http://www.google.com google]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T02:59:06Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T02:58:53Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
== Test! ==&lt;br /&gt;
[http://www.google.com google]&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T00:35:29Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
== Test! ==&lt;br /&gt;
Test this!&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Main_Page"/>
				<updated>2013-06-07T00:29:15Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
&lt;br /&gt;
== Test! ==&lt;br /&gt;
Test this not!&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/Spellscript_Tutorial</id>
		<title>Spellscript Tutorial</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/Spellscript_Tutorial"/>
				<updated>2013-02-23T20:52:40Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: Created page with &amp;quot;This is a guide on how to get started creating Spellscript scripts in Minecraft.  See Spellscript for a general language reference-- otherwise, read on...  ==Using Spellsc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a guide on how to get started creating Spellscript scripts in Minecraft.  See [[Spellscript]] for a general language reference-- otherwise, read on...&lt;br /&gt;
&lt;br /&gt;
==Using Spellscript-Blocks==&lt;br /&gt;
To get started, go ahead and place a Spellscript-Block as an Op on a server (you can find them in the Creative inventory.)  By default, it's name will be &amp;quot;Untitled Spellscript-Block&amp;quot;, and it's content will be &amp;quot;pass&amp;quot; (a statement which equates to &amp;quot;Do nothing&amp;quot;).  For your first program, we're going to print &amp;quot;Hello world!&amp;quot; to your chat screen!  Simply replace &amp;quot;pass&amp;quot; with the following:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;if activator is None:&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
if not (activator instanceof Player):&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
Player player = activator as Player&lt;br /&gt;
player.tell(&amp;quot;Hello world!&amp;quot;)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We'll break this down and explain what's happening, but first, go ahead and left-click the block to make sure everything's working.  Was &amp;quot;Hello world!&amp;quot; printed on your chat console?  Good!  You've written your first Spellscript script!  Pretty simple, sure, but it's a good starting point.&lt;br /&gt;
&lt;br /&gt;
''activator'' is a variable referring to the entity that activated the block (in this case, you!) ''None'' is a special value indicating a value of &amp;quot;nothing&amp;quot;.  If ''activator'' is ''None'', the block wasn't activated directly by an entity, so we don't do anything-- thus, we ''return'', which means we cease execution, basically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;to be continued...&amp;gt;&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	<entry>
		<id>http://www.hackslashmine.net/hsmwiki/The_Hack/Mine_Team</id>
		<title>The Hack/Mine Team</title>
		<link rel="alternate" type="text/html" href="http://www.hackslashmine.net/hsmwiki/The_Hack/Mine_Team"/>
				<updated>2012-06-23T08:12:25Z</updated>
		
		<summary type="html">&lt;p&gt;69.246.185.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Frizzil|Frizzil]]: The creator of this amazing mod. He is awesome and deserves wan mirrion dorra for being awesome. Hack/Mine will change your entire Minecraft experience; you may never want to go back to regular MC again.&lt;/div&gt;</summary>
		<author><name>69.246.185.35</name></author>	</entry>

	</feed>