port to fabric
This commit is contained in:
		
						commit
						4b43c6d6be
					
				
							
								
								
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
#Gradle
 | 
			
		||||
.gradle/
 | 
			
		||||
build/
 | 
			
		||||
out/
 | 
			
		||||
classes/
 | 
			
		||||
 | 
			
		||||
#IDEA
 | 
			
		||||
.idea/
 | 
			
		||||
*.iml
 | 
			
		||||
*.ipr
 | 
			
		||||
*.iws
 | 
			
		||||
 | 
			
		||||
#vscode
 | 
			
		||||
.settings/
 | 
			
		||||
.vscode/
 | 
			
		||||
bin/
 | 
			
		||||
.classpath
 | 
			
		||||
.project
 | 
			
		||||
 | 
			
		||||
#fabric
 | 
			
		||||
run/
 | 
			
		||||
							
								
								
									
										21
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2020 QuImUfu
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										79
									
								
								build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								build.gradle
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,79 @@
 | 
			
		||||
plugins {
 | 
			
		||||
	id 'fabric-loom' version '0.2.6-SNAPSHOT'
 | 
			
		||||
	id 'maven-publish'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sourceCompatibility = JavaVersion.VERSION_1_8
 | 
			
		||||
targetCompatibility = JavaVersion.VERSION_1_8
 | 
			
		||||
 | 
			
		||||
archivesBaseName = project.archives_base_name
 | 
			
		||||
version = project.mod_version
 | 
			
		||||
group = project.maven_group
 | 
			
		||||
 | 
			
		||||
minecraft {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
	//to change the versions see the gradle.properties file
 | 
			
		||||
	minecraft "com.mojang:minecraft:${project.minecraft_version}"
 | 
			
		||||
	mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
 | 
			
		||||
	modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
 | 
			
		||||
 | 
			
		||||
	modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
processResources {
 | 
			
		||||
	inputs.property "version", project.version
 | 
			
		||||
 | 
			
		||||
	from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
		include "fabric.mod.json"
 | 
			
		||||
		expand "version": project.version
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
		exclude "fabric.mod.json"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ensure that the encoding is set to UTF-8, no matter what the system default is
 | 
			
		||||
// this fixes some edge cases with special characters not displaying correctly
 | 
			
		||||
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
 | 
			
		||||
tasks.withType(JavaCompile) {
 | 
			
		||||
	options.encoding = "UTF-8"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
 | 
			
		||||
// if it is present.
 | 
			
		||||
// If you remove this task, sources will not be generated.
 | 
			
		||||
task sourcesJar(type: Jar, dependsOn: classes) {
 | 
			
		||||
	classifier = "sources"
 | 
			
		||||
	from sourceSets.main.allSource
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jar {
 | 
			
		||||
	from "LICENSE"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// configure the maven publication
 | 
			
		||||
publishing {
 | 
			
		||||
	publications {
 | 
			
		||||
		mavenJava(MavenPublication) {
 | 
			
		||||
			// add all the jars that should be included when publishing to maven
 | 
			
		||||
			artifact(jar) {
 | 
			
		||||
				builtBy remapJar
 | 
			
		||||
			}
 | 
			
		||||
			artifact("${project.buildDir.absolutePath}/libs/${archivesBaseName}-${project.version}.jar"){
 | 
			
		||||
				builtBy remapJar
 | 
			
		||||
			}
 | 
			
		||||
			artifact(sourcesJar) {
 | 
			
		||||
				builtBy remapSourcesJar
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// select the repositories you want to publish to
 | 
			
		||||
	repositories {
 | 
			
		||||
		// uncomment to publish to the local maven
 | 
			
		||||
		// mavenLocal()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
org.gradle.jvmargs  = -Xmx1G
 | 
			
		||||
 | 
			
		||||
#Fabric properties
 | 
			
		||||
minecraft_version   = 1.15.2
 | 
			
		||||
yarn_mappings       = 1.15.2+build.15
 | 
			
		||||
loader_version      = 0.8.2+build.194
 | 
			
		||||
 | 
			
		||||
#Mod properties
 | 
			
		||||
mod_version         = 0.7.0
 | 
			
		||||
maven_group         = quimufu.structure_item
 | 
			
		||||
archives_base_name  = structure_item
 | 
			
		||||
 | 
			
		||||
#Dependencies
 | 
			
		||||
fabric_api_version  = 0.5.1+build.294-1.15
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
							
								
								
									
										188
									
								
								gradlew
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										188
									
								
								gradlew
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@ -0,0 +1,188 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Copyright 2015 the original author or authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
##
 | 
			
		||||
##  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='"-Xmx64m" "-Xms64m"'
 | 
			
		||||
 | 
			
		||||
# 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" "$@"
 | 
			
		||||
							
								
								
									
										100
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,100 @@
 | 
			
		||||
@rem
 | 
			
		||||
@rem Copyright 2015 the original author or authors.
 | 
			
		||||
@rem
 | 
			
		||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
@rem you may not use this file except in compliance with the License.
 | 
			
		||||
@rem You may obtain a copy of the License at
 | 
			
		||||
@rem
 | 
			
		||||
@rem      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
@rem
 | 
			
		||||
@rem Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
@rem See the License for the specific language governing permissions and
 | 
			
		||||
@rem limitations under the License.
 | 
			
		||||
@rem
 | 
			
		||||
 | 
			
		||||
@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="-Xmx64m" "-Xms64m"
 | 
			
		||||
 | 
			
		||||
@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
 | 
			
		||||
							
								
								
									
										10
									
								
								settings.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								settings.gradle
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
pluginManagement {
 | 
			
		||||
    repositories {
 | 
			
		||||
        jcenter()
 | 
			
		||||
        maven {
 | 
			
		||||
            name = 'Fabric'
 | 
			
		||||
            url = 'https://maven.fabricmc.net/'
 | 
			
		||||
        }
 | 
			
		||||
        gradlePluginPortal()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										247
									
								
								src/main/java/quimufu/structure_item/MyItem.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								src/main/java/quimufu/structure_item/MyItem.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,247 @@
 | 
			
		||||
package quimufu.structure_item;
 | 
			
		||||
 | 
			
		||||
import com.google.common.collect.Lists;
 | 
			
		||||
import com.mojang.datafixers.Dynamic;
 | 
			
		||||
import net.minecraft.block.Block;
 | 
			
		||||
import net.minecraft.client.item.TooltipContext;
 | 
			
		||||
import net.minecraft.datafixer.NbtOps;
 | 
			
		||||
import net.minecraft.item.Item;
 | 
			
		||||
import net.minecraft.item.ItemGroup;
 | 
			
		||||
import net.minecraft.item.ItemStack;
 | 
			
		||||
import net.minecraft.item.ItemUsageContext;
 | 
			
		||||
import net.minecraft.nbt.CompoundTag;
 | 
			
		||||
import net.minecraft.nbt.ListTag;
 | 
			
		||||
import net.minecraft.nbt.Tag;
 | 
			
		||||
import net.minecraft.network.MessageType;
 | 
			
		||||
import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
 | 
			
		||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
 | 
			
		||||
import net.minecraft.server.network.ServerPlayerEntity;
 | 
			
		||||
import net.minecraft.server.world.ServerWorld;
 | 
			
		||||
import net.minecraft.structure.Structure;
 | 
			
		||||
import net.minecraft.text.LiteralText;
 | 
			
		||||
import net.minecraft.text.Text;
 | 
			
		||||
import net.minecraft.text.TranslatableText;
 | 
			
		||||
import net.minecraft.util.*;
 | 
			
		||||
import net.minecraft.util.math.BlockPos;
 | 
			
		||||
import net.minecraft.util.math.Direction;
 | 
			
		||||
import net.minecraft.util.registry.DefaultedRegistry;
 | 
			
		||||
import net.minecraft.util.registry.Registry;
 | 
			
		||||
import net.minecraft.world.World;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static quimufu.structure_item.StructureItemMod.LOGGER;
 | 
			
		||||
 | 
			
		||||
public class MyItem extends Item {
 | 
			
		||||
    static Item.Settings p = (new Item.Settings()).group(ItemGroup.REDSTONE).maxCount(1);
 | 
			
		||||
 | 
			
		||||
    public MyItem() {
 | 
			
		||||
        super(p);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void appendTooltip(ItemStack itemStack, World world, List<Text> texts, TooltipContext tooltipFlag) {
 | 
			
		||||
        if (!itemStack.hasTag() || !itemStack.getTag().contains("structure", 8)) {
 | 
			
		||||
            texts.add((new TranslatableText("item.structure_item.item.tooltip.tag.invalid")).formatted(Formatting.RED));
 | 
			
		||||
        } else {
 | 
			
		||||
            CompoundTag tag = itemStack.getTag();
 | 
			
		||||
            if (tooltipFlag.isAdvanced()) {
 | 
			
		||||
                texts.add(new TranslatableText("item.structure_item.item.tooltip.structure"));
 | 
			
		||||
                texts.add(new LiteralText("  " + tag.getString("structure")));
 | 
			
		||||
                if (tag.contains("allowedOn", 8)) {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.allowed.on"));
 | 
			
		||||
                    texts.add(new LiteralText("  " + tag.getString("allowedOn")));
 | 
			
		||||
                }
 | 
			
		||||
                if (tag.contains("offset")) {
 | 
			
		||||
                    BlockPos offset = BlockPos.deserialize(new Dynamic<Tag>(NbtOps.INSTANCE, tag.get("offset")));
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.fixed.offset"));
 | 
			
		||||
                    Text c = new TranslatableText("item.structure_item.item.tooltip.xyz",
 | 
			
		||||
                            new LiteralText(String.valueOf(offset.getX())),
 | 
			
		||||
                            new LiteralText(String.valueOf(offset.getY())),
 | 
			
		||||
                            new LiteralText(String.valueOf(offset.getZ())));
 | 
			
		||||
                    texts.add(c);
 | 
			
		||||
                } else {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.dynamic.offset"));
 | 
			
		||||
                }
 | 
			
		||||
                if (tag.contains("blacklist", 9)) {
 | 
			
		||||
                    texts.add(new TranslatableText("item.structure_item.item.tooltip.blacklist"));
 | 
			
		||||
                    ListTag bl = tag.getList("blacklist", 8);
 | 
			
		||||
                    int i = 0;
 | 
			
		||||
                    for ( Tag entry : bl) {
 | 
			
		||||
                        texts.add(new LiteralText("  " + entry.asString()));
 | 
			
		||||
                        i++;
 | 
			
		||||
                        if (i == 4) {
 | 
			
		||||
                            texts.add(new TranslatableText("item.structure_item.item.tooltip.blacklist.more",
 | 
			
		||||
                                    new LiteralText(String.valueOf(bl.size() - i))));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public ActionResult useOnBlock(ItemUsageContext c) {
 | 
			
		||||
        if (!c.getWorld().isClient) {
 | 
			
		||||
            ServerPlayerEntity player;
 | 
			
		||||
            if (c.getPlayer() instanceof ServerPlayerEntity) {
 | 
			
		||||
                player = ((ServerPlayerEntity) c.getPlayer());
 | 
			
		||||
            } else {
 | 
			
		||||
                player = null;
 | 
			
		||||
            }
 | 
			
		||||
            CompoundTag tag = c.getStack().getTag();
 | 
			
		||||
            if (tag == null) {
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.no.tag");
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            Block allowed = null;
 | 
			
		||||
            if (tag.contains("allowedOn", 8)) {
 | 
			
		||||
                String allowedOn = tag.getString("allowedOn");
 | 
			
		||||
                allowed = getBlock(allowedOn);
 | 
			
		||||
                if (allowed == null) {
 | 
			
		||||
                    TranslatableText message =
 | 
			
		||||
                            new TranslatableText("items.structure.spawner.invalid.block",
 | 
			
		||||
                                    new LiteralText(allowedOn));
 | 
			
		||||
                    sendPlayerChat(player, message);
 | 
			
		||||
                    return ActionResult.FAIL;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Block current = c.getWorld().getBlockState(c.getBlockPos()).getBlock();
 | 
			
		||||
            if (allowed != null && !current.equals(allowed)) {
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.invalid.block.clicked",
 | 
			
		||||
                                current.getName(), allowed.getName());
 | 
			
		||||
                sendPlayer(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            if (!tag.contains("structure", 8)) {
 | 
			
		||||
                LOGGER.info("No structure name set");
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.no.structure");
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            String structureName = tag.getString("structure");
 | 
			
		||||
            Identifier structureResourceID = Identifier.tryParse(structureName);
 | 
			
		||||
            if (structureResourceID == null) {
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.invalid.structure.name");
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
            Structure x = ((ServerWorld) c.getWorld()).getStructureManager().getStructure(structureResourceID);
 | 
			
		||||
            if (x == null) {
 | 
			
		||||
                TranslatableText message =
 | 
			
		||||
                        new TranslatableText("items.structure.spawner.structure.nonexistent",
 | 
			
		||||
                                new LiteralText(structureResourceID.toString()));
 | 
			
		||||
                sendPlayerChat(player, message);
 | 
			
		||||
                return ActionResult.FAIL;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            BlockPos loc = c.getBlockPos().offset(c.getSide());
 | 
			
		||||
            if (tag.contains("offset")) {
 | 
			
		||||
                BlockPos offset = BlockPos.deserialize(new Dynamic<Tag>(NbtOps.INSTANCE, tag.get("offset")));
 | 
			
		||||
                loc = loc.add(offset);
 | 
			
		||||
            } else if (c.getPlayer() != null) {
 | 
			
		||||
                Direction direction = Direction.getEntityFacingOrder(c.getPlayer())[0];
 | 
			
		||||
                BlockPos size = x.getSize();
 | 
			
		||||
                loc = loc.add(getDirectionalOffset(direction, size));
 | 
			
		||||
            } else {
 | 
			
		||||
                LOGGER.info("No player & no offset");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            MyPlacementSettings ps = (new MyPlacementSettings());
 | 
			
		||||
            if (tag.contains("blacklist", 9)) {
 | 
			
		||||
                ListTag bl = tag.getList("blacklist", 8);
 | 
			
		||||
                List<Block> blacklist = Lists.newArrayList();
 | 
			
		||||
                for (Tag b : bl) {
 | 
			
		||||
                    Block block = getBlock(b.asString());
 | 
			
		||||
                    if (block != null) {
 | 
			
		||||
                        blacklist.add(block);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        TranslatableText message =
 | 
			
		||||
                                new TranslatableText("items.structure.spawner.invalid.block",
 | 
			
		||||
                                        new LiteralText(b.asString()));
 | 
			
		||||
                        sendPlayerChat(player, message);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                ps.forbidOverwrite(blacklist);
 | 
			
		||||
            }
 | 
			
		||||
            ps.setWorld(c.getWorld())
 | 
			
		||||
                    .setSize(x.getSize())
 | 
			
		||||
                    .setMirrored(BlockMirror.NONE)
 | 
			
		||||
                    .setRotation(BlockRotation.NONE)
 | 
			
		||||
                    .setChunkPosition(null);
 | 
			
		||||
            boolean succes = x.method_15172(c.getWorld(), loc, ps, 2);
 | 
			
		||||
            if (succes) {
 | 
			
		||||
                c.getStack().decrement(1);
 | 
			
		||||
                return ActionResult.SUCCESS;
 | 
			
		||||
            }
 | 
			
		||||
            TranslatableText message =
 | 
			
		||||
                    new TranslatableText("items.structure.spawner.invalid.location");
 | 
			
		||||
            sendPlayer(player, message);
 | 
			
		||||
            return ActionResult.FAIL;
 | 
			
		||||
        }
 | 
			
		||||
        return ActionResult.FAIL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void sendPlayer(ServerPlayerEntity player, Text message) {
 | 
			
		||||
        if (player == null)
 | 
			
		||||
            return;
 | 
			
		||||
        ServerPlayNetworkHandler connection = player.networkHandler;
 | 
			
		||||
        TitleS2CPacket packet = new TitleS2CPacket(TitleS2CPacket.Action.SUBTITLE, message);
 | 
			
		||||
        connection.sendPacket(packet);
 | 
			
		||||
        packet = new TitleS2CPacket(TitleS2CPacket.Action.TITLE, new LiteralText(""));
 | 
			
		||||
        connection.sendPacket(packet);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void sendPlayerChat(ServerPlayerEntity player, Text message) {
 | 
			
		||||
        if (player != null)
 | 
			
		||||
            player.sendChatMessage(message, MessageType.SYSTEM);
 | 
			
		||||
        LOGGER.info(message.asFormattedString());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private BlockPos getDirectionalOffset(Direction direction, BlockPos size) {
 | 
			
		||||
        BlockPos loc = new BlockPos(0, 0, 0);
 | 
			
		||||
        switch (direction) {
 | 
			
		||||
            case WEST:
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() - 1);
 | 
			
		||||
                break;
 | 
			
		||||
            case EAST: //positive x
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case NORTH:
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() - 1);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case SOUTH: //positive z
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                break;
 | 
			
		||||
            case UP:    //positive y
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.UP);
 | 
			
		||||
                break;
 | 
			
		||||
            case DOWN:
 | 
			
		||||
                loc = loc.offset(Direction.NORTH, size.getZ() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.WEST, size.getX() / 2);
 | 
			
		||||
                loc = loc.offset(Direction.DOWN, size.getY());
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
        return loc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Block getBlock(String loc) {
 | 
			
		||||
        Identifier location = Identifier.tryParse(loc);
 | 
			
		||||
        DefaultedRegistry<Block> blocks = Registry.BLOCK;
 | 
			
		||||
        if (location == null || !blocks.containsId(location)) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        return blocks.get(location);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,88 @@
 | 
			
		||||
package quimufu.structure_item;
 | 
			
		||||
 | 
			
		||||
import com.google.common.collect.Lists;
 | 
			
		||||
import net.minecraft.block.Block;
 | 
			
		||||
import net.minecraft.entity.Entity;
 | 
			
		||||
import net.minecraft.structure.Structure;
 | 
			
		||||
import net.minecraft.structure.StructurePlacementData;
 | 
			
		||||
import net.minecraft.util.math.BlockPos;
 | 
			
		||||
import net.minecraft.util.math.Box;
 | 
			
		||||
import net.minecraft.util.math.Vec3d;
 | 
			
		||||
import net.minecraft.world.World;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class MyPlacementSettings extends StructurePlacementData {
 | 
			
		||||
    private List<Block> blacklist;
 | 
			
		||||
    private World world;
 | 
			
		||||
    private BlockPos size;
 | 
			
		||||
 | 
			
		||||
    public MyPlacementSettings forbidOverwrite(List<Block> blocks) {
 | 
			
		||||
        if (blocks.size() == 0) {
 | 
			
		||||
            blacklist = null;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
        blacklist = Lists.newArrayList(blocks);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public MyPlacementSettings setWorld(World w) {
 | 
			
		||||
        world = w;
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public MyPlacementSettings setSize(BlockPos p) {
 | 
			
		||||
        size = p;
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<Structure.StructureBlockInfo> method_15121(List<List<Structure.StructureBlockInfo>> blocks, BlockPos pos) {
 | 
			
		||||
        if (world == null || pos == null || size == null) {
 | 
			
		||||
            return super.method_15121(blocks, pos);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        List<List<Structure.StructureBlockInfo>> eligibleStructures = new ArrayList<>();
 | 
			
		||||
        if (blacklist == null) {
 | 
			
		||||
            eligibleStructures = blocks;
 | 
			
		||||
        } else {
 | 
			
		||||
            for (List<Structure.StructureBlockInfo> struct : blocks) {
 | 
			
		||||
                if (isValid(struct, pos)) {
 | 
			
		||||
                    eligibleStructures.add(struct);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (eligibleStructures.size() == 0)
 | 
			
		||||
            setIgnoreEntities(true);
 | 
			
		||||
        List<Structure.StructureBlockInfo> locs = super.method_15121(eligibleStructures, pos);
 | 
			
		||||
        if (!locs.isEmpty()) {
 | 
			
		||||
            List<Entity> entitiesWithinAABB = world.getNonSpectatingEntities(Entity.class, new Box(pos,pos.add(size)));
 | 
			
		||||
            for (Structure.StructureBlockInfo blockInfo : locs) {
 | 
			
		||||
                BlockPos posToClean = blockInfo.pos.add(pos);
 | 
			
		||||
                for (Entity e : entitiesWithinAABB) {
 | 
			
		||||
                    e.getBoundingBox().contains(new Vec3d(posToClean));
 | 
			
		||||
                    if (e.getBoundingBox().intersects(new Box(posToClean))) {
 | 
			
		||||
                        e.remove();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return locs;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isValid(List<Structure.StructureBlockInfo> struct, BlockPos pos) {
 | 
			
		||||
        for (Structure.StructureBlockInfo bi : struct) {
 | 
			
		||||
            BlockPos posToCheck = bi.pos.add(pos);
 | 
			
		||||
            if (World.isValid(posToCheck)) {
 | 
			
		||||
                Block blockToCheck = world.getBlockState(posToCheck).getBlock();
 | 
			
		||||
                for (Block b : blacklist) {
 | 
			
		||||
                    if (blockToCheck.equals(b)) {
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								src/main/java/quimufu/structure_item/StructureItemMod.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/main/java/quimufu/structure_item/StructureItemMod.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
package quimufu.structure_item;
 | 
			
		||||
 | 
			
		||||
import net.fabricmc.api.ModInitializer;
 | 
			
		||||
import net.minecraft.item.Item;
 | 
			
		||||
import net.minecraft.util.registry.Registry;
 | 
			
		||||
import org.apache.logging.log4j.Level;
 | 
			
		||||
import org.apache.logging.log4j.LogManager;
 | 
			
		||||
import org.apache.logging.log4j.Logger;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class StructureItemMod implements ModInitializer {
 | 
			
		||||
 | 
			
		||||
    public static Logger LOGGER = LogManager.getLogger();
 | 
			
		||||
 | 
			
		||||
    public static final String MOD_ID = "structure_item";
 | 
			
		||||
    public static final String MOD_NAME = "Structure Item Mod (Fabric)";
 | 
			
		||||
    public static final Item item = new MyItem();
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onInitialize() {
 | 
			
		||||
        log(Level.INFO, "Initializing");
 | 
			
		||||
        Registry.register(Registry.ITEM, MOD_ID + ":item", item);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void log(Level level, String message) {
 | 
			
		||||
        LOGGER.log(level, "[" + MOD_NAME + "] " + message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/assets/structure_item/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main/resources/assets/structure_item/icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 23 KiB  | 
							
								
								
									
										18
									
								
								src/main/resources/assets/structure_item/lang/en_us.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/main/resources/assets/structure_item/lang/en_us.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
  "items.structure.spawner.invalid.block.clicked": "Digga %s is net %s, maan.",
 | 
			
		||||
  "items.structure.spawner.invalid.location": "An irreplaceable block is in the way!",
 | 
			
		||||
  "items.structure.spawner.invalid.structure.name": "Invalid structure name",
 | 
			
		||||
  "items.structure.spawner.structure.nonexistent": "Structure: %s does not exist",
 | 
			
		||||
  "items.structure.spawner.invalid.block": "Block %s invalid",
 | 
			
		||||
  "items.structure.spawner.no.tag": "Item has no NBT tag",
 | 
			
		||||
  "items.structure.spawner.no.structure": "Item has no String \"structure\": tag",
 | 
			
		||||
  "item.structure_item.item": "Structure Spawner",
 | 
			
		||||
  "item.structure_item.item.tooltip.tag.invalid": "Invalid item!",
 | 
			
		||||
  "item.structure_item.item.tooltip.structure": "Places down: ",
 | 
			
		||||
  "item.structure_item.item.tooltip.allowed.on": "Can be placed on: ",
 | 
			
		||||
  "item.structure_item.item.tooltip.fixed.offset": "Offset:",
 | 
			
		||||
  "item.structure_item.item.tooltip.xyz":"  x: %s y: %s z: %s",
 | 
			
		||||
  "item.structure_item.item.tooltip.dynamic.offset": "Dynamic offset",
 | 
			
		||||
  "item.structure_item.item.tooltip.blacklist": "Blacklist:",
 | 
			
		||||
  "item.structure_item.item.tooltip.blacklist.more": "  And %s more..."
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "parent": "item/handheld",
 | 
			
		||||
    "textures": {
 | 
			
		||||
        "layer0": "item/stick"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								src/main/resources/fabric.mod.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/main/resources/fabric.mod.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
{
 | 
			
		||||
  "schemaVersion": 1,
 | 
			
		||||
  "id": "structure_item",
 | 
			
		||||
  "version": "${version}",
 | 
			
		||||
  "name": "Structure Item Mod (Fabric)",
 | 
			
		||||
  "description": "This mod adds an item, that, with proper NBT might help you build a modpack... maybe",
 | 
			
		||||
  "authors": [
 | 
			
		||||
    "QuImUfu"
 | 
			
		||||
  ],
 | 
			
		||||
  "contributors": [],
 | 
			
		||||
  "contact": {},
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "icon": "assets/structure_item/icon.png",
 | 
			
		||||
  "environment": "*",
 | 
			
		||||
  "entrypoints": {
 | 
			
		||||
    "main": [
 | 
			
		||||
      "quimufu.structure_item.StructureItemMod"
 | 
			
		||||
    ],
 | 
			
		||||
    "client": [],
 | 
			
		||||
    "server": []
 | 
			
		||||
  },
 | 
			
		||||
  "mixins": [],
 | 
			
		||||
  "depends": {
 | 
			
		||||
    "fabricloader": ">=0.4.0",
 | 
			
		||||
    "fabric": "*"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user