Coder Social home page Coder Social logo

forge-clj's Introduction

forge-clj: Clojure in Minecraft

Description

A WIP implementation of Clojure working with Minecraft Forge. This is now somewhat useable!

I now have a tutorial (CURRENTLY OUTDATED)! It's still a work in progress, but it's here. A test-mod also exists, which I use for making sure everything works, so there should be an example for everything currently implemented in there.

Usage (for users)

Simply download the latest version of forge-clj, as well as the mod you want to run, and put them both in the mods folder.

Usage (for modders)

First off, extract Forge into a folder. Then download the latest version of the forge-clj dev kit, and extract its contents into the dev environment. Afterwords, be sure to rename the things in the build.gradle to use your package names and not mine, and then run the commands to set up forge as normal.

If this doesn't work be sure to tell me so I can fix it.

When getting ready to deploy your mod, be sure to use gradle build (not runclient!) first. For some reason the jar generated by runclient is broken, and the one generated by build isn't.

License

Copyright © 2015-2016 Ryan Haney (Yoshiquest)

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

forge-clj's People

Contributors

ryanhaney97 avatar mbjarland avatar

Stargazers

Shanoa Ice avatar Max Ilinov avatar pixie avatar Wojtek Majewski avatar Avi Drucker avatar Stel Abrego avatar Bracken Spencer avatar Reinaldo Antonio Camargo Rauch avatar S Knutsen avatar Ryan Johnson avatar Hai Nguyen avatar Pietro Rinaldi avatar Celeste Fox avatar Dirk Wetzel avatar Lucas C Wilcox avatar  avatar Zak McCreery avatar Ertuğrul Çetin avatar Javascript is Magic avatar TENSORTALK avatar fred monroe avatar Adam Porter avatar Oleg Seryh avatar Eugene Potapenko avatar  avatar Technici4n avatar Forrest avatar Ivar Vasara avatar Wen avatar Jacob Rask avatar McHorse avatar Shane Lin avatar Ming Pan avatar merik avatar Huy Le avatar  avatar  avatar David Young-Chan Kay avatar  avatar Josh Mize avatar Benjamin Ruston avatar Cesar Canassa avatar wicast avatar Kovas Boguta avatar Antoine Lucas avatar  avatar  avatar Lin avatar Tomáš Horáček avatar Antonin Hildebrand avatar Frank Hale avatar Frank Burnham avatar Jeremy Przasnyski avatar shaun avatar Marco Herrero avatar modmuss avatar Ripley Flammer avatar Jerzerak avatar David Swift avatar  avatar

Watchers

André Fagerlie Aronsen avatar John Reeves avatar Antoine Lucas avatar James Cloos avatar  avatar David Swift avatar Dirk Wetzel avatar Lin avatar  avatar  avatar

forge-clj's Issues

Improved Rendering System

I wish to make some adjustments to the Rendering System, such as a way to animate things a bit more automatically, and a way to convert the .json block models into models for the renderer. This should come naturally alongside or after the Entity system, as rendering is an important part there.

Leiningen Plugin to Replace Forge Gradle

This is something I would LIKE to get around to and would LIKE to have, but unfortunately reverse-engineering Forge Gradle for use in Leiningen would take too much time for me to do. Especially since I have no experience at all with writing Leiningen Plugins, which, while I still COULD do it, it would take much more time to do so.

So, if anyone would like to do this, I would be happy to hand off the task to someone else. The features that NEED to be implemented are the ability to start a new workspace (in other words, the setupDecompWorkspace Gradle task), and the ability to actually compile the project (the Gradle build task). If you want my suggestion for a name and you actually care, I would recommend calling it "leincraft".

Implementing an Entity System

I need to create a system that will allow (hopefully easy) creation of entities. From there I should also be able to expand to more complex things such as EntityLivings (mobs).

Tagging releases

If you tag releases, users can directly download them from github and you no longer have to provide links to dropbox.

AOT without dependencies

Is it possible to compile the libraries together into the mod so that users no longer have to install them separately?

Change Macros to Use Destructuring Instead

I've been manually extracting data from maps up until now, and now I think I finally understand destructuring enough to use that instead. It should significantly shorten some of the code I've been using. I'll probably do this when I don't feel like working on whatever major feature I'm working on at the time, in addition to making any new macros use destructuring.

Add a better event handling system using core.async

I need a better event system. The main reason for this is similar to the reason for a better network system. In other words, the fact that as it is now, it would be very difficult to automatically add event functions. With a new system, I should be able to just subscribe to each event, allowing the implementation to be created automatically and somewhat dynamically.

I'm going to switch to this now, as entities and entity properties are bugging up with the sync systems. More specifically, when trying to do a full sync with those entities (upon reloading a world, for example), they sometimes aren't fully loaded, causing some very unstable behavior. Being able to subscribe to events under the hood would allow this in addition to other goodies, such as being able to register Extended Entity Properties without having to create an event handler for it.

