Rebase changes into latest PolyMC
1
.github/FUNDING.yml
vendored
@ -1 +0,0 @@
|
||||
open_collective: polymc
|
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -5,8 +5,6 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
If you need help with running Minecraft, please visit us on our Discord before making a bug report.
|
||||
|
||||
Before submitting a bug report, please make sure you have read this *entire* form, and that:
|
||||
* You have read the [PolyMC wiki](https://polymc.org/wiki/) and it has not answered your question.
|
||||
* Your bug is not caused by Minecraft or any mods you have installed.
|
||||
@ -25,15 +23,15 @@ body:
|
||||
- Other
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Version of PolyMC
|
||||
description: The version of PolyMC used in the bug report.
|
||||
placeholder: PolyMC 1.4.1
|
||||
label: Version of PollyMC
|
||||
description: The version of PollyMC used in the bug report.
|
||||
placeholder: PollyMC 1.4.1
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Version of Qt
|
||||
description: The version of Qt used in the bug report. You can find it in Help -> About PolyMC -> About Qt.
|
||||
description: The version of Qt used in the bug report. You can find it in Help -> About PollyMC -> About Qt.
|
||||
placeholder: Qt 6.3.0
|
||||
validations:
|
||||
required: true
|
||||
@ -41,14 +39,14 @@ body:
|
||||
attributes:
|
||||
label: Description of bug
|
||||
description: What did you expect to happen, what happened, and why is it incorrect?
|
||||
placeholder: The cat button should show a cat, but it showed a dog instead!
|
||||
placeholder: The parrot button should show a parrot, but it showed a cat instead!
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: A bulleted list, or an exported instance if relevant.
|
||||
placeholder: "* Press the cat button"
|
||||
placeholder: "* Press the parrot button"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,5 +1 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: PolyMC Matrix Support Room
|
||||
url: https://matrix.to/#/#support:polymc.org
|
||||
about: Please ask for support here before opening an issue.
|
||||
|
16
.github/ISSUE_TEMPLATE/rfc.yml
vendored
@ -6,38 +6,38 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### Use this form to suggest a larger change for PolyMC.
|
||||
### Use this form to suggest a larger change for PollyMC.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Goal
|
||||
description: Short description, 1-2 sentences.
|
||||
placeholder: Remove the cat from the launcher.
|
||||
placeholder: Remove the parrot from the launcher.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Motivation
|
||||
description: |
|
||||
Introduce the topic. If this is a not-well-known section of PolyMC, a detailed explanation of the background is recommended.
|
||||
Introduce the topic. If this is a not-well-known section of PollyMC, a detailed explanation of the background is recommended.
|
||||
Some example points of discussion:
|
||||
- What specific problems are you facing right now that you're trying to address?
|
||||
- Are there any previous discussions? Link to them and summarize them (don't force your readers to read them though!).
|
||||
- Is there any precedent set by other software? If so, link to resources.
|
||||
placeholder: I don't like cats. I think many users also don't like cats.
|
||||
placeholder: I don't like parrots. I think many users also don't like parrots.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Specification
|
||||
description: A concrete, thorough explanation of what is being planned.
|
||||
placeholder: Remove the cat button and all references to the cat from the codebase. Including resource files.
|
||||
placeholder: Remove the parrot button and all references to the parrot from the codebase. Including resource files.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Drawbacks
|
||||
description: Carefully consider every possible objection and issue with your proposal. This section should be updated as feedback comes in from discussion.
|
||||
placeholder: Some users might like cats.
|
||||
placeholder: Some users might like parrots.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
@ -47,14 +47,14 @@ body:
|
||||
Are there any portions of your proposal which need to be discussed with the community before the RFC can proceed?
|
||||
Be careful here -- an RFC with a lot of remaining questions is likely to be stalled.
|
||||
If your RFC is mostly unresolved questions and not too much substance, it may not be ready.
|
||||
placeholder: Do a lot of users care about the cat?
|
||||
placeholder: Do a lot of users care about the parrot?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Alternatives Considered
|
||||
description: A list of alternatives, that have been considered and offer equal or similar features to the proposed change.
|
||||
placeholder: Maybe the cat could be replaced with an axolotl?
|
||||
placeholder: Maybe the parrot could be replaced with a dog?
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
|
12
.github/ISSUE_TEMPLATE/suggestion.yml
vendored
@ -5,26 +5,26 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### Use this form to suggest a feature for PolyMC.
|
||||
### Use this form to suggest a feature for PollyMC.
|
||||
- type: input
|
||||
attributes:
|
||||
label: Role
|
||||
description: In what way do you use PolyMC that needs this feature?
|
||||
description: In what way do you use PollyMC that needs this feature?
|
||||
placeholder: I play modded Minecraft.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Suggestion
|
||||
description: What do you want PolyMC to do?
|
||||
placeholder: I want the cat button to meow.
|
||||
description: What do you want PollyMC to do?
|
||||
placeholder: I want the parrot button to squawk.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Benefit
|
||||
description: Why do you need PolyMC to do this?
|
||||
placeholder: so that I can always hear a cat when I need to.
|
||||
description: Why do you need PollyMC to do this?
|
||||
placeholder: so that I can always hear a parrot when I need to.
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
|
50
.github/workflows/build.yml
vendored
@ -219,9 +219,9 @@ jobs:
|
||||
cmake --install ${{ env.BUILD_DIR }}
|
||||
|
||||
cd ${{ env.INSTALL_DIR }}
|
||||
chmod +x "PolyMC.app/Contents/MacOS/polymc"
|
||||
sudo codesign --sign - --deep --force --entitlements "../program_info/App.entitlements" --options runtime "PolyMC.app/Contents/MacOS/polymc"
|
||||
tar -czf ../PolyMC.tar.gz *
|
||||
chmod +x "PollyMC.app/Contents/MacOS/pollymc"
|
||||
sudo codesign --sign - --deep --force --entitlements "../program_info/App.entitlements" --options runtime "PollyMC.app/Contents/MacOS/pollymc"
|
||||
tar -czf ../PollyMC.tar.gz *
|
||||
|
||||
- name: Make Sparkle signature (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
@ -229,7 +229,7 @@ jobs:
|
||||
if [ '${{ secrets.SPARKLE_ED25519_KEY }}' != '' ]; then
|
||||
brew install openssl@3
|
||||
echo '${{ secrets.SPARKLE_ED25519_KEY }}' > ed25519-priv.pem
|
||||
signature=$(/usr/local/opt/openssl@3/bin/openssl pkeyutl -sign -rawin -in ${{ github.workspace }}/PolyMC.tar.gz -inkey ed25519-priv.pem | openssl base64 | tr -d \\n)
|
||||
signature=$(/usr/local/opt/openssl@3/bin/openssl pkeyutl -sign -rawin -in ${{ github.workspace }}/PollyMC.tar.gz -inkey ed25519-priv.pem | openssl base64 | tr -d \\n)
|
||||
rm ed25519-priv.pem
|
||||
cat >> $GITHUB_STEP_SUMMARY << EOF
|
||||
### Artifact Information :information_source:
|
||||
@ -273,7 +273,7 @@ jobs:
|
||||
cmake --install ${{ env.BUILD_DIR }} --prefix ${{ env.INSTALL_DIR }}
|
||||
|
||||
cd ${{ env.INSTALL_DIR }}
|
||||
tar --owner root --group root -czf ../PolyMC.tar.gz *
|
||||
tar --owner root --group root -czf ../PollyMC.tar.gz *
|
||||
|
||||
- name: Package (Linux, portable)
|
||||
if: runner.os == 'Linux'
|
||||
@ -282,7 +282,7 @@ jobs:
|
||||
cmake --install ${{ env.BUILD_DIR }} --prefix ${{ env.INSTALL_PORTABLE_DIR }} --component portable
|
||||
|
||||
cd ${{ env.INSTALL_PORTABLE_DIR }}
|
||||
tar -czf ../PolyMC-portable.tar.gz *
|
||||
tar -czf ../PollyMC-portable.tar.gz *
|
||||
|
||||
- name: Package AppImage (Linux)
|
||||
if: runner.os == 'Linux' && matrix.qt_ver != 5
|
||||
@ -290,7 +290,7 @@ jobs:
|
||||
run: |
|
||||
cmake --install ${{ env.BUILD_DIR }} --prefix ${{ env.INSTALL_APPIMAGE_DIR }}/usr
|
||||
|
||||
export OUTPUT="PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage"
|
||||
export OUTPUT="PollyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage"
|
||||
|
||||
chmod +x linuxdeploy-*.AppImage
|
||||
|
||||
@ -301,7 +301,7 @@ jobs:
|
||||
|
||||
cp -r ${{ github.workspace }}/JREs/jre17/* ${{ env.INSTALL_APPIMAGE_DIR }}/usr/lib/jvm/java-17-openjdk
|
||||
|
||||
cp -r /home/runner/work/PolyMC/Qt/${{ matrix.qt_version }}/gcc_64/plugins/iconengines/* ${{ env.INSTALL_APPIMAGE_DIR }}/usr/plugins/iconengines
|
||||
cp -r /home/runner/work/PollyMC/Qt/${{ matrix.qt_version }}/gcc_64/plugins/iconengines/* ${{ env.INSTALL_APPIMAGE_DIR }}/usr/plugins/iconengines
|
||||
|
||||
cp /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 ${{ env.INSTALL_APPIMAGE_DIR }}/usr/lib/
|
||||
cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 ${{ env.INSTALL_APPIMAGE_DIR }}//usr/lib/
|
||||
@ -313,7 +313,7 @@ jobs:
|
||||
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${{ env.INSTALL_APPIMAGE_DIR }}/usr/lib/jvm/java-17-openjdk/lib"
|
||||
export LD_LIBRARY_PATH
|
||||
|
||||
./linuxdeploy-x86_64.AppImage --appdir ${{ env.INSTALL_APPIMAGE_DIR }} --output appimage --plugin qt -i ${{ env.INSTALL_APPIMAGE_DIR }}/usr/share/icons/hicolor/scalable/apps/org.polymc.PolyMC.svg
|
||||
./linuxdeploy-x86_64.AppImage --appdir ${{ env.INSTALL_APPIMAGE_DIR }} --output appimage --plugin qt -i ${{ env.INSTALL_APPIMAGE_DIR }}/usr/share/icons/hicolor/scalable/apps/org.fn2006.PollyMC.svg
|
||||
|
||||
##
|
||||
# UPLOAD BUILDS
|
||||
@ -323,63 +323,63 @@ jobs:
|
||||
if: runner.os == 'macOS'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PolyMC.tar.gz
|
||||
name: PollyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PollyMC.tar.gz
|
||||
|
||||
- name: Upload binary zip (Windows)
|
||||
if: runner.os == 'Windows'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ matrix.name }}-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
name: PollyMC-${{ matrix.name }}-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: ${{ env.INSTALL_DIR }}/**
|
||||
|
||||
- name: Upload binary zip (Windows, portable)
|
||||
if: runner.os == 'Windows'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ matrix.name }}-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
name: PollyMC-${{ matrix.name }}-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: ${{ env.INSTALL_PORTABLE_DIR }}/**
|
||||
|
||||
- name: Upload installer (Windows)
|
||||
if: runner.os == 'Windows'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ matrix.name }}-Setup-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PolyMC-Setup.exe
|
||||
name: PollyMC-${{ matrix.name }}-Setup-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PollyMC-Setup.exe
|
||||
|
||||
- name: Upload binary tarball (Linux, Qt 5)
|
||||
if: runner.os == 'Linux' && matrix.qt_ver != 6
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PolyMC.tar.gz
|
||||
name: PollyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PollyMC.tar.gz
|
||||
|
||||
- name: Upload binary tarball (Linux, portable, Qt 5)
|
||||
if: runner.os == 'Linux' && matrix.qt_ver != 6
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ runner.os }}-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PolyMC-portable.tar.gz
|
||||
name: PollyMC-${{ runner.os }}-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PollyMC-portable.tar.gz
|
||||
|
||||
- name: Upload binary tarball (Linux, Qt 6)
|
||||
if: runner.os == 'Linux' && matrix.qt_ver !=5
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ runner.os }}-Qt6-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PolyMC.tar.gz
|
||||
name: PollyMC-${{ runner.os }}-Qt6-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PollyMC.tar.gz
|
||||
|
||||
- name: Upload binary tarball (Linux, portable, Qt 6)
|
||||
if: runner.os == 'Linux' && matrix.qt_ver != 5
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ runner.os }}-Qt6-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PolyMC-portable.tar.gz
|
||||
name: PollyMC-${{ runner.os }}-Qt6-Portable-${{ env.VERSION }}-${{ inputs.build_type }}
|
||||
path: PollyMC-portable.tar.gz
|
||||
|
||||
- name: Upload AppImage (Linux)
|
||||
if: runner.os == 'Linux' && matrix.qt_ver != 5
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage
|
||||
path: PolyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage
|
||||
name: PollyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage
|
||||
path: PollyMC-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage
|
||||
|
||||
|
||||
|
2
.github/workflows/trigger_builds.yml
vendored
@ -11,7 +11,6 @@ on:
|
||||
- '**.nix'
|
||||
- 'packages/**'
|
||||
- '.github/ISSUE_TEMPLATE/**'
|
||||
- '.markdownlint**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
@ -20,7 +19,6 @@ on:
|
||||
- '**.nix'
|
||||
- 'packages/**'
|
||||
- '.github/ISSUE_TEMPLATE/**'
|
||||
- '.markdownlint**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
|
52
.github/workflows/trigger_release.yml
vendored
@ -25,7 +25,7 @@ jobs:
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: 'true'
|
||||
path: 'PolyMC-source'
|
||||
path: 'PollyMC-source'
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
- name: Grab and store version
|
||||
@ -34,25 +34,25 @@ jobs:
|
||||
echo "VERSION=$tag_name" >> $GITHUB_ENV
|
||||
- name: Package artifacts properly
|
||||
run: |
|
||||
mv ${{ github.workspace }}/PolyMC-source PolyMC-${{ env.VERSION }}
|
||||
mv PolyMC-Linux-Qt6-Portable*/PolyMC-portable.tar.gz PolyMC-Linux-Qt6-Portable-${{ env.VERSION }}.tar.gz
|
||||
mv PolyMC-Linux-Qt6*/PolyMC.tar.gz PolyMC-Linux-Qt6-${{ env.VERSION }}.tar.gz
|
||||
mv PolyMC-Linux-Portable*/PolyMC-portable.tar.gz PolyMC-Linux-Portable-${{ env.VERSION }}.tar.gz
|
||||
mv PolyMC-Linux*/PolyMC.tar.gz PolyMC-Linux-${{ env.VERSION }}.tar.gz
|
||||
mv PolyMC-*.AppImage/PolyMC-*.AppImage PolyMC-Linux-${{ env.VERSION }}-x86_64.AppImage
|
||||
mv PolyMC-macOS*/PolyMC.tar.gz PolyMC-macOS-${{ env.VERSION }}.tar.gz
|
||||
mv ${{ github.workspace }}/PollyMC-source PollyMC-${{ env.VERSION }}
|
||||
mv PollyMC-Linux-Qt6-Portable*/PollyMC-portable.tar.gz PollyMC-Linux-Qt6-Portable-${{ env.VERSION }}.tar.gz
|
||||
mv PollyMC-Linux-Qt6*/PollyMC.tar.gz PollyMC-Linux-Qt6-${{ env.VERSION }}.tar.gz
|
||||
mv PollyMC-Linux-Portable*/PollyMC-portable.tar.gz PollyMC-Linux-Portable-${{ env.VERSION }}.tar.gz
|
||||
mv PollyMC-Linux*/PollyMC.tar.gz PollyMC-Linux-${{ env.VERSION }}.tar.gz
|
||||
mv PollyMC-*.AppImage/PollyMC-*.AppImage PollyMC-Linux-${{ env.VERSION }}-x86_64.AppImage
|
||||
mv PollyMC-macOS*/PollyMC.tar.gz PollyMC-macOS-${{ env.VERSION }}.tar.gz
|
||||
|
||||
tar -czf PolyMC-${{ env.VERSION }}.tar.gz PolyMC-${{ env.VERSION }}
|
||||
tar -czf PollyMC-${{ env.VERSION }}.tar.gz PollyMC-${{ env.VERSION }}
|
||||
|
||||
for d in PolyMC-Windows-*; do
|
||||
for d in PollyMC-Windows-*; do
|
||||
cd "${d}" || continue
|
||||
LEGACY="$(echo -n ${d} | grep -o Legacy || true)"
|
||||
INST="$(echo -n ${d} | grep -o Setup || true)"
|
||||
PORT="$(echo -n ${d} | grep -o Portable || true)"
|
||||
NAME="PolyMC-Windows"
|
||||
NAME="PollyMC-Windows"
|
||||
test -z "${LEGACY}" || NAME="${NAME}-Legacy"
|
||||
test -z "${PORT}" || NAME="${NAME}-Portable"
|
||||
test -z "${INST}" || mv PolyMC-*.exe ../${NAME}-Setup-${{ env.VERSION }}.exe
|
||||
test -z "${INST}" || mv PollyMC-*.exe ../${NAME}-Setup-${{ env.VERSION }}.exe
|
||||
test -n "${INST}" || zip -r -9 "../${NAME}-${{ env.VERSION }}.zip" *
|
||||
cd ..
|
||||
done
|
||||
@ -64,20 +64,20 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
name: PolyMC ${{ env.VERSION }}
|
||||
name: PollyMC ${{ env.VERSION }}
|
||||
draft: true
|
||||
prerelease: false
|
||||
files: |
|
||||
PolyMC-Linux-${{ env.VERSION }}.tar.gz
|
||||
PolyMC-Linux-Portable-${{ env.VERSION }}.tar.gz
|
||||
PolyMC-Linux-${{ env.VERSION }}-x86_64.AppImage
|
||||
PolyMC-Windows-Legacy-${{ env.VERSION }}.zip
|
||||
PolyMC-Linux-Qt6-${{ env.VERSION }}.tar.gz
|
||||
PolyMC-Linux-Qt6-Portable-${{ env.VERSION }}.tar.gz
|
||||
PolyMC-Windows-Legacy-Portable-${{ env.VERSION }}.zip
|
||||
PolyMC-Windows-Legacy-Setup-${{ env.VERSION }}.exe
|
||||
PolyMC-Windows-${{ env.VERSION }}.zip
|
||||
PolyMC-Windows-Portable-${{ env.VERSION }}.zip
|
||||
PolyMC-Windows-Setup-${{ env.VERSION }}.exe
|
||||
PolyMC-macOS-${{ env.VERSION }}.tar.gz
|
||||
PolyMC-${{ env.VERSION }}.tar.gz
|
||||
PollyMC-Linux-${{ env.VERSION }}.tar.gz
|
||||
PollyMC-Linux-Portable-${{ env.VERSION }}.tar.gz
|
||||
PollyMC-Linux-${{ env.VERSION }}-x86_64.AppImage
|
||||
PollyMC-Windows-Legacy-${{ env.VERSION }}.zip
|
||||
PollyMC-Linux-Qt6-${{ env.VERSION }}.tar.gz
|
||||
PollyMC-Linux-Qt6-Portable-${{ env.VERSION }}.tar.gz
|
||||
PollyMC-Windows-Legacy-Portable-${{ env.VERSION }}.zip
|
||||
PollyMC-Windows-Legacy-Setup-${{ env.VERSION }}.exe
|
||||
PollyMC-Windows-${{ env.VERSION }}.zip
|
||||
PollyMC-Windows-Portable-${{ env.VERSION }}.zip
|
||||
PollyMC-Windows-Setup-${{ env.VERSION }}.exe
|
||||
PollyMC-macOS-${{ env.VERSION }}.tar.gz
|
||||
PollyMC-${{ env.VERSION }}.tar.gz
|
||||
|
@ -99,19 +99,19 @@ set(Launcher_META_URL "https://meta.polymc.org/v1/" CACHE STRING "URL to fetch L
|
||||
set(Launcher_IMGUR_CLIENT_ID "5b97b0713fba4a3" CACHE STRING "Client ID you can get from Imgur when you register an application")
|
||||
|
||||
# Bug tracker URL
|
||||
set(Launcher_BUG_TRACKER_URL "https://github.com/PolyMC/PolyMC/issues" CACHE STRING "URL for the bug tracker.")
|
||||
set(Launcher_BUG_TRACKER_URL "https://github.com/fn2006/PollyMC/issues" CACHE STRING "URL for the bug tracker.")
|
||||
|
||||
# Translations Platform URL
|
||||
set(Launcher_TRANSLATIONS_URL "https://hosted.weblate.org/projects/polymc/polymc/" CACHE STRING "URL for the translations platform.")
|
||||
|
||||
# Matrix Space
|
||||
set(Launcher_MATRIX_URL "https://matrix.to/#/#polymc:matrix.org" CACHE STRING "URL to the Matrix Space")
|
||||
set(Launcher_MATRIX_URL "" CACHE STRING "URL to the Matrix Space")
|
||||
|
||||
# Discord URL
|
||||
set(Launcher_DISCORD_URL "https://discord.gg/Z52pwxWCHP" CACHE STRING "URL for the Discord guild.")
|
||||
set(Launcher_DISCORD_URL "" CACHE STRING "URL for the Discord guild.")
|
||||
|
||||
# Subreddit URL
|
||||
set(Launcher_SUBREDDIT_URL "https://www.reddit.com/r/PolyMCLauncher/" CACHE STRING "URL for the subreddit.")
|
||||
set(Launcher_SUBREDDIT_URL "" CACHE STRING "URL for the subreddit.")
|
||||
|
||||
# Builds
|
||||
set(Launcher_FORCE_BUNDLED_LIBS OFF CACHE BOOL "Prevent using system libraries, if they are available as submodules")
|
||||
@ -126,12 +126,12 @@ set(Launcher_QT_VERSION_MAJOR "5" CACHE STRING "Major Qt version to build agains
|
||||
|
||||
# By using this key in your builds you accept the terms of use laid down in
|
||||
# https://docs.microsoft.com/en-us/legal/microsoft-identity-platform/terms-of-use
|
||||
set(Launcher_MSA_CLIENT_ID "549033b2-1532-4d4e-ae77-1bbaa46f9d74" CACHE STRING "Client ID you can get from Microsoft Identity Platform when you register an application")
|
||||
set(Launcher_MSA_CLIENT_ID "" CACHE STRING "Client ID you can get from Microsoft Identity Platform when you register an application")
|
||||
|
||||
# By using this key in your builds you accept the terms and conditions laid down in
|
||||
# https://support.curseforge.com/en/support/solutions/articles/9000207405-curse-forge-3rd-party-api-terms-and-conditions
|
||||
# NOTE: CurseForge requires you to change this if you make any kind of derivative work.
|
||||
set(Launcher_CURSEFORGE_API_KEY "$2a$10$1Oqr2MX3O4n/ilhFGc597u8tfI3L2Hyr9/rtWDAMRjghSQV2QUuxq" CACHE STRING "API key for the CurseForge platform")
|
||||
set(Launcher_CURSEFORGE_API_KEY "" CACHE STRING "API key for the CurseForge platform")
|
||||
|
||||
|
||||
#### Check the current Git commit and branch
|
||||
@ -194,7 +194,7 @@ endif()
|
||||
|
||||
####################################### Program Info #######################################
|
||||
|
||||
set(Launcher_APP_BINARY_NAME "polymc" CACHE STRING "Name of the Launcher binary")
|
||||
set(Launcher_APP_BINARY_NAME "pollymc" CACHE STRING "Name of the Launcher binary")
|
||||
add_subdirectory(program_info)
|
||||
|
||||
####################################### Install layout #######################################
|
||||
|
101
README.md
@ -1,100 +1,13 @@
|
||||
<p align="center">
|
||||
<img src="./program_info/polymc-header-black.svg#gh-light-mode-only" alt="PolyMC logo" width="50%"/>
|
||||
<img src="./program_info/polymc-header.svg#gh-dark-mode-only" alt="PolyMC logo" width="50%"/>
|
||||
<img src="./program_info/pollymc-header-black.svg#gh-light-mode-only" alt="PollyMC logo" width="60%"/>
|
||||
<img src="./program_info/pollymc-header.svg#gh-dark-mode-only" alt="PollyMC logo" width="60%"/>
|
||||
</p>
|
||||
|
||||
PolyMC is a custom launcher for Minecraft that focuses on predictability, long term stability and simplicity.
|
||||
PollyMC is a **fork** of PolyMC and is not endorsed by or affiliated with the PolyMC project.
|
||||
If you have any problems open an issue here, do not bug the PolyMC maintainers.
|
||||
|
||||
This is a **fork** of the MultiMC Launcher and not endorsed by MultiMC.
|
||||
If you want to read about why this fork was created, check out [our FAQ page](https://polymc.org/wiki/overview/faq/).
|
||||
<br>
|
||||
Binaries can be found in releases.
|
||||
|
||||
# Installation
|
||||
Workaround for downloading from CurseForge and FTB not working [here](https://github.com/fn2006/PollyMC/wiki/CurseForge-Workaround).
|
||||
|
||||
- All downloads and instructions for PolyMC can be found [here](https://polymc.org/download/)
|
||||
- Last build status: <https://github.com/PolyMC/PolyMC/actions>
|
||||
|
||||
## Development Builds
|
||||
|
||||
There are per-commit development builds available [here](https://github.com/PolyMC/PolyMC/actions). These have debug information in the binaries, so their file sizes are relatively larger.
|
||||
Portable builds are provided for AppImage on Linux, Windows, and macOS.
|
||||
|
||||
For Debian and Arch, you can use these packages for the latest development versions:
|
||||
[![polymc-git](https://img.shields.io/badge/aur-polymc--git-blue)](https://aur.archlinux.org/packages/polymc-git/)
|
||||
[![polymc-git](https://img.shields.io/badge/mpr-polymc--git-orange)](https://mpr.makedeb.org/packages/polymc-git)
|
||||
For flatpak, you can use [flathub-beta](https://discourse.flathub.org/t/how-to-use-flathub-beta/2111)
|
||||
|
||||
# Help & Support
|
||||
|
||||
Feel free to create an issue if you need help. However, you might find it easier to ask in the Discord server.
|
||||
|
||||
[![PolyMC Discord](https://img.shields.io/discord/923671181020766230?label=PolyMC%20Discord)](https://discord.gg/xq7fxrgtMP)
|
||||
|
||||
For people who don't want to use Discord, we have a Matrix Space which is bridged to the Discord server:
|
||||
|
||||
[![PolyMC Space](https://img.shields.io/matrix/polymc:matrix.org?label=PolyMC%20space)](https://matrix.to/#/#polymc:matrix.org)
|
||||
|
||||
If there are any issues with the space or you are using a client that does not support the feature here are the individual rooms:
|
||||
|
||||
[![Development](https://img.shields.io/matrix/polymc-development:matrix.org?label=PolyMC%20Development)](https://matrix.to/#/#polymc-development:matrix.org)
|
||||
[![Discussion](https://img.shields.io/matrix/polymc-discussion:matrix.org?label=PolyMC%20Discussion)](https://matrix.to/#/#polymc-discussion:matrix.org)
|
||||
[![Github](https://img.shields.io/matrix/polymc-github:matrix.org?label=PolyMC%20Github)](https://matrix.to/#/#polymc-github:matrix.org)
|
||||
[![Maintainers](https://img.shields.io/matrix/polymc-maintainers:matrix.org?label=PolyMC%20Maintainers)](https://matrix.to/#/#polymc-maintainers:matrix.org)
|
||||
[![News](https://img.shields.io/matrix/polymc-news:matrix.org?label=PolyMC%20News)](https://matrix.to/#/#polymc-news:matrix.org)
|
||||
[![Offtopic](https://img.shields.io/matrix/polymc-offtopic:matrix.org?label=PolyMC%20Offtopic)](https://matrix.to/#/#polymc-offtopic:matrix.org)
|
||||
[![Support](https://img.shields.io/matrix/polymc-support:matrix.org?label=PolyMC%20Support)](https://matrix.to/#/#polymc-support:matrix.org)
|
||||
[![Voice](https://img.shields.io/matrix/polymc-voice:matrix.org?label=PolyMC%20Voice)](https://matrix.to/#/#polymc-voice:matrix.org)
|
||||
|
||||
We also have a subreddit you can post your issues and suggestions on:
|
||||
|
||||
[r/PolyMCLauncher](https://www.reddit.com/r/PolyMCLauncher/)
|
||||
|
||||
# Development
|
||||
|
||||
If you want to contribute to PolyMC you might find it useful to join our Discord Server or Matrix Space.
|
||||
|
||||
## Building
|
||||
|
||||
If you want to build PolyMC yourself, check [Build Instructions](https://polymc.org/wiki/development/build-instructions/) for build instructions.
|
||||
|
||||
## Translations
|
||||
|
||||
The translation effort for PolyMC is hosted on [Weblate](https://hosted.weblate.org/projects/polymc/polymc/) and information about translating PolyMC is available at <https://github.com/PolyMC/Translations>
|
||||
|
||||
## Download information
|
||||
|
||||
To modify download information or change packaging information send a pull request or issue to the website [here](https://github.com/PolyMC/polymc.github.io/tree/master/src/download).
|
||||
|
||||
## Forking/Redistributing/Custom builds policy
|
||||
|
||||
We don't care what you do with your fork/custom build as long as you follow the terms of the [license](LICENSE) (this is a legal responsibility), and if you made code changes rather than just packaging a custom build, please do the following as a basic courtesy:
|
||||
|
||||
- Make it clear that your fork is not PolyMC and is not endorsed by or affiliated with the PolyMC project (<https://polymc.org>).
|
||||
- Go through [CMakeLists.txt](CMakeLists.txt) and change PolyMC's API keys to your own or set them to empty strings (`""`) to disable them (this way the program will still compile but the functionality requiring those keys will be disabled).
|
||||
|
||||
If you have any questions or want any clarification on the above conditions please make an issue and ask us.
|
||||
|
||||
Be aware that if you build this software without removing the provided API keys in [CMakeLists.txt](CMakeLists.txt) you are accepting the following terms and conditions:
|
||||
|
||||
- [Microsoft Identity Platform Terms of Use](https://docs.microsoft.com/en-us/legal/microsoft-identity-platform/terms-of-use)
|
||||
- [CurseForge 3rd Party API Terms and Conditions](https://support.curseforge.com/en/support/solutions/articles/9000207405-curse-forge-3rd-party-api-terms-and-conditions)
|
||||
|
||||
If you do not agree with these terms and conditions, then remove the associated API keys from the [CMakeLists.txt](CMakeLists.txt) file by setting them to an empty string (`""`).
|
||||
|
||||
All launcher code is available under the GPL-3.0-only license.
|
||||
|
||||
The logo and related assets are under the CC BY-SA 4.0 license.
|
||||
|
||||
## Sponsors
|
||||
|
||||
Thank you to all our generous backers over at Open Collective! Support PolyMC by [becoming a backer](https://opencollective.com/polymc).
|
||||
|
||||
[![OpenCollective Backers](https://opencollective.com/polymc/backers.svg?width=890&limit=1000)](https://opencollective.com/polymc#backers)
|
||||
|
||||
Also, thanks to JetBrains for providing us a few licenses for all their products, as part of their [Open Source program](https://www.jetbrains.com/opensource/).
|
||||
|
||||
[![JetBrains](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://www.jetbrains.com/opensource/)
|
||||
|
||||
Additionally, thanks to the awesome people over at [MacStadium](https://www.macstadium.com/), for providing M1-Macs for development purposes!
|
||||
|
||||
<a href="https://www.macstadium.com"><img src="https://uploads-ssl.webflow.com/5ac3c046c82724970fc60918/5c019d917bba312af7553b49_MacStadium-developerlogo.png" alt="Powered by MacStadium" width="300"></a>
|
||||
To build this yourself, follow the instructions on the PolyMC website but clone this repo instead.
|
||||
|
@ -881,6 +881,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
|
||||
m_metacache->addBase("translations", QDir("translations").absolutePath());
|
||||
m_metacache->addBase("icons", QDir("cache/icons").absolutePath());
|
||||
m_metacache->addBase("meta", QDir("meta").absolutePath());
|
||||
m_metacache->addBase("injectors", QDir("injectors").absolutePath());
|
||||
m_metacache->Load();
|
||||
qDebug() << "<> Cache initialized.";
|
||||
}
|
||||
@ -1223,7 +1224,8 @@ void Application::setIconTheme(const QString& name)
|
||||
QIcon Application::getThemedIcon(const QString& name)
|
||||
{
|
||||
if(name == "logo") {
|
||||
return QIcon(":/org.polymc.PolyMC.svg");
|
||||
// why is this hardcoded lol
|
||||
return QIcon(":/org.fn2006.PollyMC.svg");
|
||||
}
|
||||
return QIcon::fromTheme(name);
|
||||
}
|
||||
|
@ -206,11 +206,15 @@ set(MINECRAFT_SOURCES
|
||||
minecraft/auth/flows/MSA.h
|
||||
minecraft/auth/flows/Offline.cpp
|
||||
minecraft/auth/flows/Offline.h
|
||||
minecraft/auth/flows/Elyby.cpp
|
||||
minecraft/auth/flows/Elyby.h
|
||||
|
||||
minecraft/auth/steps/OfflineStep.cpp
|
||||
minecraft/auth/steps/OfflineStep.h
|
||||
minecraft/auth/steps/EntitlementsStep.cpp
|
||||
minecraft/auth/steps/EntitlementsStep.h
|
||||
minecraft/auth/steps/ElybyProfileStep.cpp
|
||||
minecraft/auth/steps/ElybyProfileStep.h
|
||||
minecraft/auth/steps/ElybyStep.cpp
|
||||
minecraft/auth/steps/ElybyStep.h
|
||||
minecraft/auth/steps/GetSkinStep.cpp
|
||||
minecraft/auth/steps/GetSkinStep.h
|
||||
minecraft/auth/steps/LauncherLoginStep.cpp
|
||||
@ -223,6 +227,8 @@ set(MINECRAFT_SOURCES
|
||||
minecraft/auth/steps/MinecraftProfileStepMojang.h
|
||||
minecraft/auth/steps/MSAStep.cpp
|
||||
minecraft/auth/steps/MSAStep.h
|
||||
minecraft/auth/steps/OfflineStep.cpp
|
||||
minecraft/auth/steps/OfflineStep.h
|
||||
minecraft/auth/steps/XboxAuthorizationStep.cpp
|
||||
minecraft/auth/steps/XboxAuthorizationStep.h
|
||||
minecraft/auth/steps/XboxProfileStep.cpp
|
||||
@ -258,6 +264,8 @@ set(MINECRAFT_SOURCES
|
||||
minecraft/launch/LauncherPartLaunch.h
|
||||
minecraft/launch/MinecraftServerTarget.cpp
|
||||
minecraft/launch/MinecraftServerTarget.h
|
||||
minecraft/launch/InjectAuthlib.cpp
|
||||
minecraft/launch/InjectAuthlib.h
|
||||
minecraft/launch/PrintInstanceInfo.cpp
|
||||
minecraft/launch/PrintInstanceInfo.h
|
||||
minecraft/launch/ReconstructAssets.cpp
|
||||
@ -774,6 +782,8 @@ SET(LAUNCHER_SOURCES
|
||||
ui/dialogs/CustomMessageBox.h
|
||||
ui/dialogs/EditAccountDialog.cpp
|
||||
ui/dialogs/EditAccountDialog.h
|
||||
ui/dialogs/ElybyLoginDialog.cpp
|
||||
ui/dialogs/ElybyLoginDialog.h
|
||||
ui/dialogs/ExportInstanceDialog.cpp
|
||||
ui/dialogs/ExportInstanceDialog.h
|
||||
ui/dialogs/IconPickerDialog.cpp
|
||||
@ -924,6 +934,7 @@ qt_wrap_ui(LAUNCHER_UI
|
||||
ui/dialogs/IconPickerDialog.ui
|
||||
ui/dialogs/MSALoginDialog.ui
|
||||
ui/dialogs/OfflineLoginDialog.ui
|
||||
ui/dialogs/ElybyLoginDialog.ui
|
||||
ui/dialogs/AboutDialog.ui
|
||||
ui/dialogs/LoginDialog.ui
|
||||
ui/dialogs/EditAccountDialog.ui
|
||||
|
@ -356,6 +356,7 @@ QStringList MinecraftInstance::extraArguments()
|
||||
if (!addn.isEmpty()) {
|
||||
list.append(addn);
|
||||
}
|
||||
|
||||
auto agents = m_components->getProfile()->getAgents();
|
||||
for (auto agent : agents)
|
||||
{
|
||||
@ -363,6 +364,13 @@ QStringList MinecraftInstance::extraArguments()
|
||||
agent->library()->getApplicableFiles(currentSystem, jar, temp1, temp2, temp3, getLocalLibraryPath());
|
||||
list.append("-javaagent:"+jar[0]+(agent->argument().isEmpty() ? "" : "="+agent->argument()));
|
||||
}
|
||||
|
||||
// TODO: figure out how polymc's javaagent system works and use it instead of this hack
|
||||
if (m_injector) {
|
||||
list.append("-javaagent:"+m_injector->javaArg);
|
||||
list.append("-Dauthlibinjector.noShowServerName");
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -978,7 +986,14 @@ shared_qobject_ptr<LaunchTask> MinecraftInstance::createLaunchTask(AuthSessionPt
|
||||
if(!session->demo) {
|
||||
process->appendStep(new ClaimAccount(pptr, session));
|
||||
}
|
||||
|
||||
// authlib patch
|
||||
if (session->user_type == "elyby")
|
||||
{
|
||||
process->appendStep(new InjectAuthlib(pptr, &m_injector));
|
||||
}
|
||||
process->appendStep(new Update(pptr, Net::Mode::Online));
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <QProcess>
|
||||
#include <QDir>
|
||||
#include "minecraft/launch/MinecraftServerTarget.h"
|
||||
#include "minecraft/launch/InjectAuthlib.h"
|
||||
|
||||
class ModFolderModel;
|
||||
class ResourceFolderModel;
|
||||
@ -134,6 +135,7 @@ protected: // data
|
||||
mutable std::shared_ptr<TexturePackFolderModel> m_texture_pack_list;
|
||||
mutable std::shared_ptr<WorldList> m_world_list;
|
||||
mutable std::shared_ptr<GameOptions> m_game_options;
|
||||
mutable std::shared_ptr<AuthlibInjector> m_injector;
|
||||
};
|
||||
|
||||
typedef std::shared_ptr<MinecraftInstance> MinecraftInstancePtr;
|
||||
|
@ -352,6 +352,8 @@ bool AccountData::resumeStateFromV3(QJsonObject data) {
|
||||
type = AccountType::Mojang;
|
||||
} else if (typeS == "Offline") {
|
||||
type = AccountType::Offline;
|
||||
} else if (typeS == "Elyby") {
|
||||
type = AccountType::Elyby;
|
||||
} else {
|
||||
qWarning() << "Failed to parse account data: type is not recognized.";
|
||||
return false;
|
||||
@ -409,6 +411,9 @@ QJsonObject AccountData::saveState() const {
|
||||
else if (type == AccountType::Offline) {
|
||||
output["type"] = "Offline";
|
||||
}
|
||||
else if (type == AccountType::Elyby) {
|
||||
output["type"] = "Elyby";
|
||||
}
|
||||
|
||||
tokenToJSONV3(output, yggdrasilToken, "ygg");
|
||||
profileToJSONV3(output, minecraftProfile, "profile");
|
||||
@ -428,14 +433,14 @@ QString AccountData::accessToken() const {
|
||||
}
|
||||
|
||||
QString AccountData::clientToken() const {
|
||||
if(type != AccountType::Mojang) {
|
||||
if(type != AccountType::Mojang && type != AccountType::Elyby) {
|
||||
return QString();
|
||||
}
|
||||
return yggdrasilToken.extra["clientToken"].toString();
|
||||
}
|
||||
|
||||
void AccountData::setClientToken(QString clientToken) {
|
||||
if(type != AccountType::Mojang) {
|
||||
if(type != AccountType::Mojang && type != AccountType::Elyby) {
|
||||
return;
|
||||
}
|
||||
yggdrasilToken.extra["clientToken"] = clientToken;
|
||||
@ -449,7 +454,7 @@ void AccountData::generateClientTokenIfMissing() {
|
||||
}
|
||||
|
||||
void AccountData::invalidateClientToken() {
|
||||
if(type != AccountType::Mojang) {
|
||||
if(type != AccountType::Mojang && type != AccountType::Elyby) {
|
||||
return;
|
||||
}
|
||||
yggdrasilToken.extra["clientToken"] = QUuid::createUuid().toString().remove(QRegularExpression("[{-}]"));
|
||||
@ -473,6 +478,9 @@ QString AccountData::accountDisplayString() const {
|
||||
case AccountType::Mojang: {
|
||||
return userName();
|
||||
}
|
||||
case AccountType::Elyby: {
|
||||
return userName();
|
||||
}
|
||||
case AccountType::Offline: {
|
||||
return QObject::tr("<Offline>");
|
||||
}
|
||||
|
@ -74,7 +74,8 @@ struct MinecraftProfile {
|
||||
enum class AccountType {
|
||||
MSA,
|
||||
Mojang,
|
||||
Offline
|
||||
Offline,
|
||||
Elyby
|
||||
};
|
||||
|
||||
enum class AccountState {
|
||||
|
@ -332,7 +332,7 @@ QVariant AccountList::data(const QModelIndex &index, int role) const
|
||||
}
|
||||
|
||||
case MigrationColumn: {
|
||||
if(account->isMSA() || account->isOffline()) {
|
||||
if(!account->isMojang()) {
|
||||
return tr("N/A", "Can Migrate?");
|
||||
}
|
||||
if (account->canMigrate()) {
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include "flows/MSA.h"
|
||||
#include "flows/Mojang.h"
|
||||
#include "flows/Offline.h"
|
||||
#include "flows/Elyby.h"
|
||||
|
||||
MinecraftAccount::MinecraftAccount(QObject* parent) : QObject(parent) {
|
||||
data.internalId = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]"));
|
||||
@ -106,6 +107,17 @@ MinecraftAccountPtr MinecraftAccount::createOffline(const QString &username)
|
||||
return account;
|
||||
}
|
||||
|
||||
MinecraftAccountPtr MinecraftAccount::createElyby(const QString &username)
|
||||
{
|
||||
MinecraftAccountPtr account = new MinecraftAccount();
|
||||
account->data.type = AccountType::Elyby;
|
||||
account->data.yggdrasilToken.extra["userName"] = username;
|
||||
account->data.yggdrasilToken.extra["clientToken"] = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]"));
|
||||
account->data.minecraftEntitlement.ownsMinecraft = true;
|
||||
account->data.minecraftEntitlement.canPlayMinecraft = true;
|
||||
return account;
|
||||
}
|
||||
|
||||
|
||||
QJsonObject MinecraftAccount::saveToJson() const
|
||||
{
|
||||
@ -162,6 +174,17 @@ shared_qobject_ptr<AccountTask> MinecraftAccount::loginOffline() {
|
||||
return m_currentTask;
|
||||
}
|
||||
|
||||
shared_qobject_ptr<AccountTask> MinecraftAccount::loginElyby(QString password) {
|
||||
Q_ASSERT(m_currentTask.get() == nullptr);
|
||||
|
||||
m_currentTask.reset(new ElybyLogin(&data, password));
|
||||
connect(m_currentTask.get(), SIGNAL(succeeded()), SLOT(authSucceeded()));
|
||||
connect(m_currentTask.get(), SIGNAL(failed(QString)), SLOT(authFailed(QString)));
|
||||
connect(m_currentTask.get(), &Task::aborted, this, [this]{ authFailed(tr("Aborted")); });
|
||||
emit activityChanged(true);
|
||||
return m_currentTask;
|
||||
}
|
||||
|
||||
shared_qobject_ptr<AccountTask> MinecraftAccount::refresh() {
|
||||
if(m_currentTask) {
|
||||
return m_currentTask;
|
||||
@ -173,6 +196,9 @@ shared_qobject_ptr<AccountTask> MinecraftAccount::refresh() {
|
||||
else if(data.type == AccountType::Offline) {
|
||||
m_currentTask.reset(new OfflineRefresh(&data));
|
||||
}
|
||||
else if(data.type == AccountType::Elyby) {
|
||||
m_currentTask.reset(new ElybyRefresh(&data));
|
||||
}
|
||||
else {
|
||||
m_currentTask.reset(new MojangRefresh(&data));
|
||||
}
|
||||
|
@ -95,6 +95,8 @@ public: /* construction */
|
||||
|
||||
static MinecraftAccountPtr createOffline(const QString &username);
|
||||
|
||||
static MinecraftAccountPtr createElyby(const QString &username);
|
||||
|
||||
static MinecraftAccountPtr loadFromJsonV2(const QJsonObject &json);
|
||||
static MinecraftAccountPtr loadFromJsonV3(const QJsonObject &json);
|
||||
|
||||
@ -113,6 +115,8 @@ public: /* manipulation */
|
||||
|
||||
shared_qobject_ptr<AccountTask> loginOffline();
|
||||
|
||||
shared_qobject_ptr<AccountTask> loginElyby(QString password);
|
||||
|
||||
shared_qobject_ptr<AccountTask> refresh();
|
||||
|
||||
shared_qobject_ptr<AccountTask> currentTask();
|
||||
@ -152,10 +156,18 @@ public: /* queries */
|
||||
return data.type == AccountType::MSA;
|
||||
}
|
||||
|
||||
bool isMojang() const {
|
||||
return data.type == AccountType::Mojang;
|
||||
}
|
||||
|
||||
bool isOffline() const {
|
||||
return data.type == AccountType::Offline;
|
||||
}
|
||||
|
||||
bool isElyby() const {
|
||||
return data.type == AccountType::Elyby;
|
||||
}
|
||||
|
||||
bool ownsMinecraft() const {
|
||||
return data.minecraftEntitlement.ownsMinecraft;
|
||||
}
|
||||
@ -180,6 +192,9 @@ public: /* queries */
|
||||
case AccountType::Offline: {
|
||||
return "offline";
|
||||
}
|
||||
case AccountType::Elyby: {
|
||||
return "elyby";
|
||||
}
|
||||
break;
|
||||
default: {
|
||||
return "unknown";
|
||||
|
@ -55,7 +55,7 @@ void Yggdrasil::sendRequest(QUrl endpoint, QByteArray content) {
|
||||
void Yggdrasil::executeTask() {
|
||||
}
|
||||
|
||||
void Yggdrasil::refresh() {
|
||||
void Yggdrasil::refresh(QString baseUrl) {
|
||||
start();
|
||||
/*
|
||||
* {
|
||||
@ -84,13 +84,13 @@ void Yggdrasil::refresh() {
|
||||
req.insert("requestUser", false);
|
||||
QJsonDocument doc(req);
|
||||
|
||||
QUrl reqUrl("https://authserver.mojang.com/refresh");
|
||||
QUrl reqUrl(baseUrl + "refresh");
|
||||
QByteArray requestData = doc.toJson();
|
||||
|
||||
sendRequest(reqUrl, requestData);
|
||||
}
|
||||
|
||||
void Yggdrasil::login(QString password) {
|
||||
void Yggdrasil::login(QString password, QString baseUrl) {
|
||||
start();
|
||||
/*
|
||||
* {
|
||||
@ -129,7 +129,7 @@ void Yggdrasil::login(QString password) {
|
||||
|
||||
QJsonDocument doc(req);
|
||||
|
||||
QUrl reqUrl("https://authserver.mojang.com/authenticate");
|
||||
QUrl reqUrl(baseUrl + "authenticate");
|
||||
QNetworkRequest netRequest(reqUrl);
|
||||
QByteArray requestData = doc.toJson();
|
||||
|
||||
|
@ -40,8 +40,8 @@ public:
|
||||
);
|
||||
virtual ~Yggdrasil() = default;
|
||||
|
||||
void refresh();
|
||||
void login(QString password);
|
||||
void refresh(QString baseUrl);
|
||||
void login(QString password, QString baseUrl);
|
||||
|
||||
struct Error
|
||||
{
|
||||
|
24
launcher/minecraft/auth/flows/Elyby.cpp
Normal file
@ -0,0 +1,24 @@
|
||||
#include "Elyby.h"
|
||||
|
||||
#include "minecraft/auth/steps/ElybyStep.h"
|
||||
#include "minecraft/auth/steps/ElybyProfileStep.h"
|
||||
#include "minecraft/auth/steps/GetSkinStep.h"
|
||||
|
||||
ElybyRefresh::ElybyRefresh(
|
||||
AccountData *data,
|
||||
QObject *parent
|
||||
) : AuthFlow(data, parent) {
|
||||
m_steps.append(new ElybyStep(m_data, QString()));
|
||||
m_steps.append(new ElybyProfileStep(m_data));
|
||||
m_steps.append(new GetSkinStep(m_data));
|
||||
}
|
||||
|
||||
ElybyLogin::ElybyLogin(
|
||||
AccountData *data,
|
||||
QString password,
|
||||
QObject *parent
|
||||
): AuthFlow(data, parent), m_password(password) {
|
||||
m_steps.append(new ElybyStep(m_data, m_password));
|
||||
m_steps.append(new ElybyProfileStep(m_data));
|
||||
m_steps.append(new GetSkinStep(m_data));
|
||||
}
|
26
launcher/minecraft/auth/flows/Elyby.h
Normal file
@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
#include "AuthFlow.h"
|
||||
|
||||
class ElybyRefresh : public AuthFlow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ElybyRefresh(
|
||||
AccountData *data,
|
||||
QObject *parent = 0
|
||||
);
|
||||
};
|
||||
|
||||
class ElybyLogin : public AuthFlow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ElybyLogin(
|
||||
AccountData *data,
|
||||
QString password,
|
||||
QObject *parent = 0
|
||||
);
|
||||
|
||||
private:
|
||||
QString m_password;
|
||||
};
|
93
launcher/minecraft/auth/steps/ElybyProfileStep.cpp
Normal file
@ -0,0 +1,93 @@
|
||||
#include "ElybyProfileStep.h"
|
||||
|
||||
#include <QNetworkRequest>
|
||||
|
||||
#include "minecraft/auth/AuthRequest.h"
|
||||
#include "minecraft/auth/Parsers.h"
|
||||
#include "net/NetUtils.h"
|
||||
|
||||
ElybyProfileStep::ElybyProfileStep(AccountData* data) : AuthStep(data) {
|
||||
|
||||
}
|
||||
|
||||
ElybyProfileStep::~ElybyProfileStep() noexcept = default;
|
||||
|
||||
QString ElybyProfileStep::describe() {
|
||||
return tr("Fetching the Minecraft profile.");
|
||||
}
|
||||
|
||||
|
||||
void ElybyProfileStep::perform() {
|
||||
if (m_data->minecraftProfile.id.isEmpty()) {
|
||||
emit finished(AccountTaskState::STATE_FAILED_HARD, tr("A UUID is required to get the profile."));
|
||||
return;
|
||||
}
|
||||
|
||||
QUrl url = QUrl("https://authserver.ely.by/session/profile/" + m_data->minecraftProfile.id);
|
||||
QNetworkRequest req = QNetworkRequest(url);
|
||||
AuthRequest *request = new AuthRequest(this);
|
||||
connect(request, &AuthRequest::finished, this, &ElybyProfileStep::onRequestDone);
|
||||
request->get(req);
|
||||
}
|
||||
|
||||
void ElybyProfileStep::rehydrate() {
|
||||
// NOOP, for now. We only save bools and there's nothing to check.
|
||||
}
|
||||
|
||||
void ElybyProfileStep::onRequestDone(
|
||||
QNetworkReply::NetworkError error,
|
||||
QByteArray data,
|
||||
QList<QNetworkReply::RawHeaderPair> headers
|
||||
) {
|
||||
auto requestor = qobject_cast<AuthRequest *>(QObject::sender());
|
||||
requestor->deleteLater();
|
||||
|
||||
#ifndef NDEBUG
|
||||
qDebug() << data;
|
||||
#endif
|
||||
if (error == QNetworkReply::ContentNotFoundError) {
|
||||
// NOTE: Succeed even if we do not have a profile. This is a valid account state.
|
||||
m_data->minecraftProfile = MinecraftProfile();
|
||||
emit finished(
|
||||
AccountTaskState::STATE_SUCCEEDED,
|
||||
tr("Account has no Minecraft profile.")
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (error != QNetworkReply::NoError) {
|
||||
qWarning() << "Error getting profile:";
|
||||
qWarning() << " HTTP Status: " << requestor->httpStatus_;
|
||||
qWarning() << " Internal error no.: " << error;
|
||||
qWarning() << " Error string: " << requestor->errorString_;
|
||||
|
||||
qWarning() << " Response:";
|
||||
qWarning() << QString::fromUtf8(data);
|
||||
|
||||
if (Net::isApplicationError(error)) {
|
||||
emit finished(
|
||||
AccountTaskState::STATE_FAILED_SOFT,
|
||||
tr("Minecraft Java profile acquisition failed: %1").arg(requestor->errorString_)
|
||||
);
|
||||
}
|
||||
else {
|
||||
emit finished(
|
||||
AccountTaskState::STATE_OFFLINE,
|
||||
tr("Minecraft Java profile acquisition failed: %1").arg(requestor->errorString_)
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(!Parsers::parseMinecraftProfileMojang(data, m_data->minecraftProfile)) {
|
||||
m_data->minecraftProfile = MinecraftProfile();
|
||||
emit finished(
|
||||
AccountTaskState::STATE_FAILED_SOFT,
|
||||
tr("Minecraft Java profile response could not be parsed")
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
emit finished(
|
||||
AccountTaskState::STATE_WORKING,
|
||||
tr("Minecraft Java profile acquisition succeeded.")
|
||||
);
|
||||
}
|
22
launcher/minecraft/auth/steps/ElybyProfileStep.h
Normal file
@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
#include <QObject>
|
||||
|
||||
#include "QObjectPtr.h"
|
||||
#include "minecraft/auth/AuthStep.h"
|
||||
|
||||
|
||||
class ElybyProfileStep : public AuthStep {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ElybyProfileStep(AccountData *data);
|
||||
virtual ~ElybyProfileStep() noexcept;
|
||||
|
||||
void perform() override;
|
||||
void rehydrate() override;
|
||||
|
||||
QString describe() override;
|
||||
|
||||
private slots:
|
||||
void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
|
||||
};
|
52
launcher/minecraft/auth/steps/ElybyStep.cpp
Normal file
@ -0,0 +1,52 @@
|
||||
#include "ElybyStep.h"
|
||||
|
||||
#include "minecraft/auth/AuthRequest.h"
|
||||
#include "minecraft/auth/Parsers.h"
|
||||
#include "minecraft/auth/Yggdrasil.h"
|
||||
|
||||
ElybyStep::ElybyStep(AccountData* data, QString password) : AuthStep(data), m_password(password) {
|
||||
m_yggdrasil = new Yggdrasil(m_data, this);
|
||||
|
||||
connect(m_yggdrasil, &Task::failed, this, &ElybyStep::onAuthFailed);
|
||||
connect(m_yggdrasil, &Task::succeeded, this, &ElybyStep::onAuthSucceeded);
|
||||
connect(m_yggdrasil, &Task::aborted, this, &ElybyStep::onAuthFailed);
|
||||
}
|
||||
|
||||
ElybyStep::~ElybyStep() noexcept = default;
|
||||
|
||||
QString ElybyStep::describe() {
|
||||
return tr("Logging in with Ely.by account.");
|
||||
}
|
||||
|
||||
void ElybyStep::rehydrate() {
|
||||
// NOOP, for now.
|
||||
}
|
||||
|
||||
void ElybyStep::perform() {
|
||||
if(m_password.size()) {
|
||||
m_yggdrasil->login(m_password, "https://authserver.ely.by/auth/");
|
||||
}
|
||||
else {
|
||||
m_yggdrasil->refresh("https://authserver.ely.by/auth/");
|
||||
}
|
||||
}
|
||||
|
||||
void ElybyStep::onAuthSucceeded() {
|
||||
emit finished(AccountTaskState::STATE_WORKING, tr("Logged in with Ely.by"));
|
||||
}
|
||||
|
||||
void ElybyStep::onAuthFailed() {
|
||||
// TODO: hook these in again, expand to MSA
|
||||
// m_error = m_yggdrasil->m_error;
|
||||
// m_aborted = m_yggdrasil->m_aborted;
|
||||
|
||||
auto state = m_yggdrasil->taskState();
|
||||
QString errorMessage = tr("Ely.by user authentication failed.");
|
||||
|
||||
// NOTE: soft error in the first step means 'offline'
|
||||
if(state == AccountTaskState::STATE_FAILED_SOFT) {
|
||||
state = AccountTaskState::STATE_OFFLINE;
|
||||
errorMessage = tr("Ely.by user authentication ended with a network error.");
|
||||
}
|
||||
emit finished(state, errorMessage);
|
||||
}
|
28
launcher/minecraft/auth/steps/ElybyStep.h
Normal file
@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
#include <QObject>
|
||||
|
||||
#include "QObjectPtr.h"
|
||||
#include "minecraft/auth/AuthStep.h"
|
||||
|
||||
class Yggdrasil;
|
||||
|
||||
class ElybyStep : public AuthStep {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ElybyStep(AccountData *data, QString password);
|
||||
virtual ~ElybyStep() noexcept;
|
||||
|
||||
void perform() override;
|
||||
void rehydrate() override;
|
||||
|
||||
QString describe() override;
|
||||
|
||||
private slots:
|
||||
void onAuthSucceeded();
|
||||
void onAuthFailed();
|
||||
|
||||
private:
|
||||
Yggdrasil *m_yggdrasil = nullptr;
|
||||
QString m_password;
|
||||
};
|
@ -24,10 +24,10 @@ void YggdrasilStep::rehydrate() {
|
||||
|
||||
void YggdrasilStep::perform() {
|
||||
if(m_password.size()) {
|
||||
m_yggdrasil->login(m_password);
|
||||
m_yggdrasil->login(m_password, "https://authserver.mojang.com/");
|
||||
}
|
||||
else {
|
||||
m_yggdrasil->refresh();
|
||||
m_yggdrasil->refresh("https://authserver.mojang.com/");
|
||||
}
|
||||
}
|
||||
|
||||
|
173
launcher/minecraft/launch/InjectAuthlib.cpp
Normal file
@ -0,0 +1,173 @@
|
||||
/* Copyright 2013-2021 MultiMC Contributors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "InjectAuthlib.h"
|
||||
#include <launch/LaunchTask.h>
|
||||
#include <minecraft/MinecraftInstance.h>
|
||||
#include <FileSystem.h>
|
||||
#include <Application.h>
|
||||
#include <Json.h>
|
||||
|
||||
InjectAuthlib::InjectAuthlib(LaunchTask *parent, AuthlibInjectorPtr* injector) : LaunchStep(parent)
|
||||
{
|
||||
m_injector = injector;
|
||||
}
|
||||
|
||||
void InjectAuthlib::executeTask()
|
||||
{
|
||||
if (m_aborted)
|
||||
{
|
||||
emitFailed(tr("Task aborted."));
|
||||
return;
|
||||
}
|
||||
|
||||
auto latestVersionInfo = QString("https://authlib-injector.yushi.moe/artifact/latest.json");
|
||||
auto netJob = new NetJob("Injector versions info download", APPLICATION->network());
|
||||
MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("injectors", "version.json");
|
||||
if (!m_offlineMode)
|
||||
{
|
||||
entry->setStale(true);
|
||||
auto task = Net::Download::makeCached(QUrl(latestVersionInfo), entry);
|
||||
netJob->addNetAction(task);
|
||||
|
||||
jobPtr.reset(netJob);
|
||||
QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onVersionDownloadSucceeded);
|
||||
QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed);
|
||||
jobPtr->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
onVersionDownloadSucceeded();
|
||||
}
|
||||
}
|
||||
|
||||
void InjectAuthlib::onVersionDownloadSucceeded()
|
||||
{
|
||||
|
||||
QByteArray data;
|
||||
try
|
||||
{
|
||||
data = FS::read(QDir("injectors").absoluteFilePath("version.json"));
|
||||
}
|
||||
catch (const Exception &e)
|
||||
{
|
||||
qCritical() << "Translations Download Failed: index file not readable";
|
||||
jobPtr.reset();
|
||||
emitFailed("Error while parsing JSON response from InjectorEndpoint");
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonParseError parse_error;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(data, &parse_error);
|
||||
if (parse_error.error != QJsonParseError::NoError)
|
||||
{
|
||||
qCritical() << "Error while parsing JSON response from InjectorEndpoint at " << parse_error.offset << " reason: " << parse_error.errorString();
|
||||
qCritical() << data;
|
||||
jobPtr.reset();
|
||||
emitFailed("Error while parsing JSON response from InjectorEndpoint");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!doc.isObject())
|
||||
{
|
||||
qCritical() << "Error while parsing JSON response from InjectorEndpoint root is not object";
|
||||
qCritical() << data;
|
||||
jobPtr.reset();
|
||||
emitFailed("Error while parsing JSON response from InjectorEndpoint");
|
||||
return;
|
||||
}
|
||||
|
||||
QString downloadUrl;
|
||||
try
|
||||
{
|
||||
downloadUrl = Json::requireString(doc.object(), "download_url");
|
||||
}
|
||||
catch (const JSONValidationError &e)
|
||||
{
|
||||
qCritical() << "Error while parsing JSON response from InjectorEndpoint download url is not string";
|
||||
qCritical() << e.cause();
|
||||
qCritical() << data;
|
||||
jobPtr.reset();
|
||||
emitFailed("Error while parsing JSON response from InjectorEndpoint");
|
||||
return;
|
||||
}
|
||||
|
||||
QFileInfo fi(downloadUrl);
|
||||
m_versionName = fi.fileName();
|
||||
|
||||
qDebug() << "Authlib injector version:" << m_versionName;
|
||||
if (!m_offlineMode)
|
||||
{
|
||||
auto netJob = new NetJob("Injector download", APPLICATION->network());
|
||||
MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("injectors", m_versionName);
|
||||
entry->setStale(true);
|
||||
auto task = Net::Download::makeCached(QUrl(downloadUrl), entry);
|
||||
netJob->addNetAction(task);
|
||||
|
||||
jobPtr.reset(netJob);
|
||||
QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onDownloadSucceeded);
|
||||
QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed);
|
||||
jobPtr->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
onDownloadSucceeded();
|
||||
}
|
||||
}
|
||||
|
||||
void InjectAuthlib::onDownloadSucceeded()
|
||||
{
|
||||
QString injector = QString("%1=%2").arg(QDir("injectors").absoluteFilePath(m_versionName)).arg("ely.by");
|
||||
|
||||
qDebug()
|
||||
<< "Injecting " << injector;
|
||||
auto inj = new AuthlibInjector(injector);
|
||||
m_injector->reset(inj);
|
||||
|
||||
jobPtr.reset();
|
||||
emitSucceeded();
|
||||
}
|
||||
|
||||
void InjectAuthlib::onDownloadFailed(QString reason)
|
||||
{
|
||||
jobPtr.reset();
|
||||
emitFailed(reason);
|
||||
}
|
||||
|
||||
void InjectAuthlib::proceed()
|
||||
{
|
||||
}
|
||||
|
||||
bool InjectAuthlib::canAbort() const
|
||||
{
|
||||
if (jobPtr)
|
||||
{
|
||||
return jobPtr->canAbort();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool InjectAuthlib::abort()
|
||||
{
|
||||
m_aborted = true;
|
||||
if (jobPtr)
|
||||
{
|
||||
if (jobPtr->canAbort())
|
||||
{
|
||||
return jobPtr->abort();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
75
launcher/minecraft/launch/InjectAuthlib.h
Normal file
@ -0,0 +1,75 @@
|
||||
/* Copyright 2013-2021 MultiMC Contributors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <launch/LaunchStep.h>
|
||||
#include <QObjectPtr.h>
|
||||
#include <LoggedProcess.h>
|
||||
#include <java/JavaChecker.h>
|
||||
#include <net/Mode.h>
|
||||
#include <net/NetJob.h>
|
||||
|
||||
struct AuthlibInjector
|
||||
{
|
||||
QString javaArg;
|
||||
|
||||
AuthlibInjector(const QString arg)
|
||||
{
|
||||
javaArg = std::move(arg);
|
||||
qDebug() << "NEW INJECTOR" << javaArg;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::shared_ptr<AuthlibInjector> AuthlibInjectorPtr;
|
||||
|
||||
// FIXME: stupid. should be defined by the instance type? or even completely abstracted away...
|
||||
class InjectAuthlib : public LaunchStep
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
InjectAuthlib(LaunchTask *parent, AuthlibInjectorPtr *injector);
|
||||
virtual ~InjectAuthlib(){};
|
||||
|
||||
void executeTask() override;
|
||||
bool canAbort() const override;
|
||||
void proceed() override;
|
||||
|
||||
void setAuthServer(QString server)
|
||||
{
|
||||
m_authServer = server;
|
||||
};
|
||||
|
||||
void setOfflineMode(bool offline) {
|
||||
m_offlineMode = offline;
|
||||
}
|
||||
|
||||
public slots:
|
||||
bool abort() override;
|
||||
|
||||
private slots:
|
||||
void onVersionDownloadSucceeded();
|
||||
void onDownloadSucceeded();
|
||||
void onDownloadFailed(QString reason);
|
||||
|
||||
private:
|
||||
shared_qobject_ptr<NetJob> jobPtr;
|
||||
bool m_aborted = false;
|
||||
|
||||
bool m_offlineMode;
|
||||
QString m_versionName;
|
||||
QString m_authServer;
|
||||
AuthlibInjectorPtr *m_injector;
|
||||
};
|
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#88b858" offset="0"/>
|
||||
<stop stop-color="#72b147" offset=".5"/>
|
||||
<stop stop-color="#5a9a30" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#765338"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#b7835a"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#5b422d"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#72b147"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#5a9a30"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#88b858"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
BIN
launcher/resources/backgrounds/Polly.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
launcher/resources/backgrounds/PollyChristmas.png
Normal file
After Width: | Height: | Size: 220 KiB |
BIN
launcher/resources/backgrounds/PollyParty.png
Normal file
After Width: | Height: | Size: 129 KiB |
@ -1,8 +1,8 @@
|
||||
<!DOCTYPE RCC>
|
||||
<RCC version="1.0">
|
||||
<qresource prefix="/backgrounds">
|
||||
<file alias="kitteh">catbgrnd2.png</file>
|
||||
<file alias="catmas">catmas.png</file>
|
||||
<file alias="cattiversary">cattiversary.png</file>
|
||||
<file alias="kitteh">Polly.png</file>
|
||||
<file alias="catmas">PollyChristmas.png</file>
|
||||
<file alias="cattiversary">PollyParty.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
6
launcher/resources/backgrounds/licenses
Normal file
@ -0,0 +1,6 @@
|
||||
licenses for images here;
|
||||
Polly.png cc0
|
||||
santa-hat.png cc0
|
||||
party-hat.png Pixabay License
|
||||
PollyChristmas.png cc0
|
||||
PollyParty.png Pixabay License
|
BIN
launcher/resources/backgrounds/party-hat.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
launcher/resources/backgrounds/santa-hat.png
Normal file
After Width: | Height: | Size: 863 KiB |
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#88b858" offset="0"/>
|
||||
<stop stop-color="#72b147" offset=".5"/>
|
||||
<stop stop-color="#5a9a30" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#765338"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#b7835a"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#5b422d"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#72b147"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#5a9a30"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#88b858"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#88b858" offset="0"/>
|
||||
<stop stop-color="#72b147" offset=".5"/>
|
||||
<stop stop-color="#5a9a30" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#765338"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#b7835a"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#5b422d"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#72b147"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#5a9a30"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#88b858"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#88b858" offset="0"/>
|
||||
<stop stop-color="#72b147" offset=".5"/>
|
||||
<stop stop-color="#5a9a30" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#765338"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#b7835a"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#5b422d"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#72b147"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#5a9a30"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#88b858"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#88b858" offset="0"/>
|
||||
<stop stop-color="#72b147" offset=".5"/>
|
||||
<stop stop-color="#5a9a30" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#765338"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#b7835a"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#5b422d"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#72b147"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#5a9a30"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#88b858"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#88b858" offset="0"/>
|
||||
<stop stop-color="#72b147" offset=".5"/>
|
||||
<stop stop-color="#5a9a30" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#765338"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#b7835a"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#5b422d"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#72b147"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#5a9a30"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#88b858"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#88b858" offset="0"/>
|
||||
<stop stop-color="#72b147" offset=".5"/>
|
||||
<stop stop-color="#5a9a30" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#765338"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#b7835a"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#5b422d"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#72b147"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#5a9a30"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#88b858"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@ -1,21 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linearGradient84726" x1="4.4979" x2="12.435" y1="3.8011" y2="9.5681" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#dedede" offset="0"/>
|
||||
<stop stop-color="#d2d2d2" offset=".5"/>
|
||||
<stop stop-color="#c0c0c0" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<path d="m3.561 16.016s0-3.5642 4.9056-3.5642c4.9069 0 4.9056 3.5642 4.9056 3.5642z" fill="#8f8f8f"/>
|
||||
<path d="m8.4667 12.452-4.9056 3.5642-3.0319-9.3311z" fill="#c2c2c2"/>
|
||||
<path d="m8.4667 12.452 7.9375-5.7669-3.0319 9.3311z" fill="#7c7c7c"/>
|
||||
<path d="m8.8308 12.716-0.36417 0.26458-0.36417-0.26458c0-0.26458 0.36417-0.26458 0.36417-0.26458s0.36417 0 0.36417 0.26458z" fill="#d3d3d3"/>
|
||||
<path d="m8.4667 12.452s-2e-7 -5.7669 7.9375-5.7669l-0.22507 0.69269-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819-0.91853 1.1965-0.91853 0.13819z" fill="#bcbcbc"/>
|
||||
<path d="m8.1025 12.716-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.91853-0.13819-0.91853-1.1965-0.22507-0.69269c7.9375 1e-7 7.9375 5.7669 7.9375 5.7669z" fill="#dedede"/>
|
||||
<path d="m0.52917 6.6846 7.9375 5.7669 7.9375-5.7669-7.9375-5.7669z" fill="url(#linearGradient84726)"/>
|
||||
</g>
|
||||
<path d="m0.75424 7.3773-0.22507-0.69269 7.9375 5.7669 7.9375-5.7669-0.22507 0.69269-7.7124 5.6034z" fill-opacity="0"/>
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="24.966358"
|
||||
inkscape:cy="30.558192"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@ -406,7 +406,7 @@ public:
|
||||
actionCAT->setCheckable(true);
|
||||
actionCAT->setIcon(APPLICATION->getThemedIcon("cat"));
|
||||
actionCAT.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Meow"));
|
||||
actionCAT.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "It's a fluffy kitty :3"));
|
||||
actionCAT.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "It's a pretty parrot :D"));
|
||||
actionCAT->setPriority(QAction::LowPriority);
|
||||
all_actions.append(&actionCAT);
|
||||
|
||||
|
@ -71,6 +71,17 @@ QString getCreditsHtml()
|
||||
|
||||
//: %1 is the name of the launcher, determined at build time, e.g. "PolyMC Developers"
|
||||
stream << "<h3>" << QObject::tr("%1 Developers", "About Credits").arg(BuildConfig.LAUNCHER_NAME) << "</h3>\n";
|
||||
stream << QString("<p>fn2006 %1</p>\n") .arg(getGitHub("fn2006"));
|
||||
stream << "<br />\n";
|
||||
|
||||
//: %1 is the name of the launcher, determined at build time, e.g. "PolyMC Contributors"
|
||||
stream << "<h3>" << QObject::tr("%1 Contributors", "About Credits").arg(BuildConfig.LAUNCHER_NAME) << "</h3>\n";
|
||||
stream << QString("<p>anoraktrend %1</p>\n") .arg(getGitHub("anoraktrend"));
|
||||
stream << QString("<p>Emma Tebibyte %1</p>\n") .arg(getWebsite("https://tebibyte.media/"));
|
||||
stream << "<br />\n";
|
||||
|
||||
//: %1 is the name of the launcher, determined at build time, e.g. "PolyMC Developers"
|
||||
stream << "<h3>" << QObject::tr("%1 Developers", "About Credits").arg("PolyMC") << "</h3>\n";
|
||||
stream << QString("<p>LennyMcLennington %1</p>\n") .arg(getGitHub("LennyMcLennington"));
|
||||
stream << QString("<p>Sefa Eyeoglu (Scrumplex) %1</p>\n") .arg(getWebsite("https://scrumplex.net"));
|
||||
stream << QString("<p>dada513 %1</p>\n") .arg(getGitHub("dada513"));
|
||||
@ -81,7 +92,7 @@ QString getCreditsHtml()
|
||||
stream << "<br />\n";
|
||||
|
||||
//: %1 is the name of the launcher, determined at build time, e.g. "PolyMC Contributors"
|
||||
stream << "<h3>" << QObject::tr("%1 Contributors", "About Credits").arg(BuildConfig.LAUNCHER_NAME) << "</h3>\n";
|
||||
stream << "<h3>" << QObject::tr("%1 Contributors", "About Credits").arg("PolyMC") << "</h3>\n";
|
||||
stream << QString("<p>DioEgizio %1</p>\n") .arg(getGitHub("DioEgizio"));
|
||||
stream << QString("<p>flowln %1</p>\n") .arg(getGitHub("flowln"));
|
||||
stream << QString("<p>swirl %1</p>\n") .arg(getWebsite("https://swurl.xyz/"));
|
||||
@ -165,7 +176,7 @@ AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AboutDia
|
||||
QString urlText("<html><head/><body><p><a href=\"%1\">%1</a></p></body></html>");
|
||||
ui->urlLabel->setText(urlText.arg(BuildConfig.LAUNCHER_GIT));
|
||||
|
||||
QString copyText("© 2021-2022 %1");
|
||||
QString copyText("%1");
|
||||
ui->copyLabel->setText(copyText.arg(BuildConfig.LAUNCHER_COPYRIGHT));
|
||||
|
||||
connect(ui->closeButton, SIGNAL(clicked()), SLOT(close()));
|
||||
|
119
launcher/ui/dialogs/ElybyLoginDialog.cpp
Normal file
@ -0,0 +1,119 @@
|
||||
/* Copyright 2013-2021 MultiMC Contributors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "ElybyLoginDialog.h"
|
||||
#include "ui_ElybyLoginDialog.h"
|
||||
|
||||
#include "minecraft/auth/AccountTask.h"
|
||||
|
||||
#include <QtWidgets/QPushButton>
|
||||
|
||||
ElybyLoginDialog::ElybyLoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ElybyLoginDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->progressBar->setVisible(false);
|
||||
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
||||
|
||||
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
}
|
||||
|
||||
ElybyLoginDialog::~ElybyLoginDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
// Stage 1: User interaction
|
||||
void ElybyLoginDialog::accept()
|
||||
{
|
||||
setUserInputsEnabled(false);
|
||||
ui->progressBar->setVisible(true);
|
||||
|
||||
// Setup the login task and start it
|
||||
m_account = MinecraftAccount::createElyby(ui->userTextBox->text());
|
||||
m_loginTask = m_account->loginElyby(ui->passTextBox->text());
|
||||
connect(m_loginTask.get(), &Task::failed, this, &ElybyLoginDialog::onTaskFailed);
|
||||
connect(m_loginTask.get(), &Task::succeeded, this, &ElybyLoginDialog::onTaskSucceeded);
|
||||
connect(m_loginTask.get(), &Task::status, this, &ElybyLoginDialog::onTaskStatus);
|
||||
connect(m_loginTask.get(), &Task::progress, this, &ElybyLoginDialog::onTaskProgress);
|
||||
m_loginTask->start();
|
||||
}
|
||||
|
||||
void ElybyLoginDialog::setUserInputsEnabled(bool enable)
|
||||
{
|
||||
ui->userTextBox->setEnabled(enable);
|
||||
ui->passTextBox->setEnabled(enable);
|
||||
ui->buttonBox->setEnabled(enable);
|
||||
}
|
||||
|
||||
// Enable the OK button only when both textboxes contain something.
|
||||
void ElybyLoginDialog::on_userTextBox_textEdited(const QString &newText)
|
||||
{
|
||||
ui->buttonBox->button(QDialogButtonBox::Ok)
|
||||
->setEnabled(!newText.isEmpty() && !ui->passTextBox->text().isEmpty());
|
||||
}
|
||||
void ElybyLoginDialog::on_passTextBox_textEdited(const QString &newText)
|
||||
{
|
||||
ui->buttonBox->button(QDialogButtonBox::Ok)
|
||||
->setEnabled(!newText.isEmpty() && !ui->userTextBox->text().isEmpty());
|
||||
}
|
||||
|
||||
void ElybyLoginDialog::onTaskFailed(const QString &reason)
|
||||
{
|
||||
// Set message
|
||||
auto lines = reason.split('\n');
|
||||
QString processed;
|
||||
for(auto line: lines) {
|
||||
if(line.size()) {
|
||||
processed += "<font color='red'>" + line + "</font><br />";
|
||||
}
|
||||
else {
|
||||
processed += "<br />";
|
||||
}
|
||||
}
|
||||
ui->label->setText(processed);
|
||||
|
||||
// Re-enable user-interaction
|
||||
setUserInputsEnabled(true);
|
||||
ui->progressBar->setVisible(false);
|
||||
}
|
||||
|
||||
void ElybyLoginDialog::onTaskSucceeded()
|
||||
{
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
void ElybyLoginDialog::onTaskStatus(const QString &status)
|
||||
{
|
||||
ui->label->setText(status);
|
||||
}
|
||||
|
||||
void ElybyLoginDialog::onTaskProgress(qint64 current, qint64 total)
|
||||
{
|
||||
ui->progressBar->setMaximum(total);
|
||||
ui->progressBar->setValue(current);
|
||||
}
|
||||
|
||||
// Public interface
|
||||
MinecraftAccountPtr ElybyLoginDialog::newAccount(QWidget *parent, QString msg)
|
||||
{
|
||||
ElybyLoginDialog dlg(parent);
|
||||
dlg.ui->label->setText(msg);
|
||||
if (dlg.exec() == QDialog::Accepted)
|
||||
{
|
||||
return dlg.m_account;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
59
launcher/ui/dialogs/ElybyLoginDialog.h
Normal file
@ -0,0 +1,59 @@
|
||||
/* Copyright 2013-2021 MultiMC Contributors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QtWidgets/QDialog>
|
||||
#include <QtCore/QEventLoop>
|
||||
|
||||
#include "minecraft/auth/MinecraftAccount.h"
|
||||
#include "tasks/Task.h"
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class ElybyLoginDialog;
|
||||
}
|
||||
|
||||
class ElybyLoginDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
~ElybyLoginDialog();
|
||||
|
||||
static MinecraftAccountPtr newAccount(QWidget *parent, QString message);
|
||||
|
||||
private:
|
||||
explicit ElybyLoginDialog(QWidget *parent = 0);
|
||||
|
||||
void setUserInputsEnabled(bool enable);
|
||||
|
||||
protected
|
||||
slots:
|
||||
void accept();
|
||||
|
||||
void onTaskFailed(const QString &reason);
|
||||
void onTaskSucceeded();
|
||||
void onTaskStatus(const QString &status);
|
||||
void onTaskProgress(qint64 current, qint64 total);
|
||||
|
||||
void on_userTextBox_textEdited(const QString &newText);
|
||||
void on_passTextBox_textEdited(const QString &newText);
|
||||
|
||||
private:
|
||||
Ui::ElybyLoginDialog *ui;
|
||||
MinecraftAccountPtr m_account;
|
||||
Task::Ptr m_loginTask;
|
||||
};
|
77
launcher/ui/dialogs/ElybyLoginDialog.ui
Normal file
@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ElybyLoginDialog</class>
|
||||
<widget class="QDialog" name="ElybyLoginDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>421</width>
|
||||
<height>198</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Add Account</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string notr="true">Message label placeholder.</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::RichText</enum>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="userTextBox">
|
||||
<property name="placeholderText">
|
||||
<string>Email</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="passTextBox">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QProgressBar" name="progressBar">
|
||||
<property name="value">
|
||||
<number>24</number>
|
||||
</property>
|
||||
<property name="textVisible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -48,6 +48,7 @@
|
||||
#include "ui/dialogs/OfflineLoginDialog.h"
|
||||
#include "ui/dialogs/LoginDialog.h"
|
||||
#include "ui/dialogs/MSALoginDialog.h"
|
||||
#include "ui/dialogs/ElybyLoginDialog.h"
|
||||
#include "ui/dialogs/CustomMessageBox.h"
|
||||
#include "ui/dialogs/SkinUploadDialog.h"
|
||||
|
||||
@ -188,19 +189,6 @@ void AccountListPage::on_actionAddMicrosoft_triggered()
|
||||
|
||||
void AccountListPage::on_actionAddOffline_triggered()
|
||||
{
|
||||
if (!m_accounts->anyAccountIsValid()) {
|
||||
QMessageBox::warning(
|
||||
this,
|
||||
tr("Error"),
|
||||
tr(
|
||||
"You must add a Microsoft or Mojang account that owns Minecraft before you can add an offline account."
|
||||
"<br><br>"
|
||||
"If you have lost your account you can contact Microsoft for support."
|
||||
)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
MinecraftAccountPtr account = OfflineLoginDialog::newAccount(
|
||||
this,
|
||||
tr("Please enter your desired username to add your offline account.")
|
||||
@ -215,6 +203,22 @@ void AccountListPage::on_actionAddOffline_triggered()
|
||||
}
|
||||
}
|
||||
|
||||
void AccountListPage::on_actionAddElyby_triggered()
|
||||
{
|
||||
MinecraftAccountPtr account = ElybyLoginDialog::newAccount(
|
||||
this,
|
||||
tr("Please enter your Ely.by account email and password to add your account.")
|
||||
);
|
||||
|
||||
if (account)
|
||||
{
|
||||
m_accounts->addAccount(account);
|
||||
if (m_accounts->count() == 1) {
|
||||
m_accounts->setDefaultAccount(account);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AccountListPage::on_actionRemove_triggered()
|
||||
{
|
||||
QModelIndexList selection = ui->listView->selectionModel()->selectedIndexes();
|
||||
@ -258,17 +262,20 @@ void AccountListPage::updateButtonStates()
|
||||
bool hasSelection = !selection.empty();
|
||||
bool accountIsReady = false;
|
||||
bool accountIsOnline = false;
|
||||
bool accountIsElyby = false;
|
||||
if (hasSelection)
|
||||
{
|
||||
QModelIndex selected = selection.first();
|
||||
MinecraftAccountPtr account = selected.data(AccountList::PointerRole).value<MinecraftAccountPtr>();
|
||||
accountIsReady = !account->isActive();
|
||||
accountIsOnline = !account->isOffline();
|
||||
accountIsElyby = account->isElyby();
|
||||
|
||||
}
|
||||
ui->actionRemove->setEnabled(accountIsReady);
|
||||
ui->actionSetDefault->setEnabled(accountIsReady);
|
||||
ui->actionUploadSkin->setEnabled(accountIsReady && accountIsOnline);
|
||||
ui->actionDeleteSkin->setEnabled(accountIsReady && accountIsOnline);
|
||||
ui->actionUploadSkin->setEnabled(accountIsReady && accountIsOnline && !accountIsElyby);
|
||||
ui->actionDeleteSkin->setEnabled(accountIsReady && accountIsOnline && !accountIsElyby);
|
||||
ui->actionRefresh->setEnabled(accountIsReady && accountIsOnline);
|
||||
|
||||
if(m_accounts->defaultAccount().get() == nullptr) {
|
||||
|
@ -85,6 +85,7 @@ public slots:
|
||||
void on_actionAddMojang_triggered();
|
||||
void on_actionAddMicrosoft_triggered();
|
||||
void on_actionAddOffline_triggered();
|
||||
void on_actionAddElyby_triggered();
|
||||
void on_actionRemove_triggered();
|
||||
void on_actionRefresh_triggered();
|
||||
void on_actionSetDefault_triggered();
|
||||
|
@ -55,6 +55,7 @@
|
||||
<addaction name="actionAddMicrosoft"/>
|
||||
<addaction name="actionAddMojang"/>
|
||||
<addaction name="actionAddOffline"/>
|
||||
<addaction name="actionAddElyby"/>
|
||||
<addaction name="actionRefresh"/>
|
||||
<addaction name="actionRemove"/>
|
||||
<addaction name="actionSetDefault"/>
|
||||
@ -109,6 +110,11 @@
|
||||
<string>Add &Offline</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionAddElyby">
|
||||
<property name="text">
|
||||
<string>Add &Ely.by</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRefresh">
|
||||
<property name="text">
|
||||
<string>&Refresh</string>
|
||||
|
16
nix/NIX.md
@ -5,22 +5,22 @@ To import with flakes use
|
||||
```nix
|
||||
{
|
||||
inputs = {
|
||||
polymc.url = "github:PolyMC/PolyMC";
|
||||
pollymc.url = "github:fn2006/PollyMC";
|
||||
};
|
||||
|
||||
...
|
||||
|
||||
nixpkgs.overlays = [ inputs.polymc.overlay ]; ## Within configuration.nix
|
||||
environment.systemPackages = with pkgs; [ polymc ]; ##
|
||||
nixpkgs.overlays = [ inputs.pollymc.overlay ]; ## Within configuration.nix
|
||||
environment.systemPackages = with pkgs; [ pollymc ]; ##
|
||||
}
|
||||
```
|
||||
|
||||
To import without flakes use channels:
|
||||
|
||||
```sh
|
||||
nix-channel --add https://github.com/PolyMC/PolyMC/archive/master.tar.gz polymc
|
||||
nix-channel --update polymc
|
||||
nix-env -iA polymc
|
||||
nix-channel --add https://github.com/fn2006/PollyMC/archive/master.tar.gz pollymc
|
||||
nix-channel --update pollymc
|
||||
nix-env -iA pollymc
|
||||
```
|
||||
|
||||
or alternatively you can use
|
||||
@ -28,9 +28,9 @@ or alternatively you can use
|
||||
```nix
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(import (builtins.fetchTarball "https://github.com/PolyMC/PolyMC/archive/develop.tar.gz")).overlay
|
||||
(import (builtins.fetchTarball "https://github.com/fn2006/PollyMC/archive/develop.tar.gz")).overlay
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [ polymc ];
|
||||
environment.systemPackages = with pkgs; [ pollymc ];
|
||||
}
|
||||
```
|
||||
|
@ -43,7 +43,7 @@ let
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "polymc";
|
||||
pname = "pollymc";
|
||||
inherit version;
|
||||
|
||||
src = lib.cleanSource self;
|
||||
@ -70,7 +70,7 @@ stdenv.mkDerivation rec {
|
||||
# we have to check if the system is NixOS before adding stdenv.cc.cc.lib (#923)
|
||||
postInstall = ''
|
||||
# xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
|
||||
wrapQtApp $out/bin/polymc \
|
||||
wrapQtApp $out/bin/pollymc \
|
||||
--run '[ -f /etc/NIXOS ] && export LD_LIBRARY_PATH="${stdenv.cc.cc.lib}/lib:$LD_LIBRARY_PATH"' \
|
||||
--prefix LD_LIBRARY_PATH : ${gameLibraryPath} \
|
||||
--prefix POLYMC_JAVA_PATHS : ${javaPaths} \
|
||||
@ -78,9 +78,9 @@ stdenv.mkDerivation rec {
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://polymc.org/";
|
||||
downloadPage = "https://polymc.org/download/";
|
||||
changelog = "https://github.com/PolyMC/PolyMC/releases";
|
||||
homepage = "https://github.com/fn2006/PollyMC";
|
||||
downloadPage = "https://github.com/fn2006/PollyMC/releases";
|
||||
changelog = "https://github.com/fn2006/PollyMC/releases";
|
||||
description = "A free, open source launcher for Minecraft";
|
||||
longDescription = ''
|
||||
Allows you to have multiple, separate instances of Minecraft (each with
|
||||
|
@ -8,44 +8,44 @@ if(UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(Launcher_CommonName "PolyMC")
|
||||
set(Launcher_CommonName "PollyMC")
|
||||
|
||||
set(Launcher_Copyright "PolyMC Contributors\\n© 2012-2021 MultiMC Contributors")
|
||||
set(Launcher_Copyright "© 2022 PollyMC Contributors\\n© 2021-2022 PolyMC Contributors\\n© 2012-2021 MultiMC Contributors")
|
||||
set(Launcher_Copyright "${Launcher_Copyright}" PARENT_SCOPE)
|
||||
set(Launcher_Domain "polymc.org" PARENT_SCOPE)
|
||||
set(Launcher_Domain "" PARENT_SCOPE)
|
||||
set(Launcher_Name "${Launcher_CommonName}" PARENT_SCOPE)
|
||||
set(Launcher_DisplayName "${Launcher_CommonName}" PARENT_SCOPE)
|
||||
set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_VERSION_NAME}" PARENT_SCOPE)
|
||||
set(Launcher_ConfigFile "polymc.cfg" PARENT_SCOPE)
|
||||
set(Launcher_Git "https://github.com/PolyMC/PolyMC" PARENT_SCOPE)
|
||||
set(Launcher_DesktopFileName "org.polymc.PolyMC.desktop" PARENT_SCOPE)
|
||||
set(Launcher_UserAgent "PolyMC/${Launcher_RELEASE_VERSION_NAME}" PARENT_SCOPE)
|
||||
set(Launcher_ConfigFile "pollymc.cfg" PARENT_SCOPE)
|
||||
set(Launcher_Git "https://github.com/fn2006/PollyMC" PARENT_SCOPE)
|
||||
set(Launcher_DesktopFileName "org.fn2006.PollyMC.desktop" PARENT_SCOPE)
|
||||
|
||||
set(Launcher_Desktop "program_info/org.polymc.PolyMC.desktop" PARENT_SCOPE)
|
||||
set(Launcher_MetaInfo "program_info/org.polymc.PolyMC.metainfo.xml" PARENT_SCOPE)
|
||||
set(Launcher_SVG "program_info/org.polymc.PolyMC.svg" PARENT_SCOPE)
|
||||
set(Launcher_Desktop "program_info/org.fn2006.PollyMC.desktop" PARENT_SCOPE)
|
||||
set(Launcher_MetaInfo "program_info/org.fn2006.PollyMC.metainfo.xml" PARENT_SCOPE)
|
||||
set(Launcher_SVG "program_info/org.fn2006.PollyMC.svg" PARENT_SCOPE)
|
||||
set(Launcher_Branding_ICNS "program_info/polymc.icns" PARENT_SCOPE)
|
||||
set(Launcher_Branding_ICO "program_info/polymc.ico")
|
||||
set(Launcher_Branding_ICO "program_info/pollymc.ico")
|
||||
set(Launcher_Branding_ICO "${Launcher_Branding_ICO}" PARENT_SCOPE)
|
||||
set(Launcher_Branding_WindowsRC "program_info/polymc.rc" PARENT_SCOPE)
|
||||
set(Launcher_Branding_WindowsRC "program_info/pollymc.rc" PARENT_SCOPE)
|
||||
set(Launcher_Branding_LogoQRC "program_info/polymc.qrc" PARENT_SCOPE)
|
||||
|
||||
set(Launcher_Portable_File "program_info/portable.txt" PARENT_SCOPE)
|
||||
|
||||
configure_file(org.polymc.PolyMC.desktop.in org.polymc.PolyMC.desktop)
|
||||
configure_file(org.polymc.PolyMC.metainfo.xml.in org.polymc.PolyMC.metainfo.xml)
|
||||
configure_file(polymc.rc.in polymc.rc @ONLY)
|
||||
configure_file(polymc.manifest.in polymc.manifest @ONLY)
|
||||
configure_file(polymc.ico polymc.ico COPYONLY)
|
||||
configure_file(org.fn2006.PollyMC.desktop.in org.fn2006.PollyMC.desktop)
|
||||
configure_file(org.fn2006.PollyMC.metainfo.xml.in org.fn2006.PollyMC.metainfo.xml)
|
||||
configure_file(pollymc.rc.in pollymc.rc @ONLY)
|
||||
configure_file(pollymc.manifest.in pollymc.manifest @ONLY)
|
||||
configure_file(pollymc.ico pollymc.ico COPYONLY)
|
||||
configure_file(win_install.nsi.in win_install.nsi @ONLY)
|
||||
|
||||
if(SCDOC_FOUND)
|
||||
set(in_scd "${CMAKE_CURRENT_SOURCE_DIR}/polymc.6.scd")
|
||||
set(out_man "${CMAKE_CURRENT_BINARY_DIR}/polymc.6")
|
||||
set(in_scd "${CMAKE_CURRENT_SOURCE_DIR}/pollymc.6.scd")
|
||||
set(out_man "${CMAKE_CURRENT_BINARY_DIR}/pollymc.6")
|
||||
add_custom_command(
|
||||
DEPENDS "${in_scd}"
|
||||
OUTPUT "${out_man}"
|
||||
COMMAND ${SCDOC_SCDOC} < "${in_scd}" > "${out_man}"
|
||||
)
|
||||
add_custom_target(man ALL DEPENDS ${out_man})
|
||||
set(Launcher_ManPage "program_info/polymc.6" PARENT_SCOPE)
|
||||
set(Launcher_ManPage "program_info/pollymc.6" PARENT_SCOPE)
|
||||
endif()
|
||||
|
@ -2,38 +2,38 @@
|
||||
|
||||
# ICO
|
||||
|
||||
inkscape -w 16 -h 16 -o polymc_16.png org.polymc.PolyMC.svg
|
||||
inkscape -w 24 -h 24 -o polymc_24.png org.polymc.PolyMC.svg
|
||||
inkscape -w 32 -h 32 -o polymc_32.png org.polymc.PolyMC.svg
|
||||
inkscape -w 48 -h 48 -o polymc_48.png org.polymc.PolyMC.svg
|
||||
inkscape -w 64 -h 64 -o polymc_64.png org.polymc.PolyMC.svg
|
||||
inkscape -w 128 -h 128 -o polymc_128.png org.polymc.PolyMC.svg
|
||||
inkscape -w 16 -h 16 -o pollymc_16.png org.fn2006.PollyMC.svg
|
||||
inkscape -w 24 -h 24 -o pollymc_24.png org.fn2006.PollyMC.svg
|
||||
inkscape -w 32 -h 32 -o pollymc_32.png org.fn2006.PollyMC.svg
|
||||
inkscape -w 48 -h 48 -o pollymc_48.png org.fn2006.PollyMC.svg
|
||||
inkscape -w 64 -h 64 -o pollymc_64.png org.fn2006.PollyMC.svg
|
||||
inkscape -w 128 -h 128 -o pollymc_128.png org.fn2006.PollyMC.svg
|
||||
|
||||
convert polymc_128.png polymc_64.png polymc_48.png polymc_32.png polymc_24.png polymc_16.png polymc.ico
|
||||
convert pollymc_128.png pollymc_64.png pollymc_48.png pollymc_32.png pollymc_24.png pollymc_16.png pollymc.ico
|
||||
|
||||
rm -f polymc_*.png
|
||||
rm -f pollymc_*.png
|
||||
|
||||
inkscape -w 1024 -h 1024 -o polymc_1024.png org.polymc.PolyMC.bigsur.svg
|
||||
inkscape -w 1024 -h 1024 -o pollymc_1024.png org.fn2006.PollyMC.bigsur.svg
|
||||
|
||||
mkdir polymc.iconset
|
||||
mkdir pollymc.iconset
|
||||
|
||||
sips -z 16 16 polymc_1024.png --out polymc.iconset/icon_16x16.png
|
||||
sips -z 32 32 polymc_1024.png --out polymc.iconset/icon_16x16@2x.png
|
||||
sips -z 32 32 polymc_1024.png --out polymc.iconset/icon_32x32.png
|
||||
sips -z 64 64 polymc_1024.png --out polymc.iconset/icon_32x32@2x.png
|
||||
sips -z 128 128 polymc_1024.png --out polymc.iconset/icon_128x128.png
|
||||
sips -z 256 256 polymc_1024.png --out polymc.iconset/icon_128x128@2x.png
|
||||
sips -z 256 256 polymc_1024.png --out polymc.iconset/icon_256x256.png
|
||||
sips -z 512 512 polymc_1024.png --out polymc.iconset/icon_256x256@2x.png
|
||||
sips -z 512 512 polymc_1024.png --out polymc.iconset/icon_512x512.png
|
||||
cp polymc_1024.png polymc.iconset/icon_512x512@2x.png
|
||||
magick pollymc_1024.png -resize 16x16 pollymc.iconset/icon_16x16.png
|
||||
magick pollymc_1024.png -resize 32x32 pollymc.iconset/icon_16x16@2x.png
|
||||
magick pollymc_1024.png -resize 32x32 pollymc.iconset/icon_32x32.png
|
||||
magick pollymc_1024.png -resize 64x64 pollymc.iconset/icon_32x32@2x.png
|
||||
magick pollymc_1024.png -resize 128x128 pollymc.iconset/icon_128x128.png
|
||||
magick pollymc_1024.png -resize 256x256 pollymc.iconset/icon_128x128@2x.png
|
||||
magick pollymc_1024.png -resize 256x256 pollymc.iconset/icon_256x256.png
|
||||
magick pollymc_1024.png -resize 512x512 pollymc.iconset/icon_256x256@2x.png
|
||||
magick pollymc_1024.png -resize 512x512 pollymc.iconset/icon_512x512.png
|
||||
cp pollymc_1024.png pollymc.iconset/icon_512x512@2x.png
|
||||
|
||||
iconutil -c icns polymc.iconset
|
||||
icnsify -i pollymc_1024.png -o pollymc.icns
|
||||
|
||||
rm -f polymc_*.png
|
||||
rm -rf polymc.iconset
|
||||
rm -f pollymc_*.png
|
||||
rm -rf pollymc.iconset
|
||||
|
||||
for dir in ../launcher/resources/*/scalable
|
||||
do
|
||||
cp -v org.polymc.PolyMC.svg $dir/launcher.svg
|
||||
cp -v org.fn2006.PollyMC.svg $dir/launcher.svg
|
||||
done
|
||||
|
162
program_info/org.fn2006.PollyMC Source.svg
Normal file
@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC Source.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.4927604"
|
||||
inkscape:cx="52.355688"
|
||||
inkscape:cy="38.345011"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<g
|
||||
id="g926"
|
||||
inkscape:label="head">
|
||||
<path
|
||||
style="fill:#8acb01;fill-opacity:1"
|
||||
id="rect883"
|
||||
width="12"
|
||||
height="33.599998"
|
||||
x="31.173504"
|
||||
y="16"
|
||||
sodipodi:type="rect"
|
||||
inkscape:label="head2"
|
||||
d="m 31.173504,16 h 12 v 33.599998 h -12 z">
|
||||
<title
|
||||
id="title910">head2</title>
|
||||
</path>
|
||||
<path
|
||||
style="fill:#8acb01;fill-opacity:1"
|
||||
id="path916"
|
||||
width="25.979649"
|
||||
height="31.200001"
|
||||
x="30.020351"
|
||||
y="16"
|
||||
sodipodi:type="rect"
|
||||
inkscape:label="head1"
|
||||
d="M 30.020351,16 H 56 V 47.200001 H 30.020351 Z">
|
||||
<title
|
||||
id="title914">head1</title>
|
||||
</path>
|
||||
<path
|
||||
style="fill:#8acb01;fill-opacity:1"
|
||||
id="path352"
|
||||
width="24.03161"
|
||||
height="36"
|
||||
x="8"
|
||||
y="16"
|
||||
sodipodi:type="rect"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z">
|
||||
<title
|
||||
id="title908">head</title>
|
||||
</path>
|
||||
</g>
|
||||
<g
|
||||
id="g932"
|
||||
transform="matrix(1.0033333,0,0,1.0033333,-0.14666667,-0.09333333)"
|
||||
inkscape:label="beak">
|
||||
<path
|
||||
style="display:inline;fill:#313131;fill-opacity:1"
|
||||
id="rect1721"
|
||||
width="12"
|
||||
height="21.6"
|
||||
x="32"
|
||||
y="28"
|
||||
sodipodi:type="rect"
|
||||
d="M 32,28 H 44 V 49.6 H 32 Z" />
|
||||
<path
|
||||
style="display:inline;fill:#313131;fill-opacity:1"
|
||||
id="path928"
|
||||
width="24"
|
||||
height="19.200001"
|
||||
x="32"
|
||||
y="28"
|
||||
sodipodi:type="rect"
|
||||
d="M 32,28 H 56 V 47.200001 H 32 Z" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="rect3491"
|
||||
width="12.08"
|
||||
height="12.08"
|
||||
x="19.960001"
|
||||
y="28"
|
||||
sodipodi:type="rect"
|
||||
d="m 19.960001,28 h 12.08 v 12.08 h -12.08 z"
|
||||
inkscape:label="eye" />
|
||||
<path
|
||||
style="fill:#b0af8d;fill-opacity:1"
|
||||
id="rect3493"
|
||||
width="12.08"
|
||||
height="12.08"
|
||||
x="19.959999"
|
||||
y="40"
|
||||
sodipodi:type="rect"
|
||||
d="m 19.959999,40 h 12.08 v 12.08 h -12.08 z"
|
||||
inkscape:label="cheek" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.7 KiB |
207
program_info/org.fn2006.PollyMC.bigsur.svg
Normal file
@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="1024"
|
||||
height="1024"
|
||||
viewBox="0 0 1024 1024"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg1070"
|
||||
sodipodi:docname="org.fn2006.PollyMC.bigsur.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1072"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.01"
|
||||
inkscape:cx="-125500"
|
||||
inkscape:cy="-70400"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1070" /><g
|
||||
filter="url(#filter0_d_102_69)"
|
||||
id="g998"><path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M924 354.627C924 344.845 924.004 335.062 923.944 325.279C923.895 317.038 923.8 308.799 923.576 300.562C923.092 282.609 922.033 264.502 918.84 246.749C915.602 228.741 910.314 211.98 901.981 195.617C893.789 179.534 883.088 164.817 870.32 152.058C857.555 139.299 842.834 128.605 826.746 120.418C810.366 112.083 793.587 106.797 775.558 103.56C757.803 100.372 739.691 99.315 721.738 98.83C713.495 98.607 705.253 98.513 697.008 98.462C687.22 98.402 677.432 98.407 667.644 98.407L553.997 98H468.997L357.361 98.407C347.554 98.407 337.747 98.402 327.94 98.462C319.678 98.513 311.42 98.607 303.161 98.83C285.167 99.315 267.014 100.373 249.217 103.565C231.164 106.801 214.36 112.085 197.958 120.414C181.835 128.602 167.083 139.297 154.291 152.058C141.501 164.816 130.78 179.53 122.573 195.61C114.217 211.981 108.919 228.752 105.673 246.77C102.477 264.516 101.418 282.617 100.931 300.562C100.709 308.8 100.613 317.039 100.563 325.279C100.503 335.063 100 347.216 100 356.999L100.003 467.089L100 552.998L100.508 665.427C100.508 675.223 100.504 685.019 100.563 694.815C100.613 703.067 100.709 711.317 100.932 719.566C101.418 737.542 102.479 755.675 105.678 773.452C108.923 791.484 114.22 808.269 122.569 824.653C130.777 840.759 141.5 855.495 154.291 868.272C167.082 881.049 181.83 891.757 197.95 899.956C214.362 908.302 231.174 913.595 249.238 916.836C267.027 920.029 285.174 921.088 303.161 921.573C311.42 921.796 319.679 921.891 327.941 921.941C337.748 922.001 347.554 921.997 357.361 921.997L470.006 922H555.217L667.644 921.996C677.432 921.996 687.22 922.001 697.008 921.941C705.253 921.891 713.495 921.796 721.738 921.573C739.698 921.087 757.816 920.027 775.579 916.832C793.597 913.591 810.368 908.3 826.739 899.959C842.831 891.761 857.554 881.051 870.32 868.272C883.086 855.497 893.786 840.763 901.978 824.66C910.316 808.268 915.604 791.475 918.844 773.431C922.034 755.661 923.092 737.535 923.577 719.566C923.8 711.316 923.895 703.066 923.944 694.815C924.005 685.019 924 675.223 924 665.427C924 665.427 923.994 554.983 923.994 552.998V466.999C923.994 465.533 924 354.627 924 354.627Z"
|
||||
fill="url(#paint0_linear_102_69)"
|
||||
id="path996" /></g><mask
|
||||
id="mask0_102_69"
|
||||
style="mask-type: alpha"
|
||||
maskUnits="userSpaceOnUse"
|
||||
x="100"
|
||||
y="98"
|
||||
width="824"
|
||||
height="824"><path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M924 354.627C924 344.845 924.004 335.062 923.944 325.279C923.895 317.038 923.8 308.799 923.576 300.562C923.092 282.609 922.033 264.502 918.84 246.749C915.602 228.741 910.314 211.98 901.981 195.617C893.789 179.534 883.088 164.817 870.32 152.058C857.555 139.299 842.834 128.605 826.746 120.418C810.366 112.083 793.587 106.797 775.558 103.56C757.803 100.372 739.691 99.315 721.738 98.83C713.495 98.607 705.253 98.513 697.008 98.462C687.22 98.402 677.432 98.407 667.644 98.407L553.997 98H468.997L357.361 98.407C347.554 98.407 337.747 98.402 327.94 98.462C319.678 98.513 311.42 98.607 303.161 98.83C285.167 99.315 267.014 100.373 249.217 103.565C231.164 106.801 214.36 112.085 197.958 120.414C181.835 128.602 167.083 139.297 154.291 152.058C141.501 164.816 130.78 179.53 122.573 195.61C114.217 211.981 108.919 228.752 105.673 246.77C102.477 264.516 101.418 282.617 100.931 300.562C100.709 308.8 100.613 317.039 100.563 325.279C100.503 335.063 100 347.216 100 356.999L100.003 467.089L100 552.998L100.508 665.427C100.508 675.223 100.504 685.019 100.563 694.815C100.613 703.067 100.709 711.317 100.932 719.566C101.418 737.542 102.479 755.675 105.678 773.452C108.923 791.484 114.22 808.269 122.569 824.653C130.777 840.759 141.5 855.495 154.291 868.272C167.082 881.049 181.83 891.757 197.95 899.956C214.362 908.302 231.174 913.595 249.238 916.836C267.027 920.029 285.174 921.088 303.161 921.573C311.42 921.796 319.679 921.891 327.941 921.941C337.748 922.001 347.554 921.997 357.361 921.997L470.006 922H555.217L667.644 921.996C677.432 921.996 687.22 922.001 697.008 921.941C705.253 921.891 713.495 921.796 721.738 921.573C739.698 921.087 757.816 920.027 775.579 916.832C793.597 913.591 810.368 908.3 826.739 899.959C842.831 891.761 857.554 881.051 870.32 868.272C883.086 855.497 893.786 840.763 901.978 824.66C910.316 808.268 915.604 791.475 918.844 773.431C922.034 755.661 923.092 737.535 923.577 719.566C923.8 711.316 923.895 703.066 923.944 694.815C924.005 685.019 924 675.223 924 665.427C924 665.427 923.994 554.983 923.994 552.998V466.999C923.994 465.533 924 354.627 924 354.627Z"
|
||||
fill="white"
|
||||
id="path1000" /></mask><g
|
||||
mask="url(#mask0_102_69)"
|
||||
id="g1009"><rect
|
||||
x="42"
|
||||
y="36"
|
||||
width="914"
|
||||
height="914"
|
||||
fill="url(#paint1_linear_102_69)"
|
||||
id="rect1003" /><g
|
||||
filter="url(#filter1_b_102_69)"
|
||||
id="g1007"><rect
|
||||
x="100"
|
||||
y="98"
|
||||
width="824"
|
||||
height="824"
|
||||
rx="126"
|
||||
fill="black"
|
||||
fill-opacity="0.01"
|
||||
id="rect1005" /></g></g><defs
|
||||
id="defs1068"><filter
|
||||
id="filter0_d_102_69"
|
||||
x="90"
|
||||
y="98"
|
||||
width="844"
|
||||
height="844"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"><feFlood
|
||||
flood-opacity="0"
|
||||
result="BackgroundImageFix"
|
||||
id="feFlood1025" /><feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
id="feColorMatrix1027" /><feOffset
|
||||
dy="10"
|
||||
id="feOffset1029" /><feGaussianBlur
|
||||
stdDeviation="5"
|
||||
id="feGaussianBlur1031" /><feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"
|
||||
id="feColorMatrix1033" /><feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_102_69"
|
||||
id="feBlend1035" /><feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_102_69"
|
||||
result="shape"
|
||||
id="feBlend1037" /></filter><filter
|
||||
id="filter1_b_102_69"
|
||||
x="89.1269"
|
||||
y="87.1269"
|
||||
width="845.746"
|
||||
height="845.746"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"><feFlood
|
||||
flood-opacity="0"
|
||||
result="BackgroundImageFix"
|
||||
id="feFlood1040" /><feGaussianBlur
|
||||
in="BackgroundImage"
|
||||
stdDeviation="5.43656"
|
||||
id="feGaussianBlur1042" /><feComposite
|
||||
in2="SourceAlpha"
|
||||
operator="in"
|
||||
result="effect1_backgroundBlur_102_69"
|
||||
id="feComposite1044" /><feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_backgroundBlur_102_69"
|
||||
result="shape"
|
||||
id="feBlend1046" /></filter><linearGradient
|
||||
id="paint0_linear_102_69"
|
||||
x1="-181.14"
|
||||
y1="98"
|
||||
x2="-181.14"
|
||||
y2="1484.28"
|
||||
gradientUnits="userSpaceOnUse"><stop
|
||||
stop-color="white"
|
||||
id="stop1049" /><stop
|
||||
offset="0.489516"
|
||||
stop-color="#EFEFEF"
|
||||
id="stop1051" /><stop
|
||||
offset="1"
|
||||
stop-color="#C0C0C0"
|
||||
id="stop1053" /></linearGradient><linearGradient
|
||||
id="paint1_linear_102_69"
|
||||
x1="928.377"
|
||||
y1="992.826"
|
||||
x2="928.377"
|
||||
y2="134.072"
|
||||
gradientUnits="userSpaceOnUse"><stop
|
||||
stop-color="#F6F3F3"
|
||||
id="stop1056" /><stop
|
||||
offset="1"
|
||||
stop-color="white"
|
||||
id="stop1058" /></linearGradient><linearGradient
|
||||
id="paint2_linear_102_69"
|
||||
x1="394.815"
|
||||
y1="372.239"
|
||||
x2="629.182"
|
||||
y2="542.528"
|
||||
gradientUnits="userSpaceOnUse"><stop
|
||||
stop-color="#88B858"
|
||||
id="stop1061" /><stop
|
||||
offset="0.5"
|
||||
stop-color="#72B147"
|
||||
id="stop1063" /><stop
|
||||
offset="1"
|
||||
stop-color="#5A9A30"
|
||||
id="stop1065" /></linearGradient><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /></defs><g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(10,0,0,10,192.005,170.0135)"><path
|
||||
id="path352"
|
||||
style="fill:#8acb01"
|
||||
inkscape:label="head"
|
||||
d="M 8,16 H 32.03161 V 52 H 8 Z m 22.020351,0 H 56 V 47.200001 H 30.020351 Z m 1.153153,0 h 12 v 33.599998 h -12 z"><title
|
||||
id="title908">head</title></path><path
|
||||
id="rect3493"
|
||||
style="display:inline;fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" /><path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871;fill:#000000;fill-opacity:1" /><path
|
||||
id="path928"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="M 32,27.999999 H 56 V 47.555555 H 32 Z m 0,0 h 12 v 22 H 32 Z"
|
||||
inkscape:label="beak" /></g></svg>
|
After Width: | Height: | Size: 11 KiB |
13
program_info/org.fn2006.PollyMC.desktop.in
Executable file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=PollyMC
|
||||
Comment=A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once.
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=@Launcher_APP_BINARY_NAME@
|
||||
StartupNotify=true
|
||||
Icon=org.fn2006.PollyMC
|
||||
Categories=Game;
|
||||
Keywords=game;minecraft;launcher;mc;
|
||||
StartupWMClass=PollyMC
|
35
program_info/org.fn2006.PollyMC.metainfo.xml.in
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop">
|
||||
<id>org.fn2006.PollyMC</id>
|
||||
<provides>
|
||||
<id>org.fn2006.PollyMC</id>
|
||||
</provides>
|
||||
<launchable type="desktop-id">org.fn2006.PollyMC.desktop</launchable>
|
||||
<name>PollyMC</name>
|
||||
<developer_name>fn2006C</developer_name>
|
||||
<summary>A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once</summary>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-3.0-only</project_license>
|
||||
<url type="homepage">https://github.com/fn2006/PollyMC/</url>
|
||||
<url type="help">https://polymc.org/wiki/</url>
|
||||
<description>
|
||||
<p>PollyMC is a custom launcher for Minecraft that focuses on predictability, long term stability and simplicity.</p>
|
||||
<p>Features:</p>
|
||||
<ul>
|
||||
<li>Easily install game modifications, such as Fabric, Forge and Quilt</li>
|
||||
<li>Control your java settings</li>
|
||||
<li>Manage worlds and resource packs from the launcher</li>
|
||||
<li>See logs and other details easily</li>
|
||||
<li>Kill Minecraft in case of a crash/freeze</li>
|
||||
<li>Isolate minecraft instances to keep everything clean</li>
|
||||
<li>Install and update mods directly from the launcher</li>
|
||||
</ul>
|
||||
</description>
|
||||
<releases>
|
||||
<release version="@Launcher_VERSION_NAME@" date="@Launcher_BUILD_TIMESTAMP@"></release>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1">
|
||||
<content_attribute id="violence-fantasy">moderate</content_attribute>
|
||||
<content_attribute id="social-chat">intense</content_attribute>
|
||||
</content_rating>
|
||||
</component>
|
96
program_info/org.fn2006.PollyMC.svg
Normal file
@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg99"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="org.fn2006.PollyMC.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview101"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="12.697086"
|
||||
inkscape:cx="35.638098"
|
||||
inkscape:cy="31.345775"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5269" />
|
||||
<defs
|
||||
id="defs96">
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(1.25,0,0,1.25,-8,-10.5)">
|
||||
<path
|
||||
id="path300"
|
||||
style="fill:#8acb01"
|
||||
d="m 8,16 c 0,12 0,24 0,36 8.010417,0 16.020833,0 24.03125,0 0,-0.8 0,-1.6 0,-2.4 3.714062,0 7.428125,0 11.142187,0 0,-0.8 0,-1.6 0,-2.4 4.275521,0 8.551042,0 12.826563,0 C 56,36.8 56,26.4 56,16 40,16 24,16 8,16 Z"
|
||||
inkscape:label="head" />
|
||||
<path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" />
|
||||
<path
|
||||
id="rect3491"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" />
|
||||
<path
|
||||
id="path352"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="m 32,28 c 0,7.333333 0,14.666667 0,22 4,0 8,0 12,0 0,-0.814583 0,-1.629167 0,-2.44375 4,0 8,0 12,0 C 56,41.0375 56,34.51875 56,28 48,28 40,28 32,28 Z"
|
||||
inkscape:label="beak" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
143
program_info/pollymc-header-black.svg
Normal file
@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1424"
|
||||
height="512"
|
||||
version="1.1"
|
||||
viewBox="0 0 376.77 135.47"
|
||||
id="svg866"
|
||||
sodipodi:docname="pollymc-header-black.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview868"
|
||||
pagecolor="#8a8a8a"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.61938202"
|
||||
inkscape:cx="540.86168"
|
||||
inkscape:cy="261.55102"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg866"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#343434" /><defs
|
||||
id="defs831"><linearGradient
|
||||
id="linearGradient84726"
|
||||
x1="4.4979"
|
||||
x2="12.435"
|
||||
y1="3.8011"
|
||||
y2="9.5681"
|
||||
gradientUnits="userSpaceOnUse"><stop
|
||||
stop-color="#88b858"
|
||||
offset="0"
|
||||
id="stop824" /><stop
|
||||
stop-color="#72b147"
|
||||
offset=".5"
|
||||
id="stop826" /><stop
|
||||
stop-color="#5a9a30"
|
||||
offset="1"
|
||||
id="stop828" /></linearGradient><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath5628"><g
|
||||
id="g5636"
|
||||
style="display:block"><rect
|
||||
style="display:block;fill:#000000;fill-opacity:1"
|
||||
id="rect5630"
|
||||
width="12"
|
||||
height="6"
|
||||
x="44"
|
||||
y="46" /><rect
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="rect5632"
|
||||
width="12"
|
||||
height="3"
|
||||
x="32"
|
||||
y="49" /><rect
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="rect5634"
|
||||
width="2"
|
||||
height="18"
|
||||
x="54"
|
||||
y="28" /></g></clipPath><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638-3"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562-6"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535-7"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /></defs><path
|
||||
id="path366"
|
||||
d="m 349.57808,41.964912 c -7.15702,0.185463 -13.90791,2.613183 -17.28304,8.999038 -4.79383,5.704508 -7.73137,13.695628 -5.53014,21.084479 2.66676,7.143578 9.90418,12.218856 18.03557,11.524063 5.59916,-1.801124 15.58671,-4.301962 16.74627,-10.179734 -5.8829,3.318579 -12.62679,3.146423 -19.06899,2.789913 -9.10036,-2.852705 -3.13131,-14.017277 -2.27587,-20.464537 2.69441,-6.264223 9.40746,-8.643637 15.70994,-8.011982 3.51215,-0.372935 10.08541,-0.820306 11.1627,-4.595542 -6.0613,0.990313 -11.56994,-0.578913 -17.49644,-1.145698 z m -195.18302,0.620289 c 1.08651,4.477722 2.68304,11.49343 -0.6749,16.798527 -1.55052,6.175788 -2.33763,12.334458 -5.215,18.241616 -1.35584,2.554065 -7.50487,7.052648 -0.82675,4.755016 4.76028,-2.480601 17.99973,2.432918 12.91884,-5.840902 -1.39866,-9.413834 8.45665,-6.696276 14.10661,-8.710863 7.28254,-1.468386 14.43,-9.613297 11.16271,-17.234393 -4.56069,-7.344772 -13.49416,-8.163761 -21.42041,-6.839462 -3.3838,0.05191 -6.82193,-0.05344 -10.0511,-1.169539 z m 182.07705,0.09148 c -7.27914,0.108256 -14.59072,2.741399 -21.75606,0.778999 -4.991,3.565863 -7.77994,12.64093 -12.03983,18.503663 -2.14031,5.510728 -2.07316,-6.457795 -3.72035,-8.578489 -0.79279,-5.270167 3.63475,-12.65881 -5.26774,-9.354023 -3.09389,2.249188 -15.27657,-4.037213 -11.26597,1.965588 0.54461,6.775493 -2.27379,9.969529 -8.62513,9.510862 -2.98903,4.118301 -5.87154,12.661305 -9.97293,13.902368 -2.51899,-3.989461 -0.87242,-11.912385 -3.96867,-14.731198 -3.01592,-1.460278 -13.34639,-0.84692 -6.00266,3.15273 2.92679,6.391676 3.36418,13.462759 5.57775,19.843347 -2.4691,5.5984 -8.76894,9.147144 -13.54288,11.473054 -2.79781,0.934175 -11.57909,2.363404 -4.13459,4.135489 8.03174,0.990452 14.8003,-3.903383 19.99776,-8.990236 6.24614,-5.646776 9.5074,-13.333019 15.19292,-19.605351 2.80107,1.250281 -6.54332,13.073884 0.51404,15.366527 0.18172,0.518894 5.40421,5.956989 5.63264,0.103127 2.11307,-6.607287 4.28567,-12.785779 5.89198,-19.792546 -0.133,-3.696435 2.7816,-10.701124 3.25877,-2.996861 1.54282,6.041127 3.35233,12.30937 4.59658,18.191093 -0.59451,5.677201 4.12523,13.022666 6.86483,4.056203 3.96104,-7.949676 7.36425,-15.925826 12.82909,-22.970781 1.81423,-3.273877 5.01083,-6.344618 3.25579,-0.620289 -1.51711,6.921521 -3.1729,13.704569 -4.90388,20.438756 -2.84141,3.956818 -2.37242,9.821076 2.57991,5.194969 7.70454,-2.24295 5.11063,-13.591391 8.21498,-19.740913 2.05853,-5.624528 2.20587,-12.452139 7.43792,-16.432383 0.36109,-1.581702 5.20072,-0.498449 3.35573,-2.803705 z m -166.11484,4.397258 c 8.97928,1.320348 5.56479,13.482512 0.161,16.543203 -4.36808,3.5642 -9.8007,0.439955 -6.05201,-4.806024 1.24619,-3.62408 1.41301,-11.320026 5.89101,-11.737179 z m 29.62007,6.144462 c -7.65755,-0.482301 -12.92848,5.666597 -16.95183,11.279413 -4.01199,6.908075 0.21588,15.253072 7.23409,17.674069 5.57982,2.250158 12.28289,-0.821553 16.38213,-4.602958 4.61883,-5.660844 6.56938,-15.449485 0.7623,-20.967768 -1.67707,-2.483372 -4.50863,-3.536893 -7.42669,-3.382756 z m 17.00873,0.18574 c -4.51459,4.004916 -3.61895,12.391913 -6.09983,17.96467 -0.0584,4.101737 -7.40846,14.609635 2.01542,10.698767 5.16745,0.178047 10.47144,-2.400136 15.7545,-1.709779 -0.74497,4.170696 8.77414,1.431377 12.95572,0.676981 5.2211,-0.783019 10.30427,-0.571913 15.26381,-2.848546 -2.9857,-3.074899 -10.91964,0.410846 -15.40159,-2.268524 -6.95278,-0.839157 2.24558,-10.541304 1.13793,-15.714235 -0.4911,-4.912201 -7.83768,-10.120686 -7.30797,-1.523484 -1.90813,5.501579 -2.54776,11.475826 -4.51778,16.562748 -1.51662,4.086281 -11.87648,1.069253 -13.07444,-0.646625 0.10147,-6.117086 7.90816,-13.956704 1.02684,-18.681848 -0.69396,-0.48736 -0.44252,-2.829487 -1.75261,-2.510125 z m -18.71255,3.340965 c 6.85512,2.50063 6.28494,11.569389 2.8947,17.056969 -3.21268,10.078271 -15.45066,1.74658 -11.15036,-6.126235 1.1073,-4.284843 3.9223,-9.322973 8.25566,-10.930734 z"
|
||||
style="font-size:7.63541px;line-height:1.25;font-family:'Trade Winds';-inkscape-font-specification:'Trade Winds, Normal';letter-spacing:-0.610833px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke-width:0.0700053" /><g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(2.2049154,0,0,2.2049154,5.9126449,-7.2321236)"><path
|
||||
id="path300"
|
||||
style="fill:#8acb01"
|
||||
d="m 8,16 c 0,12 0,24 0,36 8.010417,0 16.020833,0 24.03125,0 0,-0.8 0,-1.6 0,-2.4 3.714062,0 7.428125,0 11.142187,0 0,-0.8 0,-1.6 0,-2.4 4.275521,0 8.551042,0 12.826563,0 C 56,36.8 56,26.4 56,16 40,16 24,16 8,16 Z"
|
||||
inkscape:label="head" /><path
|
||||
id="rect3493-3"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" /><path
|
||||
id="rect3491-5"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" /><path
|
||||
id="path352"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="m 32,28 c 0,7.333333 0,14.666667 0,22 4,0 8,0 12,0 0,-0.814583 0,-1.629167 0,-2.44375 4,0 8,0 12,0 C 56,41.0375 56,34.51875 56,28 48,28 40,28 32,28 Z"
|
||||
inkscape:label="beak" /></g></svg>
|
After Width: | Height: | Size: 9.2 KiB |
145
program_info/pollymc-header.Source.svg
Normal file
@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1424"
|
||||
height="512"
|
||||
version="1.1"
|
||||
viewBox="0 0 376.77 135.47"
|
||||
id="svg866"
|
||||
sodipodi:docname="pollymc-header.Source.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview868"
|
||||
pagecolor="#8a8a8a"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.61938202"
|
||||
inkscape:cx="731.37415"
|
||||
inkscape:cy="261.55102"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg866"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#343434" /><defs
|
||||
id="defs831"><linearGradient
|
||||
id="linearGradient84726"
|
||||
x1="4.4979"
|
||||
x2="12.435"
|
||||
y1="3.8011"
|
||||
y2="9.5681"
|
||||
gradientUnits="userSpaceOnUse"><stop
|
||||
stop-color="#88b858"
|
||||
offset="0"
|
||||
id="stop824" /><stop
|
||||
stop-color="#72b147"
|
||||
offset=".5"
|
||||
id="stop826" /><stop
|
||||
stop-color="#5a9a30"
|
||||
offset="1"
|
||||
id="stop828" /></linearGradient><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath5628"><g
|
||||
id="g5636"
|
||||
style="display:none"><rect
|
||||
style="display:block;fill:#000000;fill-opacity:1"
|
||||
id="rect5630"
|
||||
width="12"
|
||||
height="6"
|
||||
x="44"
|
||||
y="46" /><rect
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="rect5632"
|
||||
width="12"
|
||||
height="3"
|
||||
x="32"
|
||||
y="49" /><rect
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="rect5634"
|
||||
width="2"
|
||||
height="18"
|
||||
x="54"
|
||||
y="28" /></g><path
|
||||
id="lpe_path-effect5638"
|
||||
style="display:block"
|
||||
class="powerclip"
|
||||
d="M 3,11 H 61 V 57 H 3 Z m 41,35 v 6 h 12 v -6 z m -12,3 v 3 H 44 V 49 Z M 54,28 v 18 h 2 V 28 Z" /></clipPath></defs><g
|
||||
id="g1157"
|
||||
transform="translate(0,-15.491025)"><g
|
||||
id="pollymc-header-text-3"
|
||||
fill="white"
|
||||
transform="matrix(6.9306,0,0,6.9306,-695.39957,-649.40511)"
|
||||
stroke-width="0.26458"
|
||||
aria-label="PolyMC"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
inkscape:label="pollymc-header-text-3"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.63541px;line-height:1.25;font-family:'Trade Winds';-inkscape-font-specification:'Trade Winds, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:-0.610833px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke-width:0.0101009"
|
||||
x="121.65298"
|
||||
y="107.71044"
|
||||
id="text4534"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan807"
|
||||
x="121.65298"
|
||||
y="107.71044">PollyMC</tspan></text></g></g><g
|
||||
id="pollymc-header-text-4"
|
||||
fill="white"
|
||||
transform="matrix(6.9306,0,0,6.9306,-697.30938,-585.54339)"
|
||||
stroke-width="0.26458"
|
||||
aria-label="PolyMC"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
inkscape:label="pollymc-header-text-4" /><g
|
||||
id="g5269"
|
||||
clip-path="url(#clipPath5628)"
|
||||
transform="matrix(2.2049154,0,0,2.2049154,5.9126449,-7.2321236)"
|
||||
inkscape:path-effect="#path-effect5638"><path
|
||||
id="rect883"
|
||||
style="fill:#8acb01"
|
||||
d="M 8,16 H 56 V 52 H 8 Z"
|
||||
inkscape:original-d="M 8,16 H 56 V 52 H 8 Z" /><path
|
||||
id="rect1721"
|
||||
style="fill:#313131"
|
||||
d="M 32,28 H 56 V 52 H 32 Z"
|
||||
inkscape:original-d="M 32,28 H 56 V 52 H 32 Z" /><path
|
||||
id="rect3491"
|
||||
d="M 20,28 H 32 V 40 H 20 Z"
|
||||
inkscape:original-d="M 20,28 H 32 V 40 H 20 Z" /><path
|
||||
id="rect3493"
|
||||
style="fill:#b0af8d"
|
||||
d="M 20,40 H 32 V 52 H 20 Z"
|
||||
inkscape:original-d="M 20,40 H 32 V 52 H 20 Z" /></g></svg>
|
After Width: | Height: | Size: 5.3 KiB |
143
program_info/pollymc-header.svg
Normal file
@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1424"
|
||||
height="512"
|
||||
version="1.1"
|
||||
viewBox="0 0 376.77 135.47"
|
||||
id="svg866"
|
||||
sodipodi:docname="pollymc-header.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview868"
|
||||
pagecolor="#8a8a8a"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.61938202"
|
||||
inkscape:cx="540.86168"
|
||||
inkscape:cy="261.55102"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg866"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#343434" /><defs
|
||||
id="defs831"><linearGradient
|
||||
id="linearGradient84726"
|
||||
x1="4.4979"
|
||||
x2="12.435"
|
||||
y1="3.8011"
|
||||
y2="9.5681"
|
||||
gradientUnits="userSpaceOnUse"><stop
|
||||
stop-color="#88b858"
|
||||
offset="0"
|
||||
id="stop824" /><stop
|
||||
stop-color="#72b147"
|
||||
offset=".5"
|
||||
id="stop826" /><stop
|
||||
stop-color="#5a9a30"
|
||||
offset="1"
|
||||
id="stop828" /></linearGradient><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath5628"><g
|
||||
id="g5636"
|
||||
style="display:block"><rect
|
||||
style="display:block;fill:#000000;fill-opacity:1"
|
||||
id="rect5630"
|
||||
width="12"
|
||||
height="6"
|
||||
x="44"
|
||||
y="46" /><rect
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="rect5632"
|
||||
width="12"
|
||||
height="3"
|
||||
x="32"
|
||||
y="49" /><rect
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="rect5634"
|
||||
width="2"
|
||||
height="18"
|
||||
x="54"
|
||||
y="28" /></g></clipPath><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5638-3"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5562-6"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /><inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect5535-7"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." /></defs><path
|
||||
id="path366"
|
||||
d="m 349.57808,41.964912 c -7.15702,0.185463 -13.90791,2.613183 -17.28304,8.999038 -4.79383,5.704508 -7.73137,13.695628 -5.53014,21.084479 2.66676,7.143578 9.90418,12.218856 18.03557,11.524063 5.59916,-1.801124 15.58671,-4.301962 16.74627,-10.179734 -5.8829,3.318579 -12.62679,3.146423 -19.06899,2.789913 -9.10036,-2.852705 -3.13131,-14.017277 -2.27587,-20.464537 2.69441,-6.264223 9.40746,-8.643637 15.70994,-8.011982 3.51215,-0.372935 10.08541,-0.820306 11.1627,-4.595542 -6.0613,0.990313 -11.56994,-0.578913 -17.49644,-1.145698 z m -195.18302,0.620289 c 1.08651,4.477722 2.68304,11.49343 -0.6749,16.798527 -1.55052,6.175788 -2.33763,12.334458 -5.215,18.241616 -1.35584,2.554065 -7.50487,7.052648 -0.82675,4.755016 4.76028,-2.480601 17.99973,2.432918 12.91884,-5.840902 -1.39866,-9.413834 8.45665,-6.696276 14.10661,-8.710863 7.28254,-1.468386 14.43,-9.613297 11.16271,-17.234393 -4.56069,-7.344772 -13.49416,-8.163761 -21.42041,-6.839462 -3.3838,0.05191 -6.82193,-0.05344 -10.0511,-1.169539 z m 182.07705,0.09148 c -7.27914,0.108256 -14.59072,2.741399 -21.75606,0.778999 -4.991,3.565863 -7.77994,12.64093 -12.03983,18.503663 -2.14031,5.510728 -2.07316,-6.457795 -3.72035,-8.578489 -0.79279,-5.270167 3.63475,-12.65881 -5.26774,-9.354023 -3.09389,2.249188 -15.27657,-4.037213 -11.26597,1.965588 0.54461,6.775493 -2.27379,9.969529 -8.62513,9.510862 -2.98903,4.118301 -5.87154,12.661305 -9.97293,13.902368 -2.51899,-3.989461 -0.87242,-11.912385 -3.96867,-14.731198 -3.01592,-1.460278 -13.34639,-0.84692 -6.00266,3.15273 2.92679,6.391676 3.36418,13.462759 5.57775,19.843347 -2.4691,5.5984 -8.76894,9.147144 -13.54288,11.473054 -2.79781,0.934175 -11.57909,2.363404 -4.13459,4.135489 8.03174,0.990452 14.8003,-3.903383 19.99776,-8.990236 6.24614,-5.646776 9.5074,-13.333019 15.19292,-19.605351 2.80107,1.250281 -6.54332,13.073884 0.51404,15.366527 0.18172,0.518894 5.40421,5.956989 5.63264,0.103127 2.11307,-6.607287 4.28567,-12.785779 5.89198,-19.792546 -0.133,-3.696435 2.7816,-10.701124 3.25877,-2.996861 1.54282,6.041127 3.35233,12.30937 4.59658,18.191093 -0.59451,5.677201 4.12523,13.022666 6.86483,4.056203 3.96104,-7.949676 7.36425,-15.925826 12.82909,-22.970781 1.81423,-3.273877 5.01083,-6.344618 3.25579,-0.620289 -1.51711,6.921521 -3.1729,13.704569 -4.90388,20.438756 -2.84141,3.956818 -2.37242,9.821076 2.57991,5.194969 7.70454,-2.24295 5.11063,-13.591391 8.21498,-19.740913 2.05853,-5.624528 2.20587,-12.452139 7.43792,-16.432383 0.36109,-1.581702 5.20072,-0.498449 3.35573,-2.803705 z m -166.11484,4.397258 c 8.97928,1.320348 5.56479,13.482512 0.161,16.543203 -4.36808,3.5642 -9.8007,0.439955 -6.05201,-4.806024 1.24619,-3.62408 1.41301,-11.320026 5.89101,-11.737179 z m 29.62007,6.144462 c -7.65755,-0.482301 -12.92848,5.666597 -16.95183,11.279413 -4.01199,6.908075 0.21588,15.253072 7.23409,17.674069 5.57982,2.250158 12.28289,-0.821553 16.38213,-4.602958 4.61883,-5.660844 6.56938,-15.449485 0.7623,-20.967768 -1.67707,-2.483372 -4.50863,-3.536893 -7.42669,-3.382756 z m 17.00873,0.18574 c -4.51459,4.004916 -3.61895,12.391913 -6.09983,17.96467 -0.0584,4.101737 -7.40846,14.609635 2.01542,10.698767 5.16745,0.178047 10.47144,-2.400136 15.7545,-1.709779 -0.74497,4.170696 8.77414,1.431377 12.95572,0.676981 5.2211,-0.783019 10.30427,-0.571913 15.26381,-2.848546 -2.9857,-3.074899 -10.91964,0.410846 -15.40159,-2.268524 -6.95278,-0.839157 2.24558,-10.541304 1.13793,-15.714235 -0.4911,-4.912201 -7.83768,-10.120686 -7.30797,-1.523484 -1.90813,5.501579 -2.54776,11.475826 -4.51778,16.562748 -1.51662,4.086281 -11.87648,1.069253 -13.07444,-0.646625 0.10147,-6.117086 7.90816,-13.956704 1.02684,-18.681848 -0.69396,-0.48736 -0.44252,-2.829487 -1.75261,-2.510125 z m -18.71255,3.340965 c 6.85512,2.50063 6.28494,11.569389 2.8947,17.056969 -3.21268,10.078271 -15.45066,1.74658 -11.15036,-6.126235 1.1073,-4.284843 3.9223,-9.322973 8.25566,-10.930734 z"
|
||||
style="font-size:7.63541px;line-height:1.25;font-family:'Trade Winds';-inkscape-font-specification:'Trade Winds, Normal';letter-spacing:-0.610833px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke-width:0.0700053" /><g
|
||||
id="g5269"
|
||||
clip-path="none"
|
||||
transform="matrix(2.2049154,0,0,2.2049154,5.9126449,-7.2321236)"><path
|
||||
id="path300"
|
||||
style="fill:#8acb01"
|
||||
d="m 8,16 c 0,12 0,24 0,36 8.010417,0 16.020833,0 24.03125,0 0,-0.8 0,-1.6 0,-2.4 3.714062,0 7.428125,0 11.142187,0 0,-0.8 0,-1.6 0,-2.4 4.275521,0 8.551042,0 12.826563,0 C 56,36.8 56,26.4 56,16 40,16 24,16 8,16 Z"
|
||||
inkscape:label="head" /><path
|
||||
id="rect3493-3"
|
||||
style="fill:#b0af8d;stroke-width:1.39562"
|
||||
inkscape:label="cheek"
|
||||
d="M 19.959999,28.879064 H 32.253197 V 52 H 19.959999 Z" /><path
|
||||
id="rect3491-5"
|
||||
inkscape:label="eye"
|
||||
d="M 19.960001,28 H 32.333299 V 40 H 19.960001 Z"
|
||||
style="stroke-width:1.00871" /><path
|
||||
id="path352"
|
||||
style="display:inline;fill:#3b3b3b;fill-opacity:1;stroke-width:1.00922"
|
||||
d="m 32,28 c 0,7.333333 0,14.666667 0,22 4,0 8,0 12,0 0,-0.814583 0,-1.629167 0,-2.44375 4,0 8,0 12,0 C 56,41.0375 56,34.51875 56,28 48,28 40,28 32,28 Z"
|
||||
inkscape:label="beak" /></g></svg>
|
After Width: | Height: | Size: 9.1 KiB |
61
program_info/pollymc.6.scd
Normal file
@ -0,0 +1,61 @@
|
||||
pollymc(6)
|
||||
|
||||
|
||||
# NAME
|
||||
|
||||
pollymc - a launcher and instance manager for Minecraft.
|
||||
|
||||
|
||||
# SYNOPSIS
|
||||
|
||||
*pollymc* [OPTIONS...]
|
||||
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
PollyMC is a custom launcher for Minecraft that allows you to easily manage
|
||||
multiple installations of Minecraft at once. It also allows you to easily
|
||||
install and remove mods by simply dragging and dropping.
|
||||
Here are the current features of PollyMC.
|
||||
|
||||
# OPTIONS
|
||||
|
||||
*-d, --dir*=DIRECTORY
|
||||
Use DIRECTORY as the PollyMC root.
|
||||
|
||||
*-l, --launch*=INSTANCE_ID
|
||||
Launch the instance specified by INSTANCE_ID.
|
||||
|
||||
*--alive*
|
||||
Write a small 'live.check' file after PollyMC starts.
|
||||
|
||||
*-h, --help*
|
||||
Display help text and exit.
|
||||
|
||||
*-v, --version*
|
||||
Display program version and exit.
|
||||
|
||||
*-a, --profile*=PROFILE
|
||||
Use the account specified by PROFILE (only valid in combination with --launch).
|
||||
|
||||
# EXIT STATUS
|
||||
|
||||
*0*
|
||||
Success
|
||||
|
||||
*1*
|
||||
Failure (syntax or usage error; configuration error; unexpected error).
|
||||
|
||||
# BUGS
|
||||
|
||||
https://github.com/fn2006/PollyMC/issues
|
||||
|
||||
# RESOURCES
|
||||
|
||||
GitHub: https://github.com/fn2006/PollyMC
|
||||
|
||||
# AUTHORS
|
||||
|
||||
PollyMC Contributors
|
||||
|
||||
PolyMC Contributors
|
BIN
program_info/pollymc.icns
Normal file
BIN
program_info/pollymc.ico
Normal file
After Width: | Height: | Size: 100 KiB |
29
program_info/pollymc.manifest.in
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<assemblyIdentity name="PollyMC.Application.1" type="win32" version="@Launcher_RELEASE_VERSION_NAME4@" />
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<description>Custom Minecraft launcher for managing multiple installs.</description>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!--The ID below indicates app support for Windows 7 -->
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
||||
<!--The ID below indicates app support for Windows 8 -->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
<!--The ID below indicates app support for Windows 8.1 -->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
<!--The ID below indicates app support for Windows 10/11 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
</assembly>
|
6
program_info/pollymc.qrc
Normal file
@ -0,0 +1,6 @@
|
||||
<!DOCTYPE RCC>
|
||||
<RCC version="1.0">
|
||||
<qresource prefix="/">
|
||||
<file>org.fn2006.PollyMC.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
29
program_info/pollymc.rc.in
Normal file
@ -0,0 +1,29 @@
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h>
|
||||
|
||||
IDI_ICON1 ICON DISCARDABLE "pollymc.ico"
|
||||
1 RT_MANIFEST "pollymc.manifest"
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION @Launcher_VERSION_NAME4_COMMA@
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
FILETYPE VFT_APP
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "000004b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "MultiMC & PolyMC & PollyMC Contributors"
|
||||
VALUE "FileDescription", "PollyMC"
|
||||
VALUE "FileVersion", "@Launcher_VERSION_NAME4@"
|
||||
VALUE "ProductName", "PollyMC"
|
||||
VALUE "ProductVersion", "@Launcher_VERSION_NAME4@"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0000, 0x04b0 // Unicode
|
||||
END
|
||||
END
|
@ -1,6 +1,6 @@
|
||||
<!DOCTYPE RCC>
|
||||
<RCC version="1.0">
|
||||
<qresource prefix="/">
|
||||
<file>org.polymc.PolyMC.svg</file>
|
||||
<file>org.fn2006.PollyMC.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|