mirror of
https://github.com/Ellpeck/PrettyPipes.git
synced 2024-11-22 03:43:30 +01:00
basic pipe looks
This commit is contained in:
parent
06c965b9a0
commit
44595ab0a8
18 changed files with 964 additions and 0 deletions
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/rebuild.bat
|
||||||
|
/doAllTheThings.bat
|
||||||
|
/.gradle
|
||||||
|
/build
|
||||||
|
/out
|
||||||
|
/idea
|
||||||
|
/.idea
|
||||||
|
/*.iml
|
||||||
|
/*.ipr
|
||||||
|
/*.iws
|
||||||
|
/lib
|
||||||
|
/classes
|
||||||
|
/bin/
|
||||||
|
/run/
|
||||||
|
|
||||||
|
*.classpath
|
||||||
|
*.project
|
||||||
|
.settings/org.eclipse.buildship.core.prefs
|
||||||
|
*.launch
|
||||||
|
.settings/org.eclipse.jdt.core.prefs
|
||||||
|
*.prefs
|
||||||
|
.cache
|
23
Jenkinsfile
vendored
Normal file
23
Jenkinsfile
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
pipeline {
|
||||||
|
agent any
|
||||||
|
stages {
|
||||||
|
stage('Clean') {
|
||||||
|
steps {
|
||||||
|
sh 'chmod +x ./gradlew'
|
||||||
|
sh './gradlew clean --no-daemon'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Build') {
|
||||||
|
steps {
|
||||||
|
sh './gradlew build --no-daemon'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Upload Artifacts') {
|
||||||
|
steps {
|
||||||
|
archiveArtifacts 'build/libs/**.jar'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
153
build.gradle
Normal file
153
build.gradle
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
maven { url = 'https://files.minecraftforge.net/maven' }
|
||||||
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 = '0.1'
|
||||||
|
group = 'de.ellpeck.prettypipes' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
archivesBaseName = 'PrettyPipes'
|
||||||
|
|
||||||
|
if (System.getenv('BUILD_NUMBER') != null) {
|
||||||
|
version += "." + System.getenv('BUILD_NUMBER')
|
||||||
|
}
|
||||||
|
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
|
||||||
|
|
||||||
|
minecraft {
|
||||||
|
mappings channel: 'snapshot', version: '20200128-1.15.1'
|
||||||
|
|
||||||
|
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', 'info'
|
||||||
|
|
||||||
|
mods {
|
||||||
|
prettypipes {
|
||||||
|
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', 'info'
|
||||||
|
|
||||||
|
mods {
|
||||||
|
prettypipes {
|
||||||
|
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', 'info'
|
||||||
|
|
||||||
|
args '--mod', 'prettypipes', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/'), '--existing', file('src/generated/resources')
|
||||||
|
|
||||||
|
mods {
|
||||||
|
prettypipes {
|
||||||
|
source sourceSets.main
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets.main.resources {
|
||||||
|
srcDir 'src/generated/resources'
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
url = "https://dvs1.progwml6.com/files/maven"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
embed
|
||||||
|
compile.extendsFrom(embed)
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
minecraft 'net.minecraftforge:forge:1.15.2-31.1.19'
|
||||||
|
embed "org.jgrapht:jgrapht-core:1.4.0"
|
||||||
|
|
||||||
|
compileOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.2:api")
|
||||||
|
runtimeOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.2")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example for how to get properties into the manifest for reading by the runtime..
|
||||||
|
jar {
|
||||||
|
manifest {
|
||||||
|
attributes([
|
||||||
|
"Specification-Title" : "prettypipes",
|
||||||
|
"Specification-Vendor" : "Ellpeck",
|
||||||
|
"Specification-Version" : "1", // We are version 1 of ourselves
|
||||||
|
"Implementation-Title" : project.name,
|
||||||
|
"Implementation-Version" : "${version}",
|
||||||
|
"Implementation-Vendor" : "Ellpeck",
|
||||||
|
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
|
||||||
|
])
|
||||||
|
}
|
||||||
|
from configurations.embed.collect { it.isDirectory() ? it : zipTree(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
task deobfJar(type: Jar) {
|
||||||
|
from(sourceSets.main.output)
|
||||||
|
archiveName = "${baseName}-${version}-deobf.${extension}"
|
||||||
|
}
|
||||||
|
artifacts {
|
||||||
|
archives deobfJar
|
||||||
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
mavenJava(MavenPublication) {
|
||||||
|
groupId project.group
|
||||||
|
artifactId project.archivesBaseName
|
||||||
|
version project.version
|
||||||
|
from components.java
|
||||||
|
|
||||||
|
artifact deobfJar {
|
||||||
|
classifier 'deobf'
|
||||||
|
}
|
||||||
|
|
||||||
|
pom.withXml {
|
||||||
|
def node = asNode()
|
||||||
|
if (node.dependencies.size() > 0)
|
||||||
|
node.remove(node.dependencies)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
url "file://" + System.getenv("local_maven")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4
gradle.properties
Normal file
4
gradle.properties
Normal file
|
@ -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
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#Sun Oct 20 21:47:13 CEST 2019
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip
|
172
gradlew
vendored
Normal file
172
gradlew
vendored
Normal file
|
@ -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" "$@"
|
84
gradlew.bat
vendored
Normal file
84
gradlew.bat
vendored
Normal file
|
@ -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
|
17
src/main/java/de/ellpeck/prettypipes/PrettyPipes.java
Normal file
17
src/main/java/de/ellpeck/prettypipes/PrettyPipes.java
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package de.ellpeck.prettypipes;
|
||||||
|
|
||||||
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
|
|
||||||
|
@Mod(PrettyPipes.ID)
|
||||||
|
public final class PrettyPipes {
|
||||||
|
|
||||||
|
public static final String ID = "prettypipes";
|
||||||
|
|
||||||
|
public PrettyPipes() {
|
||||||
|
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||||
|
bus.addListener(Registry::setup);
|
||||||
|
bus.addListener(Registry::setupClient);
|
||||||
|
}
|
||||||
|
}
|
44
src/main/java/de/ellpeck/prettypipes/Registry.java
Normal file
44
src/main/java/de/ellpeck/prettypipes/Registry.java
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
package de.ellpeck.prettypipes;
|
||||||
|
|
||||||
|
import de.ellpeck.prettypipes.blocks.PipeBlock;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.RenderTypeLookup;
|
||||||
|
import net.minecraft.item.BlockItem;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemGroup;
|
||||||
|
import net.minecraftforge.event.RegistryEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
|
||||||
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
|
||||||
|
@Mod.EventBusSubscriber(bus = Bus.MOD)
|
||||||
|
public final class Registry {
|
||||||
|
|
||||||
|
public static Block pipe;
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void registerBlocks(RegistryEvent.Register<Block> event) {
|
||||||
|
event.getRegistry().registerAll(
|
||||||
|
pipe = new PipeBlock().setRegistryName("pipe")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void registerItems(RegistryEvent.Register<Item> event) {
|
||||||
|
ForgeRegistries.BLOCKS.getValues().stream()
|
||||||
|
.filter(b -> b.getRegistryName().getNamespace().equals(PrettyPipes.ID))
|
||||||
|
.forEach(b -> event.getRegistry().register(new BlockItem(b, new Item.Properties().group(ItemGroup.MISC)).setRegistryName(b.getRegistryName())));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setup(FMLCommonSetupEvent event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setupClient(FMLClientSetupEvent event) {
|
||||||
|
RenderTypeLookup.setRenderLayer(pipe, RenderType.cutout());
|
||||||
|
}
|
||||||
|
}
|
125
src/main/java/de/ellpeck/prettypipes/blocks/PipeBlock.java
Normal file
125
src/main/java/de/ellpeck/prettypipes/blocks/PipeBlock.java
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
package de.ellpeck.prettypipes.blocks;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockRenderType;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.SoundType;
|
||||||
|
import net.minecraft.block.material.Material;
|
||||||
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.state.BooleanProperty;
|
||||||
|
import net.minecraft.state.EnumProperty;
|
||||||
|
import net.minecraft.state.StateContainer;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.IStringSerializable;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class PipeBlock extends Block {
|
||||||
|
|
||||||
|
public static final Map<Direction, EnumProperty<ConnectionType>> DIRECTIONS = new HashMap<>();
|
||||||
|
private static final Map<BlockState, VoxelShape> SHAPE_CACHE = new HashMap<>();
|
||||||
|
private static final VoxelShape CENTER_SHAPE = makeCuboidShape(5, 5, 5, 11, 11, 11);
|
||||||
|
private static final Map<Direction, VoxelShape> DIR_SHAPES = ImmutableMap.<Direction, VoxelShape>builder()
|
||||||
|
.put(Direction.UP, makeCuboidShape(5, 10, 5, 11, 16, 11))
|
||||||
|
.put(Direction.DOWN, makeCuboidShape(5, 0, 5, 11, 6, 11))
|
||||||
|
.put(Direction.NORTH, makeCuboidShape(5, 5, 0, 11, 11, 6))
|
||||||
|
.put(Direction.SOUTH, makeCuboidShape(5, 5, 10, 11, 11, 16))
|
||||||
|
.put(Direction.EAST, makeCuboidShape(10, 5, 5, 16, 11, 11))
|
||||||
|
.put(Direction.WEST, makeCuboidShape(0, 5, 5, 6, 11, 11))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (Direction dir : Direction.values())
|
||||||
|
DIRECTIONS.put(dir, EnumProperty.create(dir.getName(), ConnectionType.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public PipeBlock() {
|
||||||
|
super(Block.Properties.create(Material.ROCK).hardnessAndResistance(2).sound(SoundType.STONE).notSolid());
|
||||||
|
|
||||||
|
BlockState state = this.getDefaultState();
|
||||||
|
for (EnumProperty<ConnectionType> prop : DIRECTIONS.values())
|
||||||
|
state = state.with(prop, ConnectionType.DISCONNECTED);
|
||||||
|
this.setDefaultState(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
|
||||||
|
builder.add(DIRECTIONS.values().toArray(new EnumProperty[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) {
|
||||||
|
BlockState newState = this.createState(worldIn, pos);
|
||||||
|
if (newState != state)
|
||||||
|
worldIn.setBlockState(pos, newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
|
return this.createState(context.getWorld(), context.getPos());
|
||||||
|
}
|
||||||
|
|
||||||
|
private BlockState createState(World world, BlockPos pos) {
|
||||||
|
BlockState state = this.getDefaultState();
|
||||||
|
for (Map.Entry<Direction, EnumProperty<ConnectionType>> entry : DIRECTIONS.entrySet()) {
|
||||||
|
BlockPos neighborPos = pos.offset(entry.getKey());
|
||||||
|
boolean canConnect = this.canConnect(world, neighborPos);
|
||||||
|
state = state.with(entry.getValue(), canConnect ? ConnectionType.CONNECTED : ConnectionType.DISCONNECTED);
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canConnect(World world, BlockPos offset) {
|
||||||
|
if (!world.isBlockLoaded(offset))
|
||||||
|
return false;
|
||||||
|
BlockState state = world.getBlockState(offset);
|
||||||
|
return state.getBlock() == this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||||
|
VoxelShape shape = SHAPE_CACHE.get(state);
|
||||||
|
if (shape != null)
|
||||||
|
return shape;
|
||||||
|
|
||||||
|
shape = CENTER_SHAPE;
|
||||||
|
for (Map.Entry<Direction, EnumProperty<ConnectionType>> entry : DIRECTIONS.entrySet()) {
|
||||||
|
if (state.get(entry.getValue()) == ConnectionType.CONNECTED)
|
||||||
|
shape = VoxelShapes.or(shape, DIR_SHAPES.get(entry.getKey()));
|
||||||
|
}
|
||||||
|
SHAPE_CACHE.put(state, shape);
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ConnectionType implements IStringSerializable {
|
||||||
|
CONNECTED,
|
||||||
|
DISCONNECTED;
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
ConnectionType() {
|
||||||
|
this.name = this.name().toLowerCase(Locale.ROOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
src/main/resources/META-INF/mods.toml
Normal file
32
src/main/resources/META-INF/mods.toml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# 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="[28,)" #mandatory (28 is current forge version)
|
||||||
|
# A URL to refer people to when problems occur with this mod
|
||||||
|
issueTrackerURL="https://github.com/Ellpeck/PrettyPipes" #optional
|
||||||
|
# A list of mods - how many allowed here is determined by the individual mod loader
|
||||||
|
[[mods]] #mandatory
|
||||||
|
# The modid of the mod
|
||||||
|
modId="prettypipes" #mandatory
|
||||||
|
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
|
||||||
|
version="${version}" #mandatory
|
||||||
|
# A display name for the mod
|
||||||
|
displayName="Pretty Pipes" #mandatory
|
||||||
|
# A URL to query for updates for this mod. See the JSON update specification <here>
|
||||||
|
#updateJSONURL="http://myurl.me/" #optional
|
||||||
|
# A URL for the "homepage" for this mod, displayed in the mod UI
|
||||||
|
#displayURL="http://example.com/" #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="Commission for Violet" #optional
|
||||||
|
# A text field displayed in the mod UI
|
||||||
|
authors="Ellpeck" #optional
|
||||||
|
# The description text for the mod (multi line!) (#mandatory)
|
||||||
|
description='''
|
||||||
|
wow pipes, how creative'''
|
62
src/main/resources/assets/prettypipes/blockstates/pipe.json
Normal file
62
src/main/resources/assets/prettypipes/blockstates/pipe.json
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
{
|
||||||
|
"multipart": [
|
||||||
|
{
|
||||||
|
"apply": {
|
||||||
|
"model": "prettypipes:block/pipe_center"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"north": "connected"
|
||||||
|
},
|
||||||
|
"apply": {
|
||||||
|
"model": "prettypipes:block/pipe_end"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"south": "connected"
|
||||||
|
},
|
||||||
|
"apply": {
|
||||||
|
"model": "prettypipes:block/pipe_end",
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"east": "connected"
|
||||||
|
},
|
||||||
|
"apply": {
|
||||||
|
"model": "prettypipes:block/pipe_end",
|
||||||
|
"y": 90
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"west": "connected"
|
||||||
|
},
|
||||||
|
"apply": {
|
||||||
|
"model": "prettypipes:block/pipe_end",
|
||||||
|
"y": 270
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"down": "connected"
|
||||||
|
},
|
||||||
|
"apply": {
|
||||||
|
"model": "prettypipes:block/pipe_end",
|
||||||
|
"x": 90
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"when": {
|
||||||
|
"up": "connected"
|
||||||
|
},
|
||||||
|
"apply": {
|
||||||
|
"model": "prettypipes:block/pipe_end",
|
||||||
|
"x": 270
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,153 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"0": "prettypipes:block/pipe",
|
||||||
|
"particle": "prettypipes:block/pipe"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 5, 5],
|
||||||
|
"to": [6, 11, 6],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 5, 10],
|
||||||
|
"to": [6, 11, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [10, 5, 10],
|
||||||
|
"to": [11, 11, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [10, 5, 5],
|
||||||
|
"to": [11, 11, 6],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 6], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 10, 10],
|
||||||
|
"to": [10, 11, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 4, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 5, 10],
|
||||||
|
"to": [10, 6, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 4, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 5, 5],
|
||||||
|
"to": [10, 6, 6],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 4, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 5, 6],
|
||||||
|
"to": [6, 6, 10],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 4], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 10, 6],
|
||||||
|
"to": [6, 11, 10],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 4], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [10, 10, 6],
|
||||||
|
"to": [11, 11, 10],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 4], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [10, 5, 6],
|
||||||
|
"to": [11, 6, 10],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 1, 4], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 1, 4], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 10, 5],
|
||||||
|
"to": [10, 11, 6],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 4, 1], "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 4, 1], "texture": "#0"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"0": "prettypipes:block/pipe",
|
||||||
|
"particle": "prettypipes:block/pipe"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 10, 0],
|
||||||
|
"to": [6, 11, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 5, 1], "rotation": 90, "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 5, 1], "rotation": 270, "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 5, 0],
|
||||||
|
"to": [6, 6, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 5, 1], "rotation": 90, "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 5, 1], "rotation": 270, "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [10, 5, 0],
|
||||||
|
"to": [11, 6, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 5, 1], "rotation": 90, "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 5, 1], "rotation": 270, "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [10, 10, 0],
|
||||||
|
"to": [11, 11, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"east": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"south": {"uv": [0, 0, 1, 1], "texture": "#0"},
|
||||||
|
"west": {"uv": [0, 0, 5, 1], "texture": "#0"},
|
||||||
|
"up": {"uv": [0, 0, 5, 1], "rotation": 90, "texture": "#0"},
|
||||||
|
"down": {"uv": [0, 0, 5, 1], "rotation": 270, "texture": "#0"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "prettypipes:block/pipe_center"
|
||||||
|
}
|
BIN
src/main/resources/assets/prettypipes/textures/block/pipe.png
Normal file
BIN
src/main/resources/assets/prettypipes/textures/block/pipe.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 182 B |
7
src/main/resources/pack.mcmeta
Normal file
7
src/main/resources/pack.mcmeta
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"pack": {
|
||||||
|
"description": "Pretty Pipes",
|
||||||
|
"pack_format": 4,
|
||||||
|
"_comment": "A pack_format of 4 requires json lang files. Note: we require v4 pack meta for all mods."
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue