Git Product home page Git Product logo

alpacka's Introduction

Alpacka

Requirements

System: any OS that supports dotnet core will be supported supported runtime ids

As well as all systems that manage to somehow install the runtime and sdk will probably work as well

libgit2 bug

At the moment only Distros based on Ubuntu are supported out of the box (or at least all git related commands are broken on the rest #13 )

Temporary fix

manually for dev environment

replace the file ~/.nuget/packages/libgit2sharp.nativebinaries/1.0.165/runtimes/linux-x64/native/libgit2-1196807.so with the libgit2.so file found on your system (probably in /usr/lib/) and do not forget to rename it to libgit2-1196807.so

manually for releases

replace the file in the release folder publish/lib/linux/x86_64/libgit2-1196807.so with the proper libgit2.so file (and rename it to libgit2-1196807.so)

using a script

Installation > sSimple Script

other requirements

It is recommended to install Git https://git-scm.com/downloads

git is not required for just using install, update etc and no pack authoring functions

it is required for creating packs to have a proper git config set up (user.name, user.email, core.editor) as well as ssh keys

Install dotnet core https://www.microsoft.com/net/core#windowscmd commandline edition for windows or follow the instruction for linux, maybe look in your package manager for dotnet, dotnet-cli, dotnet-sdk

you will need both the runtime and the sdk

Installation

Manually

since there are no releases for now, installing means cloning master and running the latest version

git clone [email protected]:NikkyAI/alpacka.git
cd alpacka
dotnet restore

now apply the libgit2 fix

edit your .bashrc, .zshrc or equivalent
it is recommended to use gitbash on windows as well.. so create a .bashrc file in your home folder

add the following line

alias alpacka-dev="dotnet run --project PATH_TO_SRC_FOLDER/alpacka/src/Alpacka.CLI/Alpacka.CLI.csproj"

to your bashrc or equivalent

replace PATH_TO_SRC_FOLDER to match your directory structure (in my case it is /d/dev so the full path is /d/dev/alpacka/src/Alpacka.CLI/Alpacka.CLI.csproj)

simple script

make sure you have libgit2 installed

run build.sh in a terminal

the last line of the poutput will be like /home/nikky/dev/alpacka/src/Alpacka.CLI/bin/release/netcoreapp1.1/alpacka.dll

add that to your bashrc or equivalent

Useage

try running alpacka-dev --help

install packs with alpacka-dev install [multimc|server] [git-url]
only https urls are supported

alpacka-dev init is probably not updated to the newest pack versions

the rest is to be documented, help would be welcome

Recommendations

do not use this yet.. it is not ready :P

editors:

  • visual studio code
  • sublime
  • anything with yaml and json highlighters and git integration

terminal:

  • terminator
  • Git Bash (builtin to git on windows)
  • vscode integrated terminal (can be configured to use git bash)

MC launcher:

  • MultiMC (the only supported launcher atm)

git client / GUI:

Support

almost wherever you catch the authors

alpacka's People

Contributors

copygirl avatar nikkyai avatar skyem123 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

alpacka's Issues

features

requires: #31

features will live in separate folders

challenges

selecting features when downloading / updating a pack

a simple CLI input or selecting checkboxes / radiobuttons with a cursor is sufficient
this will be also useful fo #4

installing features, especially mods and removing them

in short.. keeping track of files and being able to reverse a transaction before applying a different one

identifying incompatible features

and disabling incompatible features or preventing it from being enabled at the same time
can be done by matching the paths of the resource entries

live sync of files back into the feature folders

useful for development, but could generally be always useful
maybe just use symlinks on unix and junction points on windows
although junctions only work for folders.. so that might be a pain
and i am not sure how minecraft reacts to symlinks or junctions

changes

mods in packbuild.json will have to change to files or something similar

packbuild.json needs to include metadata for the features

most important keys and names
as well group info and incompatibilities / exclude data

redoing config structure mods and features

edit:
final strusture we go for is

files:
  common:
    - foo

  server:
    side: server
    list:
      - foo

  client:
    side: client
    list:
      - foo
    optional:
      feature: optional
      version: latest
      list:
        - foo

with the options of using & to link the keys

splitting the mods list in multiple client / server lists
with different sets of default values could allow for a much lighter and easier readable config file

mods:											# Dictionary<string, ModList>
  list_Name: 									# ModList
    defaults: 									# ModEntry
      value: default
      othervalue: blub
    list: 										# List<ModEntry>
      - mod name
      - src: http://example.com/file.jar
        version: x.y.z
  other_list:
  ...

the comments specify the type of the compound object

the type of mods would change from a list into a dictionary of lists with defaults, which would probably be another custom type
it can all be compacted into a single list for emitting json

examples of the new forma and a comparison to the old onet:
https://gist.github.com/NikkyAI/d7a0fd44e101c85220d4fab715cdb0e4
the old format as far fewer simple lists of strings and lots of repetition, the proposed format looks cleaner, sliwghtly mpre compact and saves ~30 lines in this example

new instance handler: bare / none

allow installing the pack and running all command without actually doing anything special, like installing mc versions or forge versions

Command Init: does not use instanceHandler

add a functione to create a empty instance of any type
command should be
alpacka init [type] --name "new pack" -- description ... --author "Nikky" --author "copygirl"
custom directory setting might be useful for initializing as a server but should probably be ignored when initializing a multimc pack

Discussion: file and folder structure

At the moment we use the minecraft folder with all fiels inside

i feel it would by more usful to adapt MultiMC's structure
and keep alpacka related files outside of the minecraft folder
i think it will help with implementing features later because we do not have
feature/feature_name/somefiles in the minecraft folder where some mod or minecraft itself might mess with it
the gitignore rules will be more compley because we have to ignore the patches/ folder and instance.cfg.. although the latter could be kept in source control if one so desires (not recommended)

Download progress handling

Create an interface / callback that allows tracking download progress of both specific files and batches of files, so this can eventually be displayed in the GUI as well as CLI. This would also include the CLI implementation.

name, description and links for mods are ignored

currently overriding name, description and links
so any field from https://github.com/NikkyAI/alpacka/blob/master/src/Alpacka.Lib/Pack/EntryMod.cs
is ignored and does not appear in the packbuild.json

example:

- src: https://asie.pl/files/minecraft/foamfix-0.6.2-beta1-anarchy.jar
  description: cool stuff
  name: fomafix
  links:
    website: https://asie.pl/Projects/Minecraft/Mods/FoamFix/

results in

{
  "src": "https://asie.pl/files/minecraft/foamfix-0.6.2-beta1-anarchy.jar",
  "version": "recommended",
  "path": "mods/foamfix-0.6.2-beta1-anarchy.jar"
},

Avoid ConcurrentDictionary of Tasks

Problematic because the factory methods are not part of the lock itself - a task could be created more than once before an element is added in some rare corner cases. Not super important but I want to do it right anyway. Just use a regular Dictionary with locks.

LIbGit2Sharp.Portable broken on (some?) linux distros

TEMPORARY FIX:
replace the file ~/.nuget/packages/libgit2sharp.nativebinaries/1.0.165/runtimes/linux-x64/native/libgit2-1196807.so with the libgit2.so file installed on your system

edit: the binaries supplied by libgit2sharp.nativebinaries are complied on ubuntu and will most likely only work on ubuntu derivates libgit2/libgit2sharp.nativebinaries#48

options are to wait or to try compiling libgit2 on archlinux and replace the binary in the aur package

on linux (tested on at least arch and centos) it does not find the .so file correctly when trying to do any git operations

email from the dev ( @AArnott )

Sorry to hear that. I suggest you take this up with the CoreCLR folks. The libgit2sharp library just depends on the libgit2sharp.native package, which uses the package format that CoreCLR is supposed to know how to load from. Apparently it doesn't work on Centos 7, which is a bit surprising.
As a possible workaround, you could derive your own class from AssemblyLoadContext where you can override the native library load method and help it find the right one.

Nothing more I can do for you though. Sorry.

feature/release-tools

dumb installer scripts

  • Windows (BAT)
    • any
    • win7-x64
  • OSX (bash)
    • any
    • osx.10.11-x64
  • Linux (bash)
    • any
    • ubuntu.16.10-x64

packet managers

  • AUR (pkgbuild)

smart wrapper scripts

installs gitmc

open terminal for user input

  • Windows
  • Linux
  • OSX

multimc forge installer

downloading the patch files is no longer necessary,
instead set
ForgeVersion=13.20.0.2282 in instance.cfg

curse: import packs

downloading the packs zip, unpacking in minecraft
parsing the versions
projectid -> project name
fileid -> filename (version part)

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.