commit
85a7fb2a55
@ -0,0 +1,8 @@
|
|||||||
|
kind: pipeline
|
||||||
|
name: default
|
||||||
|
type: docker
|
||||||
|
steps:
|
||||||
|
- name: Run the Gradle build
|
||||||
|
image: glmdev/java-gradle-maven
|
||||||
|
commands:
|
||||||
|
./gradlew build shadowJar reobfShadowJar
|
@ -0,0 +1,5 @@
|
|||||||
|
# Disable autocrlf on generated files, they always generate with LF
|
||||||
|
# Add any extra files or paths here to make git stop saying they
|
||||||
|
# are changed when only line endings change.
|
||||||
|
src/generated/**/.cache/cache text eol=lf
|
||||||
|
src/generated/**/*.json text eol=lf
|
@ -0,0 +1,25 @@
|
|||||||
|
# eclipse
|
||||||
|
bin
|
||||||
|
*.launch
|
||||||
|
.settings
|
||||||
|
.metadata
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
|
||||||
|
# idea
|
||||||
|
out
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# gradle
|
||||||
|
build
|
||||||
|
.gradle
|
||||||
|
|
||||||
|
# other
|
||||||
|
eclipse
|
||||||
|
run
|
||||||
|
|
||||||
|
# Files from Forge MDK
|
||||||
|
forge*changelog.txt
|
@ -0,0 +1,65 @@
|
|||||||
|
Minecraft Forge: Credits/Thank You
|
||||||
|
|
||||||
|
Forge is a set of tools and modifications to the Minecraft base game code to assist
|
||||||
|
mod developers in creating new and exciting content. It has been in development for
|
||||||
|
several years now, but I would like to take this time thank a few people who have
|
||||||
|
helped it along it's way.
|
||||||
|
|
||||||
|
First, the people who originally created the Forge projects way back in Minecraft
|
||||||
|
alpha. Eloraam of RedPower, and SpaceToad of Buildcraft, without their acceptiance
|
||||||
|
of me taking over the project, who knows what Minecraft modding would be today.
|
||||||
|
|
||||||
|
Secondly, someone who has worked with me, and developed some of the core features
|
||||||
|
that allow modding to be as functional, and as simple as it is, cpw. For developing
|
||||||
|
FML, which stabelized the client and server modding ecosystem. As well as the base
|
||||||
|
loading system that allows us to modify Minecraft's code as elegently as possible.
|
||||||
|
|
||||||
|
Mezz, who has stepped up as the issue and pull request manager. Helping to keep me
|
||||||
|
sane as well as guiding the community into creating better additions to Forge.
|
||||||
|
|
||||||
|
Searge, Bspks, Fesh0r, ProfMobious, and all the rest over on the MCP team {of which
|
||||||
|
I am a part}. For creating some of the core tools needed to make Minecraft modding
|
||||||
|
both possible, and as stable as can be.
|
||||||
|
On that note, here is some specific information of the MCP data we use:
|
||||||
|
* Minecraft Coder Pack (MCP) *
|
||||||
|
Forge Mod Loader and Minecraft Forge have permission to distribute and automatically
|
||||||
|
download components of MCP and distribute MCP data files. This permission is not
|
||||||
|
transitive and others wishing to redistribute the Minecraft Forge source independently
|
||||||
|
should seek permission of MCP or remove the MCP data files and request their users
|
||||||
|
to download MCP separately.
|
||||||
|
|
||||||
|
And lastly, the countless community members who have spent time submitting bug reports,
|
||||||
|
pull requests, and just helping out the community in general. Thank you.
|
||||||
|
|
||||||
|
--LexManos
|
||||||
|
|
||||||
|
=========================================================================
|
||||||
|
|
||||||
|
This is Forge Mod Loader.
|
||||||
|
|
||||||
|
You can find the source code at all times at https://github.com/MinecraftForge/MinecraftForge/tree/1.12.x/src/main/java/net/minecraftforge/fml
|
||||||
|
|
||||||
|
This minecraft mod is a clean open source implementation of a mod loader for minecraft servers
|
||||||
|
and minecraft clients.
|
||||||
|
|
||||||
|
The code is authored by cpw.
|
||||||
|
|
||||||
|
It began by partially implementing an API defined by the client side ModLoader, authored by Risugami.
|
||||||
|
http://www.minecraftforum.net/topic/75440-
|
||||||
|
This support has been dropped as of Minecraft release 1.7, as Risugami no longer maintains ModLoader.
|
||||||
|
|
||||||
|
It also contains suggestions and hints and generous helpings of code from LexManos, author of MinecraftForge.
|
||||||
|
http://www.minecraftforge.net/
|
||||||
|
|
||||||
|
Additionally, it contains an implementation of topological sort based on that
|
||||||
|
published at http://keithschwarz.com/interesting/code/?dir=topological-sort
|
||||||
|
|
||||||
|
It also contains code from the Maven project for performing versioned dependency
|
||||||
|
resolution. http://maven.apache.org/
|
||||||
|
|
||||||
|
It also contains a partial repackaging of the javaxdelta library from http://sourceforge.net/projects/javaxdelta/
|
||||||
|
with credit to it's authors.
|
||||||
|
|
||||||
|
Forge Mod Loader downloads components from the Minecraft Coder Pack
|
||||||
|
(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team.
|
||||||
|
|
@ -0,0 +1,61 @@
|
|||||||
|
FROM openjdk:8-jdk-alpine
|
||||||
|
|
||||||
|
LABEL Garrett Mills <shout@garrettmills.dev>
|
||||||
|
|
||||||
|
RUN apk add --no-cache curl tar bash procps
|
||||||
|
|
||||||
|
# Downloading and installing Maven
|
||||||
|
ARG MAVEN_VERSION=3.6.3
|
||||||
|
ARG USER_HOME_DIR="/root"
|
||||||
|
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
|
||||||
|
&& echo "Downlaoding maven" \
|
||||||
|
&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
|
||||||
|
\
|
||||||
|
&& echo "Unziping maven" \
|
||||||
|
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
|
||||||
|
\
|
||||||
|
&& echo "Cleaning and setting links" \
|
||||||
|
&& rm -f /tmp/apache-maven.tar.gz \
|
||||||
|
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
|
||||||
|
|
||||||
|
ENV MAVEN_HOME /usr/share/maven
|
||||||
|
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"
|
||||||
|
|
||||||
|
# Downloading and installing Gradle
|
||||||
|
# 1- Define a constant with the version of gradle you want to install
|
||||||
|
ARG GRADLE_VERSION=4.10.3
|
||||||
|
|
||||||
|
# 2- Define the URL where gradle can be downloaded from
|
||||||
|
ARG GRADLE_BASE_URL=https://services.gradle.org/distributions
|
||||||
|
|
||||||
|
# 3- Define the SHA key to validate the gradle download
|
||||||
|
# obtained from here https://gradle.org/release-checksums/
|
||||||
|
ARG GRADLE_SHA=8626cbf206b4e201ade7b87779090690447054bc93f052954c78480fa6ed186e
|
||||||
|
|
||||||
|
# 4- Create the directories, download gradle, validate the download, install it, remove downloaded file and set links
|
||||||
|
RUN mkdir -p /usr/share/gradle /usr/share/gradle/ref \
|
||||||
|
&& echo "Downlaoding gradle hash" \
|
||||||
|
&& curl -fsSL -o /tmp/gradle.zip ${GRADLE_BASE_URL}/gradle-${GRADLE_VERSION}-bin.zip \
|
||||||
|
\
|
||||||
|
&& echo "Checking download hash" \
|
||||||
|
&& echo "${GRADLE_SHA} /tmp/gradle.zip" | sha256sum -c - \
|
||||||
|
\
|
||||||
|
&& echo "Unziping gradle" \
|
||||||
|
&& unzip -d /usr/share/gradle /tmp/gradle.zip \
|
||||||
|
\
|
||||||
|
&& echo "Cleaning and setting links" \
|
||||||
|
&& rm -f /tmp/gradle.zip \
|
||||||
|
&& ln -s /usr/share/gradle/gradle-${GRADLE_VERSION} /usr/bin/gradle
|
||||||
|
|
||||||
|
# 5- Define environmental variables required by gradle
|
||||||
|
ENV GRADLE_VERSION 4.10.3
|
||||||
|
ENV GRADLE_HOME /usr/bin/gradle
|
||||||
|
ENV GRADLE_USER_HOME /cache
|
||||||
|
|
||||||
|
ENV PATH $PATH:$GRADLE_HOME/bin
|
||||||
|
|
||||||
|
VOLUME $GRADLE_USER_HOME
|
||||||
|
|
||||||
|
CMD [""]
|
@ -0,0 +1,53 @@
|
|||||||
|
-------------------------------------------
|
||||||
|
Source installation information for modders
|
||||||
|
-------------------------------------------
|
||||||
|
This code follows the Minecraft Forge installation methodology. It will apply
|
||||||
|
some small patches to the vanilla MCP source code, giving you and it access
|
||||||
|
to some of the data and functions you need to build a successful mod.
|
||||||
|
|
||||||
|
Note also that the patches are built against "unrenamed" MCP source code (aka
|
||||||
|
srgnames) - this means that you will not be able to read them directly against
|
||||||
|
normal code.
|
||||||
|
|
||||||
|
Source pack installation information:
|
||||||
|
|
||||||
|
Standalone source installation
|
||||||
|
==============================
|
||||||
|
|
||||||
|
See the Forge Documentation online for more detailed instructions:
|
||||||
|
http://mcforge.readthedocs.io/en/latest/gettingstarted/
|
||||||
|
|
||||||
|
Step 1: Open your command-line and browse to the folder where you extracted the zip file.
|
||||||
|
|
||||||
|
Step 2: You're left with a choice.
|
||||||
|
If you prefer to use Eclipse:
|
||||||
|
1. Run the following command: "gradlew genEclipseRuns" (./gradlew genEclipseRuns if you are on Mac/Linux)
|
||||||
|
2. Open Eclipse, Import > Existing Gradle Project > Select Folder
|
||||||
|
or run "gradlew eclipse" to generate the project.
|
||||||
|
(Current Issue)
|
||||||
|
4. Open Project > Run/Debug Settings > Edit runClient and runServer > Environment
|
||||||
|
5. Edit MOD_CLASSES to show [modid]%%[Path]; 2 times rather then the generated 4.
|
||||||
|
|
||||||
|
If you prefer to use IntelliJ:
|
||||||
|
1. Open IDEA, and import project.
|
||||||
|
2. Select your build.gradle file and have it import.
|
||||||
|
3. Run the following command: "gradlew genIntellijRuns" (./gradlew genIntellijRuns if you are on Mac/Linux)
|
||||||
|
4. Refresh the Gradle Project in IDEA if required.
|
||||||
|
|
||||||
|
If at any point you are missing libraries in your IDE, or you've run into problems you can run "gradlew --refresh-dependencies" to refresh the local cache. "gradlew clean" to reset everything {this does not affect your code} and then start the processs again.
|
||||||
|
|
||||||
|
Should it still not work,
|
||||||
|
Refer to #ForgeGradle on EsperNet for more information about the gradle environment.
|
||||||
|
or the Forge Project Discord discord.gg/UvedJ9m
|
||||||
|
|
||||||
|
Forge source installation
|
||||||
|
=========================
|
||||||
|
MinecraftForge ships with this code and installs it as part of the forge
|
||||||
|
installation process, no further action is required on your part.
|
||||||
|
|
||||||
|
LexManos' Install Video
|
||||||
|
=======================
|
||||||
|
https://www.youtube.com/watch?v=8VEdtQLuLO0&feature=youtu.be
|
||||||
|
|
||||||
|
For more details update more often refer to the Forge Forums:
|
||||||
|
http://www.minecraftforge.net/forum/index.php/topic,14048.0.html
|
@ -0,0 +1,178 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
maven { url = 'https://files.minecraftforge.net/maven' }
|
||||||
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
|
||||||
|
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.4'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'com.github.johnrengelman.shadow'
|
||||||
|
apply plugin: 'java'
|
||||||
|
apply plugin: 'net.minecraftforge.gradle'
|
||||||
|
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||||
|
apply plugin: 'eclipse'
|
||||||
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
|
version = '1.3'
|
||||||
|
group = 'dev.garrettmills.csx.matterlinkreboot' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
archivesBaseName = 'matterlinkreboot'
|
||||||
|
|
||||||
|
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
|
||||||
|
|
||||||
|
println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch'))
|
||||||
|
minecraft {
|
||||||
|
// The mappings can be changed at any time, and must be in the following format.
|
||||||
|
// snapshot_YYYYMMDD Snapshot are built nightly.
|
||||||
|
// stable_# Stables are built at the discretion of the MCP team.
|
||||||
|
// Use non-default mappings at your own risk. they may not always work.
|
||||||
|
// Simply re-run your setup task after changing the mappings to update your workspace.
|
||||||
|
mappings channel: 'snapshot', version: '20201028-1.16.3'
|
||||||
|
// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
|
||||||
|
|
||||||
|
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||||
|
|
||||||
|
// Default run configurations.
|
||||||
|
// These can be tweaked, removed, or duplicated as needed.
|
||||||
|
runs {
|
||||||
|
client {
|
||||||
|
workingDirectory project.file('run')
|
||||||
|
|
||||||
|
// Recommended logging data for a userdev environment
|
||||||
|
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
|
||||||
|
|
||||||
|
// Recommended logging level for the console
|
||||||
|
property 'forge.logging.console.level', 'debug'
|
||||||
|
|
||||||
|
mods {
|
||||||
|
matterlinkreboot {
|
||||||
|
source sourceSets.main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
workingDirectory project.file('run')
|
||||||
|
|
||||||
|
// Recommended logging data for a userdev environment
|
||||||
|
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
|
||||||
|
|
||||||
|
// Recommended logging level for the console
|
||||||
|
property 'forge.logging.console.level', 'debug'
|
||||||
|
|
||||||
|
mods {
|
||||||
|
matterlinkreboot {
|
||||||
|
source sourceSets.main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data {
|
||||||
|
workingDirectory project.file('run')
|
||||||
|
|
||||||
|
// Recommended logging data for a userdev environment
|
||||||
|
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
|
||||||
|
|
||||||
|
// Recommended logging level for the console
|
||||||
|
property 'forge.logging.console.level', 'debug'
|
||||||
|
|
||||||
|
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
|
||||||
|
args '--mod', 'matterlinkreboot', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
||||||
|
|
||||||
|
mods {
|
||||||
|
matterlinkreboot {
|
||||||
|
source sourceSets.main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Include resources generated by data generators.
|
||||||
|
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed
|
||||||
|
// that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied.
|
||||||
|
// The userdev artifact is a special name and will get all sorts of transformations applied to it.
|
||||||
|
minecraft 'net.minecraftforge:forge:1.16.4-35.1.37'
|
||||||
|
|
||||||
|
// You may put jars on which you depend on in ./libs or you may define them like so..
|
||||||
|
// compile "some.group:artifact:version:classifier"
|
||||||
|
// compile "some.group:artifact:version"
|
||||||
|
|
||||||
|
// Real examples
|
||||||
|
// compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env
|
||||||
|
// compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
|
||||||
|
|
||||||
|
// The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
|
||||||
|
// provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||||
|
|
||||||
|
// These dependencies get remapped to your current MCP mappings
|
||||||
|
// deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||||
|
|
||||||
|
// For more info...
|
||||||
|
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
||||||
|
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
||||||
|
|
||||||
|
shadow "org.apache.httpcomponents:httpclient:4.5.10"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example for how to get properties into the manifest for reading by the runtime..
|
||||||
|
jar {
|
||||||
|
manifest {
|
||||||
|
attributes([
|
||||||
|
"Specification-Title": "matterlinkreboot",
|
||||||
|
"Specification-Vendor": "matterlinkrebootsareus",
|
||||||
|
"Specification-Version": "1", // We are version 1 of ourselves
|
||||||
|
"Implementation-Title": project.name,
|
||||||
|
"Implementation-Version": "${version}",
|
||||||
|
"Implementation-Vendor" :"matterlinkrebootsareus",
|
||||||
|
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
configurations = [project.configurations.shadow]
|
||||||
|
manifest {
|
||||||
|
attributes([
|
||||||
|
"Specification-Title": "matterlinkreboot",
|
||||||
|
"Specification-Vendor": "matterlinkrebootsareus",
|
||||||
|
"Specification-Version": "1", // We are version 1 of ourselves
|
||||||
|
"Implementation-Title": project.name,
|
||||||
|
"Implementation-Version": "${version}",
|
||||||
|
"Implementation-Vendor" :"matterlinkrebootsareus",
|
||||||
|
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
|
||||||
|
])
|
||||||
|
}
|
||||||
|
relocate "org.apache.http", "matterlinkreboot.org.apache.http"
|
||||||
|
relocate "org.apache.commons.logging", "matterlinkreboot.org.apache.commons.logging"
|
||||||
|
relocate "org.apache.commons.codec", "matterlinkreboot.org.apache.commons.codec"
|
||||||
|
}
|
||||||
|
|
||||||
|
reobf { shadowJar { } }
|
||||||
|
tasks.reobfShadowJar.mustRunAfter shadowJar
|
||||||
|
|
||||||
|
// Example configuration to allow publishing using the maven-publish task
|
||||||
|
// This is the preferred method to reobfuscate your jar file
|
||||||
|
jar.finalizedBy('reobfJar')
|
||||||
|
// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing
|
||||||
|
//publish.dependsOn('reobfJar')
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
mavenJava(MavenPublication) {
|
||||||
|
artifact jar
|
||||||
|
}
|
||||||
|
}
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
url "file:///${project.projectDir}/mcmodsrepo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,4 @@
|
|||||||
|
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
|
||||||
|
# This is required to provide enough memory for the Minecraft decompilation process.
|
||||||
|
org.gradle.jvmargs=-Xmx3G
|
||||||
|
org.gradle.daemon=false
|
Binary file not shown.
@ -0,0 +1,5 @@
|
|||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip
|
@ -0,0 +1,172 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## Gradle start up script for UN*X
|
||||||
|
##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS=""
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn () {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
nonstop=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
NONSTOP* )
|
||||||
|
nonstop=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="java"
|
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||||
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
|
MAX_FD="$MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
ulimit -n $MAX_FD
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock
|
||||||
|
if $darwin; then
|
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin, switch paths to Windows format before running java
|
||||||
|
if $cygwin ; then
|
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
|
SEP=""
|
||||||
|
for dir in $ROOTDIRSRAW ; do
|
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||||
|
SEP="|"
|
||||||
|
done
|
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||||
|
# Add a user-defined pattern to the cygpath arguments
|
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||||
|
fi
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
i=0
|
||||||
|
for arg in "$@" ; do
|
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||||
|
else
|
||||||
|
eval `echo args$i`="\"$arg\""
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
case $i in
|
||||||
|
(0) set -- ;;
|
||||||
|
(1) set -- "$args0" ;;
|
||||||
|
(2) set -- "$args0" "$args1" ;;
|
||||||
|
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
|
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
|
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
|
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
|
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
|
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
|
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Escape application args
|
||||||
|
save () {
|
||||||
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
APP_ARGS=$(save "$@")
|
||||||
|
|
||||||
|
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||||
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||||
|
|
||||||
|
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||||
|
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$JAVACMD" "$@"
|
@ -0,0 +1,84 @@
|
|||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS=
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:init
|
||||||
|
@rem Get command-line arguments, handling Windows variants
|
||||||
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
|
|
||||||
|
:win9xME_args
|
||||||
|
@rem Slurp the command line arguments.
|
||||||
|
set CMD_LINE_ARGS=
|
||||||
|
set _SKIP=2
|
||||||
|
|
||||||
|
:win9xME_args_slurp
|
||||||
|
if "x%~1" == "x" goto execute
|
||||||
|
|
||||||
|
set CMD_LINE_ARGS=%*
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
Binary file not shown.
@ -0,0 +1,53 @@
|
|||||||
|
package dev.garrettmills.csx.matterlinkreboot;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
public class IncomingMessage {
|
||||||
|
private String text;
|
||||||
|
private String username;
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
public static IncomingMessage[] fromStringArray(String jsonString) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.fromJson(jsonString, IncomingMessage[].class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IncomingMessage fromString(String jsonString) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.fromJson(jsonString, IncomingMessage.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSON() {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String value) {
|
||||||
|
this.text = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return this.text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String value) {
|
||||||
|
this.username = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return this.username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String value) {
|
||||||
|
this.id = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "IncomingMessage<username: " + this.getUsername() + ", message: " + this.getText() + ">";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package dev.garrettmills.csx.matterlinkreboot;
|
||||||
|
|
||||||
|
import org.apache.http.HttpEntity;
|
||||||
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||||
|
import org.apache.http.client.methods.HttpGet;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.HttpClients;
|
||||||
|
import org.apache.http.util.EntityUtils;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class MatterbridgeAPIClient {
|
||||||
|
|
||||||
|
// Directly reference a log4j logger.
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(MatterlinkReboot.MOD_ID);
|
||||||
|
|
||||||
|
private static final CloseableHttpClient http = HttpClients.createDefault();
|
||||||
|
|
||||||
|
public static final IncomingMessage[] NO_MESSAGES = {};
|
||||||
|
|
||||||
|
public static void close() throws IOException {
|
||||||
|
http.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IncomingMessage[] getMessages() {
|
||||||
|
String url = MatterbridgeAPIClient.buildURL("messages");
|
||||||
|
|
||||||
|
HttpGet req = new HttpGet(url);
|
||||||
|
|
||||||
|
try {
|
||||||
|
CloseableHttpResponse res = http.execute(req);
|
||||||
|
HttpEntity body = res.getEntity();
|
||||||
|
|
||||||
|
if ( body != null ) {
|
||||||
|
String result = EntityUtils.toString(body);
|
||||||
|
return IncomingMessage.fromStringArray(result);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.error(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NO_MESSAGES;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendMessage(OutgoingMessage message) {
|
||||||
|
try {
|
||||||
|
HttpPost post = new HttpPost(buildURL("message"));
|
||||||
|
StringEntity body = new StringEntity(message.toJSON());
|
||||||
|
|
||||||
|
post.setHeader("Content-Type", "application/json");
|
||||||
|
post.setEntity(body);
|
||||||
|
|
||||||
|
http.execute(post);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String buildURL(String endpoint) {
|
||||||
|
return MatterlinkRebootConfig.GENERAL.BridgeProtocol.get() + "://"
|
||||||
|
+ MatterlinkRebootConfig.GENERAL.BridgeHost.get() + ":" + MatterlinkRebootConfig.GENERAL.BridgePort.get()
|
||||||
|
+ "/api/" + endpoint;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
package dev.garrettmills.csx.matterlinkreboot;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.event.ServerChatEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.ModLoadingContext;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
|
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
|
||||||
|
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
|
||||||
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
// The value here should match an entry in the META-INF/mods.toml file
|
||||||
|
@Mod("matterlinkreboot")
|
||||||
|
public class MatterlinkReboot
|
||||||
|
{
|
||||||
|
public static final String MOD_ID = "matterlinkreboot";
|
||||||
|
|
||||||
|
// Directly reference a log4j logger.
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(MatterlinkReboot.MOD_ID);
|
||||||
|
|
||||||
|
private final TimerTask task = new MatterlinkRebootTask();
|
||||||
|
private final Timer timer = new Timer(true);
|
||||||
|
|
||||||
|
public MatterlinkReboot() {
|
||||||
|
// Register the setup method for modloading
|
||||||
|
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
|
||||||
|
|
||||||
|
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, MatterlinkRebootConfig.spec);
|
||||||
|
|
||||||
|
// Register ourselves for server and other game events we are interested in
|
||||||
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setup(final FMLCommonSetupEvent event) {
|
||||||
|
LOGGER.info("Bridge enabled? " + this.isEnabled());
|
||||||
|
LOGGER.info("Bridge API: " + MatterlinkRebootConfig.GENERAL.BridgeHost.get() + ":" + MatterlinkRebootConfig.GENERAL.BridgePort.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onServerStarting(FMLServerStartingEvent event) {
|
||||||
|
if ( this.isEnabled() ) {
|
||||||
|
LOGGER.info("Scheduling background task!");
|
||||||
|
LOGGER.info("Polling interval: " + MatterlinkRebootConfig.GENERAL.PollingInterval.get() + " seconds");
|
||||||
|
this.timer.scheduleAtFixedRate(this.task, 0, MatterlinkRebootConfig.GENERAL.PollingInterval.get() * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onServerStopping(final FMLServerStoppingEvent event) {
|
||||||
|
if ( this.isEnabled() ) {
|
||||||
|
LOGGER.info("Stopping background task!");
|
||||||
|
this.timer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onServerChat(ServerChatEvent event) {
|
||||||
|
if ( this.isEnabled() ) {
|
||||||
|
OutgoingMessage msg = new OutgoingMessage();
|
||||||
|
|
||||||
|
msg.setUsername(event.getUsername());
|
||||||
|
msg.setText(event.getMessage());
|
||||||
|
msg.setAvatar(MatterlinkRebootConfig.GENERAL.DefaultAvatar.get());
|
||||||
|
msg.setGateway(MatterlinkRebootConfig.GENERAL.BridgeGateway.get());
|
||||||
|
|
||||||
|
MatterbridgeAPIClient.sendMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return MatterlinkRebootConfig.GENERAL.BridgeEnabled.get();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package dev.garrettmills.csx.matterlinkreboot;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
|
|
||||||
|
public class MatterlinkRebootConfig {
|
||||||
|
private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder();
|
||||||
|
public static final General GENERAL = new General(BUILDER);
|
||||||
|
public static final ForgeConfigSpec spec = BUILDER.build();
|
||||||
|
|
||||||
|
public static class General {
|
||||||
|
public final ForgeConfigSpec.ConfigValue<Boolean> BridgeEnabled;
|
||||||
|
public final ForgeConfigSpec.ConfigValue<String> BridgeHost;
|
||||||
|
public final ForgeConfigSpec.ConfigValue<Integer> BridgePort;
|
||||||
|
public final ForgeConfigSpec.ConfigValue<String> BridgeProtocol;
|
||||||
|
public final ForgeConfigSpec.ConfigValue<String> BridgeGateway;
|
||||||
|
public final ForgeConfigSpec.ConfigValue<String> DefaultAvatar;
|
||||||
|
public final ForgeConfigSpec.ConfigValue<Integer> PollingInterval;
|
||||||
|
|
||||||
|
public General(ForgeConfigSpec.Builder builder) {
|
||||||
|
builder.push("General");
|
||||||
|
|
||||||
|
BridgeEnabled = builder.comment("Enables/disables the chat entire chat bridge. (true, false) [true]")
|
||||||
|
.define("bridgeEnabled", false);
|
||||||
|
|
||||||
|
BridgeHost = builder.comment("Hostname or IP address of the Matterbridge server. [127.0.0.1]")
|
||||||
|
.define("bridgeHost", "127.0.0.1");
|
||||||
|
|
||||||
|
BridgePort = builder.comment("Port of the Matterbridge server on the host. [4242]")
|
||||||
|
.define("bridgePort", 4242);
|
||||||
|
|
||||||
|
BridgeProtocol = builder.comment("Protocol to use to interact with the Matterbridge API. (http, https) [http]")
|
||||||
|
.define("bridgeProtocol", "http");
|
||||||
|
|
||||||
|
BridgeGateway = builder.comment("Name of the Matterbridge gateway to push messages to. [matterbridge]")
|
||||||
|
.define("bridgeGateway", "gateway");
|
||||||
|
|
||||||
|
DefaultAvatar = builder.comment("Default URL to use for the avatar for outgoing messages. [https://secure.gravatar.com/avatar/matterlinkreboot.jpg]")
|
||||||
|
.define("defaultAvatar", "https://secure.gravatar.com/avatar/matterlinkreboot.jpg");
|
||||||
|
|
||||||
|
PollingInterval = builder.comment("Interval (in seconds) to poll the Matterbridge server to check for new messages. [2]")
|
||||||
|
.define("pollingInterval", 2);
|
||||||
|
|
||||||
|
builder.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package dev.garrettmills.csx.matterlinkreboot;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
import net.minecraft.world.server.ServerWorld;
|
||||||
|
import net.minecraftforge.fml.server.ServerLifecycleHooks;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.util.TimerTask;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class MatterlinkRebootTask extends TimerTask {
|
||||||
|
|
||||||
|
// Directly reference a log4j logger.
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(MatterlinkReboot.MOD_ID);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
IncomingMessage[] messages = MatterbridgeAPIClient.getMessages();
|
||||||
|
|
||||||
|
for ( IncomingMessage msg : messages ) {
|
||||||
|
this.postChatToGame(msg.getUsername(), msg.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Posts a chat message to all players in the server.
|
||||||
|
* @param username Username of the user who sent the message
|
||||||
|
* @param message Message to be displayed
|
||||||
|
*/
|
||||||
|
public void postChatToGame(String username, String message) {
|
||||||
|
for (ServerPlayerEntity playerEntity : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers()) {
|
||||||
|
playerEntity.sendMessage(new StringTextComponent("<" + username + "> " + message), UUID.randomUUID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package dev.garrettmills.csx.matterlinkreboot;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
public class OutgoingMessage {
|
||||||
|
private String avatar;
|
||||||
|
private String event = "";
|
||||||
|
private String gateway;
|
||||||
|
private String text;
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
public String toJSON() {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvatar(String value) {
|
||||||
|
this.avatar = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAvatar() {
|
||||||
|
return this.avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEvent(String value) {
|
||||||
|
this.event = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEvent() {
|
||||||
|
return this.event;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGateway(String value) {
|
||||||
|
this.gateway = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGateway() {
|
||||||
|
return this.gateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String value) {
|
||||||
|
this.text = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return this.text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String value) {
|
||||||
|
this.username = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return this.username;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
# This is an example mods.toml file. It contains the data relating to the loading mods.
|
||||||
|
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
|
||||||
|
# The overall format is standard TOML format, v0.5.0.
|
||||||
|
# Note that there are a couple of TOML lists in this file.
|
||||||
|
# Find more information on toml format here: https://github.com/toml-lang/toml
|
||||||
|
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
|
||||||
|
modLoader="javafml" #mandatory
|
||||||
|
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
|
||||||
|
loaderVersion="[35,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions.
|
||||||
|
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
|
||||||
|
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
|
||||||
|
license="MIT"
|
||||||
|
# A URL to refer people to when problems occur with this mod
|
||||||
|
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
|
||||||
|
# A list of mods - how many allowed here is determined by the individual mod loader
|
||||||
|
[[mods]] #mandatory
|
||||||
|
# The modid of the mod
|
||||||
|
modId="matterlinkreboot" #mandatory
|
||||||
|
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
|
||||||
|
# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata
|
||||||
|
# see the associated build.gradle script for how to populate this completely automatically during a build
|
||||||
|
version="${file.jarVersion}" #mandatory
|
||||||
|
# A display name for the mod
|
||||||
|
displayName="Matterlink: Reboot" #mandatory
|
||||||
|
# A URL to query for updates for this mod. See the JSON update specification https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/
|
||||||
|
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional
|
||||||
|
# A URL for the "homepage" for this mod, displayed in the mod UI
|
||||||
|
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional
|
||||||
|
# A file name (in the root of the mod JAR) containing a logo for display
|
||||||
|
logoFile="examplemod.png" #optional
|
||||||
|
# A text field displayed in the mod UI
|
||||||
|
# credits="Thanks for this example mod goes to Java" #optional
|
||||||
|
# A text field displayed in the mod UI
|
||||||
|
authors="Cestaberous" #optional
|
||||||
|
# The description text for the mod (multi line!) (#mandatory)
|
||||||
|
description='''
|
||||||
|
Matterlink was a 1.10.x mod that provided Matterbridge integration with Minecraft. Matterlink: Reboot is the 1.16+ version of that mod.
|
||||||
|
|
||||||
|
MR allows connecting your Minecraft server to a Matterbridge relay so that messages can be shared between many different chat platforms as if they were one.
|
||||||
|
|
||||||
|
Ever wanted your server chat to integrate with a Discord channel? A Slack channel? An IRC channel? Well, this mod can help you do that.
|
||||||
|
|
||||||
|
Matterlink: Reboot is not affiliated in any way with Matterlink or its author(s).
|
||||||
|
'''
|
||||||
|
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
|
||||||
|
[[dependencies.matterlinkreboot]] #optional
|
||||||
|
# the modid of the dependency
|
||||||
|
modId="forge" #mandatory
|
||||||
|
# Does this dependency have to exist - if not, ordering below must be specified
|
||||||
|
mandatory=true #mandatory
|
||||||
|
# The version range of the dependency
|
||||||
|
versionRange="[35,)" #mandatory
|
||||||
|
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
|
||||||
|
ordering="NONE"
|
||||||
|
# Side this dependency is applied on - BOTH, CLIENT or SERVER
|
||||||
|
side="BOTH"
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"pack": {
|
||||||
|
"description": "examplemod resources",
|
||||||
|
"pack_format": 6,
|
||||||
|
"_comment": "A pack_format of 6 requires json lang files and some texture changes from 1.16.2. Note: we require v6 pack meta for all mods."
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue