From 243b4f81d70e450eda2042cb82e416420f165e71 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 12:10:39 -0400 Subject: [PATCH 01/17] initial commit so I can start a pr --- change.log | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/change.log b/change.log index 7bf7337..cf943fd 100644 --- a/change.log +++ b/change.log @@ -1,3 +1,5 @@ +1.12.2 - Mar-2021 +- 1.12.2 update 1.8.r01 - 06-Mar-2015 - 1.8 update - removed retry attempts code (had potential to cause differing generation with the same seed on different world saves) @@ -112,7 +114,7 @@ - updated for 1.3.1 - added version checking 1.2.5.d - 20-May-2012 -- added code to reset the seed of the Random object passed in by ModLoader since it can't be guaranteed that another mod has not ­ed with it (I'm looking at YOU Better Dungeons...) +- added code to reset the seed of the Random object passed in by ModLoader since it can't be guaranteed that another mod has not ­ed with it (I'm looking at YOU Better Dungeons...) 1.2.3.c - 08-Mar-2012 - new config option for island radius variation - changed the dungeon frame blocks from bricks to stone bricks (I likes them better) @@ -121,4 +123,4 @@ - support for Jungle biome - support for y>127 1.2.3.a - 05-Mar-2012 -- initial 1.2.3 update \ No newline at end of file +- initial 1.2.3 update From 477cf2c364f5cd47bae55757be61ba6f405300eb Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 13:41:22 -0400 Subject: [PATCH 02/17] update gradle updated gradle and scripts. tried updating old files but would not work. going to re add important lines to build.gradle later, but this is necessary to even get the workspace setup --- build.gradle | 163 +++++++++++++---------- build.properties | 8 -- gradle.properties | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 51017 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 78 ++++++----- gradlew.bat | 14 +- 7 files changed, 142 insertions(+), 128 deletions(-) delete mode 100644 build.properties create mode 100644 gradle.properties diff --git a/build.gradle b/build.gradle index a09560e..31844f8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,100 +1,117 @@ buildscript { repositories { + maven { url = 'https://files.minecraftforge.net/maven' } + jcenter() mavenCentral() - maven { - name = "forge" - url = "http://files.minecraftforge.net/maven" - } - maven { - name = "sonatype" - url = "https://oss.sonatype.org/content/repositories/snapshots/" - } } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' + classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' } } + +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' -apply plugin: "forge" +version = '1.0' +group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = 'modid' -// define the properties file -ext.configFile = file "build.properties" +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. -configFile.withReader { - // read config. it shall from now on be referenced as simply config or as project.config - def prop = new Properties() - prop.load(it) - project.ext.config = new ConfigSlurper().parse prop -} +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: '20171003-1.12' + mappings channel: 'snapshot', version: '20171003-1.12' + // 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' -repositories { - ivy { - url "http://bspk.rs/MC" - layout "pattern", { - artifact "[module]/deobf/%5B${config.minecraft_version}%5D[module]-deobf-[revision].[ext]" - artifact "[module]/deobf/[${config.minecraft_version}][module]-deobf-[revision].[ext]" + // Recommended logging level for the console + property 'forge.logging.console.level', 'debug' + } + + server { + + // 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' } } } dependencies { - compile name: 'bspkrsCore', version: "${config.bscore_version}", ext: 'jar' -} + // 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.12.2-14.23.5.2854' -group = config.group_name -version = "${config.minecraft_version}.${config.mod_version}" -archivesBaseName = "[${config.minecraft_version}]${config.mod_id}" + // 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" -minecraft { - version = config.minecraft_version + "-" + config.forge_version // grab latest forge - mappings = config.mappings_version - runDir = "run" - replace '@MOD_VERSION@', "${config.minecraft_version}.${config.mod_version}" - replace '@BSCORE_VERSION@', config.bscore_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 -processResources { - // replace stuff in the files we want. - from(sourceSets.main.resources.srcDirs) { - include '**/*.info' - include '**/*.properties' - - // replaces - expand ([ - 'mod_version': version, - 'bscore_version': config.bscore_version, - 'bscore_jar': "[${config.minecraft_version}]bspkrsCore-universal-${config.bscore_version}.jar", - 'pattern': "\\\\[.+?\\\\](\\\\w+).*?([\\\\d\\\\.]+)[-\\\\w]*\\\\.[^\\\\d]+", - 'forge_version': config.forge_version, - 'minecraft_version': config.minecraft_version - ]) - } + // 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 - // copy everything else, thats we didnt do before - from(sourceSets.main.resources.srcDirs) { - exclude '**/*.info' - exclude '**/*.properties' - } } -// change the name of my obfuscated jar +// Example for how to get properties into the manifest for reading by the runtime.. jar { - appendix = config.appendix + manifest { + attributes([ + "Specification-Title": "examplemod", + "Specification-Vendor": "examplemodsareus", + "Specification-Version": "1", // We are version 1 of ourselves + "Implementation-Title": project.name, + "Implementation-Version": "${version}", + "Implementation-Vendor" :"examplemodsareus", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ]) + } } -// add a source jar -task sourceJar(type: Jar) { - from sourceSets.main.allSource - appendix = 'src' -} +// 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') -// because the normal output has been made to be obfuscated -task deobfJar(type: Jar) { - from sourceSets.main.output - appendix = 'deobf' +publishing { + publications { + mavenJava(MavenPublication) { + artifact jar + } + } + repositories { + maven { + url "file:///${project.projectDir}/mcmodsrepo" + } + } } - -artifacts { - archives sourceJar - archives deobfJar -} \ No newline at end of file diff --git a/build.properties b/build.properties deleted file mode 100644 index c04938a..0000000 --- a/build.properties +++ /dev/null @@ -1,8 +0,0 @@ -minecraft_version=1.8 -forge_version=11.14.1.1334 -mappings_version=stable_16 -mod_version=r01 -bscore_version=7.01 -mod_id=FloatingRuins -group_name=floatingruins -appendix=universal \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..878bf1f --- /dev/null +++ b/gradle.properties @@ -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 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index b7612167031001b7b84baf2a959e8ea8ad03c011..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 37083 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 E0Oax79smFU diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 678d9d8..949819d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed Jul 02 15:54:47 CDT 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip diff --git a/gradlew b/gradlew index 91a7e26..cccdd3d 100644 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# 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 ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# 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\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +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 @@ -114,6 +113,7 @@ fi 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` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +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" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282..f955316 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@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= - 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 @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line From 4e4a01dbd32cb81c40366e45ac49348126dbb8cc Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 18:17:28 -0400 Subject: [PATCH 03/17] add bspkrscore as dep in gradle. doesnt work, but it is there... --- build.gradle | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/build.gradle b/build.gradle index 31844f8..1ed7b0c 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,17 @@ archivesBaseName = 'modid' sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. +// TODO: this does not work. will need to add deobf to ivy repo, or convert to github call. currently have to manually add bspkrsCore as dep +//repositories { +// ivy { +// url "http://bspk.rs/MC" +// layout "pattern", { +// artifact "[module]/deobf/%5B1.12.2%5D[module]-deobf-[revision].[ext]" +// artifact "[module]/deobf/[1.12.2][module]-deobf-[revision].[ext]" +// } +// } +//} + minecraft { // The mappings can be changed at any time, and must be in the following format. // snapshot_YYYYMMDD Snapshot are built nightly. @@ -28,6 +39,7 @@ minecraft { // Simply re-run your setup task after changing the mappings to update your workspace. //mappings channel: 'snapshot', version: '20171003-1.12' mappings channel: 'snapshot', version: '20171003-1.12' +// compile name: 'bspkrsCore', version: "8.0.1", ext: 'jar' // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') From 4edc2fc82a8fcdb798b15bec95a431fddf68c5c1 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 18:49:58 -0400 Subject: [PATCH 04/17] sorted imports sorts the imports, removes unused ones, and potentially corrects broken ones where methods were moved --- src/main/java/bspkrs/floatingruins/CommandFRGen.java | 2 +- src/main/java/bspkrs/floatingruins/ConfigElement.java | 3 ++- src/main/java/bspkrs/floatingruins/FRLog.java | 5 ++--- src/main/java/bspkrs/floatingruins/FloatingRuins.java | 8 ++++---- .../bspkrs/floatingruins/WorldGenFloatingIsland.java | 8 ++++---- .../floatingruins/WorldGenFloatingIslandRuin.java | 8 ++++---- .../floatingruins/fml/DelayedWorldGenTicker.java | 2 +- .../bspkrs/floatingruins/fml/FloatingRuinsMod.java | 10 +++++----- .../bspkrs/floatingruins/fml/FloatingRuinsTicker.java | 2 +- .../floatingruins/fml/FloatingRuinsWorldGenerator.java | 2 +- .../java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java | 2 +- 11 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/CommandFRGen.java b/src/main/java/bspkrs/floatingruins/CommandFRGen.java index 8ce4276..e2ad177 100644 --- a/src/main/java/bspkrs/floatingruins/CommandFRGen.java +++ b/src/main/java/bspkrs/floatingruins/CommandFRGen.java @@ -6,7 +6,7 @@ import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; public class CommandFRGen extends CommandBase { diff --git a/src/main/java/bspkrs/floatingruins/ConfigElement.java b/src/main/java/bspkrs/floatingruins/ConfigElement.java index 5d1b836..7a1941c 100644 --- a/src/main/java/bspkrs/floatingruins/ConfigElement.java +++ b/src/main/java/bspkrs/floatingruins/ConfigElement.java @@ -3,8 +3,9 @@ import static net.minecraftforge.common.config.Property.Type.BOOLEAN; import static net.minecraftforge.common.config.Property.Type.INTEGER; import static net.minecraftforge.common.config.Property.Type.STRING; -import net.minecraftforge.common.config.Property; + import bspkrs.floatingruins.fml.Reference; +import net.minecraftforge.common.config.Property; public enum ConfigElement { diff --git a/src/main/java/bspkrs/floatingruins/FRLog.java b/src/main/java/bspkrs/floatingruins/FRLog.java index e50c3fc..bf6ee80 100644 --- a/src/main/java/bspkrs/floatingruins/FRLog.java +++ b/src/main/java/bspkrs/floatingruins/FRLog.java @@ -1,13 +1,12 @@ package bspkrs.floatingruins; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; - import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import bspkrs.util.CommonUtils; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; public enum FRLog { diff --git a/src/main/java/bspkrs/floatingruins/FloatingRuins.java b/src/main/java/bspkrs/floatingruins/FloatingRuins.java index 0a12dd6..6b04bd8 100644 --- a/src/main/java/bspkrs/floatingruins/FloatingRuins.java +++ b/src/main/java/bspkrs/floatingruins/FloatingRuins.java @@ -7,17 +7,17 @@ import java.util.Map.Entry; import java.util.Random; +import bspkrs.floatingruins.fml.Reference; +import bspkrs.util.CommonUtils; import net.minecraft.init.Blocks; import net.minecraft.init.Items; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraft.village.Village; import net.minecraft.world.World; import net.minecraft.world.WorldType; import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.common.registry.GameData; -import bspkrs.floatingruins.fml.Reference; -import bspkrs.util.CommonUtils; +import net.minecraftforge.registries.GameData; // Test Seed: 5460896710218081688 // 1470679938 (large biomes) diff --git a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java index 0e134d6..bac41ae 100644 --- a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java +++ b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java @@ -2,15 +2,15 @@ import java.util.Random; +import bspkrs.util.BlockNotifyType; +import bspkrs.util.CommonUtils; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; -import net.minecraftforge.fml.common.registry.GameData; -import bspkrs.util.BlockNotifyType; -import bspkrs.util.CommonUtils; +import net.minecraftforge.registries.GameData; public class WorldGenFloatingIsland extends WorldGenerator { diff --git a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java index 98e4b93..6939fff 100644 --- a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java +++ b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java @@ -5,6 +5,8 @@ import java.util.Locale; import java.util.Random; +import bspkrs.util.BlockNotifyType; +import bspkrs.util.CommonUtils; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.monster.EntitySlime; import net.minecraft.init.Blocks; @@ -15,16 +17,14 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntityChest; import net.minecraft.tileentity.TileEntityMobSpawner; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.BiomeDictionary.Type; import net.minecraftforge.common.ChestGenHooks; -import net.minecraftforge.fml.common.registry.GameData; -import bspkrs.util.BlockNotifyType; -import bspkrs.util.CommonUtils; +import net.minecraftforge.registries.GameData; public class WorldGenFloatingIslandRuin extends WorldGenerator { diff --git a/src/main/java/bspkrs/floatingruins/fml/DelayedWorldGenTicker.java b/src/main/java/bspkrs/floatingruins/fml/DelayedWorldGenTicker.java index e6e1491..656d1fd 100644 --- a/src/main/java/bspkrs/floatingruins/fml/DelayedWorldGenTicker.java +++ b/src/main/java/bspkrs/floatingruins/fml/DelayedWorldGenTicker.java @@ -2,8 +2,8 @@ import java.util.Random; -import net.minecraft.world.World; import bspkrs.floatingruins.FloatingRuins; +import net.minecraft.world.World; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; diff --git a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java index f0137a6..d835f36 100644 --- a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java +++ b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java @@ -2,6 +2,11 @@ import java.io.File; +import bspkrs.bspkrscore.fml.bspkrsCoreMod; +import bspkrs.floatingruins.FloatingRuins; +import bspkrs.util.CommonUtils; +import bspkrs.util.Const; +import bspkrs.util.ModVersionChecker; import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; @@ -15,11 +20,6 @@ import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; -import bspkrs.bspkrscore.fml.bspkrsCoreMod; -import bspkrs.floatingruins.FloatingRuins; -import bspkrs.util.CommonUtils; -import bspkrs.util.Const; -import bspkrs.util.ModVersionChecker; @Mod(modid = Reference.MODID, name = Reference.NAME, version = "@MOD_VERSION@", dependencies = "required-after:bspkrsCore@[@BSCORE_VERSION@,)", useMetadata = true, guiFactory = "bspkrs.floatingruins.fml.gui.ModGuiFactoryHandler") diff --git a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java index 922a622..a828e30 100644 --- a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java +++ b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java @@ -1,8 +1,8 @@ package bspkrs.floatingruins.fml; +import bspkrs.bspkrscore.fml.bspkrsCoreMod; import net.minecraft.client.Minecraft; import net.minecraft.util.ChatComponentText; -import bspkrs.bspkrscore.fml.bspkrsCoreMod; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; diff --git a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java index 2e6b2f9..0bb7a3a 100644 --- a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java +++ b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java @@ -2,10 +2,10 @@ import java.util.Random; +import bspkrs.floatingruins.FloatingRuins; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; import net.minecraftforge.fml.common.IWorldGenerator; -import bspkrs.floatingruins.FloatingRuins; public class FloatingRuinsWorldGenerator implements IWorldGenerator { diff --git a/src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java b/src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java index c1d6502..0b1718c 100644 --- a/src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java +++ b/src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java @@ -1,10 +1,10 @@ package bspkrs.floatingruins.fml.gui; +import bspkrs.floatingruins.fml.Reference; import net.minecraft.client.gui.GuiScreen; import net.minecraftforge.common.config.ConfigElement; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.client.config.GuiConfig; -import bspkrs.floatingruins.fml.Reference; public class GuiFRConfig extends GuiConfig { From 5829e6b0af4e0b97133d52fbf8ee644a444aca76 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 19:21:00 -0400 Subject: [PATCH 05/17] clean floatingruins.java part 1 todo: fix config generation at the bottom, need to convert to modname:itemname. verify: ambiguous corrected import; minecraftforge.fml.common.registry.GameData no longer exists. auto corrected to net.minecraftforge.registries.GameData this is an internal registry and should not be used. net.minecraftforge.fml.common.registry.GameRegistry is the closest to original version and may have necessary functions to correct. --- .../bspkrs/floatingruins/FloatingRuins.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/FloatingRuins.java b/src/main/java/bspkrs/floatingruins/FloatingRuins.java index 6b04bd8..7fbefe1 100644 --- a/src/main/java/bspkrs/floatingruins/FloatingRuins.java +++ b/src/main/java/bspkrs/floatingruins/FloatingRuins.java @@ -16,8 +16,11 @@ import net.minecraft.village.Village; import net.minecraft.world.World; import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.registries.GameData; +//import net.minecraftforge.registries.GameData; +import net.minecraftforge.fml.common.registry.GameRegistry; +//old: import net.minecraftforge.fml.common.registry.GameData; // Test Seed: 5460896710218081688 // 1470679938 (large biomes) @@ -279,7 +282,7 @@ public static void generateSurface(World world, Random random, int x, int z, boo { if (((world.getWorldInfo().getTerrainType() != WorldType.FLAT) || allowInSuperFlat)) { - if (!CommonUtils.isIDInList(world.provider.getDimensionId(), dimensionIDBlacklist)) + if (!CommonUtils.isIDInList(world.provider.getDimension(), dimensionIDBlacklist)) { random = getRandom(world, new BlockPos(x, 1, z)); int tgtY = getWeightedInt(heightMin, heightMean, heightMax, heightNorm, random); @@ -365,8 +368,8 @@ public static Random getRandom(World world, BlockPos pos) public static boolean isVillageNearby(World world, BlockPos pos, int radius) { FRLog.debug("Checking Villages..."); - if (world.villageCollectionObj != null) - for (Village village : (List) world.villageCollectionObj.getVillageList()) + if (world.villageCollection != null) + for (Village village : (List) world.villageCollection.getVillageList()) { if (Math.sqrt(village.getCenter().distanceSq(pos)) < (village.getVillageRadius() + radius)) return true; @@ -382,7 +385,7 @@ public static int getBlacklistBiomeIDWithinRange(World world, int x, int z, int BlockPos pos = new BlockPos(x, 64, z); EnumFacing[] NSEW = EnumFacing.values(); - int biomeID = world.getBiomeGenForCoords(pos).biomeID; + int biomeID = Biome.getIdForBiome(world.getBiome(pos)); if (CommonUtils.isIDInList(biomeID, biomeIDBlacklist)) return biomeID; @@ -390,7 +393,7 @@ public static int getBlacklistBiomeIDWithinRange(World world, int x, int z, int { for (int i = radius; i > 0; i = i - 2) { - biomeID = world.getBiomeGenForCoords(pos.offset(fd, i)).biomeID; + biomeID = Biome.getIdForBiome(world.getBiome(pos.offset(fd, i))); if (CommonUtils.isIDInList(biomeID, biomeIDBlacklist)) return biomeID; } @@ -400,7 +403,7 @@ public static int getBlacklistBiomeIDWithinRange(World world, int x, int z, int for (int ew = 2; ew < 4; ew++) for (int r = adjRadius; r > 0; r = r - 2) { - biomeID = world.getBiomeGenForCoords(pos.offset(NSEW[ns], r).offset(NSEW[ew], r)).biomeID; + biomeID = Biome.getIdForBiome(world.getBiome(pos.offset(NSEW[ns], r).offset(NSEW[ew], r))); if (CommonUtils.isIDInList(biomeID, biomeIDBlacklist)) return biomeID; } @@ -467,6 +470,7 @@ else if (choice >= (totalWeight - shapeStalactiteWeight - shapeJetsonsWeight - s return WorldGenFloatingIsland.SPHEROID; } + //TODO: i need to rework this entire section. need to switch this all over to modname:blockname possibly see net.minecraftforge.fml.common.registry.GameRegistry.findRegistry static { blockIDBlacklistDefault = GameData.getBlockRegistry().getNameForObject(Blocks.bedrock) + ";"; From 559acae3a0006ca73e2390d678b215381501e1d9 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 19:42:36 -0400 Subject: [PATCH 06/17] clean commandfrgen.java verify correct change to compareTo --- .../java/bspkrs/floatingruins/CommandFRGen.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/CommandFRGen.java b/src/main/java/bspkrs/floatingruins/CommandFRGen.java index e2ad177..57b7010 100644 --- a/src/main/java/bspkrs/floatingruins/CommandFRGen.java +++ b/src/main/java/bspkrs/floatingruins/CommandFRGen.java @@ -3,21 +3,23 @@ import java.util.Random; import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; public class CommandFRGen extends CommandBase { @Override - public String getCommandName() + public String getName() { return "frgen"; } @Override - public String getCommandUsage(ICommandSender icommandsender) + public String getUsage(ICommandSender icommandsender) { return "commands.frgen.usage"; } @@ -33,7 +35,7 @@ public int getRequiredPermissionLevel() * /frgen random */ @Override - public void processCommand(ICommandSender sender, String[] args) throws WrongUsageException + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws WrongUsageException { if (args.length == 1) { @@ -43,8 +45,8 @@ public void processCommand(ICommandSender sender, String[] args) throws WrongUsa { // TODO: fix apparent coordinate offset EntityPlayer player = (EntityPlayer) sender; - Random random = FloatingRuins.getRandom(player.worldObj, new BlockPos((int) player.posX, 0, (int) player.posZ)); - FloatingRuins.generateSurface(player.worldObj, random, (int) player.posX, (int) player.posZ, false); + Random random = FloatingRuins.getRandom(player.world, new BlockPos((int) player.posX, 0, (int) player.posZ)); + FloatingRuins.generateSurface(player.world, random, (int) player.posX, (int) player.posZ, false); } } else @@ -69,7 +71,7 @@ else if (args.length == 6) } @Override - public int compareTo(Object o) + public int compareTo(ICommand p_compareTo_1_) { // TODO Auto-generated method stub return 0; From e49da88315addc4b59f4ad47e8b212118134338a Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 19:50:27 -0400 Subject: [PATCH 07/17] clean worldGenFloatingIsland.java pass 1 again, only thing left is the registry problem --- .../floatingruins/WorldGenFloatingIsland.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java index bac41ae..6c1b97b 100644 --- a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java +++ b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java @@ -10,7 +10,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; -import net.minecraftforge.registries.GameData; +//import net.minecraftforge.registries.GameData; +import net.minecraftforge.fml.common.registry.GameRegistry; +//old: import net.minecraftforge.fml.common.registry.GameData; public class WorldGenFloatingIsland extends WorldGenerator { @@ -100,10 +102,10 @@ public boolean isTgtBlockPosReplaceable(World world, BlockPos tgt, if (!world.isBlockLoaded(tgt, false)) failureReason = "Chunk does not exist."; else if (!world.isAirBlock(tgt) - && !(allowNonAirSpecialBlocks && block.equals(Blocks.water)) + && !(allowNonAirSpecialBlocks && block.equals(Blocks.WATER)) && !(allowNonAirSpecialBlocks && !world.isBlockNormalCube(tgt, true)) && !(allowNonAirSpecialBlocks && block.isWood(world, tgt)) - && !(allowNonAirSpecialBlocks && block.isLeaves(world, tgt))) + && !(allowNonAirSpecialBlocks && block.isLeaves(state, world, tgt))) failureReason = "Block at target is not replaceable."; return failureReason.isEmpty(); @@ -174,14 +176,15 @@ && isBlockInRange(islandType, world, delta, depth, radius)) BlockPos tgt = tgtOrigin.add(delta); if (((y <= 0) - || (!block.equals(Blocks.water) && !block.equals(Blocks.flowing_water))) + || (!block.equals(Blocks.WATER) && !block.equals(Blocks.FLOWING_WATER))) + //TODO: again, have to fix getBlockRegistry && !CommonUtils.isIDInList(GameData.getBlockRegistry().getNameForObject(block).toString(), metadata, FloatingRuins.blockIDBlacklist)) { - if (block.equals(Blocks.mob_spawner)) + if (block.equals(Blocks.MOB_SPAWNER)) debug += "+S(" + tgt + ") "; - else if (block.equals(Blocks.chest)) + else if (block.equals(Blocks.CHEST)) debug += "+C(" + tgt + ") "; - else if ((y >= -8) && !isLavaNearby && (block.equals(Blocks.lava) || block.equals(Blocks.flowing_lava))) + else if ((y >= -8) && !isLavaNearby && (block.equals(Blocks.LAVA) || block.equals(Blocks.FLOWING_LAVA))) { isLavaNearby = true; debug += "+L "; @@ -204,7 +207,7 @@ else if ((y >= -8) && !isLavaNearby && (block.equals(Blocks.lava) || block.equal blocksMoved++; } - if ((random.nextInt(3) == 0) && block.equals(Blocks.stone) && (Math.abs(x) <= 1) && (Math.abs(z) <= 1) && (Math.abs(y + (depth / 4)) <= 2)) + if ((random.nextInt(3) == 0) && block.equals(Blocks.STONE) && (Math.abs(x) <= 1) && (Math.abs(z) <= 1) && (Math.abs(y + (depth / 4)) <= 2)) world.setBlockState(tgt, specialOre.getDefaultState(), BlockNotifyType.NONE); } } @@ -219,13 +222,13 @@ else if ((y >= -8) && !isLavaNearby && (block.equals(Blocks.lava) || block.equal IBlockState state = world.getBlockState(tgt); Block block = state.getBlock(); if (!world.isAirBlock(tgt) && world.isAirBlock(tgt.down())) - if (block.equals(Blocks.gravel)) - world.setBlockState(tgt, Blocks.stone.getDefaultState(), BlockNotifyType.ALL); - else if (block.equals(Blocks.sand)) + if (block.equals(Blocks.GRAVEL)) + world.setBlockState(tgt, Blocks.STONE.getDefaultState(), BlockNotifyType.ALL); + else if (block.equals(Blocks.SAND)) if (block.getMetaFromState(state) == 1) - world.setBlockState(tgt, Blocks.hardened_clay.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(tgt, Blocks.HARDENED_CLAY.getDefaultState(), BlockNotifyType.ALL); else - world.setBlockState(tgt, Blocks.sandstone.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(tgt, Blocks.SANDSTONE.getDefaultState(), BlockNotifyType.ALL); } debug += "Blocks Moved: " + blocksMoved + " (" + groundBlocksMoved + " at or below origin, " + blockNotifications + " block notifications)"; @@ -274,26 +277,26 @@ private Block getSpecialOre() switch (random.nextInt(8)) { case 0: - return Blocks.diamond_ore; + return Blocks.DIAMOND_ORE; case 1: - return Blocks.gold_ore; + return Blocks.GOLD_ORE; case 2: - return Blocks.iron_ore; + return Blocks.IRON_ORE; case 3: - return Blocks.lapis_ore; + return Blocks.LAPIS_ORE; case 4: - return Blocks.redstone_ore; + return Blocks.REDSTONE_ORE; case 5: - return Blocks.emerald_ore; + return Blocks.EMERALD_ORE; case 6: - return Blocks.iron_ore; + return Blocks.IRON_ORE; } - return Blocks.coal_ore; + return Blocks.COAL_ORE; } } \ No newline at end of file From 579d05bf28a58ac999985871d670be0808086a67 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 20:45:36 -0400 Subject: [PATCH 08/17] clean WorldGenFloatingIslandRuin.java pass 1 todo: figure out biome checker and loot table system --- .../WorldGenFloatingIslandRuin.java | 135 +++++++++--------- 1 file changed, 68 insertions(+), 67 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java index 6939fff..ea0a697 100644 --- a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java +++ b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java @@ -19,10 +19,11 @@ import net.minecraft.tileentity.TileEntityMobSpawner; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.biome.Biome; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.BiomeDictionary.Type; +//import net.minecraft.world.storage.loot.LootTable; import net.minecraftforge.common.ChestGenHooks; import net.minecraftforge.registries.GameData; @@ -105,11 +106,11 @@ private void setDungeon(World world, Random random, BlockPos pos) { BiomeGenBase biomegenbase = world.getWorldChunkManager().getBiomeGenerator(pos); IBlockState dungeonBlock = getDungeonBlock(biomegenbase); - if (dungeonBlock.equals(Blocks.snow.getDefaultState())) + if (dungeonBlock.equals(Blocks.SNOW.getDefaultState())) setIgloo(world, pos, 5, dungeonBlock); - else if (dungeonBlock.equals(Blocks.sandstone.getDefaultState())) + else if (dungeonBlock.equals(Blocks.SANDSTONE.getDefaultState())) setPyramid(world, pos, 6, dungeonBlock); - else if (dungeonBlock.equals(Blocks.red_mushroom_block.getDefaultState())) + else if (dungeonBlock.equals(Blocks.RED_MUSHROOM_BLOCK.getDefaultState())) CommonUtils.setHugeMushroom(world, random, pos, dungeonBlock); else setBox(world, random, pos, 4, 4, getDungeonBlock(biomegenbase)); @@ -120,11 +121,11 @@ else if (dungeonBlock.equals(Blocks.red_mushroom_block.getDefaultState())) private void setChest(World world, Random random, BlockPos pos) { - world.setBlockState(pos, Blocks.chest.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(pos, Blocks.CHEST.getDefaultState(), BlockNotifyType.ALL); TileEntityChest tileentitychest = (TileEntityChest) world.getTileEntity(pos); addItems(tileentitychest, random); - IBlockState blockingBlock = (FloatingRuins.harderDungeons ? Blocks.bedrock.getDefaultState() : Blocks.obsidian.getDefaultState()); + IBlockState blockingBlock = (FloatingRuins.harderDungeons ? Blocks.BEDROCK.getDefaultState() : Blocks.OBSIDIAN.getDefaultState()); world.setBlockState(pos.north(), blockingBlock, BlockNotifyType.ALL); world.setBlockState(pos.south(), blockingBlock, BlockNotifyType.ALL); @@ -133,15 +134,15 @@ private void setChest(World world, Random random, BlockPos pos) world.setBlockState(pos.down(), blockingBlock, BlockNotifyType.ALL); if (FloatingRuins.harderDungeons) - world.setBlockState(pos.up(), Blocks.obsidian.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(pos.up(), Blocks.OBSIDIAN.getDefaultState(), BlockNotifyType.ALL); else - world.setBlockState(pos.up(), Blocks.cobblestone.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(pos.up(), Blocks.COBBLESTONE.getDefaultState(), BlockNotifyType.ALL); } private void setSpawner(World world, BiomeGenBase biomegenbase, BlockPos pos) { - world.setBlockState(pos, Blocks.mob_spawner.getDefaultState(), BlockNotifyType.ALL); - IBlockState block = Blocks.obsidian.getDefaultState(); + world.setBlockState(pos, Blocks.MOB_SPAWNER.getDefaultState(), BlockNotifyType.ALL); + IBlockState block = Blocks.OBSIDIAN.getDefaultState(); world.setBlockState(pos.north(), block, BlockNotifyType.ALL); world.setBlockState(pos.south(), block, BlockNotifyType.ALL); @@ -150,8 +151,8 @@ private void setSpawner(World world, BiomeGenBase biomegenbase, BlockPos pos) world.setBlockState(pos.down(), block, BlockNotifyType.ALL); if (FloatingRuins.harderDungeons) { - world.setBlockState(pos.down(), Blocks.obsidian.getDefaultState(), BlockNotifyType.ALL); - world.setBlockState(pos.up(), Blocks.obsidian.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(pos.down(), Blocks.OBSIDIAN.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(pos.up(), Blocks.OBSIDIAN.getDefaultState(), BlockNotifyType.ALL); } TileEntityMobSpawner tileEntityMobSpawner = (TileEntityMobSpawner) world.getTileEntity(pos); @@ -355,36 +356,36 @@ private String applyEquipment(NBTTagList equipment, ArrayList 0) @@ -421,7 +422,7 @@ private ItemStack getItems(Random random) Item item = GameData.getItemRegistry().getObject(id); if (item == null) - item = Items.egg; + item = Items.EGG; if (!item.getHasSubtypes() && (meta != 0)) meta = 0; @@ -540,8 +541,8 @@ public void setBox(World world, Random random, BlockPos pos, int width, int heig BlockPos delta = pos.add(new BlockPos(x, y, z)); if ((y == height) || ((Math.abs(x) == width) && (Math.abs(z) == width) && (y >= 0))) { - world.setBlockState(delta, Blocks.stonebrick.getDefaultState(), BlockNotifyType.ALL); - world.setBlockState(delta.up(), (FloatingRuins.harderDungeons ? Blocks.bedrock.getDefaultState() : Blocks.stonebrick.getDefaultState()), BlockNotifyType.ALL); + world.setBlockState(delta, Blocks.STONEBRICK.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(delta.up(), (FloatingRuins.harderDungeons ? Blocks.BEDROCK.getDefaultState() : Blocks.STONEBRICK.getDefaultState()), BlockNotifyType.ALL); } if ((y >= 1) && ((Math.abs(x) == width) ^ (Math.abs(z) == width))) @@ -551,13 +552,13 @@ public void setBox(World world, Random random, BlockPos pos, int width, int heig world.setBlockToAir(delta); if ((y == -1) || (y == 0)) - world.setBlockState(delta, Blocks.stonebrick.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(delta, Blocks.STONEBRICK.getDefaultState(), BlockNotifyType.ALL); if (y < -1) { int yg = CommonUtils.getHighestGroundBlock(world, delta); if (((Math.abs(x) == width) || (Math.abs(z) == width)) && !world.isBlockNormalCube(delta, false) && (yg < (y + pos.getY())) && (yg >= (pos.getY() - height))) - world.setBlockState(delta, Blocks.stonebrick.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(delta, Blocks.STONEBRICK.getDefaultState(), BlockNotifyType.ALL); } } } @@ -575,17 +576,17 @@ private void setIgloo(World world, BlockPos pos, int range, IBlockState block) if (y >= 0) { if (dist == range) - world.setBlockState(delta, (FloatingRuins.harderDungeons && (y > 2) ? Blocks.bedrock.getDefaultState() : block), BlockNotifyType.ALL); + world.setBlockState(delta, (FloatingRuins.harderDungeons && (y > 2) ? Blocks.BEDROCK.getDefaultState() : block), BlockNotifyType.ALL); // For wolves if ((y == 0) && (dist < range)) - world.setBlockState(delta, Blocks.grass.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(delta, Blocks.GRASS.getDefaultState(), BlockNotifyType.ALL); if ((y > 0) && (dist < range)) { world.setBlockToAir(delta); if (y == 1) - world.setBlockState(delta, Blocks.snow_layer.getDefaultState(), BlockNotifyType.ALL); + world.setBlockState(delta, Blocks.SNOW_LAYER.getDefaultState(), BlockNotifyType.ALL); } } else @@ -611,7 +612,7 @@ private void setPyramid(World world, BlockPos pos, int range, IBlockState block) if (y >= 0) { if (((Math.abs(x) == (range - y)) && (Math.abs(x) >= Math.abs(z))) || ((Math.abs(z) == (range - y)) && (Math.abs(z) >= Math.abs(x))) || (y == 0)) - world.setBlockState(delta, (FloatingRuins.harderDungeons && (y > 2) ? Blocks.bedrock.getDefaultState() : block), BlockNotifyType.ALL); + world.setBlockState(delta, (FloatingRuins.harderDungeons && (y > 2) ? Blocks.BEDROCK.getDefaultState() : block), BlockNotifyType.ALL); else if (((Math.abs(x) < (range - y)) && (Math.abs(x) >= Math.abs(z))) || ((Math.abs(z) < (range - y)) && (Math.abs(z) >= Math.abs(x)))) world.setBlockToAir(delta); } @@ -629,40 +630,40 @@ else if (((Math.abs(x) < (range - y)) && (Math.abs(x) >= Math.abs(z))) || ((Math static { - helmWeights.add(new SimpleEntry(new ItemStack(Items.leather_helmet, 1, 0), 3)); - helmWeights.add(new SimpleEntry(new ItemStack(Items.iron_helmet, 1, 0), 7)); - helmWeights.add(new SimpleEntry(new ItemStack(Items.chainmail_helmet, 1, 0), 9)); - helmWeights.add(new SimpleEntry(new ItemStack(Items.golden_helmet, 1, 0), 12)); - helmWeights.add(new SimpleEntry(new ItemStack(Items.diamond_helmet, 1, 0), 16)); - - plateWeights.add(new SimpleEntry(new ItemStack(Items.leather_chestplate, 1, 0), 3)); - plateWeights.add(new SimpleEntry(new ItemStack(Items.iron_chestplate, 1, 0), 7)); - plateWeights.add(new SimpleEntry(new ItemStack(Items.chainmail_chestplate, 1, 0), 9)); - plateWeights.add(new SimpleEntry(new ItemStack(Items.golden_chestplate, 1, 0), 12)); - plateWeights.add(new SimpleEntry(new ItemStack(Items.diamond_chestplate, 1, 0), 16)); - - leggingWeights.add(new SimpleEntry(new ItemStack(Items.leather_leggings, 1, 0), 3)); - leggingWeights.add(new SimpleEntry(new ItemStack(Items.iron_leggings, 1, 0), 7)); - leggingWeights.add(new SimpleEntry(new ItemStack(Items.chainmail_leggings, 1, 0), 9)); - leggingWeights.add(new SimpleEntry(new ItemStack(Items.golden_leggings, 1, 0), 12)); - leggingWeights.add(new SimpleEntry(new ItemStack(Items.diamond_leggings, 1, 0), 16)); - - bootWeights.add(new SimpleEntry(new ItemStack(Items.leather_boots, 1, 0), 3)); - bootWeights.add(new SimpleEntry(new ItemStack(Items.iron_boots, 1, 0), 7)); - bootWeights.add(new SimpleEntry(new ItemStack(Items.chainmail_boots, 1, 0), 9)); - bootWeights.add(new SimpleEntry(new ItemStack(Items.golden_boots, 1, 0), 12)); - bootWeights.add(new SimpleEntry(new ItemStack(Items.diamond_boots, 1, 0), 16)); - - skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.bow, 1, 0), 46)); - skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.iron_sword, 1, 0), 11)); - skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.diamond_sword, 1, 0), 2)); - skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.golden_sword, 1, 0), 5)); - - zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.stone_sword, 1, 0), 10)); - zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.diamond_sword, 1, 0), 4)); - zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.golden_sword, 1, 0), 10)); - zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.wooden_sword, 1, 0), 5)); - zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.iron_sword, 1, 0), 11)); + helmWeights.add(new SimpleEntry(new ItemStack(Items.LEATHER_HELMET, 1, 0), 3)); + helmWeights.add(new SimpleEntry(new ItemStack(Items.IRON_HELMET, 1, 0), 7)); + helmWeights.add(new SimpleEntry(new ItemStack(Items.CHAINMAIL_HELMET, 1, 0), 9)); + helmWeights.add(new SimpleEntry(new ItemStack(Items.GOLDEN_HELMET, 1, 0), 12)); + helmWeights.add(new SimpleEntry(new ItemStack(Items.DIAMOND_HELMET, 1, 0), 16)); + + plateWeights.add(new SimpleEntry(new ItemStack(Items.LEATHER_CHESTPLATE, 1, 0), 3)); + plateWeights.add(new SimpleEntry(new ItemStack(Items.IRON_CHESTPLATE, 1, 0), 7)); + plateWeights.add(new SimpleEntry(new ItemStack(Items.CHAINMAIL_CHESTPLATE, 1, 0), 9)); + plateWeights.add(new SimpleEntry(new ItemStack(Items.GOLDEN_CHESTPLATE, 1, 0), 12)); + plateWeights.add(new SimpleEntry(new ItemStack(Items.DIAMOND_CHESTPLATE, 1, 0), 16)); + + leggingWeights.add(new SimpleEntry(new ItemStack(Items.LEATHER_LEGGINGS, 1, 0), 3)); + leggingWeights.add(new SimpleEntry(new ItemStack(Items.IRON_LEGGINGS, 1, 0), 7)); + leggingWeights.add(new SimpleEntry(new ItemStack(Items.CHAINMAIL_LEGGINGS, 1, 0), 9)); + leggingWeights.add(new SimpleEntry(new ItemStack(Items.GOLDEN_LEGGINGS, 1, 0), 12)); + leggingWeights.add(new SimpleEntry(new ItemStack(Items.DIAMOND_LEGGINGS, 1, 0), 16)); + + bootWeights.add(new SimpleEntry(new ItemStack(Items.LEATHER_BOOTS, 1, 0), 3)); + bootWeights.add(new SimpleEntry(new ItemStack(Items.IRON_BOOTS, 1, 0), 7)); + bootWeights.add(new SimpleEntry(new ItemStack(Items.CHAINMAIL_BOOTS, 1, 0), 9)); + bootWeights.add(new SimpleEntry(new ItemStack(Items.GOLDEN_BOOTS, 1, 0), 12)); + bootWeights.add(new SimpleEntry(new ItemStack(Items.DIAMOND_BOOTS, 1, 0), 16)); + + skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.BOW, 1, 0), 46)); + skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.IRON_SWORD, 1, 0), 11)); + skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.DIAMOND_SWORD, 1, 0), 2)); + skelWeapWeights.add(new SimpleEntry(new ItemStack(Items.GOLDEN_SWORD, 1, 0), 5)); + + zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.STONE_SWORD, 1, 0), 10)); + zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.DIAMOND_SWORD, 1, 0), 4)); + zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.GOLDEN_SWORD, 1, 0), 10)); + zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.WOODEN_SWORD, 1, 0), 5)); + zombWeapWeights.add(new SimpleEntry(new ItemStack(Items.IRON_SWORD, 1, 0), 11)); allowedCtgys = new String[] { // ChestGenHooks.BONUS_CHEST, From c837c2f1c8483fb249c834cabf5ecc7c790abbcd Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 20:51:12 -0400 Subject: [PATCH 09/17] clean floatingRuinsWorldGenerator.java simple --- .../floatingruins/fml/FloatingRuinsWorldGenerator.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java index 0bb7a3a..76389e7 100644 --- a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java +++ b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsWorldGenerator.java @@ -5,6 +5,7 @@ import bspkrs.floatingruins.FloatingRuins; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; import net.minecraftforge.fml.common.IWorldGenerator; public class FloatingRuinsWorldGenerator implements IWorldGenerator @@ -13,11 +14,11 @@ public FloatingRuinsWorldGenerator() {} @Override - public void generate(Random random, int x, int z, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) + public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { if (FloatingRuins.enabled) - FloatingRuins.generateSurface(world, random, x << 4, z << 4, true); - //new DelayedWorldGenTicker(10, world, random, x << 4, z << 4); + FloatingRuins.generateSurface(world, random, chunkX << 4, chunkZ << 4, true); + //new DelayedWorldGenTicker(10, world, random, chunkX << 4, chunkZ << 4); } } From 0bbb4280443219d8742349ec2c664f20dc31e0d1 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 21:07:46 -0400 Subject: [PATCH 10/17] clean FloatingRuinsTicker --- .../java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java index a828e30..18411b2 100644 --- a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java +++ b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsTicker.java @@ -2,7 +2,7 @@ import bspkrs.bspkrscore.fml.bspkrsCoreMod; import net.minecraft.client.Minecraft; -import net.minecraft.util.ChatComponentText; +import net.minecraft.util.text.TextComponentString; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -30,14 +30,14 @@ public void onTick(ClientTickEvent event) if (event.phase.equals(Phase.START)) return; - boolean keepTicking = !(mcClient != null && mcClient.thePlayer != null && mcClient.theWorld != null); + boolean keepTicking = !(mcClient != null && mcClient.player != null && mcClient.world != null); if (!keepTicking && isRegistered) { if (bspkrsCoreMod.instance.allowUpdateCheck && FloatingRuinsMod.instance.versionChecker != null) if (!FloatingRuinsMod.instance.versionChecker.isCurrentVersion()) for (String msg : FloatingRuinsMod.instance.versionChecker.getInGameMessage()) - mcClient.thePlayer.addChatMessage(new ChatComponentText(msg)); + mcClient.player.sendMessage(new TextComponentString(msg)); FMLCommonHandler.instance().bus().unregister(this); isRegistered = false; From 5f76224ffce4cfcb195bc945329b8e85a0376bb5 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 21:55:10 -0400 Subject: [PATCH 11/17] clean modGuiFactoryHandler.java and delete GuiFRConfig.java see comments --- .../floatingruins/fml/gui/GuiFRConfig.java | 16 -------- .../fml/gui/ModGuiFactoryHandler.java | 40 ++++++++++++++++--- 2 files changed, 34 insertions(+), 22 deletions(-) delete mode 100644 src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java diff --git a/src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java b/src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java deleted file mode 100644 index 0b1718c..0000000 --- a/src/main/java/bspkrs/floatingruins/fml/gui/GuiFRConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package bspkrs.floatingruins.fml.gui; - -import bspkrs.floatingruins.fml.Reference; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.common.config.ConfigElement; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.client.config.GuiConfig; - -public class GuiFRConfig extends GuiConfig -{ - public GuiFRConfig(GuiScreen parent) - { - super(parent, (new ConfigElement(Reference.config.getCategory(Configuration.CATEGORY_GENERAL))).getChildElements(), - Reference.MODID, false, false, GuiConfig.getAbridgedConfigPath(Reference.config.toString())); - } -} diff --git a/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java b/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java index 151fd20..82ca203 100644 --- a/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java +++ b/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java @@ -2,9 +2,13 @@ import java.util.Set; +import bspkrs.floatingruins.fml.Reference; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.client.config.GuiConfig; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Configuration; public class ModGuiFactoryHandler implements IModGuiFactory { @@ -15,20 +19,44 @@ public void initialize(Minecraft minecraftInstance) } @Override - public Class mainConfigGuiClass() + public boolean hasConfigGui() { - return GuiFRConfig.class; + return true; } - + @Override - public Set runtimeGuiCategories() + public GuiScreen createConfigGui(GuiScreen parentScreen) { - return null; + return new ConfigGui(parentScreen); + } + + public static class ConfigGui extends GuiConfig + { + public ConfigGui(GuiScreen parent) + { + super(parent, (new ConfigElement(Reference.config.getCategory(Configuration.CATEGORY_GENERAL))).getChildElements(), + Reference.MODID, false, false, GuiConfig.getAbridgedConfigPath(Reference.config.toString())); + } } + + //unfortunantly this was removed. it seems the contents of guiFRConfig needs to be moved in here... +// @Override +// public Class mainConfigGuiClass() +// { +// return GuiFRConfig.class; +// } @Override - public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) + public Set runtimeGuiCategories() { return null; } + + // unable to find a use for this method, cant find any reference to getHandlerFor() in old versions of forge + // deprecated in 1.11.2? +// @Override +// public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) +// { +// return null; +// } } From 322ae1385fa7948fc6584b7b6a01842040c17050 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 21:57:01 -0400 Subject: [PATCH 12/17] sort imports again, just like it clean --- .../java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java | 1 - .../bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java index ea0a697..ff9e83e 100644 --- a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java +++ b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java @@ -19,7 +19,6 @@ import net.minecraft.tileentity.TileEntityMobSpawner; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.biome.Biome; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.BiomeDictionary.Type; diff --git a/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java b/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java index 82ca203..42c2b4b 100644 --- a/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java +++ b/src/main/java/bspkrs/floatingruins/fml/gui/ModGuiFactoryHandler.java @@ -5,10 +5,10 @@ import bspkrs.floatingruins.fml.Reference; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.client.IModGuiFactory; -import net.minecraftforge.fml.client.config.GuiConfig; import net.minecraftforge.common.config.ConfigElement; import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.client.config.GuiConfig; public class ModGuiFactoryHandler implements IModGuiFactory { From ec9a1ca6b694369946a22a4b1b86deb92b336fba Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Sun, 28 Mar 2021 22:03:06 -0400 Subject: [PATCH 13/17] oops, almost forgot this one... --- src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java index d835f36..1be0cc0 100644 --- a/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java +++ b/src/main/java/bspkrs/floatingruins/fml/FloatingRuinsMod.java @@ -88,7 +88,7 @@ public void serverStarting(FMLServerStartingEvent event) @SubscribeEvent public void onConfigChanged(OnConfigChangedEvent event) { - if (event.modID.equals(Reference.MODID)) + if (event.getModID().equals(Reference.MODID)) { Reference.config.save(); FloatingRuins.syncConfig(false); From f1b4c2806ca89a9a33d364210a8837b2a7a61709 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Mon, 29 Mar 2021 00:01:59 -0400 Subject: [PATCH 14/17] added version info --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 1ed7b0c..037d7ce 100644 --- a/build.gradle +++ b/build.gradle @@ -14,9 +14,9 @@ apply plugin: 'net.minecraftforge.gradle' apply plugin: 'eclipse' apply plugin: 'maven-publish' -version = '1.0' -group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = 'modid' +version = '1.12.2.a01' +group = 'floatingruins' // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = '[1.12.2]FloatingRuins' sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. From 9d064389d883b5c1b8812947d6c1eeca778d079c Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Mon, 29 Mar 2021 21:06:56 -0400 Subject: [PATCH 15/17] this will not resolve... --- build.gradle | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 037d7ce..1ffaee8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,16 @@ buildscript { repositories { maven { url = 'https://files.minecraftforge.net/maven' } + maven { + url "https://www.cursemaven.com" + } +// maven { +// name = "CurseForge" +// url = "https://minecraft.curseforge.com/api/maven/" +// } jcenter() mavenCentral() + } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' @@ -39,7 +47,7 @@ minecraft { // Simply re-run your setup task after changing the mappings to update your workspace. //mappings channel: 'snapshot', version: '20171003-1.12' mappings channel: 'snapshot', version: '20171003-1.12' -// compile name: 'bspkrsCore', version: "8.0.1", ext: 'jar' + // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') @@ -81,7 +89,8 @@ dependencies { // 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 - + compile 'curse.maven:bspkrscore-59218:2996325' +// compile 'bspkrscore:[1.12.2]bspkrscore:8.0.1' // 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' From 19bcf8e7ebac6573e74c71cfa3f01b18aa276803 Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Mon, 29 Mar 2021 22:51:52 -0400 Subject: [PATCH 16/17] think I fixed the trouble with items. got to test it once I can compile --- .../bspkrs/floatingruins/FloatingRuins.java | 77 ++++++++++--------- .../floatingruins/WorldGenFloatingIsland.java | 6 +- .../WorldGenFloatingIslandRuin.java | 4 +- 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/src/main/java/bspkrs/floatingruins/FloatingRuins.java b/src/main/java/bspkrs/floatingruins/FloatingRuins.java index 7fbefe1..703a3fa 100644 --- a/src/main/java/bspkrs/floatingruins/FloatingRuins.java +++ b/src/main/java/bspkrs/floatingruins/FloatingRuins.java @@ -19,7 +19,7 @@ import net.minecraft.world.biome.Biome; import net.minecraftforge.common.config.Configuration; //import net.minecraftforge.registries.GameData; -import net.minecraftforge.fml.common.registry.GameRegistry; +//proper?: import net.minecraftforge.fml.common.registry.GameRegistry; //old: import net.minecraftforge.fml.common.registry.GameData; // Test Seed: 5460896710218081688 @@ -471,45 +471,46 @@ else if (choice >= (totalWeight - shapeStalactiteWeight - shapeJetsonsWeight - s } //TODO: i need to rework this entire section. need to switch this all over to modname:blockname possibly see net.minecraftforge.fml.common.registry.GameRegistry.findRegistry + // dont know if this works, but i hope it does static { - blockIDBlacklistDefault = GameData.getBlockRegistry().getNameForObject(Blocks.bedrock) + ";"; - stringOfIdsDefault = GameData.getItemRegistry().getNameForObject(Items.arrow) + ", 10; " + - GameData.getItemRegistry().getNameForObject(Items.arrow) + ", 16; " + - GameData.getItemRegistry().getNameForObject(Items.coal) + ", 6; " + - GameData.getItemRegistry().getNameForObject(Items.diamond) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.iron_ingot) + ", 3; " + - GameData.getItemRegistry().getNameForObject(Items.gold_ingot) + ", 2; " + - GameData.getItemRegistry().getNameForObject(Items.mushroom_stew) + ", 2; " + - GameData.getItemRegistry().getNameForObject(Items.feather) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.chainmail_helmet) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.chainmail_chestplate) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.chainmail_leggings) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.chainmail_boots) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.painting) + ", 2; " + - GameData.getItemRegistry().getNameForObject(Items.painting) + ", 5; " + - GameData.getItemRegistry().getNameForObject(Items.golden_apple) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.golden_apple) + ", 3; " + - GameData.getItemRegistry().getNameForObject(Items.bucket) + ", 2; " + - GameData.getItemRegistry().getNameForObject(Items.lava_bucket) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.milk_bucket) + ", 1; " + - GameData.getItemRegistry().getNameForObject(Items.book) + ", 4; " + - GameData.getItemRegistry().getNameForObject(Items.slime_ball) + ", 6; " + - GameData.getItemRegistry().getNameForObject(Items.egg) + ", 4; " + - GameData.getItemRegistry().getNameForObject(Items.egg) + ", 8; " + - GameData.getItemRegistry().getNameForObject(Items.glowstone_dust) + ", 12; " + - GameData.getItemRegistry().getNameForObject(Items.glowstone_dust) + ", 8; " + - GameData.getItemRegistry().getNameForObject(Items.cooked_fish) + ", 3; " + - GameData.getItemRegistry().getNameForObject(Items.dye) + ", 5, 0; " + - GameData.getItemRegistry().getNameForObject(Items.cake) + ", 2; " + - GameData.getItemRegistry().getNameForObject(Items.blaze_rod) + ", 2; " + - GameData.getItemRegistry().getNameForObject(Items.nether_wart) + ", 6; " + - GameData.getItemRegistry().getNameForObject(Items.emerald) + ", 4; " + - GameData.getItemRegistry().getNameForObject(Items.emerald) + ", 6; " + - GameData.getItemRegistry().getNameForObject(Items.quartz) + ", 6; " + - GameData.getItemRegistry().getNameForObject(Items.map) + ", 1; " + - GameData.getBlockRegistry().getNameForObject(Blocks.obsidian) + ", 4; " + - GameData.getBlockRegistry().getNameForObject(Blocks.ice) + ", 3;"; + blockIDBlacklistDefault = Blocks.BEDROCK.toString() + ";"; + stringOfIdsDefault = Items.ARROW.toString() + ", 10; " + + Items.ARROW.toString() + ", 16; " + + Items.COAL.toString() + ", 6; " + + Items.DIAMOND.toString() + ", 1; " + + Items.IRON_INGOT.toString() + ", 3; " + + Items.GOLD_INGOT.toString() + ", 2; " + + Items.MUSHROOM_STEW.toString() + ", 2; " + + Items.FEATHER.toString() + ", 1; " + + Items.CHAINMAIL_HELMET.toString() + ", 1; " + + Items.CHAINMAIL_CHESTPLATE.toString() + ", 1; " + + Items.CHAINMAIL_LEGGINGS.toString() + ", 1; " + + Items.CHAINMAIL_BOOTS.toString() + ", 1; " + + Items.PAINTING.toString() + ", 2; " + + Items.PAINTING.toString() + ", 5; " + + Items.GOLDEN_APPLE.toString() + ", 1; " + + Items.GOLDEN_APPLE.toString() + ", 3; " + + Items.BUCKET.toString() + ", 2; " + + Items.LAVA_BUCKET.toString() + ", 1; " + + Items.MILK_BUCKET.toString() + ", 1; " + + Items.BOOK.toString() + ", 4; " + + Items.SLIME_BALL.toString() + ", 6; " + + Items.EGG.toString() + ", 4; " + + Items.EGG.toString() + ", 8; " + + Items.GLOWSTONE_DUST.toString() + ", 12; " + + Items.GLOWSTONE_DUST.toString() + ", 8; " + + Items.COOKED_FISH.toString() + ", 3; " + + Items.DYE.toString() + ", 5, 0; " + + Items.CAKE.toString() + ", 2; " + + Items.BLAZE_ROD.toString() + ", 2; " + + Items.NETHER_WART.toString() + ", 6; " + + Items.EMERALD.toString() + ", 4; " + + Items.EMERALD.toString() + ", 6; " + + Items.QUARTZ.toString() + ", 6; " + + Items.MAP.toString() + ", 1; " + + Blocks.OBSIDIAN.toString() + ", 4; " + + Blocks.ICE.toString() + ", 3;"; } } diff --git a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java index 6c1b97b..be7902b 100644 --- a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java +++ b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIsland.java @@ -11,7 +11,7 @@ import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; //import net.minecraftforge.registries.GameData; -import net.minecraftforge.fml.common.registry.GameRegistry; +//proper?: import net.minecraftforge.fml.common.registry.GameRegistry; //old: import net.minecraftforge.fml.common.registry.GameData; public class WorldGenFloatingIsland extends WorldGenerator @@ -173,12 +173,14 @@ && isBlockInRange(islandType, world, delta, depth, radius)) IBlockState state = world.getBlockState(src); Block block = state.getBlock(); int metadata = block.getMetaFromState(state); + String SBlock = block.toString(); BlockPos tgt = tgtOrigin.add(delta); if (((y <= 0) || (!block.equals(Blocks.WATER) && !block.equals(Blocks.FLOWING_WATER))) //TODO: again, have to fix getBlockRegistry - && !CommonUtils.isIDInList(GameData.getBlockRegistry().getNameForObject(block).toString(), metadata, FloatingRuins.blockIDBlacklist)) + // i think it is fixed, i need to test it once i can compile + && !CommonUtils.isIDInList(SBlock, metadata, FloatingRuins.blockIDBlacklist)) { if (block.equals(Blocks.MOB_SPAWNER)) debug += "+S(" + tgt + ") "; diff --git a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java index ff9e83e..b4edb70 100644 --- a/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java +++ b/src/main/java/bspkrs/floatingruins/WorldGenFloatingIslandRuin.java @@ -406,7 +406,7 @@ private void addItems(TileEntityChest tileentitychest, Random random) private ItemStack getItems(Random random) { String itemStack[] = stringOfIds.split(";")[random.nextInt(stringOfIds.split(";").length)].split(","); - String id = GameData.getItemRegistry().getNameForObject(Items.EGG).toString(); + String id = Items.EGG.toString(); int size = 1; int meta = 0; if (itemStack.length > 0) @@ -418,7 +418,7 @@ private ItemStack getItems(Random random) if (itemStack.length > 2) meta = CommonUtils.parseInt(itemStack[2].trim()); - Item item = GameData.getItemRegistry().getObject(id); + Item item = Item.getByNameOrId(id); if (item == null) item = Items.EGG; From 709a5ebf9751227d296cc218aad62ea97f555ddf Mon Sep 17 00:00:00 2001 From: Aaronstar-McClure Date: Tue, 30 Mar 2021 13:24:41 -0400 Subject: [PATCH 17/17] finally got the dep import figured out turns out there was an extra step not in the instructions where i had to add a gradle plugin... --- build.gradle | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 1ffaee8..f81aff0 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,8 @@ buildscript { repositories { maven { url = 'https://files.minecraftforge.net/maven' } - maven { - url "https://www.cursemaven.com" - } // maven { -// name = "CurseForge" -// url = "https://minecraft.curseforge.com/api/maven/" +// url "https://www.cursemaven.com" // } jcenter() mavenCentral() @@ -16,6 +12,10 @@ buildscript { classpath 'net.minecraftforge.gradle:ForgeGradle:3.+' } } +// this adds support for grabbing bspkrscore from curse +plugins { +id "com.wynprice.cursemaven" version "2.1.1" +} apply plugin: 'net.minecraftforge.gradle' // Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. @@ -89,8 +89,8 @@ dependencies { // 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 - compile 'curse.maven:bspkrscore-59218:2996325' -// compile 'bspkrscore:[1.12.2]bspkrscore:8.0.1' + compile "curse.maven:bspkrscore-59218:2996325" + // 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'