Update to next Minecraft Version (1.9.4)

I'll eventually need to update again to the next Minecraft version. However, there are some things I would like to add and get working first, and I will also wait for a stable release of Minecraft Forge for 1.9.4.

Add Advanced World Generation and Custom Dimensions

I need to go back and rewrite the chunk providing code again, and I also need to implement everything else required for a Custom Dimension.

Low priority right now, as I am not looking forward to doing this again, and there are other, hopefully-less-difficult things that I could do first.

If you would like to help, this would be an acceptable place to help out at.

Add Potions, PotionEffects, and Brewing support.

This is something I'd like to try and get done. Thankfully, it seems they've finally fixed the derpy brewing stand in 1.8.9, so it should even be possible to add brewing recipes now. I'll probably take a look at getting this after the entity system, and a better rendering system as well, are complete.

Error when running

Hello I'm new to clojure and I have done forge mods before and I wanted to test this. But when I tried running my mod I got an error.
'warnOnReflection' is deprecated and will go away in a future version. Please use 'clojure.warnOnReflection' instead.
'aotCompile' is deprecated and will go away in a future version. Please use 'clojure.aotCompile' instead.
#################################################
ForgeGradle 2.1-SNAPSHOT-17806f4
https://github.com/MinecraftForge/ForgeGradle
#################################################
Powered by MCP unknown
http://modcoderpack.com
by: Searge, ProfMobius, Fesh0r,
R4wk, ZeuX, IngisKahn, bspkrs
#################################################
Version string '' does not match SemVer specification
You should try SemVer : http://semver.org/
:deobfCompileDummyTask
:deobfProvidedDummyTask
:compileApiClojure UP-TO-DATE
:sourceApiJava UP-TO-DATE
:compileApiJava UP-TO-DATE
:processApiResources UP-TO-DATE
:apiClasses UP-TO-DATE
:compileClojure
Exception in thread "main" java.lang.IllegalArgumentException: No value supplied for key: 1.0, compiling:(null:77:1)
at clojure.lang.Compiler.load(Compiler.java:7391)
at clojure.lang.Compiler.load(Compiler.java:7326)
at clojure.core$load_reader.invokeStatic(core.clj:3957)
at clojure.main$script_opt.invokeStatic(main.clj:335)
at clojure.main$script_opt.invoke(main.clj:330)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:379)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: No value supplied for key: 1.0
at clojure.lang.PersistentHashMap.create(PersistentHashMap.java:77)
at clojure.core$hash_map.invokeStatic(core.clj:387)
at clojure.core$hash_map.doInvoke(core.clj:379)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:646)
at clojure.core$apply.invoke(core.clj:641)
at forge_clj.core$defmod.invokeStatic(core.clj:26)
at forge_clj.core$defmod.doInvoke(core.clj:17)
at clojure.lang.RestFn.invoke(RestFn.java:497)
at clojure.lang.Var.invoke(Var.java:401)
at clojure.lang.AFn.applyToHelper(AFn.java:171)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.lang.Compiler.macroexpand1(Compiler.java:6776)
at clojure.lang.Compiler.macroexpand(Compiler.java:6837)
at clojure.lang.Compiler.compile1(Compiler.java:7459)
at clojure.lang.Compiler.compile(Compiler.java:7541)
at clojure.lang.RT.compile(RT.java:406)
at clojure.lang.RT.load(RT.java:451)
at clojure.lang.RT.load(RT.java:419)
at clojure.core$load$fn__5677.invoke(core.clj:5893)
at clojure.core$load.invokeStatic(core.clj:5892)
at clojure.core$load.doInvoke(core.clj:5876)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5697)
at clojure.core$compile$fn__5682.invoke(core.clj:5903)
at clojure.core$compile.invokeStatic(core.clj:5903)
ojure.core$compile.invoke(core.clj:5895)
at clojuresque.tasks.compile$eval43$main_task_driver__45$fn__49.invoke(Unknown Source)
at clojuresque.tasks.compile$eval43$main_task_driver__45.invoke(Unknown Source)
at clojuresque.tasks.compile$eval43$main__58.invoke(Unknown Source)
at clojuresque.tasks.compile$eval63.invokeStatic(Unknown Source)
at clojuresque.tasks.compile$eval63.invoke(Unknown Source)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.load(Compiler.java:7379)
... 11 more
:compileClojure FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':compileClojure'.

Process 'command '/usr/lib/jvm/java-8-openjdk-amd64/bin/java'' finished with non-zero exit value 1

I'm on Linux

Add core.async to forge-clj

I believe several systems could be improved greatly with the addition of core.async, most notably the Networking system and the Event handling system. I therefore have plans to add this to the project some time in the near future.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.