An API Wrapper of Neal's Infinite Craft game in Python for people to implement in their programs.
Project description
infinite-craft 1.1.1
An API Wrapper of Neal's Infinite Craft game in Python for people to implement in their programs.
Key Features:
- Stores elements in a neatly indented JSON file
- Starts with the four main elements: Water, Fire, Wind, Earth
- Uses
neal.fun
's Infinite Craft API to pair elements together - Built-in ratelimiting handler
- Custom API support
- Asynchronous library
- Conveniently access discovered elements
Table of Contents:
Installation
Requires Python 3.10 or above.
To install, run:
pip install infinite-craft
To update, run:
pip install -U infinite-craft
NOTE: If pip
is not on PATH, you can use python3 -m pip
(for Linux/MacOS) or python -m pip
(for Windows) instead.
Dev requirements
To install the dev requirements, either clone this repo and install requirements:
git clone https://github.com/sqdnoises/infinite-craft
pip install -r requirements.txt
or you can install the extra dev
:
pip install infinite-craft[dev]
Recommended to use a virtual environment (venv
) while using dev requirements.
In-dev installation
If you want to use the in-dev version of this library, you can install it by doing (must have git
installed):
pip install git+https://github.com/sqdnoises/infinite-craft.git
Warning: The library might be unstable especially if the build Library Tests
is failing. Which you can see below.
Usage Examples
By using async with
import asyncio
from infinitecraft import InfiniteCraft
async def main():
async with InfiniteCraft() as game: # automatically start session and end session on async with end
print(f"Pairing elements: {game.discoveries[0]} and {game.discoveries[1]}")
result = await game.pair(game.discoveries[0], game.discoveries[1]) # Pair Water and Fire
print(f"Result: {result}")
asyncio.run(main())
Another async with
example with manual session control
import asyncio
from infinitecraft import InfiniteCraft
game = InfiniteCraft(manual_control=True) # control start and stop of session automatically
async def main():
await game.start() # Start InfiniteCraft Session
async with game:
print(f"Pairing elements: {game.discoveries[0]} and {game.discoveries[1]}")
result = await game.pair(game.discoveries[0], game.discoveries[1]) # Pair Water and Fire
print(f"Result: {result}")
await game.close() # Close InfiniteCraft Session
asyncio.run(main())
Example that is basically like manual control except we don't need to use async with
import asyncio
from infinitecraft import InfiniteCraft
game = InfiniteCraft()
async def main():
await game.start() # Start InfiniteCraft Session
print(f"Pairing elements: {game.discoveries[0]} and {game.discoveries[1]}")
result = await game.pair(game.discoveries[0], game.discoveries[1]) # Pair Water and Fire
print(f"Result: {result}")
await game.close() # Close InfiniteCraft Session
asyncio.run(main())
Example that pings the API to check its latency
import asyncio
from infinitecraft import InfiniteCraft
async def main():
async with InfiniteCraft() as game:
ping = await game.ping() # return type: `float` in seconds
print(f"Ping: {round(ping * 1000)} ms") # turn into milliseconds and round
asyncio.run(main())
Example that pairs two user-defined elements and doesn't store the result in game.discoveries
import asyncio
from infinitecraft import InfiniteCraft, Element
async def main():
async with InfiniteCraft() as game:
first = Element("Shawarma") # Emoji is not fetched, you must specify it with emoji=""
second = Element("Chicken")
print(f"Pairing elements: {first} and {second}")
result = await game.pair(first, second) # Pair Shawarma and Chicken
print(f"Result: {result}")
asyncio.run(main())
CLI
By default, two CLI apps are also installed. infinite-craft
and infinitecraft
.
You can use either, both do the exact same thing.
Display help:
infinite-craft -h
Reset your discoveries JSON file to the initial 4 elements
infinite-craft reset -d "/path/to/discoveries.json"
NOTE: If infinite-craft
or infinitecraft
are not on PATH, you can use python3 -m infinite-craft
or python3 -m infinitecraft
(Linux/MacOS) or python3 -m infinite-craft
or python3 -m infinitecraft
(Windows) instead.
How does it work?
This library basically contacts the URL: https://neal.fun/api/infinite-craft/pair?first=element+name&second=element+name
tricks it with some headers, and handles everything accordingly. Everything is handled in a user-friendly manner and asynchronously, so it should be really easy to use it in your programs.
To-do
- Release version 1.0.0 on PyPI
- Make a discord server for support
- Add a runnable and configurable CLI mock API server
- Make docs
- Make a playable Infinite Craft CLI game (interactive, probably)
Documentation
Documentation coming soon However everything is documented well in the code with docstrings.
License
View the MIT License license that comes with this library.
🌟 Please star the repo and show some love 💖
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for infinite_craft-1.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c005d87dabeca3711b4d37553d26e534cf4f290689d58aa47656d362e5f1a8ae |
|
MD5 | 670353095f64f39b7a591f94528b8b55 |
|
BLAKE2b-256 | f881bd70fed11e57c53f0ce4f39258777ccb5376a754edbb50cae5202663daf8 |