<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ minecraft - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ minecraft - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 29 May 2026 23:04:31 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/minecraft/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Code a Minecraft Clone Using React and Three.js ]]>
                </title>
                <description>
                    <![CDATA[ It may not be possible to code a Minecraft clone in 30 seconds, but you can definitely create one in under two hours. We just published a course on the freeCodeCamp.org YouTube channel that will teach you how to create a fully-functional Minecraft cl... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/code-a-minecraft-clone-using-react-and-three-js/</link>
                <guid isPermaLink="false">66b2012fcfbefba140e2480a</guid>
                
                    <category>
                        <![CDATA[ minecraft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Tue, 20 Sep 2022 19:36:37 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/09/minecraftclone2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>It may not be possible to code a <a target="_blank" href="https://www.youtube.com/watch?v=MAlSjtxy5ak">Minecraft clone in 30 seconds</a>, but you can definitely create one in under two hours.</p>
<p>We just published a course on the freeCodeCamp.org YouTube channel that will teach you how to create a fully-functional Minecraft clone using React, JavaScript, and Three.js.</p>
<p>Daniel Bark created this course. Daniel is a senior software engineer from Sweden and is an expert with Three.js.</p>
<p>Three.js is a JavaScript 3D library that allows developers to create and display animated 3D computer graphics in web browsers.</p>
<p>In this course, you will create a game that supports five Minecraft block types. It will include moving, jumping, switching and placing blocks, saving, and more.</p>
<p>You will learn about many React concepts such as useState, useEffect, useRef and custom Hooks for State management. And you will be able to apply the principles to create other 3D games in JavaScript.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/giphy--3-.gif" alt="Image" width="600" height="400" loading="lazy">
<em>This is not in the game.</em></p>
<p>Here are the sections covered in this course:</p>
<ul>
<li>Boilerplate</li>
<li>Sky</li>
<li>Textures</li>
<li>Ground</li>
<li>Player</li>
<li>Keyboard input</li>
<li>Movement</li>
<li>First person camera</li>
<li>State management</li>
<li>Cube component</li>
<li>Add/Remove Cubes</li>
<li>Texture Selector</li>
<li>Save world</li>
<li>Hover cubes</li>
<li>Outro</li>
</ul>
<p>Watch the full course on <a target="_blank" href="https://youtu.be/qpOZup_3P_A">the freeCodeCamp.org YouTube channel</a> (2-hour watch).</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/qpOZup_3P_A" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Minecraft Forge: How to Download, Install, and Use Forge ]]>
                </title>
                <description>
                    <![CDATA[ If you are reading this article you probably already know Minecraft. We use Forge to manipulate the game Minecraft to make it do what we want. This could be anything, ranging from new cool creatures to entire new systems in the game. Forge is a moddi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/minecraft-forge-how-to-download-install-and-use-forge/</link>
                <guid isPermaLink="false">66c35b5c9de50ee9ca7fa707</guid>
                
                    <category>
                        <![CDATA[ gaming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ minecraft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ toothbrush ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 10 Jan 2020 22:59:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9dfd740569d1a4ca3ac2.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you are reading this article you probably already know Minecraft. We use Forge to manipulate the game Minecraft to make it do what we want. This could be anything, ranging from new cool creatures to entire new systems in the game.</p>
<p>Forge is a modding API. Minecraft Forge (or Forge for short) is a layer between our code and Minecraft itself. </p>
<p>We cannot directly ask Minecraft to add items and do special cool things. That’s why we need an API (application programming interface) to handle our logic and make Minecraft recognise it.</p>
<h2 id="heading-sounds-cool-how-do-i-get-started"><strong>Sounds cool! How do I get started?</strong></h2>
<ul>
<li>You’ll need the JDK (Java development kit) which is a set of libraries, tools and the runtime environment to make Java programs and run them.</li>
<li>A Minecraft account which can be bought from their official website. (<a target="_blank" href="https://minecraft.net/en-us/store/">https://minecraft.net/en-us/store/</a>)</li>
<li>An IDE (Eclipse or IntelliJ are recommended for Minecraft development)</li>
</ul>
<p>After installing/acquiring these pieces of software, download your desired Forge version at <a target="_blank" href="https://files.minecraftforge.net/">https://files.minecraftforge.net/</a>.</p>
<p><strong>Tip</strong>: Hover over the information button and press direct download to avoid an Adfly virus! </p>
<p>Once you have downloaded this ZIP you’ll be able to unzip it. Do so and cd (cmd/command) into the directory with all of the Forge files. Run <code>gradlew setupDecompWorkspace</code>.</p>
<p>Next up is picking your IDE (integrated development environment). </p>
<ul>
<li>Eclipse? <code>gradlew eclipse</code>. </li>
<li>IntelliJ? Import the build.gradle file in your IntelliJ setup.</li>
</ul>
<h2 id="heading-okay-now-what-how-do-i-add-fancy-new-items-basic-mod-setup"><strong>Okay now what? How do I add fancy new items? (Basic mod setup)</strong></h2>
<p>Hold your horses. There’s much more to it. You’ll have to texture an item of course, add code and so much more! In this article we’ll only look at some simple sample code which I also use for my own mods. Here it is!</p>
<p>`@Mod.EventBusSubscriber @Mod(modid = Version.MOD_ID, name = Version.MOD_NAME, version = Version.VERSION) public class TheMod {</p>
<pre><code class="lang-text">public static ModMetadata metadata;

public static File baseDir;
public static Configuration config;

@SidedProxy(clientSide="com.ciphry.client.ClientProxy", serverSide="com.ciphry.common.CommonProxy")
public static CommonProxy proxy;

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
    proxy.preInit(event);

    baseDir = new File(event.getModConfigurationDirectory(), MOD_ID);
    config = new Configuration(event.getSuggestedConfigurationFile());

    if (!baseDir.exists())
        baseDir.mkdir();
}

@Mod.EventHandler
public void init(FMLInitializationEvent event) {
    proxy.init(event);

}

@Mod.EventHandler
public void postInit(FMLPostInitializationEvent event) {
    proxy.postInit(event);
}
</code></pre>
<p>Use this code as you please. Just make sure you edit, for instance, the proxy strings and more. This should give you a basic overview of what a basic mod class looks like.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Robotic Influencers of our Future: Experimenting With a Minecraft-playing, Twitch-streaming Robot ]]>
                </title>
                <description>
                    <![CDATA[ By Minja Axelsson In this article, I'll discuss how we reached young audiences by combining robotics with e-sports. What on Earth? Ever heard of anything like it before? Me neither. The robot was created as part of Futurice’s project with Yle, the na... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-robotic-influencers-of-our-future-a-minecraft-playing-twitch-streaming-robot/</link>
                <guid isPermaLink="false">66d460423a8352b6c5a2aaae</guid>
                
                    <category>
                        <![CDATA[ gaming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ minecraft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ robotics ]]>
                    </category>
                
                    <category>
                        <![CDATA[ streaming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Twitch ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 01 Oct 2019 21:26:15 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/10/twitchrobot.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Minja Axelsson</p>
<p>In this article, I'll discuss how we reached young audiences by combining robotics with e-sports.</p>
<h2 id="heading-what-on-earth">What on Earth?</h2>
<p>Ever heard of anything like it before? Me neither. The robot was created as part of <a target="_blank" href="https://www.futurice.com/">Futurice</a>’s project with <a target="_blank" href="https://yle.fi/">Yle</a>, the national broadcast company of Finland. </p>
<p>Yle produces content for TV, radio, and the web. It has a broad reach of older audiences, but has had trouble reaching younger ones. The goal of this project was to use new technology to reach young audiences — specifically teenagers.</p>
<p>Yle’s content has traditionally been non-participatory: the performers perform, and the audience watches. However, younger audiences generally view content that is more participatory, such as YouTube videos or streams. </p>
<p>We wanted to create participatory content — the performer should interact with their audience. Yle’s journalists specialized in teenage audiences pointed out that gaming and e-sports are popular content. We realized that gaming was the perfect context for this: the audience could play together with the performer. We wanted to explore what an entertainer, or even influencer of the future could look like. So why not create a streaming robot gamer?</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/0_QW08nV9GgKS589PJ.png" alt="Image" width="600" height="400" loading="lazy">
<em>Yle’s journalists and Futurice’s roboticists coming up with the idea of a robot gamer</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/0_XdFOgvs4DhZVaHnW.png" alt="Image" width="600" height="400" loading="lazy">
<em>First drafts</em></p>
<h2 id="heading-what-was-this-robot-like">What Was This Robot Like?</h2>
<p>We chose two games for the robot to play: Flappy Bird and Minecraft.</p>
<p>Flappy Bird was a cult game that had a brief period of extreme popularity in 2014. We chose Flappy Bird because the mechanisms of the game are simple, and allowed for the game to be played with machine learning. We wanted to try a <a target="_blank" href="https://xviniette.github.io/FlappyLearning/">neuroevolution algorithm</a>, which evolved new birds into the game based on which birds did best in the previous generation. This way we could see how the audience reacted when a computer was playing the game.</p>
<p>We chose Minecraft for its communal features, which allow interaction between players. Players can co-operate or fight each other, trade with each other, and chat with each other. They can “grief” each other — i.e. be a nuisance. Players can also mine materials, and turn them into items, or even build cities. They can store precious things, farm the land, herd animals, and fight monsters. </p>
<p>Minecraft also has a material called redstone, which players can use to build logic. Effectively, players can build an entire computer inside of Minecraft. Poetic, eh?</p>
<p>For playing Minecraft, we decided that a human should control the robot. The game is complicated, and having authentic interactions with other players would require a human on the other end.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/0_zNxCX_zKJ3ikRM-y.png" alt="Image" width="600" height="400" loading="lazy">
<em>Flappy Bird and the robot</em></p>
<p>Our team of Yle’s journalists and Futurice roboticists defined some clear advantages for using a robot in this context:</p>
<ul>
<li>A robot is tireless — it can play forever, and provide content 24/7. It’s an ideal streamer.</li>
<li>A robot can be gender neutral. Gamers and gaming audiences are typically male, but a gender neutral robot could potentially attract more diverse audiences.</li>
<li>A robot can reflect gamers’ behaviour, stirring emotions. Gaming culture is often aggressive. The robot could be aggressive in turn, making gamers reflect on their own behaviour.</li>
<li>A robot can interact within the game and chat simultaneously. Humans are limited to one output, a robot can have several.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/1_-eTZqndK5kdFckQ5-lXpMg.jpeg" alt="Image" width="600" height="400" loading="lazy">
<em>Testing our streaming equipment and having problems with interference from the robot’s face screen.</em></p>
<p>We decided on a six hour gaming session, alternating between Minecraft and Flappy Bird. To nail down the user experience for the session, we defined guidelines for our design of the robot:</p>
<ul>
<li>Experimental user experience — the user should be able to explore within the interaction with the robot.</li>
<li>Streamers are usually strong characters. The robot is a character with a strong personality.</li>
<li>The robot can cause “WTF?” reactions in players. We wanted the experience to be memorable, rather than bland.</li>
<li>The culture and space of online gaming is unique, and should be designed for.</li>
</ul>
<p>Based on these guidelines, we created the character IQ_201. IQ_201 is based on aggressive online gamers that are convinced of their own superior intelligence (see <a target="_blank" href="https://knowyourmeme.com/memes/200-iq">this meme about having an IQ over 200</a>). The robot would be rude and reactive, meant to get a reaction out of adolescents interacting with it.</p>
<p>Before implementation, the team also wanted to take into account some ethical considerations:</p>
<ul>
<li>Transparency about how the robot is operated is needed. If this robot was going to be put into production, users should be able to find information on how it works.</li>
<li>The robot should treat all the players the same. This was also part of the decision to make the robot appear gender neutral. And due to the sometimes angry, hateful, even racist or sexist culture of gaming, we needed to design the robot’s personality carefully. It could be out-there, even rude, but never hateful. We didn’t want any heated gaming moments.</li>
<li>The robot should be rude, but not too over-the-top.</li>
<li>The chat needed to be moderated. As stated, gaming culture can be toxic. We wanted to keep a careful eye on both the Minecraft and Twitch chats, to ensure no shenanigans would go on.</li>
</ul>
<p>To fulfill all these requirements, we selected the <a target="_blank" href="https://www.furhatrobotics.com/">Furhat robot</a>. The Furhat robot had a relatively easy-to-use teleoperation interface, which allowed for the user to input text to be turned into the robot’s speech, as well as perform gestures at the click of a button.</p>
<h2 id="heading-flowers-and-violence">Flowers and Violence</h2>
<p>We had a 6 hour stream, starting at 2pm and ending at 8pm. We alternated between games: 2-3pm was Flappy Bird, 3-5pm Minecraft, 5-6pm Flappy Bird, then 6-8pm Minecraft again. This schedule allowed the robot operators playing Minecraft to have a much-needed break in the middle.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/twitchrobot-1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Our robot</em></p>
<p>In the beginning, a few people joined. Gradually, we gained more and more people. We reached our peak at 4:20 — 49 simultaneous viewers on Twitch. Overall, we had 431 unique viewers. In Minecraft, there were around 30 active players. Considering how minimal our advertising was (one forum post and a few tweets), we were pleasantly surprised by the turnout.</p>
<p>The Minecraft sessions were directed by two robot operators (myself and another Minja). The other Minja played Minecraft, and I operated the robot’s voice and gestures. A third person was answering messages on chat.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/8kKPoYx7rMs" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>Minecraft was overwhelming. The robot’s provocative character provoked teenagers into repeatedly killing it. After fleeing to the mountains to be with the llamas a couple of times and being killed yet again, we modified the robot’s behaviour to be more friendly. We wanted to create more constructive interactions.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/0_pMMw-X8ZYwIOH_cU.png" alt="Image" width="600" height="400" loading="lazy">
<em>Two Minjas as robot operators</em></p>
<p>Toward the end of the second Minecraft stream, teenagers were cooperating with the robot. They protected it from the few aggressive players that were left, and gave it gifts such as flowers. Some even complimented the robot directly, to make it happy. The players started following the robot, agreeing to cooperate when it initiated building a lighthouse. They also built a house, and captured and named a llama: IQ_201 Junior.</p>
<p>There were two clear factions in the game: some were intent to kill the robot throughout the entire game, and some protected it throughout. Some became more comfortable with the robot as the stream went on, switching sides. Either way, the robot aroused strong emotions. Teenagers sought out genuine interaction with it. No-one ignored the robot, or was bored.</p>
<p>Discussions about how the robot worked were had throughout the stream. No-one asked the robot itself though, maybe out of respect or fear of annoying it. Discussions focused on whether the robot was “real”, i.e. whether it was truly automatic, or a human was operating it. Was it typing with actual physical hands? Or had it “hacked into” the game and was playing via code?</p>
<h2 id="heading-i-will-miss-you-robot">“I Will Miss You Robot!”</h2>
<p>16 people responded to our survey afterward. 80% of players were under 18, most were 13 to 15-year-olds. 80% of players interacted with the robot. This was extremely positive, we succeeded in making a robot that was compelling to users. 75% of players rated the robot as 3 or above, out of 5.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/0_7k1TlGnl986zyBKQ.png" alt="Image" width="600" height="400" loading="lazy">
<em>Viewers over time</em></p>
<p>We collected comments from the players from the survey, as well as the Minecraft game chat. They are translated from Finnish, and reflect some of the thoughts our players had on the robot.</p>
<h4 id="heading-the-critical-first">The critical first:</h4>
<p><strong>“It was pretty fun and cool. But it somehow felt like a set-up.” [Referring to the robot possibly having a human operator]</strong></p>
<p>A lot of players were wondering how the robot actually worked. This comment brings us back to the ethical consideration we talked about earlier: transparency about how the robot was operated. </p>
<p>Though we intended to be transparent at first, we decided to not inform users of the robot’s teleoperated nature for this first pilot. We made this choice because we wanted to keep the “suspension of disbelief” of the user active, meaning that we wanted the participants to play along with the fact they were talking to a “real robot” (an autonomous robot) (Duffy &amp; Zawieska, 2012). </p>
<p>The negative response we received regarding the unclarity on the robot’s functioning made it clear to us that if this pilot were extended, it is highly important to be more transparent. It is possible to hold suspension of disbelief and be honest of the robot’s operation simultaneously (we do all know that television shows are not reality, after all).</p>
<p><strong>“The robot was a bit simple in certain things, and sometimes talked meanly to people, and was condescending. This was a bit anxiety inducing… Was this intentional?”</strong></p>
<p>Some players felt that the robot’s rude behaviour crossed the boundary into condescending. They wished that the robot would be more considerate in the future. This indicates that even a robot can hurt feelings. In future versions, making IQ_201 more empathic, and less focused on the superiority of robots over humans, could have positive results.</p>
<p><strong>“The robot looked a bit blue in the face, and its voice was a bit weird.”</strong></p>
<p>Two teenagers did not enjoy the robot’s appearance and voice. One remarked especially about its blue face, asking why we did not make it “normal colored”. </p>
<p>This may have been due to the robot falling into the “uncanny valley” for these players. Uncanny valley is a theory developed by robotics researcher Masahiro Mori (Mori et al., 2012). His theory posits that as the appearance of a robot approaches human-likeness, there is a dip when the appearance gets very close. Zombies and corpses fall into this valley. </p>
<p>To get rid of this effect with our robot, it could be wise to alter the robot’s appearance and voice in future solutions.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/0_g5B15D6hFSmG0bbi.png" alt="Image" width="600" height="400" loading="lazy">
<em>The Uncanny Valley by Masahiro Mori. Wikimedia commons.</em></p>
<h4 id="heading-and-then-the-positive">And then the positive:</h4>
<p><strong>“It was really interesting gaming with the robot. :) Hopefully in the future we can have this type of event again. :)”</strong></p>
<p>The majority of the teenagers enjoyed playing with the robot, and watching the stream. Their feedback complimented the robot’s sense of humour, and its playing skills. A continuation of the pilot would surely find an interested audience.</p>
<p><strong>[to the robot] “Some people have trouble with new things. In this case, these players are having trouble with a robot, since you’re new.”</strong></p>
<p>This player consoled the robot in-game, as other players were giving it a hard time by continuously killing it. This comment was moving: the player felt bad for the robot, and thought the robot might feel bad as well, attempting to change that. This is a clear empathic response toward the robot.</p>
<p><strong>[to the robot] “I will miss you robot!”</strong></p>
<p>A few players gave the robot heartfelt goodbyes when it left Minecraft. These players found the robot approachable, and even formed an emotional bond with it. This means we succeeded in creating a compelling character, even during what was only a 6 hour stream. </p>
<p>For future builds of the robot, the players should be informed how the robot operates. This could help them calibrate an appropriate level of emotional bond to the robot.</p>
<h2 id="heading-are-robotic-influencers-our-future">Are Robotic Influencers Our Future?</h2>
<p>Players took an active interest in the robot. They approached it, interacted with it, and formed opinions on it. The robot also provoked emotional reactions — both positive and negative. Some participants really loved the robot and wished for more interaction in the future, and some were heavily critical. </p>
<p>This indicates that robot influencers have the capacity to affect our emotions — whether this capacity will ever reach the level of human entertainers, I do not know. Whether that is desirable, I also do not know.</p>
<p>What positively surprised me was that the young user base of the robot were media literate: they critically examined the robot’s mode of operation. The players had a good idea of what is possible with AI today, and what is not. They were not easily duped.</p>
<p>This makes me hopeful for our future, whether it contains robotic entertainers or not. When viewers remain critical, they can understand that robots are machines with no actual emotional capacity, even if viewers do choose to suspend disbelief. </p>
<p>Interacting with the robot can be though of as a form of <a target="_blank" href="https://en.wikipedia.org/wiki/Parasocial_interaction">parasocial interaction</a> for the viewer — where the viewer may feel that their relationship with the robot is close — even though it is not truly reciprocal. This in itself is not necessarily harmful, as long as we are honest about what the relationship truly is. We should understand that robots are putting on a performance to elicit emotions in us — like human entertainers do</p>
<p><a target="_blank" href="https://areena.yle.fi/1-50168989?source=post_page-----702735f678a8----------------------"><strong>A video about the project.</strong></a></p>
<p>First published on <a target="_blank" href="https://towardsdatascience.com/the-robotic-influencers-of-our-future-a-minecraft-playing-twitch-streaming-robot-702735f678a8">Towards Data Science.</a></p>
<hr>
<p><em>Duffy, B. R., &amp; Zawieska, K. (2012, September). Suspension of disbelief in social robotics. In 2012 IEEE RO-MAN: The 21st IEEE International Symposium on Robot and Human Interactive Communication (pp. 484–489). IEEE.</em></p>
<p><em>Mori, M., MacDorman, K. F., &amp; Kageki, N. (2012). The uncanny valley: The original essay by Masahiro Mori. IEEE Spectrum, 98–100.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to modify Minecraft the easy way with TypeScript ]]>
                </title>
                <description>
                    <![CDATA[ By Josh Wulf Usually, modifying Minecraft requires coding in Java, and a lot of scaffolding. Now you can write and share Minecraft mods using TypeScript/Javascript. ScriptCraft is an open source JavaScript Minecraft modding library, and we’ve written... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-mod-minecraft-without-java-f076ddaec01c/</link>
                <guid isPermaLink="false">66c353b0b919d74bc820ad06</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ minecraft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ TypeScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sun, 21 Apr 2019 11:26:58 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*gcZnkUqguix0zVi7Fsd3_Q.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Josh Wulf</p>
<p>Usually, modifying Minecraft requires coding in Java, and a lot of scaffolding. Now you can write and share Minecraft mods using TypeScript/Javascript.</p>
<p><a target="_blank" href="https://scriptcraftjs.org/">ScriptCraft</a> is an open source JavaScript Minecraft modding library, and we’ve written support for TypeScript, and a bunch of tooling to create a familiar developer experience for those coming from JavaScript land (including Yeoman and NPM).</p>
<p>In this article I’ll walk you through getting set up and building your first TypeScript Minecraft mod in under an hour — as little as 20 minutes, depending on your internet connection.</p>
<p>In this video (<a target="_blank" href="https://www.youtube.com/watch?v=RqohEXw9yvw">click here</a> if the embed doesn’t work above) I show you how to write a basic Minecraft mod using TypeScript, and run it on your local computer with both a desktop and a mobile Minecraft server.</p>
<p>Below, I’ll walk you through the steps, with links to resources.</p>
<h3 id="heading-prerequisites">Prerequisites</h3>
<p>You’ll need some software installed on your computer, to run the Minecraft server and the tools for writing your plugin. Install all of the four following:</p>
<ul>
<li><a target="_blank" href="https://www.docker.com/get-started">Docker</a> — a containerisation solution.</li>
<li><a target="_blank" href="https://nodejs.org/en/">Node.js</a> — a JavaScript execution engine and library.</li>
<li><a target="_blank" href="https://www.portainer.io/">Portainer</a> — a web-based GUI for managing Docker containers.</li>
<li><a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> — a code editor.</li>
</ul>
<h4 id="heading-minecraft-client">Minecraft Client</h4>
<p>You need a Minecraft <em>client</em> to test your plugin.</p>
<p>Install at least one of the following:</p>
<ul>
<li><a target="_blank" href="https://www.minecraft.net/en-us/">Minecraft</a> Java Edition — a desktop client, if you want to test against a Bukkit server.</li>
<li><a target="_blank" href="https://play.google.com/store/apps/details?id=com.mojang.minecraftpe">Minecraft Pocket Edition</a> — a mobile client, if you want to test against a Nukkit server (phone/tablet/Xbox). If you use this, you can use <a target="_blank" href="https://mcpelauncher.readthedocs.io/en/latest/">Minecraft Pocket Edition Bedrock Launcher</a> to run the mobile client on your computer.</li>
</ul>
<h3 id="heading-installation">Installation</h3>
<p>Now that you have the prerequisites installed, it is time to install the tools for the server and for plugin development.</p>
<ol>
<li>Run the following command:</li>
</ol>
<pre><code>npm i -g smac yo generator-sma-plugin typescript
</code></pre><p>This will install four things on your computer:</p>
<ul>
<li><code>smac</code>— <em>Scriptcraft Modular Architecture Controller,</em> a program that runs Minecraft Servers for your plugins.</li>
<li><code>yo</code> — <em>Yeoman</em>, a scaffolding tool.</li>
<li><code>generator-sma-plugin</code> — a Yeoman plugin for generating a new Minecraft plugin using the Scriptcraft Modular Architecture.</li>
<li><code>typescript</code> — the TypeScript transpiler, for converting TypeScript code into ES5 JavaScript that can run in Minecraft.</li>
</ul>
<h3 id="heading-create-a-new-plugin">Create a new plugin</h3>
<p>Now that you have the toolset installed, create a new plugin by running this command:</p>
<pre><code>yo sma-plugin
</code></pre><p>This starts the plugin wizard:</p>
<pre><code>➜ yo sma-plugin
</code></pre><pre><code>     _-----_     ╭──────────────────────────╮    |       |    │      Welcome to the      │    |--(o)--|    │  Scriptcraft SMA Plugin  │   <span class="hljs-string">`---------´   │       generator by       │    ( _´U`</span>_ )    │      Magikcraft.io!      │    /___A___\   /╰──────────────────────────╯     |  ~  |   __<span class="hljs-string">'.___.'</span>__ ´   <span class="hljs-string">`  |° ´ Y `</span>
</code></pre><pre><code>? Your package name (workspace)
</code></pre><p>There is only one question you need to answer here — the name of your plugin. The wizard will create a new folder with the name of the plugin, and place the files for the new plugin in it.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/a1XoTzt4ZRLxbrU36k05TsO9kxhNGRqCzCgM" alt="Image" width="800" height="449" loading="lazy"></p>
<p>This screencast shows you the process:</p>
<p><a target="_blank" href="https://asciinema.org/a/242028"><strong>Scaffold a Minecraft plugin using Magikcraft</strong></a><br><a target="_blank" href="https://asciinema.org/a/242028">_Magikcraft.io allows you to write Minecraft plugins in TypeScript/JavaScript that will run on Desktop / Mobile._asciinema.org</a></p>
<p>Once the wizard completes, it emits a message similar to this (I chose the name <code>my-sma-plugin</code> in this example):</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/OwKfUaZWvNXjUrZwQtri1h2pupfpzGZyPnuT" alt="Image" width="800" height="266" loading="lazy"></p>
<h3 id="heading-edit-your-new-plugin">Edit your new plugin</h3>
<p>Start Visual Studio Code and open the directory containing your new plugin.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/UE-tfGoC5k0p3SzTpJtXNgJtBMo037vN3Td0" alt="Image" width="494" height="614" loading="lazy"></p>
<p>Here is a description of the files in your new plugin:</p>
<ul>
<li><code>__tests__</code> — a directory containing unit tests for your plugin. These are run with Jasmine. Add more tests in here as you develop your plugin.</li>
<li><code>.vscode</code> — settings for Visual Studio code.</li>
<li><code>autoload</code> — any files in here are automatically executed when your plugin is enabled in the Minecraft server. Use this for initialisation tasks, registering event handlers, and so forth.</li>
<li><code>lib</code> — A place for you to put files that should not be automatically loaded (or that are required from your autoloaded files). If your plugin provides functionality to other plugins, then you export that via <code>lib/index.ts</code>.</li>
<li><code>node_modules</code> — modules from npm are installed here. You cannot use modules from npm that use V8 APIs (like fs or http). Many of the features that you need are provided by the <a target="_blank" href="https://github.com/walterhiggins/ScriptCraft">Scriptcraft API</a> and by the <code>[@magikcraft/core](https://github.com/Magikcraft/magikcraft-core)</code> <a target="_blank" href="https://github.com/Magikcraft/magikcraft-core">package.</a></li>
<li><code>.editorconfig</code> — settings for the editor.</li>
<li><code>.gitattributes</code> — settings for <code>git</code>.</li>
<li><code>.gitignore</code> — files to ignore for <code>git</code>.</li>
<li><code>.prettierrc</code> — settings for code formatting.</li>
<li><code>package-lock.json</code> —versions of installed dependencies.</li>
<li><code>package.json</code> —configuration for this plugin, including dependencies and scripts.</li>
<li><code>README.md</code> — instructions for developing and testing your plugin.</li>
<li><code>smac-nukkit.json</code> — a configuration for running a Nukkit server with your plugin loaded.</li>
<li><code>smac.json</code> — a configuration for running a Bukkit server with your plugin loaded.</li>
<li><code>tsconfig.json</code> — the TypeScript configuration for transpiling your plugin to JavaScript.</li>
</ul>
<p>Open <code>autoload/index.ts</code>:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/xxgXedotPGJ74shzoji3ZABDK2ugZweX82Nz" alt="Image" width="800" height="770" loading="lazy"></p>
<p>This file is automatically executed when the plugin is loaded. Changes that you make here will be visible when you (re)load the plugin.</p>
<h3 id="heading-start-a-development-server">Start a development server</h3>
<p>You can load your plugin in a development server. There are two servers that you can use — one for the desktop Java client, and the other for the mobile Pocket Edition client.</p>
<h4 id="heading-start-the-desktop-server">Start the desktop server</h4>
<p>Run this to start a desktop server:</p>
<pre><code>npm run start:bukkit
</code></pre><p>This will:</p>
<ol>
<li>Pull the Bukkit server image from Docker Hub.</li>
<li>Start the Bukkit server with your plugin loaded.</li>
<li>Start the TypeScript transpiler to transpile your code to ES5.</li>
</ol>
<p>You can now connect to the server with your desktop client. Click on <code>Multiplayer</code> then <code>Direct Connect</code>, then use the server address <code>127.0.0.1</code>:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/8m5ZKnSSh-6wIWIiAfDCFPSgpUt7XAO6dWzB" alt="Image" width="800" height="470" loading="lazy"></p>
<h4 id="heading-start-the-mobile-server">Start the mobile server</h4>
<p>Run this command to start a mobile server:</p>
<pre><code>npm run start:nukkit
</code></pre><p>This will:</p>
<ol>
<li>Pull the Nukkit server image from Docker Hub.</li>
<li>Start the Nukkit server with your plugin loaded.</li>
<li>Start the TypeScript transpiler to transpile your code to ES5.</li>
</ol>
<p>You can now connect to the server with your pocket edition client. Click on <code>Play</code> then <code>Servers</code>, then add a server with the address <code>127.0.0.1</code>:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/-s4613jKo2qUOJtE2NiFkdwsDPUsqpB61LKt" alt="Image" width="800" height="559" loading="lazy"></p>
<h3 id="heading-reload-changes-to-your-plugin">Reload changes to your plugin</h3>
<p>As you change your plugin and save the changed TypeScript, it will automatically be transpiled to JavaScript.</p>
<p>To reload the changes in the development server, type the following in the server console:</p>
<pre><code>ts onrefresh()
</code></pre><p>See the screencast below to see what this looks like.</p>
<h3 id="heading-stop-the-server">Stop the server</h3>
<p>To stop the server, type this command at the server console:</p>
<pre><code>smac stop
</code></pre><p>See the screencast below to see what it looks like when you run this command.</p>
<h3 id="heading-screencast-start-reload-and-stop">Screencast: Start, Reload, and Stop</h3>
<p>This screencast shows you starting the desktop server, reloading the plugin code, and also stopping the development server.</p>
<p><a target="_blank" href="https://asciinema.org/a/242023"><strong>Start a Magikcraft Development Server</strong></a><br><a target="_blank" href="https://asciinema.org/a/242023">_Start a Magikcraft Development Server._asciinema.org</a></p>
<h3 id="heading-further-resources">Further Resources</h3>
<ul>
<li><a target="_blank" href="https://github.com/Magikcraft">Magikcraft on GitHub</a></li>
<li><a target="_blank" href="https://www.youtube.com/channel/UC9cEOcTkQEyiKr2nCZDBYeg">Magikcraft on YouTube</a></li>
<li><a target="_blank" href="https://github.com/Magikcraft/mct1">MCT1 Source Code (Example Plugin)</a></li>
<li><a target="_blank" href="https://github.com/walterhiggins/ScriptCraft">ScriptCraft on GitHub</a></li>
<li><a target="_blank" href="https://bukkit.magikcraft.io">Bukkit API Docs</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
