Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 26 additions & 8 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,50 @@
name: Build and Archive
name: Build

on:
push:
branches:
- main
pull_request:

concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v4

- name: Set up JDK
uses: actions/setup-java@v2
uses: actions/setup-java@v4
with:
distribution: "adopt"
java-version: "17"
distribution: temurin
java-version: "21"

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4

- name: Make gradlew executable
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew build
run: ./gradlew clean build --no-daemon

- name: Collect release artifacts
run: |
mkdir -p dist
find modules -path "*/build/libs/*.jar" \
! -name "*-sources.jar" \
! -name "*-thin.jar" \
! -path "*/core/build/libs/*" \
-exec cp {} dist/ \;

- name: Archive artifacts
uses: actions/upload-artifact@v4
with:
name: geyser-voice-artifact
path: build/libs/
name: geyservoice-build
path: dist/*.jar
if-no-files-found: error
81 changes: 51 additions & 30 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,56 @@ on:
status:
required: true
description: "Status (beta, stable)"
publish_modrinth:
required: true
description: "Publish to Modrinth"
default: "true"

env:
VERSION: ${{ github.event.inputs.tag }}-${{ github.event.inputs.status }}

concurrency:
group: release-${{ github.event.inputs.tag }}
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v4

- name: Set up JDK
uses: actions/setup-java@v2
uses: actions/setup-java@v4
with:
distribution: "adopt"
java-version: "17"
distribution: temurin
java-version: "21"

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4

- name: Make gradlew executable
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew build -PVERSION="${{ env.VERSION }}"
run: ./gradlew clean build -PVERSION="${{ env.VERSION }}" --no-daemon

- name: Collect release artifacts
run: |
mkdir -p release-artifacts
find modules -path "*/build/libs/*.jar" \
! -name "*-sources.jar" \
! -name "*-thin.jar" \
! -path "*/core/build/libs/*" \
-exec cp {} release-artifacts/ \;

- name: Archive artifacts
uses: actions/upload-artifact@v4
with:
name: geyser-voice-artifact
path: build/libs/
name: geyservoice-release
path: release-artifacts/*.jar
if-no-files-found: error

publish_release:
name: Publish release
Expand All @@ -49,47 +70,47 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v4

- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: geyser-voice-artifact
path: build/libs/
name: geyservoice-release
path: release-artifacts

- name: Create release
if: github.event.inputs.status == 'stable'
uses: ncipollo/release-action@v1.13.0
uses: ncipollo/release-action@v1.14.0
with:
prerelease: false
tag: ${{ github.event.inputs.tag }}
artifacts: |
build/libs/GeyserVoice-*.jar
env:
GITHUB_REPOSITORY: AvionBlock/GeyserVoice
artifacts: release-artifacts/*.jar
artifactErrorsFailBuild: true
allowUpdates: true
replacesArtifacts: true

- name: Create pre-release
if: github.event.inputs.status != 'stable'
uses: ncipollo/release-action@v1.13.0
uses: ncipollo/release-action@v1.14.0
with:
prerelease: true
tag: ${{ github.event.inputs.tag }}
artifacts: |
build/libs/GeyserVoice-*.jar
env:
GITHUB_REPOSITORY: AvionBlock/GeyserVoice
artifacts: release-artifacts/*.jar
artifactErrorsFailBuild: true
allowUpdates: true
replacesArtifacts: true

- name: Create Modrinth release
if: github.event.inputs.publish_modrinth == 'true'
uses: dsx137/modrinth-release-action@main
env:
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
with:
name: GeyserVoice ${{ github.event.inputs.tag }}
project_id: WtPu56Wa
loaders: paper, spigot, bukkit, purpur, velocity, bungeecord
game_versions: 1.20.2:1.21.10
version_number: ${{ github.event.inputs.tag }}
featured: ${{ github.event.inputs.status == 'stable' }}
version_type: ${{ github.event.inputs.status == 'stable' && 'release' || 'beta' }}
files: |
./build/libs/GeyserVoice-*.jar
name: GeyserVoice ${{ github.event.inputs.tag }}
project_id: WtPu56Wa
loaders: paper, purpur, velocity, bungeecord
game_versions: 1.21.11:26.1
version_number: ${{ github.event.inputs.tag }}
featured: ${{ github.event.inputs.status == 'stable' }}
version_type: ${{ github.event.inputs.status == 'stable' && 'release' || 'beta' }}
files: release-artifacts/*.jar
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -236,4 +236,4 @@ nbdist/
# End of https://www.gitignore.io/api/git,java,maven,eclipse,netbeans,jetbrains+all,visualstudiocode

### Gradle ###
.gradle
.gradle*
28 changes: 19 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
## GeyserVoice - Minecraft Proximity Voice Chat Plugin

GeyserVoice is a Java plugin designed to enhance the multiplayer gaming experience on Minecraft servers by integrating the [VoiceCraft](https://github.com/SineVector241/VoiceCraft-MCBE_Proximity_Chat/) Proximity Chat application. The plugin facilitates cross-platform communication, allowing players on both Java and Bedrock editions to seamlessly engage in proximity-based voice conversations.
GeyserVoice is a Java-side bridge for VoiceCraft built around `McApi TCP`. It now ships dedicated runtimes for `Paper`, `Velocity`, and `BungeeCord`, with direct Paper mode and proxy-relay mode for multi-server networks.

### Features

- Cross-Platform Communication:
GeyserVoice bridges the gap between Minecraft Java Edition and Bedrock Edition, enabling players on different platforms to communicate through the VoiceCraft Proximity Chat system.

- Immersive Proximity Chat:
Experience a more immersive and realistic gameplay environment with proximity-based voice chat. Engage in conversations with nearby players, enhancing teamwork and coordination.
- `McApi TCP` transport only for VoiceCraft communication
- managed VoiceCraft runtime download/startup on direct Paper servers
- proxy relay mode for `Velocity` and `BungeeCord`
- server-side positioning updates from each Paper backend through the proxy

### How It Works

Installation: Simply install the GeyserVoice plugin on your Minecraft Java server. Make sure to follow the setup instructions to integrate it seamlessly with the VoiceCraft Proximity Chat application.
Direct Paper mode:
- install GeyserVoice on the Paper server
- let the plugin download/start VoiceCraft locally if desired
- the Paper plugin connects to VoiceCraft over `McApi TCP`

Proxy mode:
- install GeyserVoice on each Paper backend and on the proxy
- enable `config.server-behind-proxy: true` on the Paper backends
- the proxy plugin owns the VoiceCraft connection
- backend Paper servers stream player snapshots to the proxy through plugin messages

### Getting Started

Expand All @@ -26,6 +34,8 @@ We welcome contributions from the community to improve and expand the functional

GeyserVoice is licensed under the MIT License. Feel free to use, modify, and distribute the plugin in accordance with the terms of the license.

### Proxy server support
### Status

GeyserVoice also supports usage with Velocity and Bungeecord networks. Just install the .jar on your proxy server and on your paper server(s). Be sure to edit the config of the paper server(s) to set `server-behind-proxy` to `true` and then reload using `voice reload`. P.s. You don't need to set the server address, port and keys on the paper server(s), this is only needed on the proxy server.
Current supported runtime paths:
- `Paper -> McApi TCP -> VoiceCraft`
- `Paper -> Proxy relay -> McApi TCP -> VoiceCraft`
Loading
Loading