I'm interested in remaking my old mod WikiLink, but I would like some input on the design of the mod before I start making it. I was thinking about entirely reworking how it works. I find it extremely important to have information at your fingertips - especially when you're playing with over 100 mods. My goal is to unify the community's source of information and make it easy for the normal user to contribute their two cents.
For people who've never used it, here's a TLDR on how it worked:
You click on an item, it opens an interface with links to different wikis that possibly contained information about that item, and users could click them to open the links in their web browser.
The Main Idea
One flaw that the old mod had was that it relied on mods having their own wikis - which is fine in theory, but often times wikis either don't exist, are hard to find, or the mod author/users haven't populated the existing wiki with useful information. It was also a difficult interface for mod authors to use in order to add their mod and wiki to the system, so what I had created quickly died.
In order to fix this problem, I was thinking of using a Git repository in order to store information about blocks and items inside of small text files. There would be one main repository for every mod, and normal players would have the ability to contribute and edit information about blocks and items through an in game interface.
When a change is made to an item or block page, the information is commit(sent) to the repo (see the diagram below) using the player's username and UUID as a commit signature. Players can see a list of the changes made to a page. They can upvote and downvote changes, contribute their own changes, or select previous versions of the page before changes were made. Players that are down-voted often by their peers will be banned from the entire system, making it so they can only view pages and not edit them.
In this system, players who's names are on the mod author list for that mod have full permissions to revert changes made by users, ban users who made inappropriate edits, and reward or promote users that make helpful, meaningful changes to the information.
For technical people who have used git or have any idea about how it works, here is a crappy diagram and explanation of what I am thinking.
There would be one main repo where all of the file storage would be handled. For each mod ever loaded alongside WikiLink, a branch is created in the repository for that specific version of the mod.
For example: Minecraft 1.10 is loaded with WikiLink: WikiLink creates a branch for Minecraft 1.10, and any wiki edits are committed and pushed to that branch. When Minecraft updates to a new version, (1.11), a branch is created off of the head of the previous branch, retaining all of the information of the branch before it, but edits can be made on the 1.11 branch that don't affect the 1.10 branch, and visa versa.
This allows users to always have up to date information in case an item or block has changed functionality over versions, and users on older versions of the mod won't be confused because the old information won't change when people update the new branch.
Some other ideas that I had were integrated YouTube videos on block and items, where when an item is selected, YouTube is searched for videos with the keywords "wikilink" and that item's name in the tags. This could allow content creators on YouTube to populate WikiLink with their videos. Videos can be downvoted by users, and with a bad enough down-vote to up-vote ratio, videos won't be considered by WikiLink's search algorithm.
I was also thinking of trying to render a YouTube video in the game, since one of the main requests I had with the old mod was to integrate everything into the game (in game web browser, basically) but without a frame-by-frame API from Google, I'm not sure I could do it without bloating the project with external APIs. It will take some more research.
The main two problems I'm running into are the designs for the GUI interfaces and input from actual mod developers. If you are a normal user or mod developer, tell me what you think. If you feel like you can contribute in any way, I'm willing to open up this project to the public. This project is a big undertaking with a lot of small details that need to be ironed out before it's first release.
Current Technical Issues / Roadblocks:
I am slowly working on this mod in my free time! Here's a small list of the stuff I'm working on or stuck on. If you have any information or experience on these topics, please post here or private message me about it!
- Rendering TrueType / OpenType fonts in any GUIScreen instance.
- The math behind text fields - selecting positions to type in, highlighting
- Taking YouTube links from the YouTube Data API and retrieving video information, converting them to BufferedImage objects and rendering them to the screen. (Audio is also an issue.) This might be a feature for later down the road.