Skip to main content

An API Wrapper of Neal's Infinite Craft game in Python for people to implement in their programs.

Project description

infinite-craft 1.1.3



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.

View infinite-craft on PyPI.

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

infinite-craft-1.1.3.tar.gz (15.3 kB view hashes)

Uploaded Source

Built Distribution

infinite_craft-1.1.3-py3-none-any.whl (18.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page