From a4f26e843ddb0294be0ad88df110e93f23a16164 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 4 Dec 2021 16:01:48 +0300 Subject: [PATCH 01/93] Gradle changes --- build.gradle | 4 ++-- gradle.properties | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 9ced02573..9fe219d50 100644 --- a/build.gradle +++ b/build.gradle @@ -11,8 +11,8 @@ plugins { id 'maven-publish' } -sourceCompatibility = JavaVersion.VERSION_16 -targetCompatibility = JavaVersion.VERSION_16 +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 archivesBaseName = project.archives_base_name version = project.mod_version diff --git a/gradle.properties b/gradle.properties index 28163db3d..17ebbe290 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,14 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx2G + # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version=1.17.1 +minecraft_version=1.18 yarn_mappings=6 loader_version=0.12.4 + # Mod Properties -mod_version=0.12.5 +mod_version=1.0.0 maven_group=ru.betterend archives_base_name=better-end @@ -14,7 +16,7 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -fabric_version = 0.42.1+1.17 -bclib_version = 0.5.4 -rei_version = 6.0.264-alpha +fabric_version = 0.44.0+1.18 +bclib_version = 1.0.1 +rei_version = 7.0.343 canvas_version = 1.0.+ From c88745c7fee44b2592a1f73d82dcb014f6cf4585 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 4 Dec 2021 14:07:15 +0100 Subject: [PATCH 02/93] gradlew update to 7.3 --- gradle/wrapper/gradle-wrapper.jar | Bin 58694 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 ++++++++++++++--------- gradlew.bat | 22 +- 4 files changed, 159 insertions(+), 122 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 490fda8577df6c95960ba7077c43220e5bb2c0d9..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18415 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 Urq<#=aDw0M@QwXVor~800LZTgC;$Ke delta 17336 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 N`17riu>%}n>@TnYCZ_-Z diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 69a971507..e750102e0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 2fe81a7d9..1b6c78733 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,113 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # 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 +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${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" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # 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 - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | 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" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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 @@ -105,79 +140,95 @@ 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 +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac 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 +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; 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 +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # 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\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg 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; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# 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" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 9109989e3..ac1b06f93 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,28 +64,14 @@ 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% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell From f16f116b7f3b93e9407a04e75e9318cb7953f909 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 4 Dec 2021 14:10:32 +0100 Subject: [PATCH 03/93] version updates --- build.gradle | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 9fe219d50..95dfe4834 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { plugins { id 'idea' id 'eclipse' - id 'fabric-loom' version '0.8-SNAPSHOT' + id 'fabric-loom' version '0.10-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index 17ebbe290..359b756cd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2G # check these on https://fabricmc.net/use minecraft_version=1.18 yarn_mappings=6 -loader_version=0.12.4 +loader_version=0.12.8 # Mod Properties mod_version=1.0.0 From 6671b43cacc773eea70733df1d36927e31e3a0c3 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 4 Dec 2021 14:24:53 +0100 Subject: [PATCH 04/93] pull loom version to ptoperties --- build.gradle | 2 +- gradle.properties | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 95dfe4834..ca626f614 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { plugins { id 'idea' id 'eclipse' - id 'fabric-loom' version '0.10-SNAPSHOT' + id 'fabric-loom' version "${loom_version}" id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index 359b756cd..582b8428e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,9 @@ minecraft_version=1.18 yarn_mappings=6 loader_version=0.12.8 +#Loom +loom_version=0.10-SNAPSHOT + # Mod Properties mod_version=1.0.0 maven_group=ru.betterend From c2ca3f396b786ddd29fe59af4f634084236b4b36 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 5 Dec 2021 00:34:26 +0100 Subject: [PATCH 05/93] Fixed deprecated property --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ca626f614..7e53b9c5e 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ repositories { dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings minecraft.officialMojangMappings() + mappings loom.officialMojangMappings() modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" From 2367b5d5be09724fe2f18214f8b60b5f44e56591 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 05:51:51 +0300 Subject: [PATCH 06/93] Partial API calls fixes --- README.md | 4 +- .../blocks/entities/PedestalBlockEntity.java | 9 ++-- .../ru/betterend/entity/CubozoaEntity.java | 2 +- .../ru/betterend/entity/EndFishEntity.java | 2 +- .../ru/betterend/entity/EndSlimeEntity.java | 2 +- .../integration/EnderscapeIntegration.java | 2 +- .../integration/byg/BYGIntegration.java | 50 ++----------------- .../mixin/client/MusicTrackerMixin.java | 9 ++-- .../mixin/common/ServerLevelMixin.java | 2 +- 9 files changed, 20 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 120884ded..633b9ac28 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ # Better End -Better End Mod for Fabric, MC 1.17.1 +Better End Mod for Fabric, MC 1.18 Importing: * Clone repo * Edit gradle.properties if necessary -* Run command line in folder: gradlew genSources eclipse (or Another-IDE-Name) +* Run command line in folder: gradlew genSources idea (or eclipse) * Import project to IDE Building: diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 75e850494..4a581bcf0 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -1,6 +1,6 @@ package ru.betterend.blocks.entities; -import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; +//import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.Container; @@ -14,7 +14,8 @@ import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndItems; -public class PedestalBlockEntity extends BlockEntity implements Container, BlockEntityClientSerializable { +// TODO Fix client serialisation +public class PedestalBlockEntity extends BlockEntity implements Container/*, BlockEntityClientSerializable*/ { private ItemStack activeItem = ItemStack.EMPTY; private final int maxAge = 314; @@ -110,7 +111,7 @@ public void load(CompoundTag tag) { fromTag(tag); } - @Override + /*@Override public CompoundTag save(CompoundTag tag) { tag.put("active_item", activeItem.save(new CompoundTag())); return super.save(tag); @@ -124,7 +125,7 @@ public void fromClientTag(CompoundTag tag) { @Override public CompoundTag toClientTag(CompoundTag tag) { return save(tag); - } + }*/ protected void fromTag(CompoundTag tag) { if (tag.contains("active_item")) { diff --git a/src/main/java/ru/betterend/entity/CubozoaEntity.java b/src/main/java/ru/betterend/entity/CubozoaEntity.java index 35937fdac..60a6a0f8c 100644 --- a/src/main/java/ru/betterend/entity/CubozoaEntity.java +++ b/src/main/java/ru/betterend/entity/CubozoaEntity.java @@ -26,7 +26,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndItems; diff --git a/src/main/java/ru/betterend/entity/EndFishEntity.java b/src/main/java/ru/betterend/entity/EndFishEntity.java index a347030e1..a89adfd2d 100644 --- a/src/main/java/ru/betterend/entity/EndFishEntity.java +++ b/src/main/java/ru/betterend/entity/EndFishEntity.java @@ -27,7 +27,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndItems; diff --git a/src/main/java/ru/betterend/entity/EndSlimeEntity.java b/src/main/java/ru/betterend/entity/EndSlimeEntity.java index e6339e9ea..2d995ba06 100644 --- a/src/main/java/ru/betterend/entity/EndSlimeEntity.java +++ b/src/main/java/ru/betterend/entity/EndSlimeEntity.java @@ -33,7 +33,7 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; diff --git a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java index c87164697..c1be368b5 100644 --- a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java +++ b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java @@ -4,8 +4,8 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import ru.bclib.api.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.integration.ModIntegration; import ru.bclib.world.features.BCLFeature; diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index 229e3cbad..f5d9fcd8b 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -15,61 +15,17 @@ public BYGIntegration() { @Override public void init() { - Block block = Integrations.BYG.getBlock("ivis_phylium"); + /*Block block = Integrations.BYG.getBlock("ivis_phylium"); if (block != null) { TagAPI.addTags(block, TagAPI.BLOCK_END_GROUND, TagAPI.BLOCK_GEN_TERRAIN); } BYGBlocks.register(); BYGFeatures.register(); - BYGBiomes.register(); + BYGBiomes.register();*/ } @Override public void addBiomes() { - BYGBiomes.addBiomes(); - - //Class biomeClass = this.getClass("corgiaoc.byg.common.world.biome.BYGEndBiome"); - //List biomes = this.getStaticFieldValue(biomeClass, "BYG_END_BIOMES"); - - /*if (biomes != null && biomeClass != null) { - biomes.forEach((obj) -> { - Biome biome = this.getAndExecuteRuntime(biomeClass, obj, "getBiome"); - if (biome != null) { - ResourceLocation biomeID = BuiltinRegistries.BIOME.getKey(biome); - BCLBiome endBiome = BiomeAPI.getBiome(biomeID); - Biome edge = this.getAndExecuteRuntime(biomeClass, obj, "getEdge"); - if (edge != null) { - ResourceLocation edgeID = BuiltinRegistries.BIOME.getKey(edge); - EndBiomes.LAND_BIOMES.removeMutableBiome(edgeID); - EndBiomes.VOID_BIOMES.removeMutableBiome(edgeID); - BCLBiome edgeBiome = BiomeAPI.getBiome(edgeID); - endBiome.setEdge(edgeBiome); - } - else { - Boolean isVoid = this.getAndExecuteRuntime(biomeClass, obj, "isVoid"); - if (isVoid != null && isVoid.booleanValue()) { - EndBiomes.LAND_BIOMES.removeMutableBiome(biomeID); - EndBiomes.VOID_BIOMES.addBiomeMutable(endBiome); - } - ShufflingList subBiomes = this.getAndExecuteRuntime( - biomeClass, - obj, - "getHills" - ); - if (subBiomes != null) { - subBiomes.stream().collect(Collectors.toList()).forEach((id) -> { - BCLBiome subBiome = BiomeAPI.getBiome(id); - EndBiomes.LAND_BIOMES.removeMutableBiome(id); - EndBiomes.VOID_BIOMES.removeMutableBiome(id); - if (!endBiome.containsSubBiome(subBiome)) { - EndBiomes.SUBBIOMES.add(subBiome); - endBiome.addSubBiome(subBiome); - } - }); - } - } - } - }); - }*/ + //BYGBiomes.addBiomes(); } } diff --git a/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java index 5a53ce31d..b3a315467 100644 --- a/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.client.ClientOptions; import ru.betterend.world.biome.EndBiome; @@ -90,9 +90,10 @@ private boolean be_isCorrectBiome() { } private boolean be_shouldChangeSound(Music musicSound) { - return currentMusic != null && !musicSound.getEvent() - .getLocation() - .equals(this.currentMusic.getLocation()) && musicSound.replaceCurrentMusic(); + return currentMusic != null && !musicSound + .getEvent() + .getLocation() + .equals(this.currentMusic.getLocation()) && musicSound.replaceCurrentMusic(); } private boolean be_checkNullSound(Music musicSound) { diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index ecf0c1169..b5381cc97 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -23,7 +23,7 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; From 823108aa62f1254c7c50f5d68507fc12121b8148 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 05:52:24 +0300 Subject: [PATCH 07/93] Gradle change --- settings.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.gradle b/settings.gradle index 8eab6b850..03387e2a8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,10 +11,10 @@ pluginManagement { // #### Custom Settings #### //Change the next line to disable local BCLib loading -def allowLocalLibUse = false +def allowLocalLibUse = true //When true, the local BCLib is also used in commandline builds -def allowLocalLibInConsoleMode = false +def allowLocalLibInConsoleMode = true //The path were to look for the local BCLib def BCLibPath = '../BCLib' From 6a6f29bf9922ef134719e66bd3442bd7ee82f212 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 06:52:04 +0300 Subject: [PATCH 08/93] Feature API usage --- src/main/java/ru/betterend/BetterEnd.java | 6 ++ .../ru/betterend/entity/EndSlimeEntity.java | 2 +- .../integration/byg/BYGIntegration.java | 5 -- .../BiomeGenerationSettingsAccessor.java | 30 ------- .../java/ru/betterend/registry/EndBiomes.java | 14 +-- .../ru/betterend/registry/EndFeatures.java | 86 ++++++------------- .../ru/betterend/registry/EndStructures.java | 43 +++++----- .../java/ru/betterend/registry/EndTags.java | 7 +- .../ru/betterend/util/FeaturesHelper.java | 39 --------- 9 files changed, 62 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java delete mode 100644 src/main/java/ru/betterend/util/FeaturesHelper.java diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 1f0cf42fd..531811b23 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -4,6 +4,7 @@ import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; import ru.bclib.api.WorldDataAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; import ru.betterend.api.BetterEndPlugin; import ru.betterend.config.Configs; @@ -66,6 +67,11 @@ public void onInitialize() { ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock() > 250000L); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } + + BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { + EndStructures.addBiomeStructures(biomeID, biome); + EndFeatures.addBiomeFeatures(biomeID, biome); + }); } public static ResourceLocation makeID(String path) { diff --git a/src/main/java/ru/betterend/entity/EndSlimeEntity.java b/src/main/java/ru/betterend/entity/EndSlimeEntity.java index 2d995ba06..f44cb34ca 100644 --- a/src/main/java/ru/betterend/entity/EndSlimeEntity.java +++ b/src/main/java/ru/betterend/entity/EndSlimeEntity.java @@ -33,8 +33,8 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index f5d9fcd8b..dff88aedc 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -1,12 +1,7 @@ package ru.betterend.integration.byg; -import net.minecraft.world.level.block.Block; -import ru.bclib.api.TagAPI; import ru.bclib.integration.ModIntegration; import ru.betterend.integration.EndBiomeIntegration; -import ru.betterend.integration.Integrations; -import ru.betterend.integration.byg.biomes.BYGBiomes; -import ru.betterend.integration.byg.features.BYGFeatures; public class BYGIntegration extends ModIntegration implements EndBiomeIntegration { public BYGIntegration() { diff --git a/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java b/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java deleted file mode 100644 index 5ece436d4..000000000 --- a/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java +++ /dev/null @@ -1,30 +0,0 @@ -package ru.betterend.mixin.common; - -import net.minecraft.world.level.biome.BiomeGenerationSettings; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; -import java.util.function.Supplier; - -@Deprecated(forRemoval = true) -@Mixin(BiomeGenerationSettings.class) -public interface BiomeGenerationSettingsAccessor { - @Accessor("features") - @Deprecated(forRemoval = true) - List>>> be_getFeatures(); - - @Accessor("features") - @Deprecated(forRemoval = true) - void be_setFeatures(List>>> features); - - @Accessor("structureStarts") - @Deprecated(forRemoval = true) - List>> be_getStructures(); - - @Accessor("structureStarts") - @Deprecated(forRemoval = true) - void be_setStructures(List>> structures); -} diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 455098c35..f40e5eed6 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -3,12 +3,11 @@ import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.world.biomes.BCLBiome; -import ru.bclib.world.generator.BiomeMap; import ru.bclib.world.generator.BiomePicker; +import ru.bclib.world.generator.map.hex.HexBiomeMap; import ru.betterend.config.Configs; -import ru.betterend.util.FeaturesHelper; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.biome.air.BiomeIceStarfield; import ru.betterend.world.biome.cave.EmptyAuroraCaveBiome; @@ -41,7 +40,8 @@ public class EndBiomes { public static final BiomePicker CAVE_BIOMES = new BiomePicker(); - private static BiomeMap caveBiomeMap; + private static HexBiomeMap caveBiomeMap; + private static long lastSeed; // Better End Land public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new FoggyMushroomlandBiome(), BiomeType.LAND); @@ -79,10 +79,10 @@ public static void register() {} public static void onWorldLoad(long seed, Registry registry) { CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry)); CAVE_BIOMES.rebuild(); - if (caveBiomeMap == null || caveBiomeMap.getSeed() != seed) { - caveBiomeMap = new BiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES); + if (caveBiomeMap == null || lastSeed != seed) { + caveBiomeMap = new HexBiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES); + lastSeed = seed; } - FeaturesHelper.addFeatures(registry); } /** diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index e1aff6adf..afeb127b0 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -1,21 +1,20 @@ package ru.betterend.registry; -import com.google.common.collect.Lists; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.configurations.CountConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.placement.FeatureDecorator; -import ru.bclib.api.BiomeAPI; +import net.minecraft.world.level.levelgen.placement.CountPlacement; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.world.level.levelgen.placement.PlacementModifier; +import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.world.biomes.BCLBiome; -import ru.bclib.world.biomes.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.DefaultFeature; import ru.betterend.BetterEnd; @@ -81,12 +80,8 @@ import ru.betterend.world.features.trees.PythadendronTreeFeature; import ru.betterend.world.features.trees.TenaneaFeature; import ru.betterend.world.features.trees.UmbrellaTreeFeature; -import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.surface.UmbraSurfaceBuilder; -import java.util.List; -import java.util.function.Supplier; - public class EndFeatures { // Trees // public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3); @@ -295,9 +290,7 @@ private static BCLFeature registerOre(String name, Block blockOre, int veins, in private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) { OreLayerFeature layer = new OreLayerFeature(block.defaultBlockState(), radius, minY, maxY); - ConfiguredFeature configured = layer - .configured(FeatureConfiguration.NONE) - .decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(count))); + PlacedFeature configured = layer.configured(FeatureConfiguration.NONE).placed(new PlacementModifier[]{CountPlacement.of(count)}); return new BCLFeature(BetterEnd.makeID(name), layer, GenerationStep.Decoration.UNDERGROUND_ORES, configured); } @@ -305,75 +298,46 @@ private static BCLFeature registerLayer(String name, StoneMaterial material, flo return registerLayer(name, material.stone, radius, minY, maxY, count); } - public static void registerBiomeFeatures(ResourceLocation id, Biome biome, List>>> features) { + public static void addBiomeFeatures(ResourceLocation id, Biome biome) { if (id.getNamespace().equals(BetterEnd.MOD_ID)) { return; } - if (GeneratorOptions.removeChorusFromVanillaBiomes()) { - if (id.getNamespace().equals("minecraft")) { - String path = id.getPath(); - if (path.equals("end_highlands") || path.equals("end_midlands") || path.equals("small_end_islands")) { - int pos = GenerationStep.Decoration.VEGETAL_DECORATION.ordinal(); - if (pos < features.size()) { - List>> list = features.get(pos); - // If only chorus plants are enabled - if (list.size() == 1) { - features.get(pos).clear(); - } - } - } - } - } - - addFeature(FLAVOLITE_LAYER, features); - addFeature(THALLASIUM_ORE, features); - addFeature(ENDER_ORE, features); - addFeature(CRASHED_SHIP, features); + BiomeAPI.addBiomeFeatures(biome, FLAVOLITE_LAYER, THALLASIUM_ORE, ENDER_ORE, CRASHED_SHIP); BCLBiome bclbiome = BiomeAPI.getBiome(id); boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome); if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) { if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) { - addFeature(ROUND_CAVE, features); - addFeature(TUNEL_CAVE, features); + // TODO replace caves with carvers + BiomeAPI.addBiomeFeatures(biome, ROUND_CAVE, TUNEL_CAVE); } } - BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature(); + // TODO restore biome structures + /*BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature(); if (feature != null) { addFeature(feature, features); - } + }*/ } - public static void addDefaultFeatures(BCLBiomeDef def) { - def.addFeature(FLAVOLITE_LAYER); - def.addFeature(THALLASIUM_ORE); - def.addFeature(ENDER_ORE); - def.addFeature(CRASHED_SHIP); + public static BCLBiomeBuilder addDefaultFeatures(ResourceLocation biomeID, BCLBiomeBuilder builder, boolean hasCaves) { + builder.feature(FLAVOLITE_LAYER); + builder.feature(THALLASIUM_ORE); + builder.feature(ENDER_ORE); + builder.feature(CRASHED_SHIP); - if (def.getID().getPath().endsWith("_cave")) { - return; + if (biomeID.getPath().endsWith("_cave")) { + return builder; } - boolean hasCaves = def.getCustomData("has_caves", true); - hasCaves = Configs.BIOME_CONFIG.getBoolean(def.getID(), "hasCaves", hasCaves); + // TODO replace cave features with carvers if (hasCaves) { - def.addFeature(ROUND_CAVE); - def.addFeature(TUNEL_CAVE); - } - } - - private static void addFeature(BCLFeature feature, List>>> features) { - int index = feature.getFeatureStep().ordinal(); - if (features.size() > index) { - features.get(index).add(() -> feature.getFeatureConfigured()); - } - else { - List>> newFeature = Lists.newArrayList(); - newFeature.add(() -> feature.getFeatureConfigured()); - features.add(newFeature); + builder.feature(ROUND_CAVE); + builder.feature(TUNEL_CAVE); } + + return builder; } public static void register() {} diff --git a/src/main/java/ru/betterend/registry/EndStructures.java b/src/main/java/ru/betterend/registry/EndStructures.java index 827db4a49..32edb605b 100644 --- a/src/main/java/ru/betterend/registry/EndStructures.java +++ b/src/main/java/ru/betterend/registry/EndStructures.java @@ -4,8 +4,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.StructurePieceType; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.world.structures.BCLStructureFeature; import ru.betterend.BetterEnd; import ru.betterend.world.structures.features.EternalPortalStructure; @@ -22,22 +22,21 @@ import ru.betterend.world.structures.piece.PaintedMountainPiece; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.Collection; -import java.util.function.Supplier; - public class EndStructures { public static final StructurePieceType VOXEL_PIECE = register("voxel", VoxelPiece::new); public static final StructurePieceType MOUNTAIN_PIECE = register("mountain_piece", CrystalMountainPiece::new); public static final StructurePieceType CAVE_PIECE = register("cave_piece", CavePiece::new); public static final StructurePieceType LAKE_PIECE = register("lake_piece", LakePiece::new); - public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register( - "painted_mountain_piece", - PaintedMountainPiece::new - ); + public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register("painted_mountain_piece", PaintedMountainPiece::new); public static final StructurePieceType NBT_PIECE = register("nbt_piece", NBTPiece::new); - public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature(BetterEnd.makeID( - "giant_mossy_glowshroom"), new GiantMossyGlowshroomStructure(), Decoration.SURFACE_STRUCTURES, 16, 8); + public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature( + BetterEnd.makeID("giant_mossy_glowshroom"), + new GiantMossyGlowshroomStructure(), + Decoration.SURFACE_STRUCTURES, + 16, + 8 + ); public static final BCLStructureFeature MEGALAKE = new BCLStructureFeature( BetterEnd.makeID("megalake"), new MegaLakeStructure(), @@ -59,8 +58,13 @@ public class EndStructures { 3, 2 ); - public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature(BetterEnd.makeID( - "painted_mountain"), new PaintedMountainStructure(), Decoration.RAW_GENERATION, 3, 2); + public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature( + BetterEnd.makeID("painted_mountain"), + new PaintedMountainStructure(), + Decoration.RAW_GENERATION, + 3, + 2 + ); public static final BCLStructureFeature ETERNAL_PORTAL = new BCLStructureFeature( BetterEnd.makeID("eternal_portal"), new EternalPortalStructure(), @@ -76,22 +80,15 @@ public class EndStructures { 8 ); - public static void register() { - } + public static void register() {} private static StructurePieceType register(String id, StructurePieceType pieceType) { return Registry.register(Registry.STRUCTURE_PIECE, BetterEnd.makeID(id), pieceType); } - public static void registerBiomeStructures(ResourceLocation id, Biome biome, Collection>> structures) { - if (!id.getPath().contains("mountain") && !id.getPath().contains("lake")) { - addStructure(ETERNAL_PORTAL, structures); + public static void addBiomeStructures(ResourceLocation biomeID, Biome biome) { + if (!biomeID.getPath().contains("mountain") && !biomeID.getPath().contains("lake")) { + BiomeAPI.addBiomeStructure(BiomeAPI.getBiomeKey(biome), ETERNAL_PORTAL); } } - - private static void addStructure(BCLStructureFeature feature, Collection>> structures) { - structures.add(() -> { - return feature.getFeatureConfigured(); - }); - } } diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index 1a7c8c0d3..569932b90 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -13,12 +13,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.BonemealAPI; import ru.bclib.api.ComposterAPI; @@ -133,8 +131,9 @@ else if (block instanceof PedestalBlock) { TagAPI.addTag(ALLOYING_COPPER, Items.COPPER_ORE, Items.DEEPSLATE_COPPER_ORE, Items.RAW_COPPER); } + // TODO make getter for biome top blocks public static void addTerrainTags(Registry biomeRegistry) { - biomeRegistry.forEach((biome) -> { + /*biomeRegistry.forEach((biome) -> { if (biome.getBiomeCategory() == BiomeCategory.THEEND) { SurfaceBuilderConfiguration config = biome.getGenerationSettings().getSurfaceBuilderConfig(); Block under = config.getUnderMaterial().getBlock(); @@ -143,6 +142,6 @@ public static void addTerrainTags(Registry biomeRegistry) { TagAPI.addTag(TagAPI.BLOCK_END_GROUND, surface); } }); - TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround); + TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround);*/ } } diff --git a/src/main/java/ru/betterend/util/FeaturesHelper.java b/src/main/java/ru/betterend/util/FeaturesHelper.java deleted file mode 100644 index 5b2d799c3..000000000 --- a/src/main/java/ru/betterend/util/FeaturesHelper.java +++ /dev/null @@ -1,39 +0,0 @@ -package ru.betterend.util; - -import com.google.common.collect.Lists; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; -import ru.bclib.api.BiomeAPI; -import ru.betterend.config.Configs; -import ru.betterend.mixin.common.BiomeGenerationSettingsAccessor; -import ru.betterend.registry.EndFeatures; -import ru.betterend.registry.EndStructures; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Supplier; - -public class FeaturesHelper { - public static void addFeatures(Registry biomeRegistry) { - biomeRegistry.forEach((biome) -> { - ResourceLocation key = biomeRegistry.getKey(biome); - if (BiomeAPI.isEndBiome(key)) { - BiomeGenerationSettingsAccessor accessor = (BiomeGenerationSettingsAccessor) biome.getGenerationSettings(); - List>> structures = Lists.newArrayList(accessor.be_getStructures()); - List>>> preFeatures = accessor.be_getFeatures(); - List>>> features = new ArrayList<>(preFeatures.size()); - preFeatures.forEach((list) -> features.add(Lists.newArrayList(list))); - - EndFeatures.registerBiomeFeatures(key, biome, features); - EndStructures.registerBiomeStructures(key, biome, structures); - - accessor.be_setFeatures(features); - accessor.be_setStructures(structures); - } - }); - Configs.BIOME_CONFIG.saveChanges(); - } -} \ No newline at end of file From 64de980cab9b6c0e69a19a8fdba4c8c7278b70d6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 5 Dec 2021 07:04:26 +0300 Subject: [PATCH 09/93] Some feature pieces fixes, changed API calls --- .../ru/betterend/rituals/EternalRitual.java | 22 +++++++++---------- .../world/biome/cave/EndCaveBiome.java | 2 +- .../terrain/FloatingSpireFeature.java | 2 +- .../world/features/terrain/SpireFeature.java | 2 +- .../terrain/caves/EndCaveFeature.java | 2 +- .../terrain/caves/TunelCaveFeature.java | 2 +- .../world/structures/piece/BasePiece.java | 9 ++++++++ .../world/structures/piece/CavePiece.java | 6 ++--- .../piece/CrystalMountainPiece.java | 3 ++- .../world/structures/piece/LakePiece.java | 6 ++--- .../world/structures/piece/MountainPiece.java | 4 ++-- .../world/structures/piece/VoxelPiece.java | 5 ++--- 12 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/main/java/ru/betterend/rituals/EternalRitual.java b/src/main/java/ru/betterend/rituals/EternalRitual.java index c0a2fca15..7bb5e3dad 100644 --- a/src/main/java/ru/betterend/rituals/EternalRitual.java +++ b/src/main/java/ru/betterend/rituals/EternalRitual.java @@ -8,7 +8,6 @@ import net.minecraft.core.particles.BlockParticleOption; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.Features; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; @@ -441,7 +440,8 @@ private BlockPos findPortalPos(int portalId) { direction = direction.getClockWise(); } } - if (targetWorld.dimension() == Level.END) { + // TODO find island feature + /*if (targetWorld.dimension() == Level.END) { Features.END_ISLAND.place( targetWorld, targetWorld.getChunkSource().getGenerator(), @@ -449,16 +449,16 @@ private BlockPos findPortalPos(int portalId) { basePos.below() ); } - else if (targetWorld.dimension() == Level.OVERWORLD) { - basePos.setY(targetWorld.getChunk(basePos) - .getHeight(Heightmap.Types.WORLD_SURFACE, basePos.getX(), basePos.getZ()) + 1); + else */if (targetWorld.dimension() == Level.OVERWORLD) { + basePos.setY(targetWorld.getChunk(basePos).getHeight(Heightmap.Types.WORLD_SURFACE, basePos.getX(), basePos.getZ()) + 1); } - EndFeatures.BIOME_ISLAND.getFeatureConfigured() - .place(targetWorld, - targetWorld.getChunkSource().getGenerator(), - new Random(basePos.asLong()), - basePos.below() - ); + EndFeatures.BIOME_ISLAND + .getPlacedFeature() + .place(targetWorld, + targetWorld.getChunkSource().getGenerator(), + new Random(basePos.asLong()), + basePos.below() + ); generatePortal(targetWorld, basePos, portalAxis, portalId); return basePos.immutable(); } diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index eb22f9f2a..339961cef 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -4,7 +4,7 @@ import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.WeightedList; import ru.bclib.world.biomes.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index 612fc6e94..d397fe892 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; import ru.bclib.sdf.primitive.SDFSphere; diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index b8eaf7a6c..43dd04d7e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 7f7d7d365..24d1e9a8e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.interfaces.BiomeSetter; import ru.bclib.util.BlocksHelper; diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 95400bb8a..4bd9debfb 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.world.biomes.BCLBiome; diff --git a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java index c629d35e8..e74a2e92f 100644 --- a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java @@ -1,9 +1,11 @@ package ru.betterend.world.structures.piece; import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.levelgen.feature.StructurePieceType; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; public abstract class BasePiece extends StructurePiece { protected BasePiece(StructurePieceType type, int i, BoundingBox boundingBox) { @@ -16,4 +18,11 @@ protected BasePiece(StructurePieceType type, CompoundTag tag) { } protected abstract void fromNbt(CompoundTag tag); + + protected void addAdditionalSaveData(CompoundTag tag) {} + + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext structurePieceSerializationContext, CompoundTag compoundTag) { + addAdditionalSaveData(compoundTag); + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 3de511f72..3f425701e 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -38,7 +38,7 @@ public CavePiece(ServerLevel serverLevel, CompoundTag tag) { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int x1 = MHelper.max(this.boundingBox.minX(), blockBox.minX()); int z1 = MHelper.max(this.boundingBox.minZ(), blockBox.minZ()); int x2 = MHelper.min(this.boundingBox.maxX(), blockBox.maxX()); @@ -79,11 +79,11 @@ else if (dist < r * r) { } } - return true; + return; } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); } diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index 9d16fd65b..f2949fe67 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -16,7 +16,8 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; -import ru.bclib.api.BiomeAPI; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index eabc553f2..888a27b8d 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.material.FluidState; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -63,7 +63,7 @@ public LakePiece(ServerLevel serverLevel, CompoundTag tag) { } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("depth", depth); @@ -83,7 +83,7 @@ protected void fromNbt(CompoundTag tag) { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int minY = this.boundingBox.minY(); int maxY = this.boundingBox.maxY(); int sx = SectionPos.sectionToBlockCoord(chunkPos.x); diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index 7d95ab4ba..e20bfe39a 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.StructurePieceType; import net.minecraft.world.level.levelgen.structure.BoundingBox; -import ru.bclib.api.BiomeAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; @@ -52,7 +52,7 @@ public MountainPiece(StructurePieceType type, ServerLevel serverLevel, CompoundT } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("height", height); diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index e876af74e..56189f52f 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -30,7 +30,7 @@ public VoxelPiece(ServerLevel level, CompoundTag tag) { } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("world", world.toBNT()); } @@ -40,8 +40,7 @@ protected void fromNbt(CompoundTag tag) { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { this.world.placeChunk(world, chunkPos); - return true; } } From 96c65b7bb2c2217cd2cdfe5e54d887c484c1c651 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 02:58:43 +0100 Subject: [PATCH 10/93] fixed liquid tick call --- .../java/ru/betterend/blocks/basis/EndLanternBlock.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index b41a4fea4..72f01e29a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks.basis; +import java.util.Map; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -26,8 +28,6 @@ import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; -import java.util.Map; - @SuppressWarnings("deprecation") public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { public static final BooleanProperty IS_FLOOR = BlockProperties.IS_FLOOR; @@ -101,7 +101,7 @@ public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { Boolean water = state.getValue(WATERLOGGED); if (water) { - world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } if (!canSurvive(state, world, pos)) { return water ? Blocks.WATER.defaultBlockState() : Blocks.AIR.defaultBlockState(); From 016a3048bd940d969a8305e8ac8ffe38088b9c43 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 12:11:08 +0100 Subject: [PATCH 11/93] Converted Biome generation to new BCLib builder --- .../java/ru/betterend/registry/EndBiomes.java | 14 ++-- .../ru/betterend/registry/EndFeatures.java | 8 +- .../ru/betterend/world/biome/EndBiome.java | 62 +++++++++++--- .../world/biome/air/BiomeIceStarfield.java | 36 ++++---- .../biome/cave/EmptyAuroraCaveBiome.java | 56 +++++++++---- .../world/biome/cave/EmptyEndCaveBiome.java | 45 +++++++--- .../biome/cave/EmptySmaragdantCaveBiome.java | 58 ++++++++----- .../world/biome/cave/EndCaveBiome.java | 61 ++++++++++---- .../world/biome/cave/JadeCaveBiome.java | 59 ++++++++----- .../world/biome/cave/LushAuroraCaveBiome.java | 84 ++++++++++++------- .../biome/cave/LushSmaragdantCaveBiome.java | 60 ++++++++----- .../world/biome/land/AmberLandBiome.java | 56 +++++++------ .../biome/land/BlossomingSpiresBiome.java | 55 ++++++------ .../world/biome/land/ChorusForestBiome.java | 63 +++++++------- .../biome/land/CrystalMountainsBiome.java | 25 +++--- .../biome/land/DragonGraveyardsBiome.java | 49 ++++++----- .../world/biome/land/DryShrublandBiome.java | 38 +++++---- .../world/biome/land/DustWastelandsBiome.java | 33 ++++---- .../biome/land/FoggyMushroomlandBiome.java | 73 ++++++++-------- .../biome/land/GlowingGrasslandsBiome.java | 58 ++++++------- .../world/biome/land/LanternWoodsBiome.java | 58 ++++++------- .../world/biome/land/MegalakeBiome.java | 64 +++++++------- .../world/biome/land/MegalakeGroveBiome.java | 66 ++++++++------- .../world/biome/land/NeonOasisBiome.java | 48 ++++++----- .../biome/land/PaintedMountainsBiome.java | 29 ++++--- .../world/biome/land/ShadowForestBiome.java | 64 +++++++------- .../world/biome/land/SulphurSpringsBiome.java | 61 ++++++++------ .../world/biome/land/UmbraValleyBiome.java | 36 ++++---- .../world/biome/land/UmbrellaJungleBiome.java | 66 ++++++++------- 29 files changed, 869 insertions(+), 616 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index f40e5eed6..04407e820 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -88,11 +88,13 @@ public static void onWorldLoad(long seed, Registry registry) { /** * Put existing {@link EndBiome} as a sub-biome into selected parent. * - * @param biome - {@link EndBiome} instance + * @param biomeConfig - {@link EndBiome.Config} instance * @param parent - {@link EndBiome} to be linked with * @return registered {@link EndBiome} */ - public static EndBiome registerSubBiome(EndBiome biome, EndBiome parent) { + public static EndBiome registerSubBiome(EndBiome.Config biomeConfig, EndBiome parent) { + final EndBiome biome = EndBiome.create(biomeConfig); + if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerSubBiome(parent, biome); } @@ -102,11 +104,12 @@ public static EndBiome registerSubBiome(EndBiome biome, EndBiome parent) { /** * Registers {@link EndBiome} and adds it into worldgen. * - * @param biome - {@link EndBiome} instance + * @param biomeConfig - {@link EndBiome.Config} instance * @param type - {@link BiomeType} * @return registered {@link EndBiome} */ - public static EndBiome registerBiome(EndBiome biome, BiomeType type) { + public static EndBiome registerBiome(EndBiome.Config biomeConfig, BiomeType type) { + final EndBiome biome = EndBiome.create(biomeConfig); if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { if (type == BiomeType.LAND) { BiomeAPI.registerEndLandBiome(biome); @@ -146,7 +149,8 @@ public static void addSubBiomeIntegration(EndBiome biome, ResourceLocation paren } } - public static EndCaveBiome registerCaveBiome(EndCaveBiome biome) { + public static EndCaveBiome registerCaveBiome(EndCaveBiome.Config biomeConfig) { + final EndCaveBiome biome = EndCaveBiome.create(biomeConfig); if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerBiome(biome); CAVE_BIOMES.addBiome(biome); diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index afeb127b0..4f1139981 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -321,16 +321,12 @@ public static void addBiomeFeatures(ResourceLocation id, Biome biome) { }*/ } - public static BCLBiomeBuilder addDefaultFeatures(ResourceLocation biomeID, BCLBiomeBuilder builder, boolean hasCaves) { + public static BCLBiomeBuilder addDefaultFeatures(BCLBiomeBuilder builder, boolean hasCaves) { builder.feature(FLAVOLITE_LAYER); builder.feature(THALLASIUM_ORE); builder.feature(ENDER_ORE); builder.feature(CRASHED_SHIP); - - if (biomeID.getPath().endsWith("_cave")) { - return builder; - } - + // TODO replace cave features with carvers if (hasCaves) { builder.feature(ROUND_CAVE); diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index ad3597e7f..5245dc73c 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -1,23 +1,63 @@ package ru.betterend.world.biome; +import java.util.function.BiFunction; + +import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.level.biome.Biome; +import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.interfaces.StructureFeaturesAccessor; import ru.bclib.world.biomes.BCLBiome; -import ru.bclib.world.biomes.BCLBiomeDef; +import ru.betterend.BetterEnd; import ru.betterend.registry.EndFeatures; +import ru.betterend.registry.EndSounds; public class EndBiome extends BCLBiome { - public EndBiome(BCLBiomeDef def) { - super(updateDef(def)); + public abstract static class Config { + protected static final StructureFeaturesAccessor VANILLA_FEATURES = (StructureFeaturesAccessor)new StructureFeatures(); + + public final ResourceLocation ID; + + protected Config(String name) { + this.ID = BetterEnd.makeID(name); + } + + protected abstract void addCustomBuildData(BCLBiomeBuilder builder); + + public BiFunction getSupplier(){ + return EndBiome::new; + } + + protected boolean hasCaves(){ + return true; + } } - - public EndBiome(ResourceLocation id, Biome biome, float fogDensity, float genChance, boolean hasCaves) { - super(id, biome, fogDensity, genChance); - this.addCustomData("has_caves", hasCaves); + + public EndBiome(ResourceLocation biomeID, Biome biome) { + super(biomeID, biome); } - - private static BCLBiomeDef updateDef(BCLBiomeDef def) { - EndFeatures.addDefaultFeatures(def); - return def; + + public static EndBiome create(Config biomeConfig){ + BCLBiomeBuilder builder = BCLBiomeBuilder + .start(biomeConfig.ID) + .category(Biome.BiomeCategory.THEEND) + .music(SoundEvents.MUSIC_END) + .waterColor(4159204) + .waterFogColor(329011) + .fogColor(0xA080A0) + .skyColor(0) + .mood(EndSounds.AMBIENT_DUST_WASTELANDS) + .temperature(0.5f) + .wetness(0.5f) + .precipitation(Biome.Precipitation.NONE); + + biomeConfig.addCustomBuildData(builder); + EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); + + EndBiome biome = builder.build(biomeConfig.getSupplier()); + biome.addCustomData("has_caves", biomeConfig.hasCaves()); + + return biome; } } diff --git a/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java b/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java index c581095ec..1fbd812a0 100644 --- a/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java +++ b/src/main/java/ru/betterend/world/biome/air/BiomeIceStarfield.java @@ -1,25 +1,33 @@ package ru.betterend.world.biome.air; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class BiomeIceStarfield extends EndBiome { +public class BiomeIceStarfield extends EndBiome.Config { public BiomeIceStarfield() { - super(new BCLBiomeDef(BetterEnd.makeID("ice_starfield")).addCustomData("has_caves", false) - .addStructureFeature(EndStructures.GIANT_ICE_STAR.getFeatureConfigured()) - .setFogColor(224, 245, 254) - .setTemperature(0F) - .setFogDensity(2.2F) - .setFoliageColor(193, 244, 244) - .setGenChance(0.25F) - .setParticles(EndParticles.SNOWFLAKE, 0.002F) - .addFeature(EndFeatures.ICE_STAR) - .addFeature(EndFeatures.ICE_STAR_SMALL) - .addMobSpawn(EntityType.ENDERMAN, 20, 1, 4)); + super("ice_starfield"); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.GIANT_ICE_STAR.getFeatureConfigured()) + .fogColor(224, 245, 254) + .temperature(0F) + .fogDensity(2.2F) + .foliageColor(193, 244, 244) + .genChance(0.25F) + .particles(EndParticles.SNOWFLAKE, 0.002F) + .feature(EndFeatures.ICE_STAR) + .feature(EndFeatures.ICE_STAR_SMALL) + .spawn(EntityType.ENDERMAN, 20, 1, 4); } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java index 83b371d1e..f70316413 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java @@ -1,30 +1,50 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; + +public class EmptyAuroraCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); + + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.01F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class EmptyAuroraCaveBiome extends EndCaveBiome { public EmptyAuroraCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("empty_aurora_cave")).setFogColor(150, 30, 68) - .setFogDensity(2.0F) - .setPlantsColor(108, 25, 46) - .setWaterAndFogColor(186, 77, 237) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F)); - - this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); - - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("empty_aurora_cave"); } - + @Override - public float getFloorDensity() { - return 0.01F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(150, 30, 68) + .fogDensity(2.0F) + .plantsColor(108, 25, 46) + .waterAndFogColor(186, 77, 237) + .particles(EndParticles.GLOWING_SPHERE, 0.001F); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return EmptyAuroraCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java index 151e74755..a9b75604a 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java @@ -1,23 +1,44 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; + +public class EmptyEndCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE, 1); + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.1F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class EmptyEndCaveBiome extends EndCaveBiome { public EmptyEndCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("empty_end_cave")).setFogDensity(2.0F)); - this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE, 1); - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("empty_end_cave"); } - + @Override - public float getFloorDensity() { - return 0.1F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogDensity(2.0F); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java index b77fd7477..ba464371f 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java @@ -1,31 +1,51 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; + +public class EmptySmaragdantCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); + + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.1F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class EmptySmaragdantCaveBiome extends EndCaveBiome { public EmptySmaragdantCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("empty_smaragdant_cave")).setFogColor(0, 253, 182) - .setFogDensity(2.0F) - .setPlantsColor(0, 131, 145) - .setWaterAndFogColor(31, 167, 212) - .setParticles(EndParticles.SMARAGDANT, 0.001F)); - - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); - - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("empty_smaragdant_cave"); } - + @Override - public float getFloorDensity() { - return 0.1F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(0, 253, 182) + .fogDensity(2.0F) + .plantsColor(0, 131, 145) + .waterAndFogColor(31, 167, 212) + .particles(EndParticles.SMARAGDANT, 0.001F); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return EmptySmaragdantCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index 339961cef..a9e712ade 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -1,37 +1,60 @@ package ru.betterend.world.biome.cave; +import java.util.Random; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.feature.Feature; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.WeightedList; -import ru.bclib.world.biomes.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; import ru.betterend.BetterEnd; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; -import java.util.Random; - public class EndCaveBiome extends EndBiome { + public static abstract class Config extends EndBiome.Config { + protected Config(String name) { + super(name); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + BCLFeature feature = BCLFeature.makeChunkFeature( + BetterEnd.makeID(ID.getPath() + "_cave_populator"), + GenerationStep.Decoration.RAW_GENERATION, + new CaveChunkPopulatorFeature(() -> (EndCaveBiome) BiomeAPI.getBiome(ID)) + ); + + builder.category(BiomeCategory.NONE) + .feature(feature) + .music(EndSounds.MUSIC_CAVES) + .loop(EndSounds.AMBIENT_CAVES); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + public BiFunction getSupplier() { + return EndCaveBiome::new; + } + } + private WeightedList> floorFeatures = new WeightedList>(); private WeightedList> ceilFeatures = new WeightedList>(); - - public EndCaveBiome(BCLBiomeDef definition) { - super(makeDef(definition)); - } - - private static BCLBiomeDef makeDef(BCLBiomeDef definition) { - BCLFeature feature = BCLFeature.makeChunkFeature( - BetterEnd.makeID(definition.getID().getPath() + "_cave_populator"), - new CaveChunkPopulatorFeature(() -> (EndCaveBiome) BiomeAPI.getBiome(definition.getID())) - ); - definition.setCategory(BiomeCategory.NONE).addFeature(feature); - definition.setMusic(EndSounds.MUSIC_CAVES); - definition.setLoop(EndSounds.AMBIENT_CAVES); - return definition; + + public EndCaveBiome(ResourceLocation biomeID, Biome biome) { + super(biomeID, biome); } public void addFloorFeature(Feature feature, float weight) { @@ -65,4 +88,8 @@ public BlockState getCeil(BlockPos pos) { public BlockState getWall(BlockPos pos) { return null; } + + public static EndCaveBiome create(EndBiome.Config biomeConfig){ + return (EndCaveBiome) EndBiome.create(biomeConfig); + } } diff --git a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java index be0610284..ce01dcc41 100644 --- a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java @@ -1,32 +1,53 @@ package ru.betterend.world.biome.cave; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.level.block.state.BlockState; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import ru.betterend.world.biome.EndBiome; + +public class JadeCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); + private static final OpenSimplexNoise DEPTH_NOISE = new OpenSimplexNoise("depth_noise".hashCode()); + private static final BlockState[] JADE = new BlockState[3]; + + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + JADE[0] = EndBlocks.VIRID_JADESTONE.stone.defaultBlockState(); + JADE[1] = EndBlocks.AZURE_JADESTONE.stone.defaultBlockState(); + JADE[2] = EndBlocks.SANDY_JADESTONE.stone.defaultBlockState(); + } + + @Override + public BlockState getWall(BlockPos pos) { + double depth = DEPTH_NOISE.eval(pos.getX() * 0.02, pos.getZ() * 0.02) * 0.2 + 0.5; + int index = Mth.floor((pos.getY() + WALL_NOISE.eval(pos.getX() * 0.2, pos.getZ() * 0.2) * 1.5) * depth + 0.5); + index = Mth.abs(index) % 3; + return JADE[index]; + } + } -public class JadeCaveBiome extends EndCaveBiome { - private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); - private static final OpenSimplexNoise DEPTH_NOISE = new OpenSimplexNoise("depth_noise".hashCode()); - private static final BlockState[] JADE = new BlockState[3]; - public JadeCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("jade_cave")).setFogColor(118, 150, 112) - .setFogDensity(2.0F) - .setWaterAndFogColor(95, 223, 255)); - JADE[0] = EndBlocks.VIRID_JADESTONE.stone.defaultBlockState(); - JADE[1] = EndBlocks.AZURE_JADESTONE.stone.defaultBlockState(); - JADE[2] = EndBlocks.SANDY_JADESTONE.stone.defaultBlockState(); + super("jade_cave"); } - + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(118, 150, 112) + .fogDensity(2.0F) + .waterAndFogColor(95, 223, 255); + } + @Override - public BlockState getWall(BlockPos pos) { - double depth = DEPTH_NOISE.eval(pos.getX() * 0.02, pos.getZ() * 0.02) * 0.2 + 0.5; - int index = Mth.floor((pos.getY() + WALL_NOISE.eval(pos.getX() * 0.2, pos.getZ() * 0.2) * 1.5) * depth + 0.5); - index = Mth.abs(index) % 3; - return JADE[index]; + public BiFunction getSupplier() { + return JadeCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java index 2e476aa9b..6c7aafeb2 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -1,48 +1,68 @@ package ru.betterend.world.biome.cave; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.blocks.BlockProperties; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; -public class LushAuroraCaveBiome extends EndCaveBiome { - public LushAuroraCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("lush_aurora_cave")).setFogColor(150, 30, 68) - .setFogDensity(2.0F) - .setPlantsColor(108, 25, 46) - .setWaterAndFogColor(186, 77, 237) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .setSurface(EndBlocks.CAVE_MOSS)); - - this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); - this.addFloorFeature(EndFeatures.CAVE_BUSH, 5); - this.addFloorFeature(EndFeatures.CAVE_GRASS, 40); - this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE_CAVEMOSS, 5); - - this.addCeilFeature(EndFeatures.CAVE_BUSH, 1); - this.addCeilFeature(EndFeatures.CAVE_PUMPKIN, 1); - this.addCeilFeature(EndFeatures.RUBINEA, 3); - this.addCeilFeature(EndFeatures.MAGNULA, 1); - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE_CAVEMOSS, 10); +public class LushAuroraCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); + this.addFloorFeature(EndFeatures.CAVE_BUSH, 5); + this.addFloorFeature(EndFeatures.CAVE_GRASS, 40); + this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE_CAVEMOSS, 5); + + this.addCeilFeature(EndFeatures.CAVE_BUSH, 1); + this.addCeilFeature(EndFeatures.CAVE_PUMPKIN, 1); + this.addCeilFeature(EndFeatures.RUBINEA, 3); + this.addCeilFeature(EndFeatures.MAGNULA, 1); + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE_CAVEMOSS, 10); + } + + @Override + public float getFloorDensity() { + return 0.2F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + + @Override + public BlockState getCeil(BlockPos pos) { + return EndBlocks.CAVE_MOSS.defaultBlockState() + .setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP); + } } - - @Override - public float getFloorDensity() { - return 0.2F; + + public LushAuroraCaveBiome() { + super("lush_aurora_cave"); } - + @Override - public float getCeilDensity() { - return 0.1F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(150, 30, 68) + .fogDensity(2.0F) + .plantsColor(108, 25, 46) + .waterAndFogColor(186, 77, 237) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .surface(EndBlocks.CAVE_MOSS); } - + @Override - public BlockState getCeil(BlockPos pos) { - return EndBlocks.CAVE_MOSS.defaultBlockState() - .setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP); + public BiFunction getSupplier() { + return LushAuroraCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index f40c33a42..c05d421ae 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -1,33 +1,53 @@ package ru.betterend.world.biome.cave; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import java.util.function.BiFunction; + +import net.minecraft.resources.ResourceLocation; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; +import ru.betterend.world.biome.EndBiome; + +public class LushSmaragdantCaveBiome extends EndCaveBiome.Config { + public static class Biome extends EndCaveBiome { + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { + super(biomeID, biome); + + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); + + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + } + + @Override + public float getFloorDensity() { + return 0.1F; + } + + @Override + public float getCeilDensity() { + return 0.1F; + } + } -public class LushSmaragdantCaveBiome extends EndCaveBiome { public LushSmaragdantCaveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("lush_smaragdant_cave")).setFogColor(0, 253, 182) - .setFogDensity(2.0F) - .setPlantsColor(0, 131, 145) - .setWaterAndFogColor(31, 167, 212) - .setParticles(EndParticles.SMARAGDANT, 0.001F) - .setSurface(EndBlocks.CAVE_MOSS)); - - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); - this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); - - this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); + super("lush_smaragdant_cave"); } - + @Override - public float getFloorDensity() { - return 0.1F; + protected void addCustomBuildData(BCLBiomeBuilder builder) { + super.addCustomBuildData(builder); + builder.fogColor(0, 253, 182) + .fogDensity(2.0F) + .plantsColor(0, 131, 145) + .waterAndFogColor(31, 167, 212) + .particles(EndParticles.SMARAGDANT, 0.001F) + .surface(EndBlocks.CAVE_MOSS); } - + @Override - public float getCeilDensity() { - return 0.1F; + public BiFunction getSupplier() { + return LushSmaragdantCaveBiome.Biome::new; } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 5339973a7..905ba52b0 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -1,9 +1,7 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -11,30 +9,34 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class AmberLandBiome extends EndBiome { +public class AmberLandBiome extends EndBiome.Config { public AmberLandBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("amber_land")) - .setFogColor(255, 184, 71) - .setFogDensity(2.0F) - .setPlantsColor(219, 115, 38) - .setWaterAndFogColor(145, 108, 72) - .setMusic(EndSounds.MUSIC_FOREST) - .setLoop(EndSounds.AMBIENT_AMBER_LAND) - .setParticles(EndParticles.AMBER_SPHERE, 0.001F) - .setSurface(EndBlocks.AMBER_MOSS) - .addFeature(EndFeatures.AMBER_ORE) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.HELIX_TREE) - .addFeature(EndFeatures.LANCELEAF) - .addFeature(EndFeatures.GLOW_PILLAR) - .addFeature(EndFeatures.AMBER_GRASS) - .addFeature(EndFeatures.AMBER_ROOT) - .addFeature(EndFeatures.BULB_MOSS) - .addFeature(EndFeatures.BULB_MOSS_WOOD) - .addFeature(EndFeatures.CHARNIA_ORANGE) - .addFeature(EndFeatures.CHARNIA_RED) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4) - .addMobSpawn(EndEntities.END_SLIME, 30, 1, 2)); + super("amber_land"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(255, 184, 71) + .fogDensity(2.0F) + .plantsColor(219, 115, 38) + .waterAndFogColor(145, 108, 72) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_AMBER_LAND) + .particles(EndParticles.AMBER_SPHERE, 0.001F) + .surface(EndBlocks.AMBER_MOSS) + .feature(EndFeatures.AMBER_ORE) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.HELIX_TREE) + .feature(EndFeatures.LANCELEAF) + .feature(EndFeatures.GLOW_PILLAR) + .feature(EndFeatures.AMBER_GRASS) + .feature(EndFeatures.AMBER_ROOT) + .feature(EndFeatures.BULB_MOSS) + .feature(EndFeatures.BULB_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.END_SLIME, 30, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 8c9ff1baf..5d0b2bf5e 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -1,36 +1,43 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class BlossomingSpiresBiome extends EndBiome { +public class BlossomingSpiresBiome extends EndBiome.Config { public BlossomingSpiresBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("blossoming_spires")) - .addCustomData("has_caves", false) - .setFogColor(241, 146, 229) - .setFogDensity(1.7F) - .setPlantsColor(122, 45, 122) - .setSurface(EndBlocks.PINK_MOSS) - .setMusic(EndSounds.MUSIC_FOREST) - .setLoop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) - .addFeature(EndFeatures.SPIRE) - .addFeature(EndFeatures.FLOATING_SPIRE) - .addFeature(EndFeatures.TENANEA) - .addFeature(EndFeatures.TENANEA_BUSH) - .addFeature(EndFeatures.BULB_VINE) - .addFeature(EndFeatures.BUSHY_GRASS) - .addFeature(EndFeatures.BUSHY_GRASS_WG) - .addFeature(EndFeatures.BLOSSOM_BERRY) - .addFeature(EndFeatures.TWISTED_MOSS) - .addFeature(EndFeatures.TWISTED_MOSS_WOOD) - .addFeature(EndFeatures.SILK_MOTH_NEST) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4) - .addMobSpawn(EndEntities.SILK_MOTH, 5, 1, 2)); + super("blossoming_spires"); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(241, 146, 229) + .fogDensity(1.7F) + .plantsColor(122, 45, 122) + .surface(EndBlocks.PINK_MOSS) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) + .feature(EndFeatures.SPIRE) + .feature(EndFeatures.FLOATING_SPIRE) + .feature(EndFeatures.TENANEA) + .feature(EndFeatures.TENANEA_BUSH) + .feature(EndFeatures.BULB_VINE) + .feature(EndFeatures.BUSHY_GRASS) + .feature(EndFeatures.BUSHY_GRASS_WG) + .feature(EndFeatures.BLOSSOM_BERRY) + .feature(EndFeatures.TWISTED_MOSS) + .feature(EndFeatures.TWISTED_MOSS_WOOD) + .feature(EndFeatures.SILK_MOTH_NEST) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.SILK_MOTH, 5, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 5881f117d..af608a9a9 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -1,44 +1,47 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.Features; -import net.minecraft.data.worldgen.StructureFeatures; +import net.minecraft.data.worldgen.placement.EndPlacements; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class ChorusForestBiome extends EndBiome { +public class ChorusForestBiome extends EndBiome.Config { public ChorusForestBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("chorus_forest")) - .setFogColor(87, 26, 87) - .setFogDensity(1.5F) - .setPlantsColor(122, 45, 122) - .setWaterAndFogColor(73, 30, 73) - .setSurface(EndBlocks.CHORUS_NYLIUM) - .setParticles(ParticleTypes.PORTAL, 0.01F) - .setLoop(EndSounds.AMBIENT_CHORUS_FOREST) - .setMusic(EndSounds.MUSIC_DARK) - .addFeature(EndFeatures.VIOLECITE_LAYER) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.PYTHADENDRON_TREE) - .addFeature(EndFeatures.PYTHADENDRON_BUSH) - .addFeature(EndFeatures.PURPLE_POLYPORE) - .addFeature(Decoration.VEGETAL_DECORATION, Features.CHORUS_PLANT) - .addFeature(Decoration.VEGETAL_DECORATION, Features.CHORUS_PLANT) - .addFeature(EndFeatures.CHORUS_GRASS) - .addFeature(EndFeatures.CHORUS_MUSHROOM) - .addFeature(EndFeatures.TAIL_MOSS) - .addFeature(EndFeatures.TAIL_MOSS_WOOD) - .addFeature(EndFeatures.CHARNIA_PURPLE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EndEntities.END_SLIME, 5, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4)); + super("chorus_forest"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(87, 26, 87) + .fogDensity(1.5F) + .plantsColor(122, 45, 122) + .waterAndFogColor(73, 30, 73) + .surface(EndBlocks.CHORUS_NYLIUM) + .particles(ParticleTypes.PORTAL, 0.01F) + .loop(EndSounds.AMBIENT_CHORUS_FOREST) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.VIOLECITE_LAYER) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.PYTHADENDRON_TREE) + .feature(EndFeatures.PYTHADENDRON_BUSH) + .feature(EndFeatures.PURPLE_POLYPORE) + .feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) + //TODO: 1.18 why was this added twice? + //.feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) + .feature(EndFeatures.CHORUS_GRASS) + .feature(EndFeatures.CHORUS_MUSHROOM) + .feature(EndFeatures.TAIL_MOSS) + .feature(EndFeatures.TAIL_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_PURPLE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 50, 1, 4); } } diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 166fb6774..7ca59f310 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -1,23 +1,26 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class CrystalMountainsBiome extends EndBiome { +public class CrystalMountainsBiome extends EndBiome.Config { public CrystalMountainsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("crystal_mountains")) - .addStructureFeature(EndStructures.MOUNTAIN.getFeatureConfigured()) - .setPlantsColor(255, 133, 211) - .setSurface(EndBlocks.CRYSTAL_MOSS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addFeature(EndFeatures.ROUND_CAVE) - .addFeature(EndFeatures.CRYSTAL_GRASS) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("crystal_mountains"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) + .plantsColor(255, 133, 211) + .surface(EndBlocks.CRYSTAL_MOSS) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.ROUND_CAVE) + .feature(EndFeatures.CRYSTAL_GRASS) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 73a383f4a..6e2cd442a 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -1,35 +1,38 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class DragonGraveyardsBiome extends EndBiome { +public class DragonGraveyardsBiome extends EndBiome.Config { public DragonGraveyardsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("dragon_graveyards")) - .setGenChance(0.1F) - .setFogColor(244, 46, 79) - .setFogDensity(1.3F) - .setParticles(EndParticles.FIREFLY, 0.0007F) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .setSurface(EndBlocks.SANGNUM) - .setWaterAndFogColor(203, 59, 167) - .setPlantsColor(244, 46, 79) - .addFeature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) - .addFeature(EndFeatures.DRAGON_BONE_BLOCK_ORE) - .addFeature(EndFeatures.FALLEN_PILLAR) - .addFeature(EndFeatures.OBSIDIAN_BOULDER) - .addFeature(EndFeatures.GIGANTIC_AMARANITA) - .addFeature(EndFeatures.LARGE_AMARANITA) - .addFeature(EndFeatures.SMALL_AMARANITA) - .addFeature(EndFeatures.GLOBULAGUS) - .addFeature(EndFeatures.CLAWFERN) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("dragon_graveyards"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.genChance(0.1f) + .fogColor(244, 46, 79) + .fogDensity(1.3F) + .particles(EndParticles.FIREFLY, 0.0007F) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) + .surface(EndBlocks.SANGNUM) + .waterAndFogColor(203, 59, 167) + .plantsColor(244, 46, 79) + .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) + .feature(EndFeatures.DRAGON_BONE_BLOCK_ORE) + .feature(EndFeatures.FALLEN_PILLAR) + .feature(EndFeatures.OBSIDIAN_BOULDER) + .feature(EndFeatures.GIGANTIC_AMARANITA) + .feature(EndFeatures.LARGE_AMARANITA) + .feature(EndFeatures.SMALL_AMARANITA) + .feature(EndFeatures.GLOBULAGUS) + .feature(EndFeatures.CLAWFERN) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index ffb6b087e..4377676a5 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -1,29 +1,31 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class DryShrublandBiome extends EndBiome { +public class DryShrublandBiome extends EndBiome.Config { public DryShrublandBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("dry_shrubland")) - .setFogColor(132, 35, 13) - .setFogDensity(1.2F) - .setWaterAndFogColor(113, 88, 53) - .setPlantsColor(237, 122, 66) - .setSurface(EndBlocks.RUTISCUS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addFeature(EndFeatures.LUCERNIA_BUSH_RARE) - .addFeature(EndFeatures.ORANGO) - .addFeature(EndFeatures.AERIDIUM) - .addFeature(EndFeatures.LUTEBUS) - .addFeature(EndFeatures.LAMELLARIUM) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("dry_shrubland"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(132, 35, 13) + .fogDensity(1.2F) + .waterAndFogColor(113, 88, 53) + .plantsColor(237, 122, 66) + .surface(EndBlocks.RUTISCUS) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.LUCERNIA_BUSH_RARE) + .feature(EndFeatures.ORANGO) + .feature(EndFeatures.AERIDIUM) + .feature(EndFeatures.LUTEBUS) + .feature(EndFeatures.LAMELLARIUM) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index ec648b465..37f1ef07a 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -1,26 +1,29 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class DustWastelandsBiome extends EndBiome { +public class DustWastelandsBiome extends EndBiome.Config { public DustWastelandsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("dust_wastelands")) - .setFogColor(226, 239, 168) - .setFogDensity(2) - .setWaterAndFogColor(192, 180, 131) - .setSurface(EndBlocks.ENDSTONE_DUST) - .setDepth(1.5F) - .setParticles(ParticleTypes.WHITE_ASH, 0.01F) - .setLoop(EndSounds.AMBIENT_DUST_WASTELANDS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("dust_wastelands"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(192, 180, 131) + .surface(EndBlocks.ENDSTONE_DUST) + //TODO: 1.18 removed + //.depth(1.5F) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .music(EndSounds.MUSIC_OPENSPACE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 11ff82279..a587e832e 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -1,10 +1,7 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBlocks; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -12,38 +9,42 @@ import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class FoggyMushroomlandBiome extends EndBiome { +public class FoggyMushroomlandBiome extends EndBiome.Config { public FoggyMushroomlandBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("foggy_mushroomland")) - .addStructureFeature(EndStructures.GIANT_MOSSY_GLOWSHROOM - .getFeatureConfigured()) - .setPlantsColor(73, 210, 209) - .setFogColor(41, 122, 173) - .setFogDensity(3) - .setWaterAndFogColor(119, 227, 250) - .setSurface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .setLoop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) - .setMusic(EndSounds.MUSIC_FOREST) - .addFeature(EndFeatures.END_LAKE) - .addFeature(EndFeatures.MOSSY_GLOWSHROOM) - .addFeature(EndFeatures.BLUE_VINE) - .addFeature(EndFeatures.UMBRELLA_MOSS) - .addFeature(EndFeatures.CREEPING_MOSS) - .addFeature(EndFeatures.DENSE_VINE) - //.addFeature(EndFeatures.PEARLBERRY) - .addFeature(EndFeatures.CYAN_MOSS) - .addFeature(EndFeatures.CYAN_MOSS_WOOD) - .addFeature(EndFeatures.END_LILY) - .addFeature(EndFeatures.BUBBLE_CORAL) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EndEntities.DRAGONFLY, 80, 2, 5) - .addMobSpawn(EndEntities.END_FISH, 20, 2, 5) - .addMobSpawn(EndEntities.CUBOZOA, 10, 3, 8) - .addMobSpawn(EndEntities.END_SLIME, 10, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); + super("foggy_mushroomland"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.GIANT_MOSSY_GLOWSHROOM.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(41, 122, 173) + .fogDensity(3) + .waterAndFogColor(119, 227, 250) + //TODO: 1.18 surface Rules + //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) + .music(EndSounds.MUSIC_FOREST) + .feature(EndFeatures.END_LAKE) + .feature(EndFeatures.MOSSY_GLOWSHROOM) + .feature(EndFeatures.BLUE_VINE) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.DENSE_VINE) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CYAN_MOSS) + .feature(EndFeatures.CYAN_MOSS_WOOD) + .feature(EndFeatures.END_LILY) + .feature(EndFeatures.BUBBLE_CORAL) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.DRAGONFLY, 80, 2, 5) + .spawn(EndEntities.END_FISH, 20, 2, 5) + .spawn(EndEntities.CUBOZOA, 10, 3, 8) + .spawn(EndEntities.END_SLIME, 10, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 61cc949c6..55d932650 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -1,40 +1,42 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class GlowingGrasslandsBiome extends EndBiome { +public class GlowingGrasslandsBiome extends EndBiome.Config { public GlowingGrasslandsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("glowing_grasslands")) - .setFogColor(99, 228, 247) - .setFogDensity(1.3F) - .setParticles(EndParticles.FIREFLY, 0.001F) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .setSurface(EndBlocks.END_MOSS) - .setWaterAndFogColor(92, 250, 230) - .setPlantsColor(73, 210, 209) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.LUMECORN) - .addFeature(EndFeatures.BLOOMING_COOKSONIA) - .addFeature(EndFeatures.SALTEAGO) - .addFeature(EndFeatures.VAIOLUSH_FERN) - .addFeature(EndFeatures.FRACTURN) - .addFeature(EndFeatures.UMBRELLA_MOSS_RARE) - .addFeature(EndFeatures.CREEPING_MOSS_RARE) - .addFeature(EndFeatures.TWISTED_UMBRELLA_MOSS_RARE) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("glowing_grasslands"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(99, 228, 247) + .fogDensity(1.3F) + .particles(EndParticles.FIREFLY, 0.001F) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) + .surface(EndBlocks.END_MOSS) + .waterAndFogColor(92, 250, 230) + .plantsColor(73, 210, 209) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.LUMECORN) + .feature(EndFeatures.BLOOMING_COOKSONIA) + .feature(EndFeatures.SALTEAGO) + .feature(EndFeatures.VAIOLUSH_FERN) + .feature(EndFeatures.FRACTURN) + .feature(EndFeatures.UMBRELLA_MOSS_RARE) + .feature(EndFeatures.CREEPING_MOSS_RARE) + .feature(EndFeatures.TWISTED_UMBRELLA_MOSS_RARE) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 94dd756b9..6ab11658f 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -1,40 +1,42 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class LanternWoodsBiome extends EndBiome { +public class LanternWoodsBiome extends EndBiome.Config { public LanternWoodsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("lantern_woods")) - .setFogColor(189, 82, 70) - .setFogDensity(1.1F) - .setWaterAndFogColor(171, 234, 226) - .setPlantsColor(254, 85, 57) - .setSurface(EndBlocks.RUTISCUS) - .setMusic(EndSounds.MUSIC_FOREST) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .addFeature(EndFeatures.END_LAKE_NORMAL) - .addFeature(EndFeatures.FLAMAEA) - .addFeature(EndFeatures.LUCERNIA) - .addFeature(EndFeatures.LUCERNIA_BUSH) - .addFeature(EndFeatures.FILALUX) - .addFeature(EndFeatures.AERIDIUM) - .addFeature(EndFeatures.LAMELLARIUM) - .addFeature(EndFeatures.BOLUX_MUSHROOM) - .addFeature(EndFeatures.AURANT_POLYPORE) - .addFeature(EndFeatures.POND_ANEMONE) - .addFeature(EndFeatures.CHARNIA_ORANGE) - .addFeature(EndFeatures.CHARNIA_RED) - .addFeature(EndFeatures.RUSCUS) - .addFeature(EndFeatures.RUSCUS_WOOD) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("lantern_woods"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(189, 82, 70) + .fogDensity(1.1F) + .waterAndFogColor(171, 234, 226) + .plantsColor(254, 85, 57) + .surface(EndBlocks.RUTISCUS) + .music(EndSounds.MUSIC_FOREST) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .feature(EndFeatures.END_LAKE_NORMAL) + .feature(EndFeatures.FLAMAEA) + .feature(EndFeatures.LUCERNIA) + .feature(EndFeatures.LUCERNIA_BUSH) + .feature(EndFeatures.FILALUX) + .feature(EndFeatures.AERIDIUM) + .feature(EndFeatures.LAMELLARIUM) + .feature(EndFeatures.BOLUX_MUSHROOM) + .feature(EndFeatures.AURANT_POLYPORE) + .feature(EndFeatures.POND_ANEMONE) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .feature(EndFeatures.RUSCUS) + .feature(EndFeatures.RUSCUS_WOOD) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 36027f3d8..42400124a 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -1,42 +1,46 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBlocks; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class MegalakeBiome extends EndBiome { +public class MegalakeBiome extends EndBiome.Config { public MegalakeBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("megalake")) - .addStructureFeature(EndStructures.MEGALAKE.getFeatureConfigured()) - .setPlantsColor(73, 210, 209) - .setFogColor(178, 209, 248) - .setWaterAndFogColor(96, 163, 255) - .setFogDensity(1.75F) - .setMusic(EndSounds.MUSIC_WATER) - .setLoop(EndSounds.AMBIENT_MEGALAKE) - .setSurface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) - .setDepth(0F) - .addFeature(EndFeatures.END_LOTUS) - .addFeature(EndFeatures.END_LOTUS_LEAF) - .addFeature(EndFeatures.BUBBLE_CORAL_RARE) - .addFeature(EndFeatures.END_LILY_RARE) - .addFeature(EndFeatures.UMBRELLA_MOSS) - .addFeature(EndFeatures.CREEPING_MOSS) - //.addFeature(EndFeatures.PEARLBERRY) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addFeature(EndFeatures.MENGER_SPONGE) - .addMobSpawn(EndEntities.DRAGONFLY, 50, 1, 3) - .addMobSpawn(EndEntities.END_FISH, 50, 3, 8) - .addMobSpawn(EndEntities.CUBOZOA, 50, 3, 8) - .addMobSpawn(EndEntities.END_SLIME, 5, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); + super("megalake"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.MEGALAKE.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(178, 209, 248) + .waterAndFogColor(96, 163, 255) + .fogDensity(1.75F) + .music(EndSounds.MUSIC_WATER) + .loop(EndSounds.AMBIENT_MEGALAKE) + //TODO: 1.18 surface Rules + //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) + //TODO: 1.18 removed + //.depth(0F) + .feature(EndFeatures.END_LOTUS) + .feature(EndFeatures.END_LOTUS_LEAF) + .feature(EndFeatures.BUBBLE_CORAL_RARE) + .feature(EndFeatures.END_LILY_RARE) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .feature(EndFeatures.MENGER_SPONGE) + .spawn(EndEntities.DRAGONFLY, 50, 1, 3) + .spawn(EndEntities.END_FISH, 50, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index c4dd17a95..70fed1749 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -1,8 +1,7 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -11,35 +10,40 @@ import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class MegalakeGroveBiome extends EndBiome { +public class MegalakeGroveBiome extends EndBiome.Config { public MegalakeGroveBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("megalake_grove")) - .addStructureFeature(EndStructures.MEGALAKE_SMALL.getFeatureConfigured()) - .setPlantsColor(73, 210, 209) - .setFogColor(178, 209, 248) - .setWaterAndFogColor(96, 163, 255) - .setFogDensity(2.0F) - .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) - .setMusic(EndSounds.MUSIC_WATER) - .setLoop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .setSurface(EndBlocks.END_MOSS) - .setDepth(0F) - .addFeature(EndFeatures.LACUGROVE) - .addFeature(EndFeatures.END_LOTUS) - .addFeature(EndFeatures.END_LOTUS_LEAF) - .addFeature(EndFeatures.BUBBLE_CORAL_RARE) - .addFeature(EndFeatures.END_LILY_RARE) - .addFeature(EndFeatures.UMBRELLA_MOSS) - //.addFeature(EndFeatures.PEARLBERRY) - .addFeature(EndFeatures.CREEPING_MOSS) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addFeature(EndFeatures.MENGER_SPONGE) - .addMobSpawn(EndEntities.DRAGONFLY, 20, 1, 3) - .addMobSpawn(EndEntities.END_FISH, 20, 3, 8) - .addMobSpawn(EndEntities.CUBOZOA, 50, 3, 8) - .addMobSpawn(EndEntities.END_SLIME, 5, 1, 2) - .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); + super("megalake_grove"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.MEGALAKE_SMALL.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(178, 209, 248) + .waterAndFogColor(96, 163, 255) + .fogDensity(2.0F) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .music(EndSounds.MUSIC_WATER) + .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) + .surface(EndBlocks.END_MOSS) + //TODO: 1.18 removed + //.depth(0F) + .feature(EndFeatures.LACUGROVE) + .feature(EndFeatures.END_LOTUS) + .feature(EndFeatures.END_LOTUS_LEAF) + .feature(EndFeatures.BUBBLE_CORAL_RARE) + .feature(EndFeatures.END_LILY_RARE) + .feature(EndFeatures.UMBRELLA_MOSS) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .feature(EndFeatures.MENGER_SPONGE) + .spawn(EndEntities.DRAGONFLY, 20, 1, 3) + .spawn(EndEntities.END_FISH, 20, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 100783245..b3d69dc9d 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -1,34 +1,36 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBlocks; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class NeonOasisBiome extends EndBiome { +public class NeonOasisBiome extends EndBiome.Config { public NeonOasisBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("neon_oasis")) - .setGenChance(0.5F) - .setFogColor(226, 239, 168) - .setFogDensity(2) - .setWaterAndFogColor(106, 238, 215) - .setSurface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) - .setParticles(ParticleTypes.WHITE_ASH, 0.01F) - .setLoop(EndSounds.AMBIENT_DUST_WASTELANDS) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .addFeature(EndFeatures.DESERT_LAKE) - .addFeature(EndFeatures.NEON_CACTUS) - .addFeature(EndFeatures.UMBRELLA_MOSS) - .addFeature(EndFeatures.CREEPING_MOSS) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_RED) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("neon_oasis"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.genChance(0.5F) + .fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(106, 238, 215) + //TODO: 1.18 surface Rules + //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.DESERT_LAKE) + .feature(EndFeatures.NEON_CACTUS) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 6dd987339..5628dac79 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -2,24 +2,27 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; -public class PaintedMountainsBiome extends EndBiome { +public class PaintedMountainsBiome extends EndBiome.Config { public PaintedMountainsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("painted_mountains")) - .addStructureFeature(EndStructures.PAINTED_MOUNTAIN.getFeatureConfigured()) - .setFogColor(226, 239, 168) - .setFogDensity(2) - .setWaterAndFogColor(192, 180, 131) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_DUST_WASTELANDS) - .setSurface(EndBlocks.ENDSTONE_DUST) - .setParticles(ParticleTypes.WHITE_ASH, 0.01F) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("painted_mountains"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.structure(EndStructures.PAINTED_MOUNTAIN.getFeatureConfigured()) + .fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(192, 180, 131) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .surface(EndBlocks.ENDSTONE_DUST) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 97cf1f6d4..b83e742cd 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -1,44 +1,46 @@ package ru.betterend.world.biome.land; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class ShadowForestBiome extends EndBiome { +public class ShadowForestBiome extends EndBiome.Config { public ShadowForestBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("shadow_forest")) - .setFogColor(0, 0, 0) - .setFogDensity(2.5F) - .setPlantsColor(45, 45, 45) - .setWaterAndFogColor(42, 45, 80) - .setSurface(EndBlocks.SHADOW_GRASS) - .setParticles(ParticleTypes.MYCELIUM, 0.01F) - .setLoop(EndSounds.AMBIENT_CHORUS_FOREST) - .setMusic(EndSounds.MUSIC_DARK) - .addFeature(EndFeatures.VIOLECITE_LAYER) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(EndFeatures.DRAGON_TREE) - .addFeature(EndFeatures.DRAGON_TREE_BUSH) - .addFeature(EndFeatures.SHADOW_PLANT) - .addFeature(EndFeatures.MURKWEED) - .addFeature(EndFeatures.NEEDLEGRASS) - .addFeature(EndFeatures.SHADOW_BERRY) - .addFeature(EndFeatures.TWISTED_VINE) - .addFeature(EndFeatures.PURPLE_POLYPORE) - .addFeature(EndFeatures.TAIL_MOSS) - .addFeature(EndFeatures.TAIL_MOSS_WOOD) - .addFeature(EndFeatures.CHARNIA_PURPLE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EndEntities.SHADOW_WALKER, 80, 2, 4) - .addMobSpawn(EntityType.ENDERMAN, 40, 1, 4) - .addMobSpawn(EntityType.PHANTOM, 1, 1, 2)); + super("shadow_forest"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(0, 0, 0) + .fogDensity(2.5F) + .plantsColor(45, 45, 45) + .waterAndFogColor(42, 45, 80) + .surface(EndBlocks.SHADOW_GRASS) + .particles(ParticleTypes.MYCELIUM, 0.01F) + .loop(EndSounds.AMBIENT_CHORUS_FOREST) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.VIOLECITE_LAYER) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.DRAGON_TREE) + .feature(EndFeatures.DRAGON_TREE_BUSH) + .feature(EndFeatures.SHADOW_PLANT) + .feature(EndFeatures.MURKWEED) + .feature(EndFeatures.NEEDLEGRASS) + .feature(EndFeatures.SHADOW_BERRY) + .feature(EndFeatures.TWISTED_VINE) + .feature(EndFeatures.PURPLE_POLYPORE) + .feature(EndFeatures.TAIL_MOSS) + .feature(EndFeatures.TAIL_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_PURPLE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.SHADOW_WALKER, 80, 2, 4) + .spawn(EntityType.ENDERMAN, 40, 1, 4) + .spawn(EntityType.PHANTOM, 1, 1, 2); } } diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 490874c1d..70415a3b1 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,38 +1,47 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -import ru.betterend.world.surface.SurfaceBuilders; -public class SulphurSpringsBiome extends EndBiome { +public class SulphurSpringsBiome extends EndBiome.Config { public SulphurSpringsBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("sulphur_springs")) - .addCustomData("has_caves", false) - .setSurface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) - .setMusic(EndSounds.MUSIC_OPENSPACE) - .setLoop(EndSounds.AMBIENT_SULPHUR_SPRINGS) - .setWaterColor(25, 90, 157) - .setWaterFogColor(30, 65, 61) - .setFogColor(207, 194, 62) - .setFogDensity(1.5F) - .setDepth(0F) - .setParticles(EndParticles.SULPHUR_PARTICLE, 0.001F) - .addFeature(EndFeatures.GEYSER) - .addFeature(EndFeatures.SURFACE_VENT) - .addFeature(EndFeatures.SULPHURIC_LAKE) - .addFeature(EndFeatures.SULPHURIC_CAVE) - .addFeature(EndFeatures.HYDRALUX) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_ORANGE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addMobSpawn(EndEntities.END_FISH, 50, 3, 8) - .addMobSpawn(EndEntities.CUBOZOA, 50, 3, 8) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4)); + super("sulphur_springs"); + } + + @Override + protected boolean hasCaves() { + return false; + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder + //TODO: 1.18 surface Rules + //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) + .waterColor(25, 90, 157) + .waterFogColor(30, 65, 61) + .fogColor(207, 194, 62) + .fogDensity(1.5F) + //TODO: 1.18 removed + //.depth(0F) + .particles(EndParticles.SULPHUR_PARTICLE, 0.001F) + .feature(EndFeatures.GEYSER) + .feature(EndFeatures.SURFACE_VENT) + .feature(EndFeatures.SULPHURIC_LAKE) + .feature(EndFeatures.SULPHURIC_CAVE) + .feature(EndFeatures.HYDRALUX) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .spawn(EndEntities.END_FISH, 50, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EntityType.ENDERMAN, 50, 1, 4); } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index efc91e208..02bd2d2e2 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,27 +1,29 @@ package ru.betterend.world.biome.land; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -import ru.betterend.world.surface.SurfaceBuilders; -public class UmbraValleyBiome extends EndBiome { +public class UmbraValleyBiome extends EndBiome.Config { public UmbraValleyBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("umbra_valley")) - .setFogColor(100, 100, 100) - .setPlantsColor(172, 189, 190) - .setWaterAndFogColor(69, 104, 134) - .setSurface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) - .setParticles(EndParticles.AMBER_SPHERE, 0.0001F) - .setLoop(EndSounds.UMBRA_VALLEY) - .setMusic(EndSounds.MUSIC_DARK) - .addFeature(EndFeatures.UMBRALITH_ARCH) - .addFeature(EndFeatures.THIN_UMBRALITH_ARCH) - .addFeature(EndFeatures.INFLEXIA) - .addFeature(EndFeatures.FLAMMALIX) - ); + super("umbra_valley"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(100, 100, 100) + .plantsColor(172, 189, 190) + .waterAndFogColor(69, 104, 134) + //TODO: 1.18 surface Rules + //.surface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .particles(EndParticles.AMBER_SPHERE, 0.0001F) + .loop(EndSounds.UMBRA_VALLEY) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.UMBRALITH_ARCH) + .feature(EndFeatures.THIN_UMBRALITH_ARCH) + .feature(EndFeatures.INFLEXIA) + .feature(EndFeatures.FLAMMALIX); } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index ae9059489..f9b7c9eb0 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -1,44 +1,46 @@ package ru.betterend.world.biome.land; -import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.world.entity.EntityType; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; -public class UmbrellaJungleBiome extends EndBiome { +public class UmbrellaJungleBiome extends EndBiome.Config { public UmbrellaJungleBiome() { - super(new BCLBiomeDef(BetterEnd.makeID("umbrella_jungle")) - .setFogColor(87, 223, 221) - .setWaterAndFogColor(119, 198, 253) - .setFoliageColor(27, 183, 194) - .setFogDensity(2.3F) - .setParticles(EndParticles.JUNGLE_SPORE, 0.001F) - .setMusic(EndSounds.MUSIC_FOREST) - .setLoop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .setSurface(EndBlocks.JUNGLE_MOSS) - .addFeature(EndFeatures.END_LAKE) - .addFeature(EndFeatures.UMBRELLA_TREE) - .addFeature(EndFeatures.JELLYSHROOM) - .addFeature(EndFeatures.TWISTED_UMBRELLA_MOSS) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_FLOOR) - .addFeature(EndFeatures.JUNGLE_GRASS) - .addFeature(EndFeatures.CYAN_MOSS) - .addFeature(EndFeatures.CYAN_MOSS_WOOD) - .addFeature(EndFeatures.JUNGLE_FERN_WOOD) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_WALL) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_WOOD) - .addFeature(EndFeatures.SMALL_JELLYSHROOM_CEIL) - .addFeature(EndFeatures.JUNGLE_VINE) - .addFeature(EndFeatures.CHARNIA_CYAN) - .addFeature(EndFeatures.CHARNIA_GREEN) - .addFeature(EndFeatures.CHARNIA_LIGHT_BLUE) - .addFeature(EndFeatures.CHARNIA_RED_RARE) - .addStructureFeature(StructureFeatures.END_CITY) - .addMobSpawn(EntityType.ENDERMAN, 50, 1, 2)); + super("umbrella_jungle"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(87, 223, 221) + .waterAndFogColor(119, 198, 253) + .foliageColor(27, 183, 194) + .fogDensity(2.3F) + .particles(EndParticles.JUNGLE_SPORE, 0.001F) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) + .surface(EndBlocks.JUNGLE_MOSS) + .feature(EndFeatures.END_LAKE) + .feature(EndFeatures.UMBRELLA_TREE) + .feature(EndFeatures.JELLYSHROOM) + .feature(EndFeatures.TWISTED_UMBRELLA_MOSS) + .feature(EndFeatures.SMALL_JELLYSHROOM_FLOOR) + .feature(EndFeatures.JUNGLE_GRASS) + .feature(EndFeatures.CYAN_MOSS) + .feature(EndFeatures.CYAN_MOSS_WOOD) + .feature(EndFeatures.JUNGLE_FERN_WOOD) + .feature(EndFeatures.SMALL_JELLYSHROOM_WALL) + .feature(EndFeatures.SMALL_JELLYSHROOM_WOOD) + .feature(EndFeatures.SMALL_JELLYSHROOM_CEIL) + .feature(EndFeatures.JUNGLE_VINE) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } } \ No newline at end of file From 6a8ad29a70d24a653acfe5590b514ece2556f860 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 12:35:05 +0100 Subject: [PATCH 12/93] BYG-Integration compile fixes --- .../integration/byg/biomes/BYGBiomes.java | 3 +- .../byg/biomes/NightshadeRedwoods.java | 119 +++++++----- .../byg/biomes/OldBulbisGardens.java | 178 +++++++++--------- .../java/ru/betterend/registry/EndBiomes.java | 5 +- 4 files changed, 166 insertions(+), 139 deletions(-) diff --git a/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java b/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java index 013afbe9e..9d01f412e 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java @@ -1,5 +1,6 @@ package ru.betterend.integration.byg.biomes; +import ru.betterend.BetterEnd; import ru.betterend.integration.Integrations; import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.EndBiome; @@ -11,7 +12,7 @@ public class BYGBiomes { //public static final EndBiome ETHERIAL_GROVE = EndBiomes.registerSubBiomeIntegration(new EterialGrove()); public static void register() { - System.out.println("Registered " + OLD_BULBIS_GARDENS); + BetterEnd.LOGGER.info("Registered " + OLD_BULBIS_GARDENS); } public static void addBiomes() { diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index 249b35018..a3b6df636 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -1,69 +1,84 @@ package ru.betterend.integration.byg.biomes; +import java.util.List; + import net.minecraft.core.particles.ParticleTypes; import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSpecialEffects; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import ru.bclib.BCLib; -import ru.bclib.world.biomes.BCLBiomeDef; -import ru.betterend.BetterEnd; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.integration.Integrations; import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; -import java.util.List; +public class NightshadeRedwoods extends EndBiome.Config { + public NightshadeRedwoods() { + super("nightshade_redwoods"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("nightshade_forest"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); + + builder.fogColor(140, 108, 47) + .fogDensity(1.5F) + .waterAndFogColor(55, 70, 186) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules +// .setSurface(biome.getGenerationSettings() +// .getSurfaceBuilder() +// .get()) + .grassColor(48, 13, 89) + .plantsColor(200, 125, 9) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) + .feature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) + .feature(BYGFeatures.NIGHTSHADE_MOSS); + + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } + biome.getGenerationSettings() + .features() + .forEach((list) -> { + list.forEach((feature) -> { + builder.feature(Decoration.VEGETAL_DECORATION, feature.get()); + }); + }); -public class NightshadeRedwoods extends EndBiome { - public NightshadeRedwoods() { - super(makeDef()); - } - - private static BCLBiomeDef makeDef() { - Biome biome = Integrations.BYG.getBiome("nightshade_forest"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); - - BCLBiomeDef def = new BCLBiomeDef(BetterEnd.makeID("nightshade_redwoods")).setFogColor(140, 108, 47) - .setFogDensity(1.5F) - .setWaterAndFogColor(55, 70, 186) - .setFoliageColor(122, 17, 155) - .setParticles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - .setSurface(biome.getGenerationSettings() - .getSurfaceBuilder() - .get()) - .setGrassColor(48, 13, 89) - .setPlantsColor(200, 125, 9) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) - .addFeature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) - .addFeature(BYGFeatures.NIGHTSHADE_MOSS); - - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent().get(); - SoundEvent music = effects.getBackgroundMusic().get().getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings().get().getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings().get().getSoundEvent(); - def.setLoop(loop).setMusic(music).setAdditions(additions).setMood(mood); - } - biome.getGenerationSettings().features().forEach((list) -> { - list.forEach((feature) -> { - def.addFeature(Decoration.VEGETAL_DECORATION, feature.get()); - }); - }); - - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group).unwrap(); - list.forEach((entry) -> { - def.addMobSpawn(entry); - }); - } - - return def; - } + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } + } } diff --git a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java index d33d0bfb3..d7eb15e49 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -1,107 +1,117 @@ package ru.betterend.integration.byg.biomes; +import java.util.List; +import java.util.function.Supplier; + import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.BuiltinRegistries; -import net.minecraft.data.worldgen.Features; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSpecialEffects; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.placement.ConfiguredDecorator; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; import ru.bclib.BCLib; -import ru.bclib.world.biomes.BCLBiomeDef; +import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.BetterEnd; import ru.betterend.integration.Integrations; import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; -import java.util.List; -import java.util.function.Supplier; -class FeaturesAccesor extends Features { - static ConfiguredDecorator shadowHEIGHTMAP_SQUARE; - - static { - shadowHEIGHTMAP_SQUARE = Decorators.HEIGHTMAP_SQUARE; - } -} +public class OldBulbisGardens extends EndBiome.Config { + public OldBulbisGardens() { + super("old_bulbis_gardens"); + } + + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); + + Block ivis = Integrations.BYG.getBlock("ivis_phylium"); +// Block origin = biome.getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial() +// .getBlock(); + builder.fogColor(215, 132, 207) + .fogDensity(1.8F) + .waterAndFogColor(40, 0, 56) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules + //.surface(ivis, origin) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.OLD_BULBIS_TREE); + + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } + + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } + + List>> features = biome.getGenerationSettings() + .features(); + List> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); + if (vegetal.size() > 2) { + Supplier getter; + // Trees (first two features) + // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) + for (int i = 0; i < 2; i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); + feature = Registry.register( + BuiltinRegistries.PLACED_FEATURE, + id, + //TODO: 1.18 Check if this is correct + feature//.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) + ); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + // Grasses and other features + for (int i = 2; i < vegetal.size(); i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + } -public class OldBulbisGardens extends EndBiome { - public OldBulbisGardens() { - super(makeDef()); - } - - private static BCLBiomeDef makeDef() { - Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); - - Block ivis = Integrations.BYG.getBlock("ivis_phylium"); - Block origin = biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial().getBlock(); - BCLBiomeDef def = new BCLBiomeDef(BetterEnd.makeID("old_bulbis_gardens")).setFogColor(215, 132, 207) - .setFogDensity(1.8F) - .setWaterAndFogColor(40, 0, 56) - .setFoliageColor(122, 17, 155) - .setParticles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - .setSurface(ivis, origin) - .addFeature(EndFeatures.END_LAKE_RARE) - .addFeature(BYGFeatures.OLD_BULBIS_TREE); - - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent().get(); - SoundEvent music = effects.getBackgroundMusic().get().getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings().get().getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings().get().getSoundEvent(); - def.setLoop(loop).setMusic(music).setAdditions(additions).setMood(mood); - } - - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group).unwrap(); - list.forEach((entry) -> { - def.addMobSpawn(entry); - }); - } - - List>>> features = biome.getGenerationSettings().features(); - List>> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); - if (vegetal.size() > 2) { - Supplier> getter; - // Trees (first two features) - // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) - for (int i = 0; i < 2; i++) { - getter = vegetal.get(i); - ConfiguredFeature feature = getter.get(); - ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); - feature = Registry.register( - BuiltinRegistries.CONFIGURED_FEATURE, - id, - feature.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) - ); - def.addFeature(Decoration.VEGETAL_DECORATION, feature); - } - // Grasses and other features - for (int i = 2; i < vegetal.size(); i++) { - getter = vegetal.get(i); - ConfiguredFeature feature = getter.get(); - def.addFeature(Decoration.VEGETAL_DECORATION, feature); - } - } - - def.addFeature(EndFeatures.PURPLE_POLYPORE) - .addFeature(BYGFeatures.IVIS_MOSS_WOOD) - .addFeature(BYGFeatures.IVIS_MOSS) - .addFeature(BYGFeatures.IVIS_VINE) - .addFeature(BYGFeatures.IVIS_SPROUT); - - return def; - } + builder.feature(EndFeatures.PURPLE_POLYPORE) + .feature(BYGFeatures.IVIS_MOSS_WOOD) + .feature(BYGFeatures.IVIS_MOSS) + .feature(BYGFeatures.IVIS_VINE) + .feature(BYGFeatures.IVIS_SPROUT); + } } diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 04407e820..a09637e57 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -124,10 +124,11 @@ public static EndBiome registerBiome(EndBiome.Config biomeConfig, BiomeType type /** * Put integration sub-biome {@link EndBiome} into subbiomes list and registers it. * - * @param biome - {@link EndBiome} instance + * @param biomeConfig - {@link EndBiome.Config} instance * @return registered {@link EndBiome} */ - public static EndBiome registerSubBiomeIntegration(EndBiome biome) { + public static EndBiome registerSubBiomeIntegration(EndBiome.Config biomeConfig) { + EndBiome biome = EndBiome.create(biomeConfig); if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerBiome(biome); } From 6097311ca6c3d342d8668259040a6aeb10a77c67 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 14:38:16 +0100 Subject: [PATCH 13/93] Adapted Feature Classes --- .../features/EternalPortalStructure.java | 116 ++++++++---------- .../features/FeatureBaseStructure.java | 19 ++- .../features/GiantIceStarStructure.java | 71 +++++------ .../GiantMossyGlowshroomStructure.java | 20 ++- .../features/MegaLakeSmallStructure.java | 63 +++++----- .../features/MegaLakeStructure.java | 66 +++++----- .../features/MountainStructure.java | 76 ++++++------ .../features/PaintedMountainStructure.java | 43 ++++--- .../features/SDFStructureFeature.java | 62 +++++----- 9 files changed, 273 insertions(+), 263 deletions(-) diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index 4b9d0735f..136f49a56 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -1,80 +1,70 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.WorldgenRandom; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.util.StructureHelper; import ru.betterend.BetterEnd; import ru.betterend.world.structures.piece.NBTPiece; public class EternalPortalStructure extends FeatureBaseStructure { - private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); - private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); - - @Override - protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig, LevelHeightAccessor levelHeightAccessor) { - long x = (long) chunkPos.x * (long) chunkPos.x; - long z = (long) chunkPos.z * (long) chunkPos.z; - if (x + z < 1024L) { - return false; - } - if (chunkGenerator.getBaseHeight( - pos.getBlockX(8), - pos.getBlockX(8), - Heightmap.Types.WORLD_SURFACE_WG, - levelHeightAccessor - ) < 5) { - return false; - } - return super.isFeatureChunk( - chunkGenerator, - biomeSource, - worldSeed, - chunkRandom, - pos, - biome, - chunkPos, - featureConfig, - levelHeightAccessor - ); - } - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return PortalStructureStart::new; - } - - public static class PortalStructureStart extends StructureStart { - public PortalStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { - super(feature, pos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(8); - int z = chunkPos.getBlockZ(8); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - this.pieces.add(new NBTPiece( - STRUCTURE_ID, - STRUCTURE, - new BlockPos(x, y - 4, z), - random.nextInt(5), - true, - random - )); - } - } + private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); + private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); + + public EternalPortalStructure() { + super(PieceGeneratorSupplier.simple( + EternalPortalStructure::checkLocation, + EternalPortalStructure::generatePieces + )); + } + + protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + long x = (long) chunkPos.x * (long) chunkPos.x; + long z = (long) chunkPos.z * (long) chunkPos.z; + if (x + z < 1024L) { + return false; + } + if (chunkGenerator.getBaseHeight( + chunkPos.getBlockX(8), + chunkPos.getBlockZ(8), + Heightmap.Types.WORLD_SURFACE_WG, + levelHeightAccessor + ) < 5) { + return false; + } + return FeatureBaseStructure.checkLocation(context); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + int x = chunkPos.getBlockX(8); + int z = chunkPos.getBlockZ(8); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + structurePiecesBuilder.addPiece(new NBTPiece( + STRUCTURE_ID, + STRUCTURE, + new BlockPos(x, y - 4, z), + random.nextInt(5), + true, + random + )); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index ff3b5ad55..2a56e2b6f 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -1,30 +1,27 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; - -import java.util.Random; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; public abstract class FeatureBaseStructure extends StructureFeature { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); - public FeatureBaseStructure() { - super(NoneFeatureConfiguration.CODEC); + public FeatureBaseStructure(PieceGeneratorSupplier pieceGeneratorSupplier) { + super(NoneFeatureConfiguration.CODEC, pieceGeneratorSupplier); } - - @Override - protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig, LevelHeightAccessor levelHeightAccessor) { - return getGenerationHeight(pos, chunkGenerator, levelHeightAccessor) >= 20; + + protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor()) >= 20; } private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { diff --git a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java index 526f567a9..fa336cfcb 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java @@ -1,17 +1,18 @@ package ru.betterend.world.structures.features; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFRotation; import ru.bclib.sdf.operator.SDFTranslate; @@ -21,18 +22,17 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - public class GiantIceStarStructure extends SDFStructureFeature { - private final float minSize = 20; - private final float maxSize = 35; - private final int minCount = 25; - private final int maxCount = 40; - - @Override - protected SDF getSDF(BlockPos pos, Random random) { + private static final float minSize = 20; + private static final float maxSize = 35; + private static final int minCount = 25; + private static final int maxCount = 40; + + public GiantIceStarStructure() { + super(GiantIceStarStructure::generatePieces); + } + + protected static SDF getSDF(BlockPos pos, Random random) { float size = MHelper.randRange(minSize, maxSize, random); int count = MHelper.randRange(minCount, maxCount, random); List points = getFibonacciPoints(count); @@ -90,7 +90,7 @@ else if (distance < iceRadius) { }); } - private List getFibonacciPoints(int count) { + private static List getFibonacciPoints(int count) { float max = count - 1; List result = new ArrayList(count); for (int i = 0; i < count; i++) { @@ -103,28 +103,21 @@ private List getFibonacciPoints(int count) { } return result; } - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return StarStructureStart::new; - } - - public static class StarStructureStart extends StructureStart { - public StarStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { - super(feature, pos, references, seed); - } - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - BlockPos start = new BlockPos(x, MHelper.randRange(32, 128, random), z); - VoxelPiece piece = new VoxelPiece((world) -> { - ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); - }, random.nextInt()); - this.pieces.add(piece); - - //this.calculateBoundingBox(); - } + public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + BlockPos start = new BlockPos(x, MHelper.randRange(32, 128, random), z); + VoxelPiece piece = new VoxelPiece((world) -> { + getSDF(start, random).fillRecursive(world, start); + }, random.nextInt()); + structurePiecesBuilder.addPiece(piece); + + //this.calculateBoundingBox(); } } diff --git a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java index 94607759c..99267bf97 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java @@ -1,8 +1,14 @@ package ru.betterend.world.structures.features; +import java.util.List; +import java.util.Random; + import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFBinary; import ru.bclib.sdf.operator.SDFCoordModify; @@ -25,12 +31,16 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.List; -import java.util.Random; - public class GiantMossyGlowshroomStructure extends SDFStructureFeature { - @Override - protected SDF getSDF(BlockPos center, Random random) { + public GiantMossyGlowshroomStructure() { + super(GiantMossyGlowshroomStructure::generatePieces); + } + + public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + SDFStructureFeature.generatePieces(structurePiecesBuilder, context, GiantMossyGlowshroomStructure::getSDF); + } + + protected static SDF getSDF(BlockPos center, Random random) { SDFCappedCone cone1 = new SDFCappedCone().setHeight(2.5F).setRadius1(1.5F).setRadius2(2.5F); SDFCappedCone cone2 = new SDFCappedCone().setHeight(3F).setRadius1(2.5F).setRadius2(13F); SDF posedCone2 = new SDFTranslate().setTranslate(0, 5, 0).setSource(cone2); diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index 118b1f18b..55b94dc23 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -1,43 +1,48 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; public class MegaLakeSmallStructure extends FeatureBaseStructure { - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; - } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - float radius = MHelper.randRange(20, 40, random); - float depth = MHelper.randRange(5, 10, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); - } - } + public MegaLakeSmallStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeSmallStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + if (y > 5) { + float radius = MHelper.randRange(20, 40, random); + float depth = MHelper.randRange(5, 10, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index fd19a701d..d17dedf18 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -1,43 +1,51 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; public class MegaLakeStructure extends FeatureBaseStructure { - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; - } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - float radius = MHelper.randRange(32, 64, random); - float depth = MHelper.randRange(7, 15, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); - } - } + + + public MegaLakeStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + + if (y > 5) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + + float radius = MHelper.randRange(32, 64, random); + float depth = MHelper.randRange(7, 15, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } + } diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index 8f61a6f98..c04f97ea9 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -1,49 +1,55 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.CrystalMountainPiece; public class MountainStructure extends FeatureBaseStructure { - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; - } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - float radius = MHelper.randRange(50, 100, random); - float height = radius * MHelper.randRange(0.8F, 1.2F, random); - CrystalMountainPiece piece = new CrystalMountainPiece( - new BlockPos(x, y, z), - radius, - height, - random, - biome - ); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); - } - } + + public MountainStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MountainStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + if (y > 5) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + + float radius = MHelper.randRange(50, 100, random); + float height = radius * MHelper.randRange(0.8F, 1.2F, random); + CrystalMountainPiece piece = new CrystalMountainPiece( + new BlockPos(x, y, z), + radius, + height, + random, + biome + ); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } } + diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index d67faea44..0d8172051 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -1,7 +1,8 @@ package ru.betterend.world.structures.features; +import java.util.Random; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; @@ -9,33 +10,37 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.PaintedMountainPiece; public class PaintedMountainStructure extends FeatureBaseStructure { private static final BlockState[] VARIANTS; - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; + + public PaintedMountainStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + PaintedMountainStructure::generatePieces + )); } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 50) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); int count = MHelper.floor(height * MHelper.randRange(0.1F, 0.35F, random) + 1); @@ -43,12 +48,12 @@ public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkG for (int i = 0; i < count; i++) { slises[i] = VARIANTS[random.nextInt(VARIANTS.length)]; } - this.pieces.add(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises)); + structurePiecesBuilder.addPiece(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises)); } //this.calculateBoundingBox(); } - } + static { VARIANTS = new BlockState[] { diff --git a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java index 4e4e565e9..d2ca8d860 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -1,50 +1,46 @@ package ru.betterend.world.structures.features; +import java.util.Random; +import java.util.function.BiFunction; + import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import ru.bclib.sdf.SDF; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.Random; - public abstract class SDFStructureFeature extends FeatureBaseStructure { - - protected abstract SDF getSDF(BlockPos pos, Random random); - - @Override - public StructureFeature.StructureStartFactory getStartFactory() { - return SDFStructureStart::new; + public SDFStructureFeature(PieceGenerator generator) { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + generator + )); } - - public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); - } - - @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - BlockPos start = new BlockPos(x, y, z); - VoxelPiece piece = new VoxelPiece((world) -> { - ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); - }, random.nextInt()); - this.pieces.add(piece); - } - - //this.calculateBoundingBox(); + + public static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context, BiFunction sdf) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + if (y > 5) { + BlockPos start = new BlockPos(x, y, z); + VoxelPiece piece = new VoxelPiece((world) -> { + sdf.apply(start, random).fillRecursive(world, start); + }, random.nextInt()); + + structurePiecesBuilder.addPiece(piece); } + + //this.calculateBoundingBox(); } } From dca9f84ccfdd155189ef65457c87b244660abf5d Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 14:53:33 +0100 Subject: [PATCH 14/93] More compiler fixes --- .../blocks/DragonTreeSaplingBlock.java | 5 +-- .../betterend/blocks/EndLotusStemBlock.java | 7 +-- .../blocks/HelixTreeSaplingBlock.java | 3 +- .../blocks/HydrothermalVentBlock.java | 13 +++--- .../blocks/LacugroveSaplingBlock.java | 3 +- .../blocks/LucerniaSaplingBlock.java | 3 +- .../betterend/blocks/LumecornSeedBlock.java | 43 +++++++++++-------- .../blocks/MossyGlowshroomSaplingBlock.java | 3 +- .../blocks/NeonCactusPlantBlock.java | 14 +++--- .../blocks/PythadendronSaplingBlock.java | 9 +--- .../betterend/blocks/SmallAmaranitaBlock.java | 13 +++--- .../blocks/SmallJellyshroomBlock.java | 14 +++--- .../betterend/blocks/TenaneaSaplingBlock.java | 9 +--- .../blocks/UmbrellaTreeSaplingBlock.java | 11 +---- .../blocks/VentBubbleColumnBlock.java | 9 ++-- .../blocks/basis/PottableFeatureSapling.java | 12 ++++-- .../entities/EndStoneSmelterBlockEntity.java | 16 +++---- .../entities/EternalPedestalEntity.java | 4 +- .../entities/InfusionPedestalEntity.java | 4 +- .../complexmaterials/MetalMaterial.java | 2 +- .../mixin/common/EndPodiumFeatureMixin.java | 8 ++-- .../java/ru/betterend/util/BlockFixer.java | 9 ++-- .../features/PaintedMountainStructure.java | 2 +- 23 files changed, 110 insertions(+), 106 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java index 025701f0f..d60f262f6 100644 --- a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java @@ -13,10 +13,9 @@ public class DragonTreeSaplingBlock extends PottableFeatureSapling { public DragonTreeSaplingBlock() { super(); } - + @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.DRAGON_TREE.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java index 041f22ffa..4eb88dace 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.Map; + import com.google.common.collect.Maps; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -29,8 +32,6 @@ import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.util.BlocksHelper; -import java.util.Map; - public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlock, RenderLayerProvider { public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; @@ -88,7 +89,7 @@ public BlockState mirror(BlockState state, Mirror mirror) { @SuppressWarnings("deprecation") public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { if (state.getValue(WATERLOGGED)) { - world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } diff --git a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java index 788665b48..fb631a804 100644 --- a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java @@ -11,8 +11,7 @@ public class HelixTreeSaplingBlock extends PottableFeatureSapling { @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.HELIX_TREE.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 30d9be03e..780a35514 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -34,15 +38,12 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.entities.BlockEntityHydrothermalVent; import ru.betterend.registry.EndBlocks; -import java.util.Random; - @SuppressWarnings("deprecation") public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlock, LiquidBlockContainer, SimpleWaterloggedBlock { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; @@ -90,7 +91,8 @@ public BlockState updateShape(BlockState state, Direction facing, BlockState nei return Blocks.WATER.defaultBlockState(); } else if (state.getValue(WATERLOGGED) && facing == Direction.UP && neighborState.is(Blocks.WATER)) { - world.getBlockTicks().scheduleTick(pos, this, 20); + //TODO: 1.18 see if it still ticks + world./*getBlockTicks().*/scheduleTick(pos, this, 20); } return state; } @@ -118,7 +120,8 @@ public void tick(BlockState state, ServerLevel world, BlockPos pos, Random rando BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, EndBlocks.VENT_BUBBLE_COLUMN); - world.getBlockTicks().scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); + //TODO: 1.18 see if it still ticks + world./*getBlockTicks().*/scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); } } diff --git a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java index 0f6dd809b..fb328c0a3 100644 --- a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java @@ -15,8 +15,7 @@ public LacugroveSaplingBlock() { } @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.LACUGROVE.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java index 506d16917..d371ef994 100644 --- a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java @@ -15,8 +15,7 @@ public LucerniaSaplingBlock() { } @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.LUCERNIA.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index efd74d09a..c50867743 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -1,30 +1,39 @@ package ru.betterend.blocks; +import java.util.Optional; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; -import java.util.Random; - public class LumecornSeedBlock extends EndPlantWithAgeBlock { - - @Override - public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { - EndFeatures.LUMECORN.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); - } - - @Override - protected boolean isTerrain(BlockState state) { - return state.is(EndBlocks.END_MOSS); - } - - @Override - public BlockBehaviour.OffsetType getOffsetType() { - return BlockBehaviour.OffsetType.NONE; - } + + @Override + public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { + ((Feature) (EndFeatures.LUMECORN.getFeature())).place(new FeaturePlaceContext<>( + Optional.empty(), + world, + null, + random, + pos, + (NoneFeatureConfiguration) null)); + } + + @Override + protected boolean isTerrain(BlockState state) { + return state.is(EndBlocks.END_MOSS); + } + + @Override + public BlockBehaviour.OffsetType getOffsetType() { + return BlockBehaviour.OffsetType.NONE; + } } diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java index 705992f7e..6ed74344b 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java @@ -15,8 +15,7 @@ public MossyGlowshroomSaplingBlock() { } @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { + protected Feature getFeature(BlockState state) { return EndFeatures.MOSSY_GLOWSHROOM.getFeature(); } diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index c7234f0cb..c56749048 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -1,7 +1,12 @@ package ru.betterend.blocks; +import java.util.EnumMap; +import java.util.List; +import java.util.Random; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -46,10 +51,6 @@ import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndBlocks; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - @SuppressWarnings("deprecation") public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, RenderLayerProvider, PottablePlant { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; @@ -115,9 +116,10 @@ public FluidState getFluidState(BlockState state) { @Override public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { - world.getBlockTicks().scheduleTick(pos, this, 2); + //TODO: 1.18 Check if this still workd + world./*getBlockTicks().*/scheduleTick(pos, this, 2); if (state.getValue(WATERLOGGED)) { - world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } Direction dir = state.getValue(FACING); BlockState downState = world.getBlockState(pos.relative(dir.getOpposite())); diff --git a/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java b/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java index a965af01b..9d6afd70e 100644 --- a/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java @@ -4,20 +4,13 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class PythadendronSaplingBlock extends PottableFeatureSapling { public PythadendronSaplingBlock() { - super(); - } - - @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { - return EndFeatures.PYTHADENDRON_TREE.getFeature(); + super((state)->EndFeatures.PYTHADENDRON_TREE.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java index c0625123e..d8303db9a 100644 --- a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Optional; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; @@ -7,7 +10,9 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; @@ -16,8 +21,6 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; -import java.util.Random; - public class SmallAmaranitaBlock extends EndPlantBlock { private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 10, 12); @@ -30,8 +33,8 @@ protected boolean isTerrain(BlockState state) { public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { BlockPos bigPos = growBig(world, pos); if (bigPos != null) { - if (EndFeatures.GIGANTIC_AMARANITA.getFeature() - .place(new FeaturePlaceContext<>(world, null, random, bigPos, null))) { + if (((Feature)EndFeatures.GIGANTIC_AMARANITA.getFeature()) + .place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, bigPos, null))) { replaceMushroom(world, bigPos); replaceMushroom(world, bigPos.south()); replaceMushroom(world, bigPos.east()); @@ -39,7 +42,7 @@ public void performBonemeal(ServerLevel world, Random random, BlockPos pos, Bloc } return; } - EndFeatures.LARGE_AMARANITA.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); + ((Feature)EndFeatures.LARGE_AMARANITA.getFeature()).place( new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos, null)); } @Override diff --git a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java index a59f6de11..a2a6ebfc4 100644 --- a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java @@ -1,7 +1,13 @@ package ru.betterend.blocks; +import java.util.EnumMap; +import java.util.List; +import java.util.Optional; +import java.util.Random; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -20,7 +26,9 @@ import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; @@ -35,10 +43,6 @@ import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndFeatures; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - public class SmallJellyshroomBlock extends BaseAttachedBlock implements RenderLayerProvider, BonemealableBlock, PottablePlant { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); @@ -101,7 +105,7 @@ public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, Block @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { BlocksHelper.setWithUpdate(world, pos, Blocks.AIR); - EndFeatures.JELLYSHROOM.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); + ((Feature)EndFeatures.JELLYSHROOM.getFeature()).place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos, null)); } @Override diff --git a/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java b/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java index e0c7c2951..b56c1cfc4 100644 --- a/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java @@ -4,20 +4,13 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class TenaneaSaplingBlock extends PottableFeatureSapling { public TenaneaSaplingBlock() { - super(); - } - - @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { - return EndFeatures.TENANEA.getFeature(); + super((state)->EndFeatures.TENANEA.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java index 66c768703..0ff48c931 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java @@ -4,7 +4,6 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.bclib.client.render.BCLRenderLayer; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; @@ -12,15 +11,9 @@ public class UmbrellaTreeSaplingBlock extends PottableFeatureSapling { public UmbrellaTreeSaplingBlock() { - super(); + super((state)-> EndFeatures.UMBRELLA_TREE.getFeature()); } - - @Override - @SuppressWarnings("deprecation") - protected Feature getFeature() { - return EndFeatures.UMBRELLA_TREE.getFeature(); - } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.JUNGLE_MOSS); diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index 83babfe17..b0d2ba083 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Optional; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -33,9 +36,6 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Optional; -import java.util.Random; - public class VentBubbleColumnBlock extends Block implements BucketPickup, LiquidBlockContainer { public VentBubbleColumnBlock() { super(FabricBlockSettings.of(Material.BUBBLE_COLUMN).noOcclusion().noCollission().noDrops()); @@ -76,7 +76,8 @@ public BlockState updateShape(BlockState state, Direction direction, BlockState BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, this); - world.getBlockTicks().scheduleTick(up, this, 5); + //TODO: 1.18 check if this ticks + world./*getBlockTicks().*/scheduleTick(up, this, 5); } } return state; diff --git a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java index 20f5f24fc..22363d30e 100644 --- a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java +++ b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java @@ -1,14 +1,18 @@ package ru.betterend.blocks.basis; +import java.util.function.Function; + +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; import ru.bclib.blocks.FeatureSaplingBlock; import ru.betterend.interfaces.PottablePlant; public abstract class PottableFeatureSapling extends FeatureSaplingBlock implements PottablePlant { - public PottableFeatureSapling() { - super(); + public PottableFeatureSapling(Function> featureSupplier) { + super(featureSupplier); } - public PottableFeatureSapling(int light) { - super(light); + public PottableFeatureSapling(int light, Function> featureSupplier) { + super(light, featureSupplier); } } diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java index 7adad5af2..aa5851678 100644 --- a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -1,7 +1,12 @@ package ru.betterend.blocks.entities; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.fabric.api.registry.FuelRegistry; @@ -41,10 +46,6 @@ import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlockEntities; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity implements WorldlyContainer, RecipeHolder, StackedContentsCompatible { private static final int[] TOP_SLOTS = new int[] {0, 1}; @@ -429,8 +430,9 @@ public void load(CompoundTag tag) { } @Override - public CompoundTag save(CompoundTag tag) { - super.save(tag); + public void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putShort("BurnTime", (short) burnTime); tag.putShort("FuelTime", (short) fuelTime); tag.putShort("SmeltTime", (short) smeltTime); @@ -439,8 +441,6 @@ public CompoundTag save(CompoundTag tag) { CompoundTag usedRecipes = new CompoundTag(); recipesUsed.forEach((identifier, integer) -> usedRecipes.putInt(identifier.toString(), integer)); tag.put("RecipesUsed", usedRecipes); - - return tag; } public boolean canPlaceItem(int slot, ItemStack stack) { diff --git a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java index 84c2e74dc..4546cf14f 100644 --- a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java @@ -35,11 +35,11 @@ public void setLevel(Level level) { } @Override - public CompoundTag save(CompoundTag tag) { + public void saveAdditional(CompoundTag tag) { if (hasRitual()) { tag.put("ritual", linkedRitual.toTag(new CompoundTag())); } - return super.save(tag); + super.saveAdditional(tag); } @Override diff --git a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java index 6d03ed5c5..8d6781764 100644 --- a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java @@ -40,11 +40,11 @@ public boolean hasRitual() { } @Override - public CompoundTag save(CompoundTag tag) { + public void saveAdditional(CompoundTag tag) { if (hasRitual()) { tag.put("ritual", linkedRitual.toTag(new CompoundTag())); } - return super.save(tag); + super.saveAdditional(tag); } @Override diff --git a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java index 89736e674..87985bb0a 100644 --- a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java +++ b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java @@ -150,7 +150,7 @@ private MetalMaterial(String name, boolean hasOre, FabricBlockSettings settings, final int level = material.getLevel(); rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; - ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(rawOre, 1, 3, 1)) : null; + ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(()->rawOre, 1, 3, 1)) : null; alloyingOre = hasOre ? TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_alloying") : null; if (hasOre) { TagAPI.addTag(alloyingOre, ore, rawOre); diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 697202623..71514556f 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -1,5 +1,8 @@ package ru.betterend.mixin.common; +import java.util.Optional; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; @@ -23,8 +26,6 @@ import ru.betterend.BetterEnd; import ru.betterend.world.generator.GeneratorOptions; -import java.util.Random; - @Mixin(EndPodiumFeature.class) public class EndPodiumFeatureMixin { private static BlockPos be_portalPosition; @@ -56,7 +57,8 @@ else if (GeneratorOptions.replacePortal()) { private FeaturePlaceContext be_setPosOnGround(FeaturePlaceContext featurePlaceContext) { WorldGenLevel world = featurePlaceContext.level(); BlockPos pos = be_updatePortalPos(world); - return new FeaturePlaceContext<>( + return new FeaturePlaceContext( + Optional.empty(), world, featurePlaceContext.chunkGenerator(), featurePlaceContext.random(), diff --git a/src/main/java/ru/betterend/util/BlockFixer.java b/src/main/java/ru/betterend/util/BlockFixer.java index 89b2bc55c..f6fd4b065 100644 --- a/src/main/java/ru/betterend/util/BlockFixer.java +++ b/src/main/java/ru/betterend/util/BlockFixer.java @@ -1,6 +1,10 @@ package ru.betterend.util; +import java.util.Set; +import java.util.stream.IntStream; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -19,9 +23,6 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.registry.EndBlocks; -import java.util.Set; -import java.util.stream.IntStream; - public class BlockFixer { private static final BlockState AIR = Blocks.AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -75,7 +76,7 @@ else if (!state.getFluidState().isEmpty()) { for (Direction dir : BlocksHelper.HORIZONTAL) { if (level.isEmptyBlock(POS.relative(dir))) { try { - level.getLiquidTicks().scheduleTick(POS, state.getFluidState().getType(), 0); + level.scheduleTick(POS, state.getFluidState().getType(), 0); } catch (Exception e) {} break; diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index 0d8172051..086273467 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -40,7 +40,7 @@ protected static void generatePieces(StructurePiecesBuilder structurePiecesBuild if (y > 50) { //TODO: 1.18 right way to get biome? Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - + float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); int count = MHelper.floor(height * MHelper.randRange(0.1F, 0.35F, random) + 1); From 78cc82932f11a175dae860c308fdf07ec8de0154 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 16:39:30 +0100 Subject: [PATCH 15/93] removed reading of top/under/underwater material for now --- .../world/features/BiomeIslandFeature.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 22838b860..701f6d35c 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -8,8 +8,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; import ru.bclib.sdf.operator.SDFTranslate; @@ -25,21 +23,26 @@ public class BiomeIslandFeature extends DefaultFeature { private static OpenSimplexNoise simplexNoise = new OpenSimplexNoise(412L); private static BlockState topBlock = Blocks.GRASS_BLOCK.defaultBlockState(); private static BlockState underBlock = Blocks.DIRT.defaultBlockState(); - + @Override public boolean place(FeaturePlaceContext featureConfig) { final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); Biome biome = world.getBiome(pos); - SurfaceBuilderConfiguration surfaceConfig = biome.getGenerationSettings().getSurfaceBuilderConfig(); - BlockState topMaterial = surfaceConfig.getTopMaterial(); + int dist = BlocksHelper.downRay(world, pos, 10) + 1; + BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); + BlockState topMaterial = world.getBlockState(surfacePos); + + //TODO: 1.18 the block selection should be based on the surface rules of the biome if (BlocksHelper.isFluid(topMaterial)) { - topBlock = ((SurfaceBuilderBaseConfiguration) surfaceConfig).getUnderwaterMaterial(); + topBlock = Blocks.GRAVEL.defaultBlockState(); + underBlock = Blocks.STONE.defaultBlockState(); } else { - topBlock = topMaterial; + topBlock = topMaterial.is(Blocks.AIR)?Blocks.GRASS_BLOCK.defaultBlockState():topMaterial; + underBlock = Blocks.DIRT.defaultBlockState(); } - underBlock = surfaceConfig.getUnderMaterial(); + simplexNoise = new OpenSimplexNoise(world.getSeed()); CENTER.set(pos); ISLAND.fillRecursive(world, pos.below()); From 108d2bd710cac0b68d19ebcc84f489aaa11d5ab7 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 16:45:20 +0100 Subject: [PATCH 16/93] Fixed compiler errors for REI --- .../integration/rei/REIAlloyingCategory.java | 19 ++++++++++------- .../integration/rei/REIAnvilCategory.java | 21 +++++++++++-------- .../integration/rei/REIInfusionCategory.java | 19 +++++++---------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index 14d2a1e73..e24c0a1c5 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -1,26 +1,28 @@ package ru.betterend.integration.rei; +import java.text.DecimalFormat; +import java.util.List; + +import org.jetbrains.annotations.NotNull; + import com.google.common.collect.Lists; + import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; -import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.client.gui.GuiComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; -import org.jetbrains.annotations.NotNull; import ru.betterend.registry.EndBlocks; -import java.text.DecimalFormat; -import java.util.List; - -public class REIAlloyingCategory implements TransferDisplayCategory { +public class REIAlloyingCategory implements DisplayCategory { private final EntryStack ICON; REIAlloyingCategory(EntryStack icon) { @@ -81,8 +83,9 @@ public class REIAlloyingCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIAlloyingDisplay display, IntList redSlots) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); matrices.pushPose(); diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 2347d5120..fa2d0ebbf 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -1,13 +1,20 @@ package ru.betterend.integration.rei; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.jetbrains.annotations.NotNull; + import com.google.common.collect.Lists; + import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; -import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; @@ -18,14 +25,9 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import org.jetbrains.annotations.NotNull; import ru.betterend.blocks.basis.EndAnvilBlock; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class REIAnvilCategory implements TransferDisplayCategory { +public class REIAnvilCategory implements DisplayCategory { private final EntryStack[] ANVILS; REIAnvilCategory(EntryStack[] anvils) { @@ -85,8 +87,9 @@ public CategoryIdentifier getCategoryIdentifier() { return widgets; } - - @Override + + //TODO: 1.18 REI, find replacement + //@Override public void renderRedSlots(PoseStack matrices, List widgets, Rectangle bounds, REIAnvilDisplay display, IntList redSlots) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); matrices.pushPose(); diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index 06a456a09..12214fbd1 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -1,27 +1,27 @@ package ru.betterend.integration.rei; +import java.util.ArrayList; +import java.util.List; + +import org.jetbrains.annotations.NotNull; + import com.google.common.collect.Lists; -import com.mojang.blaze3d.vertex.PoseStack; -import it.unimi.dsi.fastutil.ints.IntList; + import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; -import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; -import java.util.ArrayList; -import java.util.List; - -public class REIInfusionCategory implements TransferDisplayCategory { +public class REIInfusionCategory implements DisplayCategory { private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png"); private final EntryStack ICON; @@ -109,7 +109,4 @@ public class REIInfusionCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIInfusionDisplay display, IntList redSlots) {} } From 6c89c76c26db9b7c99ad2dc77a8c07048b4fe26b Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 17:42:18 +0100 Subject: [PATCH 17/93] Fixed all remaining compile errors (mind the TODOs, a lot of things are disabled) --- src/main/java/ru/betterend/BetterEnd.java | 2 - .../blocks/DragonTreeSaplingBlock.java | 8 +- .../blocks/HelixTreeSaplingBlock.java | 8 +- .../blocks/LacugroveSaplingBlock.java | 8 +- .../blocks/LucerniaSaplingBlock.java | 10 +- .../blocks/MossyGlowshroomSaplingBlock.java | 10 +- .../betterend/integration/rei/REIPlugin.java | 25 +++-- .../java/ru/betterend/registry/EndBlocks.java | 4 +- .../ru/betterend/registry/EndFeatures.java | 4 +- .../ru/betterend/world/biome/EndBiome.java | 7 ++ .../biome/land/FoggyMushroomlandBiome.java | 3 +- .../world/biome/land/MegalakeBiome.java | 3 +- .../world/biome/land/NeonOasisBiome.java | 3 +- .../features/terrain/DesertLakeFeature.java | 16 ++- .../features/terrain/EndLakeFeature.java | 24 +++-- .../terrain/FloatingSpireFeature.java | 23 ++-- .../world/features/terrain/GeyserFeature.java | 9 +- .../world/features/terrain/SpireFeature.java | 28 +++-- .../terrain/SulphuricCaveFeature.java | 10 +- .../terrain/SulphuricLakeFeature.java | 10 +- .../caves/CaveChunkPopulatorFeature.java | 17 +-- .../terrain/caves/EndCaveFeature.java | 35 +++--- .../terrain/caves/TunelCaveFeature.java | 28 ++--- .../world/generator/TerrainGenerator.java | 42 ++++---- .../world/structures/piece/CavePiece.java | 13 +-- .../piece/CrystalMountainPiece.java | 20 ++-- .../world/structures/piece/LakePiece.java | 47 ++++---- .../world/structures/piece/MountainPiece.java | 10 +- .../world/structures/piece/NBTPiece.java | 14 +-- .../piece/PaintedMountainPiece.java | 18 ++-- .../world/structures/piece/VoxelPiece.java | 10 +- .../surface/SulphuricSurfaceBuilder.java | 100 ------------------ .../world/surface/SurfaceBuilders.java | 50 --------- .../world/surface/UmbraSurfaceBuilder.java | 50 --------- 34 files changed, 240 insertions(+), 429 deletions(-) delete mode 100644 src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java delete mode 100644 src/main/java/ru/betterend/world/surface/SurfaceBuilders.java delete mode 100644 src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 531811b23..66c8da97e 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -29,7 +29,6 @@ import ru.betterend.util.LootTableUtil; import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; -import ru.betterend.world.surface.SurfaceBuilders; public class BetterEnd implements ModInitializer { public static final String MOD_ID = "betterend"; @@ -44,7 +43,6 @@ public void onInitialize() { EndBlockEntities.register(); EndFeatures.register(); EndEntities.register(); - SurfaceBuilders.register(); EndBiomes.register(); EndTags.register(); EndEnchantments.register(); diff --git a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java index d60f262f6..4c34dbde0 100644 --- a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java @@ -4,19 +4,13 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class DragonTreeSaplingBlock extends PottableFeatureSapling { public DragonTreeSaplingBlock() { - super(); - } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.DRAGON_TREE.getFeature(); + super((state)->EndFeatures.DRAGON_TREE.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java index fb631a804..4fea40b23 100644 --- a/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/HelixTreeSaplingBlock.java @@ -4,17 +4,15 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class HelixTreeSaplingBlock extends PottableFeatureSapling { - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.HELIX_TREE.getFeature(); + public HelixTreeSaplingBlock() { + super((state)->EndFeatures.HELIX_TREE.getFeature()); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.AMBER_MOSS); diff --git a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java index fb328c0a3..ebb1e3b52 100644 --- a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java @@ -4,19 +4,13 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class LacugroveSaplingBlock extends PottableFeatureSapling { public LacugroveSaplingBlock() { - super(); - } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.LACUGROVE.getFeature(); + super((state)->EndFeatures.LACUGROVE.getFeature()); } @Override diff --git a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java index d371ef994..e1881306b 100644 --- a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java @@ -4,21 +4,15 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class LucerniaSaplingBlock extends PottableFeatureSapling { public LucerniaSaplingBlock() { - super(); + super((state)->EndFeatures.LUCERNIA.getFeature()); } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.LUCERNIA.getFeature(); - } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.RUTISCUS); diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java index 6ed74344b..5e63fdceb 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java @@ -4,21 +4,15 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; import ru.betterend.blocks.basis.PottableFeatureSapling; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; public class MossyGlowshroomSaplingBlock extends PottableFeatureSapling { public MossyGlowshroomSaplingBlock() { - super(7); + super(7, (state)->EndFeatures.MOSSY_GLOWSHROOM.getFeature()); } - - @Override - protected Feature getFeature(BlockState state) { - return EndFeatures.MOSSY_GLOWSHROOM.getFeature(); - } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.END_MOSS) || world.getBlockState(pos.below()) diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java index fac1bd487..622b41457 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,16 +1,18 @@ package ru.betterend.integration.rei; +import java.util.List; +import java.util.stream.Collectors; + import com.google.common.collect.Lists; + import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; import me.shedaniel.rei.api.common.category.CategoryIdentifier; -import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.plugin.common.DefaultPlugin; -import net.fabricmc.fabric.impl.content.registry.FuelRegistryImpl; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.BlastingRecipe; @@ -24,10 +26,6 @@ import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - //https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java public class REIPlugin implements REIClientPlugin { public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin"); @@ -54,13 +52,14 @@ public void registerDisplays(DisplayRegistry registry) { registry.registerRecipeFiller(BlastingRecipe.class, RecipeType.BLASTING, REIBlastingDisplay::new); registry.registerRecipeFiller(AnvilRecipe.class, AnvilRecipe.TYPE, REIAnvilDisplay::new); registry.registerRecipeFiller(InfusionRecipe.class, InfusionRecipe.TYPE, REIInfusionDisplay::new); - - FuelRegistryImpl.INSTANCE.getFuelTimes().forEach((item, time) -> { - if (time >= 2000) { - final List list = Collections.singletonList(EntryIngredients.of(item)); - registry.add(new REIAlloyingFuelDisplay(list, time)); - } - }); + + //TODO: 1.18 REI fix this +// FuelRegistryImpl.INSTANCE.getFuelTimes().forEach((item, time) -> { +// if (time >= 2000) { +// final List list = Collections.singletonList(EntryIngredients.of(item)); +// registry.add(new REIAlloyingFuelDisplay(list, time)); +// } +// }); } @Override diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 4e9884cd4..41f7c536c 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -429,8 +429,8 @@ public class EndBlocks { public static final Block SILK_MOTH_HIVE = registerBlock("silk_moth_hive", new SilkMothHiveBlock()); // Ores // - public static final Block ENDER_ORE = registerBlock("ender_ore", new BaseOreBlock(EndItems.ENDER_SHARD, 1, 3, 5)); - public static final Block AMBER_ORE = registerBlock("amber_ore", new BaseOreBlock(EndItems.RAW_AMBER, 1, 2, 4)); + public static final Block ENDER_ORE = registerBlock("ender_ore", new BaseOreBlock(()->EndItems.ENDER_SHARD, 1, 3, 5)); + public static final Block AMBER_ORE = registerBlock("amber_ore", new BaseOreBlock(()->EndItems.RAW_AMBER, 1, 2, 4)); // Materials // public static final MetalMaterial THALLASIUM = MetalMaterial.makeNormal( diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 4f1139981..b41b1f829 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -80,7 +80,6 @@ import ru.betterend.world.features.trees.PythadendronTreeFeature; import ru.betterend.world.features.trees.TenaneaFeature; import ru.betterend.world.features.trees.UmbrellaTreeFeature; -import ru.betterend.world.surface.UmbraSurfaceBuilder; public class EndFeatures { // Trees // @@ -218,7 +217,8 @@ public class EndFeatures { "umbralith_arch", new ArchFeature( EndBlocks.UMBRALITH.stone, - UmbraSurfaceBuilder::getSurfaceState + //TODO: 1.18 this needs to change to a dynamic block + (pos)->Blocks.END_STONE.defaultBlockState() //UmbraSurfaceBuilder::getSurfaceState ), 10); public static final BCLFeature THIN_UMBRALITH_ARCH = registerChanced("thin_umbralith_arch", new ThinArchFeature(EndBlocks.UMBRALITH.stone), 15); diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 5245dc73c..17b115a13 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -6,16 +6,23 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.StructureFeaturesAccessor; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; public class EndBiome extends BCLBiome { public abstract static class Config { protected static final StructureFeaturesAccessor VANILLA_FEATURES = (StructureFeaturesAccessor)new StructureFeatures(); + protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(Blocks.END_STONE.defaultBlockState()); + protected static final SurfaceRules.RuleSource END_MOSS = SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()); + protected static final SurfaceRules.RuleSource ENDSTONE_DUST = SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()); + protected static final SurfaceRules.RuleSource END_MYCELIUM = SurfaceRules.state(EndBlocks.END_MYCELIUM.defaultBlockState()); public final ResourceLocation ID; diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index a587e832e..c77d9f44e 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -21,7 +21,8 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogColor(41, 122, 173) .fogDensity(3) .waterAndFogColor(119, 227, 250) - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules + .chancedSurface(END_MOSS, END_MYCELIUM, END_STONE) //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 42400124a..346c5ee4e 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -22,7 +22,8 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.75F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules + .chancedSurface(END_MOSS, ENDSTONE_DUST, END_STONE) //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) //TODO: 1.18 removed //.depth(0F) diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index b3d69dc9d..5b3e70231 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -18,7 +18,8 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(106, 238, 215) - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules + .chancedSurface(ENDSTONE_DUST, END_MOSS, END_STONE) //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 6f1146561..3d3b30212 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -17,8 +19,6 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; - public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); @@ -123,10 +123,8 @@ public boolean place(FeaturePlaceContext featureConfig } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - state = world.getBiome(pos) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( @@ -198,10 +196,8 @@ else if (y2 + x2 + z2 <= rb) { } else if (y < waterLevel) { if (world.isEmptyBlock(POS.above())) { - state = world.getBiome(POS) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); BlocksHelper.setWithoutUpdate( world, POS, diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index b35a60f28..5db2f51ad 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -17,8 +19,6 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; - public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); @@ -123,10 +123,12 @@ public boolean place(FeaturePlaceContext featureConfig } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - state = world.getBiome(pos) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); +// state = world.getBiome(pos) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( @@ -193,10 +195,12 @@ else if (y > waterLevel) // Make border else if (y < waterLevel && y2 + x2 + z2 <= rb) { if (world.isEmptyBlock(POS.above())) { - state = world.getBiome(POS) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = Blocks.END_STONE.defaultBlockState(); +// state = world.getBiome(POS) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); BlocksHelper.setWithoutUpdate( world, POS, diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index d397fe892..be22d4cc3 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -1,6 +1,11 @@ package ru.betterend.world.features.terrain; +import java.util.List; +import java.util.Optional; +import java.util.Random; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -17,9 +22,6 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; -import java.util.List; -import java.util.Random; - public class FloatingSpireFeature extends SpireFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { @@ -62,13 +64,16 @@ public boolean place(FeaturePlaceContext featureConfig if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState();//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - return world.getBiome(info.getPos()) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getUnderMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState(); +// return world.getBiome(info.getPos()) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getUnderMaterial(); } return info.getState(); }); @@ -77,7 +82,7 @@ else if (info.getState(Direction.UP, 3).isAir()) { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { EndFeatures.TENANEA_BUSH.getFeature() - .place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); + .place(new FeaturePlaceContext<>(Optional.empty(), world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java index ae0aff338..7e6fd35ec 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -1,5 +1,9 @@ package ru.betterend.world.features.terrain; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; @@ -37,9 +41,6 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.util.BlockFixer; -import java.util.Random; -import java.util.function.Function; - public class GeyserFeature extends DefaultFeature { protected static final Function REPLACE1; protected static final Function REPLACE2; @@ -259,7 +260,7 @@ public boolean place(FeaturePlaceContext featureConfig } EndFeatures.SULPHURIC_LAKE.getFeature() - .place(new FeaturePlaceContext<>(world, chunkGenerator, random, pos, null)); + .place(new FeaturePlaceContext<>(Optional.empty(), world, chunkGenerator, random, pos, null)); double distance = radius1 * 1.7; BlockPos start = pos.offset(-distance, -halfHeight - 15 - distance, -distance); diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index 43dd04d7e..e6ec58c73 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -1,6 +1,12 @@ package ru.betterend.world.features.terrain; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -11,8 +17,8 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; import ru.bclib.sdf.operator.SDFSmoothUnion; @@ -24,10 +30,6 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @@ -65,13 +67,17 @@ public boolean place(FeaturePlaceContext featureConfig if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState(); + //return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - return world.getBiome(info.getPos()) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getUnderMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + return Blocks.END_STONE.defaultBlockState(); +// return world.getBiome(info.getPos()) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getUnderMaterial(); } return info.getState(); }).fillRecursive(world, center); @@ -79,7 +85,7 @@ else if (info.getState(Direction.UP, 3).isAir()) { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { EndFeatures.TENANEA_BUSH.getFeature() - .place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); + .place(new FeaturePlaceContext<>(Optional.empty(), world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index 8402a245a..244a6e471 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -1,6 +1,10 @@ package ru.betterend.world.features.terrain; +import java.util.Random; +import java.util.Set; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -22,9 +26,6 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; -import java.util.Set; - public class SulphuricCaveFeature extends DefaultFeature { private static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -167,7 +168,8 @@ else if (dist < r2 * r2) { state = world.getBlockState(mut); while (state.is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, mut, EndBlocks.VENT_BUBBLE_COLUMN.defaultBlockState()); - world.getBlockTicks() + //TODO: 1.18 test ticks + world/*.getBlockTicks()*/ .scheduleTick(mut, EndBlocks.VENT_BUBBLE_COLUMN, MHelper.randRange(8, 32, random)); mut.setY(mut.getY() + 1); state = world.getBlockState(mut); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 7d490631d..430259fa4 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -1,6 +1,10 @@ package ru.betterend.world.features.terrain; +import java.util.Random; +import java.util.Set; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -19,9 +23,6 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.Random; -import java.util.Set; - public class SulphuricLakeFeature extends DefaultFeature { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); @@ -75,7 +76,8 @@ public boolean place(FeaturePlaceContext featureConfig else { if (!isAbsoluteBorder(world, POS)) { BlocksHelper.setWithoutUpdate(world, POS, Blocks.WATER); - world.getLiquidTicks().scheduleTick(POS, Fluids.WATER, 0); + //TODO: 1.18 check if this ticks + world./*getLiquidTicks().*/scheduleTick(POS, Fluids.WATER, 0); brimstone.add(POS.below()); if (random.nextBoolean()) { brimstone.add(POS.below(2)); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index 9aa57da0f..b82ffbb7d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -1,6 +1,12 @@ package ru.betterend.world.features.terrain.caves; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.function.Supplier; + import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -16,10 +22,6 @@ import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; -import java.util.Random; -import java.util.Set; -import java.util.function.Supplier; - public class CaveChunkPopulatorFeature extends DefaultFeature { private Supplier supplier; @@ -40,7 +42,8 @@ public boolean place(FeaturePlaceContext featureConfig MutableBlockPos max = new MutableBlockPos().set(pos); fillSets(sx, sz, world.getChunk(pos), floorPositions, ceilPositions, min, max); EndCaveBiome biome = supplier.get(); - BlockState surfaceBlock = biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 This needs to change to a configured material + BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); BlockFixer.fixBlocks(world, min, max); @@ -111,7 +114,7 @@ protected void placeFloor(WorldGenLevel world, EndCaveBiome biome, Set if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.above(), null)); } } }); @@ -127,7 +130,7 @@ protected void placeCeil(WorldGenLevel world, EndCaveBiome biome, Set if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.below(), null)); } } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 24d1e9a8e..436dacae3 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -1,7 +1,13 @@ package ru.betterend.world.features.terrain.caves; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.Set; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -14,9 +20,8 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; -import ru.bclib.interfaces.BiomeSetter; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; @@ -25,10 +30,6 @@ import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; -import java.util.List; -import java.util.Random; -import java.util.Set; - public abstract class EndCaveFeature extends DefaultFeature { protected static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); protected static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @@ -74,10 +75,9 @@ public boolean place(FeaturePlaceContext featureConfig } } }); - BlockState surfaceBlock = biome.getBiome() - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + + //TODO: 1.18 this needs to change to a dynamic block + BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); placeWalls(world, biome, caveBlocks, random); @@ -99,7 +99,7 @@ protected void placeFloor(WorldGenLevel world, EndCaveBiome biome, Set if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.above(), null)); } } }); @@ -115,7 +115,7 @@ protected void placeCeil(WorldGenLevel world, EndCaveBiome biome, Set if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.below(), null)); } } }); @@ -153,12 +153,13 @@ private boolean hasOpenSide(BlockPos pos, Set positions) { protected void setBiomes(WorldGenLevel world, EndCaveBiome biome, Set blocks) { blocks.forEach((pos) -> setBiome(world, pos, biome)); } - + protected void setBiome(WorldGenLevel world, BlockPos pos, EndCaveBiome biome) { - BiomeSetter array = (BiomeSetter) world.getChunk(pos).getBiomes(); - if (array != null) { - array.bclib_setBiome(biome.getActualBiome(), pos); - } + //TODO: 1.18 No longer implemented in BCLib +// BiomeSetter array = (BiomeSetter) world.getChunk(pos).getBiomes(); +// if (array != null) { +// array.bclib_setBiome(biome.getActualBiome(), pos); +// } } private BlockPos findPos(WorldGenLevel world, BlockPos pos, int radius, Random random) { diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 4bd9debfb..0d55a62e1 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -1,7 +1,14 @@ package ru.betterend.world.features.terrain.caves; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.stream.IntStream; + import com.google.common.collect.Maps; import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -15,19 +22,14 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.cave.EndCaveBiome; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.stream.IntStream; - public class TunelCaveFeature extends EndCaveFeature { private Set generate(WorldGenLevel world, BlockPos center, Random random) { int cx = center.getX() >> 4; @@ -166,10 +168,12 @@ else if (world.getBlockState(mut).getMaterial().isReplaceable()) { } floorSets.forEach((biome, floorPositions) -> { - BlockState surfaceBlock = biome.getBiome() - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); +// BlockState surfaceBlock = biome.getBiome() +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); }); ceilSets.forEach((biome, ceilPositions) -> { @@ -197,7 +201,7 @@ protected void placeFloor(WorldGenLevel world, EndCaveBiome biome, Set if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.above(), null)); } } }); @@ -214,7 +218,7 @@ protected void placeCeil(WorldGenLevel world, EndCaveBiome biome, Set if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(new FeaturePlaceContext<>(Optional.empty(), world, null, random, pos.below(), null)); } } }); diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index e013b896c..d5518706c 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -1,19 +1,19 @@ package ru.betterend.world.generator; +import java.awt.Point; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.locks.ReentrantLock; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.minecraft.util.Mth; -import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSource; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.awt.Point; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.locks.ReentrantLock; - public class TerrainGenerator { private static final Map TERRAIN_BOOL_CACHE_MAP = Maps.newHashMap(); private static final ReentrantLock LOCKER = new ReentrantLock(); @@ -83,21 +83,23 @@ public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource } private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - if (getBiome(biomeSource, x, z).getDepth() < 0.1F) { - return 0F; - } - float depth = 0F; - for (int i = 0; i < OFFS.length; i++) { - int px = x + OFFS[i].x; - int pz = z + OFFS[i].y; - depth += getBiome(biomeSource, px, pz).getDepth() * COEF[i]; - } - return depth; + //TODO: 1.18 find alternative +// if (getBiome(biomeSource, x, z).getDepth() < 0.1F) { +// return 0F; +// } +// float depth = 0F; +// for (int i = 0; i < OFFS.length; i++) { +// int px = x + OFFS[i].x; +// int pz = z + OFFS[i].y; +// depth += getBiome(biomeSource, px, pz).getDepth() * COEF[i]; +// } +// return depth; + return 0; } - private static Biome getBiome(BiomeSource biomeSource, int x, int z) { - return biomeSource.getNoiseBiome(x, 0, z); - } +// private static Biome getBiome(BiomeSource biomeSource, int x, int z) { +// return biomeSource.getNoiseBiome(x, 0, z); +// } /** * Check if this is land diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 3f425701e..39bd6f586 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -1,24 +1,24 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class CavePiece extends BasePiece { private OpenSimplexNoise noise; private BlockPos center; @@ -32,12 +32,13 @@ public CavePiece(BlockPos center, float radius, int id) { makeBoundingBox(); } - public CavePiece(ServerLevel serverLevel, CompoundTag tag) { + public CavePiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.CAVE_PIECE, tag); makeBoundingBox(); } - - @Override + + + @Override public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int x1 = MHelper.max(this.boundingBox.minX(), blockBox.minX()); int z1 = MHelper.max(this.boundingBox.minZ(), blockBox.minZ()); diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index f2949fe67..c3186d657 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -1,5 +1,7 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -17,34 +19,32 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class CrystalMountainPiece extends MountainPiece { private BlockState top; public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); - top = biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + top = Blocks.END_STONE.defaultBlockState(); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } - public CrystalMountainPiece(ServerLevel serverLevel, CompoundTag tag) { - super(EndStructures.MOUNTAIN_PIECE, serverLevel, tag); + public CrystalMountainPiece(StructurePieceSerializationContext type, CompoundTag tag) { + super(EndStructures.MOUNTAIN_PIECE, tag); } @Override protected void fromNbt(CompoundTag tag) { - super.fromNbt(tag); - top = BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + super.fromNbt(tag);//TODO: 1.18 this needs to change to a dynamic block + top = Blocks.END_STONE.defaultBlockState(); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int sx = chunkPos.getMinBlockX(); int sz = chunkPos.getMinBlockZ(); MutableBlockPos pos = new MutableBlockPos(); @@ -139,8 +139,6 @@ public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, Chu } } } - - return true; } private void crystal(ChunkAccess chunk, BlockPos pos, int radius, int height, float fill, Random random) { diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 888a27b8d..37733a2b1 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -1,6 +1,10 @@ package ru.betterend.world.structures.piece; +import java.util.Map; +import java.util.Random; + import com.google.common.collect.Maps; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -8,7 +12,6 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; @@ -20,18 +23,16 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import net.minecraft.world.level.material.FluidState; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; -import java.util.Map; -import java.util.Random; - public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -57,7 +58,7 @@ public LakePiece(BlockPos center, float radius, float depth, Random random, Biom makeBoundingBox(); } - public LakePiece(ServerLevel serverLevel, CompoundTag tag) { + public LakePiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.LAKE_PIECE, tag); makeBoundingBox(); } @@ -131,10 +132,12 @@ else if (dist <= r3 && mut.getY() < center.getY()) { )) { state = chunk.getBlockState(mut.above()); if (state.isAir()) { - state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + state = ENDSTONE; +// state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); } else { state = state.getFluidState() @@ -147,7 +150,6 @@ else if (dist <= r3 && mut.getY() < center.getY()) { } } fixWater(world, chunk, mut, random, sx, sz); - return true; } private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mut, Random random, int sx, int sz) { @@ -167,10 +169,12 @@ private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mu BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + bState = ENDSTONE; +// bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); } else { bState = bState.getFluidState() @@ -189,10 +193,12 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { mut.setY(y + 1); BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) - .getGenerationSettings() - .getSurfaceBuilderConfig() - .getTopMaterial(); + //TODO: 1.18 this needs to change to a dynamic block + bState = ENDSTONE; +// bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) +// .getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial(); } else { bState = bState.getFluidState() @@ -205,7 +211,8 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { } } else if (chunk.getBlockState(mut.move(Direction.UP)).isAir()) { - chunk.getLiquidTicks().scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); + //TODO: 1.18 test if this is thr right tick + /*chunk.getLiquidTicks()*/world.scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); } } } diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index e20bfe39a..0afc39e35 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -1,12 +1,15 @@ package ru.betterend.world.structures.piece; +import java.util.Map; +import java.util.Random; + import com.google.common.collect.Maps; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; @@ -17,9 +20,6 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Map; -import java.util.Random; - public abstract class MountainPiece extends BasePiece { protected Map heightmap = Maps.newHashMap(); protected OpenSimplexNoise noise1; @@ -46,7 +46,7 @@ public MountainPiece(StructurePieceType type, BlockPos center, float radius, flo makeBoundingBox(); } - public MountainPiece(StructurePieceType type, ServerLevel serverLevel, CompoundTag tag) { + public MountainPiece(StructurePieceType type, CompoundTag tag) { super(type, tag); makeBoundingBox(); } diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index 061a2b207..c55746f54 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -1,11 +1,12 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -13,14 +14,13 @@ import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.util.MHelper; import ru.bclib.util.StructureHelper; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class NBTPiece extends BasePiece { private ResourceLocation structureID; private Rotation rotation; @@ -42,13 +42,14 @@ public NBTPiece(ResourceLocation structureID, StructureTemplate structure, Block makeBoundingBox(); } - public NBTPiece(ServerLevel serverLevel, CompoundTag tag) { + public NBTPiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.NBT_PIECE, tag); makeBoundingBox(); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); tag.putString("structureID", structureID.toString()); tag.putInt("rotation", rotation.ordinal()); tag.putInt("mirror", mirror.ordinal()); @@ -69,7 +70,7 @@ protected void fromNbt(CompoundTag tag) { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { BoundingBox bounds = BoundingBox.fromCorners(new Vec3i( blockBox.minX(), this.boundingBox.minY(), @@ -90,7 +91,6 @@ public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, Chu if (cover) { StructureHelper.cover(world, bounds, random); } - return true; } private void makeBoundingBox() { diff --git a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java index 9ff908cc9..a52122850 100644 --- a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java @@ -1,11 +1,12 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtUtils; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -16,11 +17,10 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.util.MHelper; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class PaintedMountainPiece extends MountainPiece { private BlockState[] slises; @@ -29,13 +29,13 @@ public PaintedMountainPiece(BlockPos center, float radius, float height, Random this.slises = slises; } - public PaintedMountainPiece(ServerLevel serverLevel, CompoundTag tag) { - super(EndStructures.PAINTED_MOUNTAIN_PIECE, serverLevel, tag); + public PaintedMountainPiece(StructurePieceSerializationContext type, CompoundTag tag) { + super(EndStructures.PAINTED_MOUNTAIN_PIECE, tag); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { - super.addAdditionalSaveData(serverLevel, tag); + protected void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); ListTag slise = new ListTag(); for (BlockState state : slises) { slise.add(NbtUtils.writeBlockState(state)); @@ -54,7 +54,7 @@ protected void fromNbt(CompoundTag tag) { } @Override - public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { + public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int sx = chunkPos.getMinBlockX(); int sz = chunkPos.getMinBlockZ(); MutableBlockPos pos = new MutableBlockPos(); @@ -101,7 +101,5 @@ public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, Chu } } } - - return true; } } diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index 56189f52f..69edcbaa5 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -1,19 +1,19 @@ package ru.betterend.world.structures.piece; +import java.util.Random; +import java.util.function.Consumer; + import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.world.structures.StructureWorld; import ru.betterend.registry.EndStructures; -import java.util.Random; -import java.util.function.Consumer; - public class VoxelPiece extends BasePiece { private StructureWorld world; @@ -24,7 +24,7 @@ public VoxelPiece(Consumer function, int id) { this.boundingBox = world.getBounds(); } - public VoxelPiece(ServerLevel level, CompoundTag tag) { + public VoxelPiece(StructurePieceSerializationContext type, CompoundTag tag) { super(EndStructures.VOXEL_PIECE, tag); this.boundingBox = world.getBounds(); } diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java deleted file mode 100644 index b692cd39f..000000000 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java +++ /dev/null @@ -1,100 +0,0 @@ -package ru.betterend.world.surface; - -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilder; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import ru.bclib.util.MHelper; -import ru.betterend.noise.OpenSimplexNoise; - -import java.util.Random; - -public class SulphuricSurfaceBuilder extends SurfaceBuilder { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); - - public SulphuricSurfaceBuilder() { - super(SurfaceBuilderBaseConfiguration.CODEC); - } - - @Override - public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, int seed, long n, SurfaceBuilderBaseConfiguration surfaceBlocks) { - double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); - if (value < -0.6) { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.DEFAULT_END_CONFIG - ); - } - else if (value < -0.3) { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.FLAVOLITE_CONFIG - ); - } - else if (value < 0.5) { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.SULFURIC_ROCK_CONFIG - ); - } - else { - SurfaceBuilder.DEFAULT.apply( - random, - chunk, - biome, - x, - z, - height, - noise, - defaultBlock, - defaultFluid, - seaLevel, - seed, - n, - SurfaceBuilders.BRIMSTONE_CONFIG - ); - } - } - - /*public static SulphuricSurfaceBuilder register(String name) { - return Registry.register(Registry.SURFACE_BUILDER, name, new SulphuricSurfaceBuilder()); - }*/ -} \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java b/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java deleted file mode 100644 index 3252f12bc..000000000 --- a/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.betterend.world.surface; - -import net.minecraft.core.Registry; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilder; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import ru.betterend.registry.EndBlocks; - -public class SurfaceBuilders { - public static final SurfaceBuilderBaseConfiguration DEFAULT_END_CONFIG = makeSimpleConfig(Blocks.END_STONE); - public static final SurfaceBuilderBaseConfiguration FLAVOLITE_CONFIG = makeSimpleConfig(EndBlocks.FLAVOLITE.stone); - public static final SurfaceBuilderBaseConfiguration BRIMSTONE_CONFIG = makeSimpleConfig(EndBlocks.BRIMSTONE); - public static final SurfaceBuilderBaseConfiguration SULFURIC_ROCK_CONFIG = makeSimpleConfig(EndBlocks.SULPHURIC_ROCK.stone); - public static final SurfaceBuilderBaseConfiguration UMBRA_SURFACE_CONFIG = makeSimpleConfig(EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_FULL_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_FULL, EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_HEAVY_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_HEAVY, EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_THIN_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_THIN, EndBlocks.UMBRALITH.stone); - public static final SurfaceBuilderBaseConfiguration PALLIDIUM_TINY_SURFACE_CONFIG = makeSurfaceConfig(EndBlocks.PALLIDIUM_TINY, EndBlocks.UMBRALITH.stone); - - public static final SurfaceBuilder SULPHURIC_SURFACE = register( - "sulphuric_surface", - new SulphuricSurfaceBuilder() - ); - public static final SurfaceBuilder UMBRA_SURFACE = register( - "umbra_surface", - new UmbraSurfaceBuilder() - ); - - private static SurfaceBuilder register(String name, SurfaceBuilder builder) { - return Registry.register(Registry.SURFACE_BUILDER, name, builder); - } - - private static SurfaceBuilderBaseConfiguration makeSimpleConfig(Block block) { - BlockState state = block.defaultBlockState(); - return new SurfaceBuilderBaseConfiguration(state, state, state); - } - - private static SurfaceBuilderBaseConfiguration makeSurfaceConfig(Block surface, Block under) { - return new SurfaceBuilderBaseConfiguration( - surface.defaultBlockState(), - under.defaultBlockState(), - under.defaultBlockState() - ); - } - - public static void register() { - } -} diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java deleted file mode 100644 index 33636ab61..000000000 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceBuilder.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.betterend.world.surface; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilder; -import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; -import ru.bclib.util.MHelper; -import ru.betterend.noise.OpenSimplexNoise; - -import java.util.Random; - -public class UmbraSurfaceBuilder extends SurfaceBuilder { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); - - public UmbraSurfaceBuilder() { - super(SurfaceBuilderBaseConfiguration.CODEC); - } - - @Override - public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, int seed, long n, SurfaceBuilderBaseConfiguration surfaceBlocks) { - int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60); - SurfaceBuilderBaseConfiguration config = getConfig(x, z, random); - SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise + depth, defaultBlock, defaultFluid, seaLevel, seed, n, config); - } - - public static BlockState getSurfaceState(BlockPos pos) { - return getConfig(pos.getX(), pos.getZ(), MHelper.RANDOM).getTopMaterial(); - } - - private static SurfaceBuilderBaseConfiguration getConfig(int x, int z, Random random) { - float grass = ((float) NOISE.eval(x * 0.03, z * 0.03) + (float) NOISE.eval(x * 0.1, z * 0.1) * 0.6F + random.nextFloat() * 0.2F) - 0.05F; - if (grass > 0.4F) { - return SurfaceBuilders.PALLIDIUM_FULL_SURFACE_CONFIG; - } - else if (grass > 0.15F) { - return SurfaceBuilders.PALLIDIUM_HEAVY_SURFACE_CONFIG; - } - else if (grass > -0.15) { - return SurfaceBuilders.PALLIDIUM_THIN_SURFACE_CONFIG; - } - else if (grass > -0.4F) { - return SurfaceBuilders.PALLIDIUM_TINY_SURFACE_CONFIG; - } - else { - return SurfaceBuilders.UMBRA_SURFACE_CONFIG; - } - } -} \ No newline at end of file From 6b63be32b0b8f7dfc643b7b4cc3306893e15fa44 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 18:12:09 +0100 Subject: [PATCH 18/93] Fixed some bootup errors --- .../interfaces/StructureFeaturesAccessor.java | 9 ++++++ .../mixin/common/EndCityFeatureMixin.java | 32 ++++++++++++------- .../common/NoiseBasedChunkGeneratorMixin.java | 27 ++++++++-------- .../mixin/common/StructureFeaturesMixin.java | 19 +++++++++++ .../ru/betterend/world/biome/EndBiome.java | 3 +- .../resources/betterend.mixins.common.json | 4 +-- 6 files changed, 66 insertions(+), 28 deletions(-) create mode 100644 src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java create mode 100644 src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java diff --git a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java new file mode 100644 index 000000000..4d4666097 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java @@ -0,0 +1,9 @@ +package ru.betterend.interfaces; + +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public interface StructureFeaturesAccessor { + ConfiguredStructureFeature> getEND_CITY(); +} diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 6ec5f02f6..1895cd725 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,13 +1,17 @@ package ru.betterend.mixin.common; +import java.util.Optional; +import java.util.Random; + import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.LegacyRandomSource; import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.EndCityFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -17,20 +21,24 @@ @Mixin(EndCityFeature.class) public class EndCityFeatureMixin { - @Inject(method = "isFeatureChunk", at = @At("HEAD"), cancellable = true) - private void be_isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, LevelHeightAccessor levelHeightAccessor, CallbackInfoReturnable info) { + @Inject(method = "pieceGeneratorSupplier", at = @At("HEAD"), cancellable = true) + private static void be_isFeatureChunk(PieceGeneratorSupplier.Context context, CallbackInfoReturnable>> info) { + final ChunkPos pos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + //TODO: 1.18 that is a different random source! + Random chunkRandom = new WorldgenRandom(new LegacyRandomSource(pos.x*pos.z)); + if (GeneratorOptions.useNewGenerator()) { int chance = GeneratorOptions.getEndCityFailChance(); - if (chance == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); - info.cancel(); - } - else if (chunkRandom.nextInt(chance) == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); - info.cancel(); + if (chance == 0 || chunkRandom.nextInt(chance) == 0) { + if (!(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60)){ + info.cancel(); + info.setReturnValue(Optional.empty()); + } } else { - info.setReturnValue(false); + info.setReturnValue(Optional.empty()); info.cancel(); } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index aa8b7619c..4e98411e7 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,5 +1,8 @@ package ru.betterend.mixin.common; +import java.util.function.Supplier; + +import net.minecraft.core.Registry; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; @@ -11,11 +14,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; -import java.util.function.Supplier; - @Mixin(NoiseBasedChunkGenerator.class) public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { @Final @@ -26,16 +26,17 @@ public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource b super(populationSource, biomeSource, structuresConfig, worldSeed); } - @Inject(method = "(Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) - private void beOnInit(BiomeSource populationSource, BiomeSource biomeSource, long seed, Supplier settings, CallbackInfo info) { + @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) + private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { TerrainGenerator.initNoise(seed); } - - @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) - private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { - if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { - TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); - info.cancel(); - } - } + + //TODO: 1.18 Find anothe rplace for this +// @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) +// private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { +// if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { +// TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); +// info.cancel(); +// } +// } } diff --git a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java new file mode 100644 index 000000000..bad4c7813 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java @@ -0,0 +1,19 @@ +package ru.betterend.mixin.common; + +import net.minecraft.data.worldgen.StructureFeatures; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import ru.betterend.interfaces.StructureFeaturesAccessor; + +@Mixin(StructureFeatures.class) +public class StructureFeaturesMixin implements StructureFeaturesAccessor { + @Shadow @Final private static ConfiguredStructureFeature> END_CITY; + + public ConfiguredStructureFeature> getEND_CITY(){ + return END_CITY; + } +} diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 17b115a13..0aabcfef3 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -9,9 +9,9 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.interfaces.StructureFeaturesAccessor; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; +import ru.betterend.interfaces.StructureFeaturesAccessor; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -62,6 +62,7 @@ public static EndBiome create(Config biomeConfig){ biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); + EndBiome biome = builder.build(biomeConfig.getSupplier()); biome.addCustomData("has_caves", biomeConfig.hasCaves()); diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 3640ff461..006ceeee1 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -4,7 +4,6 @@ "package": "ru.betterend.mixin.common", "compatibilityLevel": "JAVA_16", "mixins": [ - "BiomeGenerationSettingsAccessor", "NoiseBasedChunkGeneratorMixin", "ChorusPlantFeatureMixin", "PlayerAdvancementsMixin", @@ -25,7 +24,8 @@ "MonsterMixin", "EntityMixin", "PlayerMixin", - "SlimeMixin" + "SlimeMixin", + "StructureFeaturesMixin" ], "injectors": { "defaultRequire": 1 From fb422d07be23fbcaf45bacfddfd93a1e0a3e50c8 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 09:35:45 +0100 Subject: [PATCH 19/93] Make sure enderman ar default spawns --- src/main/java/ru/betterend/world/biome/EndBiome.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 0aabcfef3..bab7a4a1c 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -5,6 +5,7 @@ import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.SurfaceRules; @@ -39,6 +40,10 @@ public BiFunction getSupplier(){ protected boolean hasCaves(){ return true; } + + protected boolean spawnVanillaMobs(){ + return true; + } } public EndBiome(ResourceLocation biomeID, Biome biome) { @@ -59,6 +64,10 @@ public static EndBiome create(Config biomeConfig){ .wetness(0.5f) .precipitation(Biome.Precipitation.NONE); + if (biomeConfig.spawnVanillaMobs()){ + builder.spawn(EntityType.ENDERMAN, 10, 1, 4); + } + biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); From a966671e4548287308acf4f626ff5e1df3b1b88c Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 10:45:57 +0100 Subject: [PATCH 20/93] disabled Patchouli until they release a 1.18 version --- build.gradle | 2 +- src/main/java/ru/betterend/item/GuideBookItem.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index ca626f614..f3d07a807 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - useApi "vazkii.patchouli:Patchouli:1.17-${project.patchouli_version}" + // useApi "vazkii.patchouli:Patchouli:1.17-${project.patchouli_version}" println "Using local BCLib: ${local_bclib}" if (local_bclib){ implementation( project(path:":BCLib", configuration: 'dev') ) diff --git a/src/main/java/ru/betterend/item/GuideBookItem.java b/src/main/java/ru/betterend/item/GuideBookItem.java index 39e69ed5c..6a1fab055 100644 --- a/src/main/java/ru/betterend/item/GuideBookItem.java +++ b/src/main/java/ru/betterend/item/GuideBookItem.java @@ -1,5 +1,7 @@ package ru.betterend.item; +import java.util.List; + import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -15,9 +17,6 @@ import ru.betterend.BetterEnd; import ru.betterend.registry.EndItems; import ru.betterend.util.LangUtil; -import vazkii.patchouli.api.PatchouliAPI; - -import java.util.List; public class GuideBookItem extends ModelProviderItem { public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); @@ -33,7 +32,8 @@ public GuideBookItem() { @Override public InteractionResultHolder use(Level world, Player user, InteractionHand hand) { if (!world.isClientSide && user instanceof ServerPlayer) { - PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID); + //TODO: reanable Patchouli once it is available for 1.18 + //PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID); return InteractionResultHolder.success(user.getItemInHand(hand)); } return InteractionResultHolder.consume(user.getItemInHand(hand)); From 4ff84c5e869b5a65e0938998babef45ecf12c07f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 8 Dec 2021 17:29:06 +0300 Subject: [PATCH 21/93] Library update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 582b8428e..ff2885736 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,6 +20,6 @@ archives_base_name=better-end patchouli_version = 55-FABRIC-SNAPSHOT fabric_version = 0.44.0+1.18 -bclib_version = 1.0.1 +bclib_version = 1.0.3 rei_version = 7.0.343 canvas_version = 1.0.+ From 396eb27175dd94f0e4b8cd14326a8eafb522310f Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 16:34:41 +0100 Subject: [PATCH 22/93] Mixin fix --- .../java/ru/betterend/mixin/common/WorldGenRegionMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java index cbd755db8..046a2c445 100644 --- a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java +++ b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java @@ -3,6 +3,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.ChunkAccess; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -14,7 +15,7 @@ public class WorldGenRegionMixin { @Final @Shadow - private ChunkPos center; + private ChunkAccess center; @Inject(method = "ensureCanWrite", at = @At("HEAD"), cancellable = true) private void be_alterBlockCheck(BlockPos blockPos, CallbackInfoReturnable info) { From b5b8963da4f378cabdd288eaa249925412c64383 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 16:35:20 +0100 Subject: [PATCH 23/93] Minor cleanup --- src/main/java/ru/betterend/world/biome/EndBiome.java | 9 --------- .../world/biome/land/CrystalMountainsBiome.java | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index bab7a4a1c..0aabcfef3 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -5,7 +5,6 @@ import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.SurfaceRules; @@ -40,10 +39,6 @@ public BiFunction getSupplier(){ protected boolean hasCaves(){ return true; } - - protected boolean spawnVanillaMobs(){ - return true; - } } public EndBiome(ResourceLocation biomeID, Biome biome) { @@ -64,10 +59,6 @@ public static EndBiome create(Config biomeConfig){ .wetness(0.5f) .precipitation(Biome.Precipitation.NONE); - if (biomeConfig.spawnVanillaMobs()){ - builder.spawn(EntityType.ENDERMAN, 10, 1, 4); - } - biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 7ca59f310..2f977311e 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -19,7 +19,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .plantsColor(255, 133, 211) .surface(EndBlocks.CRYSTAL_MOSS) .music(EndSounds.MUSIC_OPENSPACE) - .feature(EndFeatures.ROUND_CAVE) + //.feature(EndFeatures.ROUND_CAVE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); } From df6845642ffd8c04c04c585f4e7a2c0808e8201a Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 16:36:10 +0100 Subject: [PATCH 24/93] Fixed call --- .../java/ru/betterend/mixin/common/WorldGenRegionMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java index 046a2c445..fb9c0cf38 100644 --- a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java +++ b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java @@ -19,9 +19,10 @@ public class WorldGenRegionMixin { @Inject(method = "ensureCanWrite", at = @At("HEAD"), cancellable = true) private void be_alterBlockCheck(BlockPos blockPos, CallbackInfoReturnable info) { + ChunkPos cPos = center.getPos(); int x = blockPos.getX() >> 4; int z = blockPos.getZ() >> 4; WorldGenRegion region = (WorldGenRegion) (Object) this; - info.setReturnValue(Math.abs(x - center.x) < 2 && Math.abs(z - center.z) < 2); + info.setReturnValue(Math.abs(x - cPos.x) < 2 && Math.abs(z - cPos.z) < 2); } } From 2c5c030f29ce7456599f4d82a891888013b703ff Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 17:04:24 +0100 Subject: [PATCH 25/93] Added BiomeTest to feature placers --- .../world/structures/features/EternalPortalStructure.java | 3 +++ .../world/structures/features/FeatureBaseStructure.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index 136f49a56..c9ab83d81 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.util.StructureHelper; +import ru.bclib.world.structures.BCLStructureFeature; import ru.betterend.BetterEnd; import ru.betterend.world.structures.piece.NBTPiece; @@ -30,6 +31,8 @@ public EternalPortalStructure() { } protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + if (!BCLStructureFeature.isValidBiome(context)) return false; + final ChunkPos chunkPos = context.chunkPos(); final ChunkGenerator chunkGenerator = context.chunkGenerator(); final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index 2a56e2b6f..f16cea4f6 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -12,6 +12,7 @@ import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; +import ru.bclib.world.structures.BCLStructureFeature; public abstract class FeatureBaseStructure extends StructureFeature { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); @@ -21,7 +22,7 @@ public FeatureBaseStructure(PieceGeneratorSupplier pie } protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { - return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor()) >= 20; + return getGenerationHeight(context.chunkPos(), context.chunkGenerator(), context.heightAccessor()) >= 20 && BCLStructureFeature.isValidBiome(context); } private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { From 1c79354e13ddef12489d085a7f88b060dbae73ce Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 17:28:09 +0100 Subject: [PATCH 26/93] Removed double features --- .../java/ru/betterend/world/biome/land/ChorusForestBiome.java | 2 -- .../ru/betterend/world/biome/land/CrystalMountainsBiome.java | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index af608a9a9..6337c2064 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -32,8 +32,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.PYTHADENDRON_BUSH) .feature(EndFeatures.PURPLE_POLYPORE) .feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) - //TODO: 1.18 why was this added twice? - //.feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) .feature(EndFeatures.CHORUS_GRASS) .feature(EndFeatures.CHORUS_MUSHROOM) .feature(EndFeatures.TAIL_MOSS) diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 2f977311e..37da7718e 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -19,7 +19,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .plantsColor(255, 133, 211) .surface(EndBlocks.CRYSTAL_MOSS) .music(EndSounds.MUSIC_OPENSPACE) - //.feature(EndFeatures.ROUND_CAVE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); } From e8a40246b4345f24c18ccd561af9fdc221a41a92 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 19:50:26 +0100 Subject: [PATCH 27/93] Example implementation of custom noise for SurfaceRules --- .../ru/betterend/world/biome/EndBiome.java | 3 ++ .../world/biome/land/SulphurSpringsBiome.java | 9 ++++++ .../SulphuricSurfaceNoiseCondition.java | 28 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 0aabcfef3..60cd3ef9e 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -23,6 +23,9 @@ public abstract static class Config { protected static final SurfaceRules.RuleSource END_MOSS = SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()); protected static final SurfaceRules.RuleSource ENDSTONE_DUST = SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()); protected static final SurfaceRules.RuleSource END_MYCELIUM = SurfaceRules.state(EndBlocks.END_MYCELIUM.defaultBlockState()); + protected static final SurfaceRules.RuleSource FLAVOLITE =SurfaceRules.state(EndBlocks.FLAVOLITE.stone.defaultBlockState()); + protected static final SurfaceRules.RuleSource SULPHURIC_ROCK =SurfaceRules.state(EndBlocks.SULPHURIC_ROCK.stone.defaultBlockState()); + protected static final SurfaceRules.RuleSource BRIMSTONE =SurfaceRules.state(EndBlocks.BRIMSTONE.defaultBlockState()); public final ResourceLocation ID; diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 70415a3b1..5cfd81757 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,12 +1,14 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; +import ru.betterend.world.surface.SulphuricSurfaceNoiseCondition; public class SulphurSpringsBiome extends EndBiome.Config { public SulphurSpringsBiome() { @@ -23,6 +25,13 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder //TODO: 1.18 surface Rules //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .surface( + SurfaceRules.sequence( + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), END_STONE), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), FLAVOLITE), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(0.5), SULPHURIC_ROCK), + BRIMSTONE + )) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) .waterColor(25, 90, 157) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java new file mode 100644 index 000000000..8dd46f456 --- /dev/null +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -0,0 +1,28 @@ +package ru.betterend.world.surface; + +import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.mixin.common.SurfaceRulesContextAccessor; +import ru.bclib.util.MHelper; +import ru.betterend.noise.OpenSimplexNoise; + +public class SulphuricSurfaceNoiseCondition extends SurfaceNoiseCondition { + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); + + private final double threshold; + public SulphuricSurfaceNoiseCondition(double threshold){ + this.threshold = threshold; + } + + @Override + public boolean test(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + + return value < threshold; + } +} From 338aee76e949540622f5f006f9715f715222e3ee Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 20:43:03 +0100 Subject: [PATCH 28/93] cache last noise result for rule sequences --- .../world/surface/SulphuricSurfaceNoiseCondition.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index 8dd46f456..503875e78 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -13,16 +13,24 @@ public SulphuricSurfaceNoiseCondition(double threshold){ this.threshold = threshold; } + private int lastX = Integer.MIN_VALUE; + private int lastZ = Integer.MIN_VALUE; + private double lastValue = 0; @Override public boolean test(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); + if (lastX==x && lastZ==z) return lastValue < threshold; + double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( -0.1, 0.1, MHelper.RANDOM ); + lastX=x; + lastZ=z; + lastValue=value; return value < threshold; } } From 5c12813b3e2a863be9cd444d1dc822a4063b033c Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 21:11:24 +0100 Subject: [PATCH 29/93] Fixed surface gen in UmbraValleyBiome --- .../ru/betterend/world/biome/EndBiome.java | 5 ++ .../world/biome/land/SulphurSpringsBiome.java | 2 +- .../world/biome/land/UmbraValleyBiome.java | 48 ++++++++++++------- .../SulphuricSurfaceNoiseCondition.java | 7 +-- .../surface/UmbraSurfaceNoiseCondition.java | 39 +++++++++++++++ 5 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 60cd3ef9e..3a2b923a6 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -26,6 +26,11 @@ public abstract static class Config { protected static final SurfaceRules.RuleSource FLAVOLITE =SurfaceRules.state(EndBlocks.FLAVOLITE.stone.defaultBlockState()); protected static final SurfaceRules.RuleSource SULPHURIC_ROCK =SurfaceRules.state(EndBlocks.SULPHURIC_ROCK.stone.defaultBlockState()); protected static final SurfaceRules.RuleSource BRIMSTONE =SurfaceRules.state(EndBlocks.BRIMSTONE.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_FULL =SurfaceRules.state(EndBlocks.PALLIDIUM_FULL.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_HEAVY =SurfaceRules.state(EndBlocks.PALLIDIUM_HEAVY.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_THIN =SurfaceRules.state(EndBlocks.PALLIDIUM_THIN.defaultBlockState()); + protected static final SurfaceRules.RuleSource PALLIDIUM_TINY =SurfaceRules.state(EndBlocks.PALLIDIUM_TINY.defaultBlockState()); + protected static final SurfaceRules.RuleSource UMBRALITH =SurfaceRules.state(EndBlocks.UMBRALITH.stone.defaultBlockState()); public final ResourceLocation ID; diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 5cfd81757..ae128e5a1 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -23,7 +23,7 @@ protected boolean hasCaves() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { builder - //TODO: 1.18 surface Rules + //TODO: 1.18 check surface Rules //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) .surface( SurfaceRules.sequence( diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 02bd2d2e2..11ef1ccef 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,29 +1,41 @@ package ru.betterend.world.biome.land; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; +import ru.betterend.world.surface.UmbraSurfaceNoiseCondition; public class UmbraValleyBiome extends EndBiome.Config { - public UmbraValleyBiome() { - super("umbra_valley"); - } + public UmbraValleyBiome() { + super("umbra_valley"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(100, 100, 100) - .plantsColor(172, 189, 190) - .waterAndFogColor(69, 104, 134) - //TODO: 1.18 surface Rules - //.surface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) - .particles(EndParticles.AMBER_SPHERE, 0.0001F) - .loop(EndSounds.UMBRA_VALLEY) - .music(EndSounds.MUSIC_DARK) - .feature(EndFeatures.UMBRALITH_ARCH) - .feature(EndFeatures.THIN_UMBRALITH_ARCH) - .feature(EndFeatures.INFLEXIA) - .feature(EndFeatures.FLAMMALIX); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(100, 100, 100) + .plantsColor(172, 189, 190) + .waterAndFogColor(69, 104, 134) + //TODO: 1.18 check surface Rules + //.surface(SurfaceBuilders.UMBRA_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) + .surface( + SurfaceRules.sequence( + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), PALLIDIUM_FULL), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.15), PALLIDIUM_HEAVY), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.15), PALLIDIUM_THIN), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.4), PALLIDIUM_TINY) + )), UMBRALITH + ) + ) + .particles(EndParticles.AMBER_SPHERE, 0.0001F) + .loop(EndSounds.UMBRA_VALLEY) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.UMBRALITH_ARCH) + .feature(EndFeatures.THIN_UMBRALITH_ARCH) + .feature(EndFeatures.INFLEXIA) + .feature(EndFeatures.FLAMMALIX); + } } diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index 503875e78..b18740789 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -13,9 +13,10 @@ public SulphuricSurfaceNoiseCondition(double threshold){ this.threshold = threshold; } - private int lastX = Integer.MIN_VALUE; - private int lastZ = Integer.MIN_VALUE; - private double lastValue = 0; + private static int lastX = Integer.MIN_VALUE; + private static int lastZ = Integer.MIN_VALUE; + private static double lastValue = 0; + @Override public boolean test(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java new file mode 100644 index 000000000..b146c3c0d --- /dev/null +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -0,0 +1,39 @@ +package ru.betterend.world.surface; + +import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.mixin.common.SurfaceRulesContextAccessor; +import ru.bclib.util.MHelper; +import ru.betterend.noise.OpenSimplexNoise; + +public class UmbraSurfaceNoiseCondition extends SurfaceNoiseCondition { + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); + + private final double threshold; + public UmbraSurfaceNoiseCondition(double threshold){ + this.threshold = threshold; + } + + private static int lastX = Integer.MIN_VALUE; + private static int lastZ = Integer.MIN_VALUE; + private static double lastValue = 0; + + @Override + public boolean test(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + if (lastX==x && lastZ==z) return lastValue > threshold; + + double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + + lastX=x; + lastZ=z; + lastValue=value; + return value > threshold; + //int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60); + //SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise + depth, defaultBlock, defaultFluid, seaLevel, seed, n, config); + } +} From 633c5ad55398872e5bec6649780ab7caec9af36a Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 23:38:52 +0100 Subject: [PATCH 30/93] Add info about top/underMaterial to BE-biomes --- .../ru/betterend/world/biome/EndBiome.java | 80 ++++++++++++++++++- .../world/biome/land/AmberLandBiome.java | 69 +++++++++------- .../biome/land/BlossomingSpiresBiome.java | 15 +++- .../world/biome/land/ChorusForestBiome.java | 15 +++- .../biome/land/CrystalMountainsBiome.java | 15 +++- .../biome/land/DragonGraveyardsBiome.java | 15 +++- .../world/biome/land/DryShrublandBiome.java | 15 +++- .../world/biome/land/DustWastelandsBiome.java | 15 +++- .../biome/land/FoggyMushroomlandBiome.java | 27 ++++++- .../biome/land/GlowingGrasslandsBiome.java | 15 +++- .../world/biome/land/LanternWoodsBiome.java | 15 +++- .../world/biome/land/MegalakeBiome.java | 25 +++++- .../world/biome/land/MegalakeGroveBiome.java | 15 +++- .../world/biome/land/NeonOasisBiome.java | 25 +++++- .../biome/land/PaintedMountainsBiome.java | 15 +++- .../world/biome/land/ShadowForestBiome.java | 15 +++- .../world/biome/land/SulphurSpringsBiome.java | 23 +++++- .../world/biome/land/UmbraValleyBiome.java | 22 ++++- .../world/biome/land/UmbrellaJungleBiome.java | 15 +++- .../world/features/BiomeIslandFeature.java | 6 +- .../features/terrain/DesertLakeFeature.java | 5 +- .../features/terrain/EndLakeFeature.java | 11 ++- .../terrain/FloatingSpireFeature.java | 5 +- .../world/features/terrain/SpireFeature.java | 5 +- .../piece/CrystalMountainPiece.java | 7 +- .../world/structures/piece/LakePiece.java | 7 +- 26 files changed, 430 insertions(+), 67 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 3a2b923a6..0022e24bb 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -2,13 +2,18 @@ import java.util.function.BiFunction; +import net.minecraft.core.BlockPos; import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; import ru.betterend.interfaces.StructureFeaturesAccessor; @@ -16,10 +21,30 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; -public class EndBiome extends BCLBiome { +public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { + public static class DefaultSurfaceMaterialProvider implements SurfaceMaterialProvider{ + public static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); + @Override + public BlockState getTopMaterial() { + return END_STONE; + } + + @Override + public BlockState getAltTopMaterial() { + return getTopMaterial(); + } + + @Override + public BlockState getUnderMaterial() { + return END_STONE; + } + } + public abstract static class Config { + public static final SurfaceMaterialProvider DEFAULT_MATERIAL = new DefaultSurfaceMaterialProvider(); + protected static final StructureFeaturesAccessor VANILLA_FEATURES = (StructureFeaturesAccessor)new StructureFeatures(); - protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(Blocks.END_STONE.defaultBlockState()); + protected static final SurfaceRules.RuleSource END_STONE = SurfaceRules.state(DefaultSurfaceMaterialProvider.END_STONE); protected static final SurfaceRules.RuleSource END_MOSS = SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()); protected static final SurfaceRules.RuleSource ENDSTONE_DUST = SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()); protected static final SurfaceRules.RuleSource END_MYCELIUM = SurfaceRules.state(EndBlocks.END_MYCELIUM.defaultBlockState()); @@ -47,6 +72,10 @@ public BiFunction getSupplier(){ protected boolean hasCaves(){ return true; } + + protected SurfaceMaterialProvider surfaceMaterial() { + return DEFAULT_MATERIAL; + } } public EndBiome(ResourceLocation biomeID, Biome biome) { @@ -73,7 +102,54 @@ public static EndBiome create(Config biomeConfig){ EndBiome biome = builder.build(biomeConfig.getSupplier()); biome.addCustomData("has_caves", biomeConfig.hasCaves()); + biome.setSurfaceMaterial(biomeConfig.surfaceMaterial()); return biome; } + + + private SurfaceMaterialProvider surfMatProv = Config.DEFAULT_MATERIAL; + private void setSurfaceMaterial(SurfaceMaterialProvider prov) { + surfMatProv = prov; + } + + @Override + public BlockState getTopMaterial() { + return surfMatProv.getTopMaterial(); + } + + public BlockState getUnderMaterial() { + return surfMatProv.getUnderMaterial(); + } + + @Override + public BlockState getAltTopMaterial() { + return surfMatProv.getAltTopMaterial(); + } + + public static BlockState findTopMaterial(BCLBiome biome){ + if (biome instanceof SurfaceMaterialProvider smp){ + return smp.getTopMaterial(); + } + return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + } + + public static BlockState findTopMaterial(Biome biome){ + return findTopMaterial(BiomeAPI.getBiome(biome)); + } + + public static BlockState findTopMaterial(WorldGenLevel world, BlockPos pos){ + return findTopMaterial(BiomeAPI.getBiome(world.getBiome(pos))); + } + + public static BlockState findUnderMaterial(BCLBiome biome){ + if (biome instanceof SurfaceMaterialProvider smp){ + return smp.getTopMaterial(); + } + return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + } + + public static BlockState findUnderMaterial(WorldGenLevel world, BlockPos pos){ + return findUnderMaterial(BiomeAPI.getBiome(world.getBiome(pos))); + } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 905ba52b0..6c203c17b 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -10,33 +13,43 @@ import ru.betterend.world.biome.EndBiome; public class AmberLandBiome extends EndBiome.Config { - public AmberLandBiome() { - super("amber_land"); - } + public AmberLandBiome() { + super("amber_land"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(255, 184, 71) - .fogDensity(2.0F) - .plantsColor(219, 115, 38) - .waterAndFogColor(145, 108, 72) - .music(EndSounds.MUSIC_FOREST) - .loop(EndSounds.AMBIENT_AMBER_LAND) - .particles(EndParticles.AMBER_SPHERE, 0.001F) - .surface(EndBlocks.AMBER_MOSS) - .feature(EndFeatures.AMBER_ORE) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.HELIX_TREE) - .feature(EndFeatures.LANCELEAF) - .feature(EndFeatures.GLOW_PILLAR) - .feature(EndFeatures.AMBER_GRASS) - .feature(EndFeatures.AMBER_ROOT) - .feature(EndFeatures.BULB_MOSS) - .feature(EndFeatures.BULB_MOSS_WOOD) - .feature(EndFeatures.CHARNIA_ORANGE) - .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EntityType.ENDERMAN, 50, 1, 4) - .spawn(EndEntities.END_SLIME, 30, 1, 2); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(255, 184, 71) + .fogDensity(2.0F) + .plantsColor(219, 115, 38) + .waterAndFogColor(145, 108, 72) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_AMBER_LAND) + .particles(EndParticles.AMBER_SPHERE, 0.001F) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .feature(EndFeatures.AMBER_ORE) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.HELIX_TREE) + .feature(EndFeatures.LANCELEAF) + .feature(EndFeatures.GLOW_PILLAR) + .feature(EndFeatures.AMBER_GRASS) + .feature(EndFeatures.AMBER_ROOT) + .feature(EndFeatures.BULB_MOSS) + .feature(EndFeatures.BULB_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.END_SLIME, 30, 1, 2); + } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.AMBER_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 5d0b2bf5e..a1528ac07 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -23,7 +26,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(241, 146, 229) .fogDensity(1.7F) .plantsColor(122, 45, 122) - .surface(EndBlocks.PINK_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) .feature(EndFeatures.SPIRE) @@ -40,4 +43,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .spawn(EntityType.ENDERMAN, 50, 1, 4) .spawn(EndEntities.SILK_MOTH, 5, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.PINK_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 6337c2064..f4d8a3aa1 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -3,8 +3,11 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.worldgen.placement.EndPlacements; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -22,7 +25,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.5F) .plantsColor(122, 45, 122) .waterAndFogColor(73, 30, 73) - .surface(EndBlocks.CHORUS_NYLIUM) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.PORTAL, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) @@ -42,4 +45,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 50, 1, 4); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CHORUS_NYLIUM.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 37da7718e..76c27e34c 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -17,9 +20,19 @@ public CrystalMountainsBiome() { protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) .plantsColor(255, 133, 211) - .surface(EndBlocks.CRYSTAL_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CRYSTAL_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 6e2cd442a..83f1a6c6b 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -21,7 +24,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.FIREFLY, 0.0007F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(EndBlocks.SANGNUM) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .waterAndFogColor(203, 59, 167) .plantsColor(244, 46, 79) .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) @@ -35,4 +38,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.CLAWFERN) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.SANGNUM.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index 4377676a5..d1a3dd79e 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -18,7 +21,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.2F) .waterAndFogColor(113, 88, 53) .plantsColor(237, 122, 66) - .surface(EndBlocks.RUTISCUS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.LUCERNIA_BUSH_RARE) .feature(EndFeatures.ORANGO) @@ -28,4 +31,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.RUTISCUS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 37f1ef07a..0c6a82202 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -2,7 +2,10 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; @@ -17,7 +20,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - .surface(EndBlocks.ENDSTONE_DUST) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) //TODO: 1.18 removed //.depth(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) @@ -26,4 +29,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index c77d9f44e..21c9a2030 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -1,7 +1,11 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -22,7 +26,11 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(3) .waterAndFogColor(119, 227, 250) //TODO: 1.18 check surface Rules - .chancedSurface(END_MOSS, END_MYCELIUM, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.END_MOSS, EndBlocks.END_MYCELIUM) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) @@ -48,4 +56,21 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .spawn(EndEntities.END_SLIME, 10, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.END_MYCELIUM.defaultBlockState(); + } + }; + + + } } diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 55d932650..4ce5cbc36 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -20,7 +23,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.FIREFLY, 0.001F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(EndBlocks.END_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .waterAndFogColor(92, 250, 230) .plantsColor(73, 210, 209) .feature(EndFeatures.END_LAKE_RARE) @@ -39,4 +42,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 6ab11658f..b0f17522b 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -19,7 +22,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.1F) .waterAndFogColor(171, 234, 226) .plantsColor(254, 85, 57) - .surface(EndBlocks.RUTISCUS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .music(EndSounds.MUSIC_FOREST) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .feature(EndFeatures.END_LAKE_NORMAL) @@ -39,4 +42,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.RUTISCUS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 346c5ee4e..807ddb513 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -1,7 +1,11 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -23,7 +27,11 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) //TODO: 1.18 check surface Rules - .chancedSurface(END_MOSS, ENDSTONE_DUST, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.END_MOSS, EndBlocks.ENDSTONE_DUST) //TODO: 1.18 removed //.depth(0F) @@ -44,4 +52,19 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 70fed1749..b5e469446 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -25,7 +28,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .surface(EndBlocks.END_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.LACUGROVE) @@ -46,4 +49,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 10, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 5b3e70231..af0c0fa26 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -2,7 +2,11 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; @@ -19,7 +23,11 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(2) .waterAndFogColor(106, 238, 215) //TODO: 1.18 check surface Rules - .chancedSurface(ENDSTONE_DUST, END_MOSS, END_STONE) + .chancedSurface( + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + END_STONE + ) //.surface(EndBlocks.ENDSTONE_DUST, EndBlocks.END_MOSS) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) @@ -34,4 +42,19 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.END_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 5628dac79..71cbc6890 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -2,7 +2,10 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; @@ -21,8 +24,18 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .waterAndFogColor(192, 180, 131) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .surface(EndBlocks.ENDSTONE_DUST) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.WHITE_ASH, 0.01F) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.ENDSTONE_DUST.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index b83e742cd..eb613ab0b 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -2,7 +2,10 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; @@ -20,7 +23,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(2.5F) .plantsColor(45, 45, 45) .waterAndFogColor(42, 45, 80) - .surface(EndBlocks.SHADOW_GRASS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .particles(ParticleTypes.MYCELIUM, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) @@ -43,4 +46,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .spawn(EntityType.ENDERMAN, 40, 1, 4) .spawn(EntityType.PHANTOM, 1, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.SHADOW_GRASS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index ae128e5a1..29ba55ebd 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,8 +1,12 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -27,8 +31,8 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { //.surface(SurfaceBuilders.SULPHURIC_SURFACE.configured(SurfaceBuilders.DEFAULT_END_CONFIG)) .surface( SurfaceRules.sequence( - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), END_STONE), - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), FLAVOLITE), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), + SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), SurfaceRules.state(surfaceMaterial().getTopMaterial())), SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(0.5), SULPHURIC_ROCK), BRIMSTONE )) @@ -53,4 +57,19 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .spawn(EndEntities.CUBOZOA, 50, 3, 8) .spawn(EntityType.ENDERMAN, 50, 1, 4); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.FLAVOLITE.stone.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return Blocks.END_STONE.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 11ef1ccef..ce3cfdc09 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndSounds; @@ -23,11 +26,11 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .surface( SurfaceRules.sequence( SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), PALLIDIUM_FULL), + SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.15), PALLIDIUM_HEAVY), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.15), PALLIDIUM_THIN), SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.4), PALLIDIUM_TINY) - )), UMBRALITH + )), SurfaceRules.state(surfaceMaterial().getTopMaterial()) ) ) .particles(EndParticles.AMBER_SPHERE, 0.0001F) @@ -38,4 +41,19 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.INFLEXIA) .feature(EndFeatures.FLAMMALIX); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.UMBRALITH.stone.defaultBlockState(); + } + + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index f9b7c9eb0..1c007e0cf 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -1,7 +1,10 @@ package ru.betterend.world.biome.land; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -22,7 +25,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.JUNGLE_SPORE, 0.001F) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .surface(EndBlocks.JUNGLE_MOSS) + .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) .feature(EndFeatures.END_LAKE) .feature(EndFeatures.UMBRELLA_TREE) .feature(EndFeatures.JELLYSHROOM) @@ -43,4 +46,14 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .structure(VANILLA_FEATURES.getEND_CITY()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.JUNGLE_MOSS.defaultBlockState(); + } + }; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 701f6d35c..4954440cd 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -15,6 +15,7 @@ import ru.bclib.util.BlocksHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; +import ru.betterend.world.biome.EndBiome; public class BiomeIslandFeature extends DefaultFeature { private static final MutableBlockPos CENTER = new MutableBlockPos(); @@ -31,7 +32,7 @@ public boolean place(FeaturePlaceContext featureConfig Biome biome = world.getBiome(pos); int dist = BlocksHelper.downRay(world, pos, 10) + 1; BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); - BlockState topMaterial = world.getBlockState(surfacePos); + BlockState topMaterial = EndBiome.findTopMaterial(world, surfacePos);; //TODO: 1.18 the block selection should be based on the surface rules of the biome if (BlocksHelper.isFluid(topMaterial)) { @@ -39,8 +40,7 @@ public boolean place(FeaturePlaceContext featureConfig underBlock = Blocks.STONE.defaultBlockState(); } else { - topBlock = topMaterial.is(Blocks.AIR)?Blocks.GRASS_BLOCK.defaultBlockState():topMaterial; - underBlock = Blocks.DIRT.defaultBlockState(); + underBlock = EndBiome.findUnderMaterial(world, surfacePos); } simplexNoise = new OpenSimplexNoise(world.getSeed()); diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 3d3b30212..3d5f71b43 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -18,6 +18,7 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import ru.betterend.world.biome.EndBiome; public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @@ -124,7 +125,7 @@ public boolean place(FeaturePlaceContext featureConfig pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + state = EndBiome.findTopMaterial(world, pos); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( @@ -197,7 +198,7 @@ else if (y2 + x2 + z2 <= rb) { else if (y < waterLevel) { if (world.isEmptyBlock(POS.above())) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + state = EndBiome.findTopMaterial(world, pos); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); BlocksHelper.setWithoutUpdate( world, POS, diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 5db2f51ad..6cb914366 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -18,11 +18,16 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import ru.betterend.world.biome.EndBiome; public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); + + public EndLakeFeature(){ + + } @Override public boolean place(FeaturePlaceContext featureConfig) { @@ -124,8 +129,8 @@ public boolean place(FeaturePlaceContext featureConfig pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); -// state = world.getBiome(pos) + state = EndBiome.findTopMaterial(world, pos); + //state = world.getBiome(pos) // .getGenerationSettings() // .getSurfaceBuilderConfig() // .getTopMaterial(); @@ -196,7 +201,7 @@ else if (y > waterLevel) else if (y < waterLevel && y2 + x2 + z2 <= rb) { if (world.isEmptyBlock(POS.above())) { //TODO: 1.18 this needs to change to a dynamic block - state = Blocks.END_STONE.defaultBlockState(); + state = EndBiome.findTopMaterial(world, pos); // state = world.getBiome(POS) // .getGenerationSettings() // .getSurfaceBuilderConfig() diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index be22d4cc3..d03b78f0c 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -21,6 +21,7 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; public class FloatingSpireFeature extends SpireFeature { @Override @@ -65,11 +66,11 @@ public boolean place(FeaturePlaceContext featureConfig support.add(info.getPos().above()); } //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState();//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + return EndBiome.findTopMaterial(world, info.getPos());//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() // .getSurfaceBuilderConfig() diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index e6ec58c73..efde5ab3b 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -29,6 +29,7 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; +import ru.betterend.world.biome.EndBiome; public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @@ -68,12 +69,12 @@ public boolean place(FeaturePlaceContext featureConfig support.add(info.getPos().above()); } //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findTopMaterial(world, info.getPos()); //return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { //TODO: 1.18 this needs to change to a dynamic block - return Blocks.END_STONE.defaultBlockState(); + return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() // .getSurfaceBuilderConfig() diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index c3186d657..3970cad8d 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -5,7 +5,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; @@ -20,9 +19,11 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class CrystalMountainPiece extends MountainPiece { private BlockState top; @@ -30,7 +31,7 @@ public class CrystalMountainPiece extends MountainPiece { public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); //TODO: 1.18 this needs to change to a dynamic block - top = Blocks.END_STONE.defaultBlockState(); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + top = EndBiome.findTopMaterial(biome); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } public CrystalMountainPiece(StructurePieceSerializationContext type, CompoundTag tag) { @@ -40,7 +41,7 @@ public CrystalMountainPiece(StructurePieceSerializationContext type, CompoundTag @Override protected void fromNbt(CompoundTag tag) { super.fromNbt(tag);//TODO: 1.18 this needs to change to a dynamic block - top = Blocks.END_STONE.defaultBlockState(); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + top = EndBiome.findTopMaterial(BiomeAPI.getBiome(biomeID)); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } @Override diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 37733a2b1..4c01b7b94 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -32,6 +32,7 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); @@ -133,7 +134,7 @@ else if (dist <= r3 && mut.getY() < center.getY()) { state = chunk.getBlockState(mut.above()); if (state.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - state = ENDSTONE; + state = EndBiome.findTopMaterial(world, worldPos); // state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) // .getGenerationSettings() // .getSurfaceBuilderConfig() @@ -170,7 +171,7 @@ private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mu BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - bState = ENDSTONE; + bState = EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() // .getSurfaceBuilderConfig() @@ -194,7 +195,7 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { //TODO: 1.18 this needs to change to a dynamic block - bState = ENDSTONE; + bState =EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() // .getSurfaceBuilderConfig() From 2a0f58a7296ef902553b1ae6e8515ea1e2016768 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Dec 2021 23:59:53 +0100 Subject: [PATCH 31/93] Fixed surface block setting --- src/main/java/ru/betterend/BetterEnd.java | 66 +++++++++++++++++-- .../world/biome/land/AmberLandBiome.java | 3 +- .../biome/land/BlossomingSpiresBiome.java | 3 +- .../world/biome/land/ChorusForestBiome.java | 2 +- .../biome/land/CrystalMountainsBiome.java | 2 +- .../biome/land/DragonGraveyardsBiome.java | 2 +- .../world/biome/land/DryShrublandBiome.java | 2 +- .../world/biome/land/DustWastelandsBiome.java | 2 +- .../biome/land/GlowingGrasslandsBiome.java | 2 +- .../world/biome/land/LanternWoodsBiome.java | 2 +- .../world/biome/land/MegalakeGroveBiome.java | 2 +- .../biome/land/PaintedMountainsBiome.java | 2 +- .../world/biome/land/ShadowForestBiome.java | 2 +- .../world/biome/land/UmbrellaJungleBiome.java | 2 +- 14 files changed, 73 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 66c8da97e..fac7cc0a9 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -1,8 +1,28 @@ package ru.betterend; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; + +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import org.apache.commons.lang3.mutable.MutableInt; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; @@ -34,7 +54,7 @@ public class BetterEnd implements ModInitializer { public static final String MOD_ID = "betterend"; public static final Logger LOGGER = new Logger(MOD_ID); public static final boolean RUNS_FALL_FLYING_LIB = FabricLoader.getInstance().getModContainer("fallflyinglib").isPresent(); - + @Override public void onInitialize() { WorldDataAPI.registerModCache(MOD_ID); @@ -60,19 +80,53 @@ public void onInitialize() { FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class).forEach(BetterEndPlugin::register); Integrations.init(); Configs.saveConfigs(); - + if (GeneratorOptions.useNewGenerator()) { ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock() > 250000L); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } - + BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { - EndStructures.addBiomeStructures(biomeID, biome); - EndFeatures.addBiomeFeatures(biomeID, biome); + //EndStructures.addBiomeStructures(biomeID, biome); + //TODO: 1.18 disabled to test feature-sorting of BE biomes + //EndFeatures.addBiomeFeatures(biomeID, biome); }); + List biomes = new LinkedList<>(); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endBarrens()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endHighlands()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endMidlands()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.theEnd()); + biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.smallEndIslands()); + + List lBiomes = new LinkedList<>(); + lBiomes.add(EndBiomes.FOGGY_MUSHROOMLAND.getBiome()); + lBiomes.add(EndBiomes.CHORUS_FOREST.getBiome()); + lBiomes.add(EndBiomes.DUST_WASTELANDS.getBiome()); + lBiomes.add(EndBiomes.MEGALAKE.getBiome()); + lBiomes.add(EndBiomes.MEGALAKE_GROVE.getBiome()); + lBiomes.add(EndBiomes.CRYSTAL_MOUNTAINS.getBiome()); + lBiomes.add(EndBiomes.PAINTED_MOUNTAINS.getBiome()); + lBiomes.add(EndBiomes.SHADOW_FOREST.getBiome()); + lBiomes.add(EndBiomes.AMBER_LAND.getBiome()); + lBiomes.add(EndBiomes.BLOSSOMING_SPIRES.getBiome()); + lBiomes.add(EndBiomes.SULPHUR_SPRINGS.getBiome()); + lBiomes.add(EndBiomes.UMBRELLA_JUNGLE.getBiome()); + lBiomes.add(EndBiomes.GLOWING_GRASSLANDS.getBiome()); + lBiomes.add(EndBiomes.DRAGON_GRAVEYARDS.getBiome()); + lBiomes.add(EndBiomes.DRY_SHRUBLAND.getBiome()); + lBiomes.add(EndBiomes.LANTERN_WOODS.getBiome()); + lBiomes.add(EndBiomes.NEON_OASIS.getBiome()); + lBiomes.add(EndBiomes.UMBRA_VALLEY.getBiome()); + + lBiomes.forEach(biome -> { + BiomeAPI.sortBiomeFeatures(biome); + }); + biomes.addAll(lBiomes); + + //buildFeaturesPerStep(lBiomes, true); } - public static ResourceLocation makeID(String path) { return new ResourceLocation(MOD_ID, path); } + } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 6c203c17b..8fea021b1 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -2,7 +2,6 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -26,7 +25,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_AMBER_LAND) .particles(EndParticles.AMBER_SPHERE, 0.001F) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.AMBER_ORE) .feature(EndFeatures.END_LAKE_RARE) .feature(EndFeatures.HELIX_TREE) diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index a1528ac07..556624ee3 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -2,7 +2,6 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -26,7 +25,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(241, 146, 229) .fogDensity(1.7F) .plantsColor(122, 45, 122) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) .feature(EndFeatures.SPIRE) diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index f4d8a3aa1..f9d720082 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -25,7 +25,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.5F) .plantsColor(122, 45, 122) .waterAndFogColor(73, 30, 73) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.PORTAL, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 76c27e34c..23aeb881d 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -20,7 +20,7 @@ public CrystalMountainsBiome() { protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) .plantsColor(255, 133, 211) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 83f1a6c6b..7b8ae4a04 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -24,7 +24,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.FIREFLY, 0.0007F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(203, 59, 167) .plantsColor(244, 46, 79) .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index d1a3dd79e..bcad48967 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -21,7 +21,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.2F) .waterAndFogColor(113, 88, 53) .plantsColor(237, 122, 66) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.LUCERNIA_BUSH_RARE) .feature(EndFeatures.ORANGO) diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 0c6a82202..b667f83f6 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -20,7 +20,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 4ce5cbc36..d851e6d05 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -23,7 +23,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.FIREFLY, 0.001F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(92, 250, 230) .plantsColor(73, 210, 209) .feature(EndFeatures.END_LAKE_RARE) diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index b0f17522b..0edc9a726 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -22,7 +22,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.1F) .waterAndFogColor(171, 234, 226) .plantsColor(254, 85, 57) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .feature(EndFeatures.END_LAKE_NORMAL) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index b5e469446..7e9be0b91 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -28,7 +28,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.LACUGROVE) diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 71cbc6890..5bad1e438 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -24,7 +24,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .waterAndFogColor(192, 180, 131) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.WHITE_ASH, 0.01F) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index eb613ab0b..8db43eafa 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -23,7 +23,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(2.5F) .plantsColor(45, 45, 45) .waterAndFogColor(42, 45, 80) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.MYCELIUM, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index 1c007e0cf..89e754379 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -25,7 +25,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.JUNGLE_SPORE, 0.001F) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .surface(SurfaceRules.state(surfaceMaterial().getTopMaterial())) + .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.END_LAKE) .feature(EndFeatures.UMBRELLA_TREE) .feature(EndFeatures.JELLYSHROOM) From ef025d05dd37331dbeba2c6605fca131062ad941 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 21:39:12 +0100 Subject: [PATCH 32/93] Fixed BCLib compat --- src/main/java/ru/betterend/registry/EndBiomes.java | 2 +- src/main/java/ru/betterend/world/biome/EndBiome.java | 2 +- .../java/ru/betterend/world/biome/land/AmberLandBiome.java | 2 +- .../ru/betterend/world/biome/land/BlossomingSpiresBiome.java | 2 +- .../java/ru/betterend/world/biome/land/ChorusForestBiome.java | 3 +-- .../ru/betterend/world/biome/land/CrystalMountainsBiome.java | 3 +-- .../ru/betterend/world/biome/land/DragonGraveyardsBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/DryShrublandBiome.java | 3 +-- .../ru/betterend/world/biome/land/DustWastelandsBiome.java | 3 +-- .../ru/betterend/world/biome/land/FoggyMushroomlandBiome.java | 2 +- .../ru/betterend/world/biome/land/GlowingGrasslandsBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/LanternWoodsBiome.java | 3 +-- src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java | 2 +- .../java/ru/betterend/world/biome/land/MegalakeGroveBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/NeonOasisBiome.java | 2 +- .../ru/betterend/world/biome/land/PaintedMountainsBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/ShadowForestBiome.java | 3 +-- .../ru/betterend/world/biome/land/SulphurSpringsBiome.java | 2 +- .../java/ru/betterend/world/biome/land/UmbraValleyBiome.java | 2 +- .../ru/betterend/world/biome/land/UmbrellaJungleBiome.java | 3 +-- .../ru/betterend/world/features/terrain/DesertLakeFeature.java | 2 -- .../ru/betterend/world/features/terrain/EndLakeFeature.java | 2 -- .../betterend/world/features/terrain/FloatingSpireFeature.java | 2 -- .../java/ru/betterend/world/features/terrain/SpireFeature.java | 2 -- .../features/terrain/caves/CaveChunkPopulatorFeature.java | 1 - .../betterend/world/features/terrain/caves/EndCaveFeature.java | 1 - .../world/features/terrain/caves/TunelCaveFeature.java | 1 - .../betterend/world/structures/piece/CrystalMountainPiece.java | 3 +-- .../java/ru/betterend/world/structures/piece/LakePiece.java | 3 --- 29 files changed, 21 insertions(+), 47 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index a09637e57..ec247e54d 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -160,6 +160,6 @@ public static EndCaveBiome registerCaveBiome(EndCaveBiome.Config biomeConfig) { } public static EndCaveBiome getCaveBiome(int x, int z) { - return (EndCaveBiome) caveBiomeMap.getBiome(x, z); + return (EndCaveBiome) caveBiomeMap.getBiome(x, 5, z); } } diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 0022e24bb..eae4816c0 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; import ru.betterend.interfaces.StructureFeaturesAccessor; diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index 8fea021b1..d167bb2be 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -3,7 +3,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 556624ee3..c51f5a187 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -3,7 +3,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index f9d720082..1a71d5bf1 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -5,9 +5,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 23aeb881d..68471a097 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -2,9 +2,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 7b8ae4a04..1824e9fab 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -2,9 +2,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index bcad48967..d72a857ea 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -2,9 +2,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index b667f83f6..7c520147a 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -3,9 +3,8 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 21c9a2030..1ecc681d9 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -4,7 +4,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index d851e6d05..113625dca 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -2,9 +2,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 0edc9a726..f8a80ba53 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -2,9 +2,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 807ddb513..0c4927782 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -4,7 +4,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 7e9be0b91..2615344ad 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -2,9 +2,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index af0c0fa26..e74a4a558 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -5,7 +5,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 5bad1e438..33097c7c1 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -3,9 +3,8 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndStructures; diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 8db43eafa..2b4065db1 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -3,9 +3,8 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 29ba55ebd..0c0b162ef 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -5,7 +5,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index ce3cfdc09..0e95aeea5 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -3,7 +3,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index 89e754379..7af2d0453 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -2,9 +2,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.api.biomes.SurfaceMaterialProvider; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 3d5f71b43..6b863f957 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -124,7 +124,6 @@ public boolean place(FeaturePlaceContext featureConfig } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); //world.getBiome(pos).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) @@ -197,7 +196,6 @@ else if (y2 + x2 + z2 <= rb) { } else if (y < waterLevel) { if (world.isEmptyBlock(POS.above())) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); //world.getBiome(POS).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); BlocksHelper.setWithoutUpdate( world, diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 6cb914366..7af472fa9 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -128,7 +128,6 @@ public boolean place(FeaturePlaceContext featureConfig } pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); //state = world.getBiome(pos) // .getGenerationSettings() @@ -200,7 +199,6 @@ else if (y > waterLevel) // Make border else if (y < waterLevel && y2 + x2 + z2 <= rb) { if (world.isEmptyBlock(POS.above())) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, pos); // state = world.getBiome(POS) // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index d03b78f0c..1b04a7f7a 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -65,11 +65,9 @@ public boolean place(FeaturePlaceContext featureConfig if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findTopMaterial(world, info.getPos());//world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index efde5ab3b..e52333e25 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -68,12 +68,10 @@ public boolean place(FeaturePlaceContext featureConfig if (random.nextInt(16) == 0) { support.add(info.getPos().above()); } - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findTopMaterial(world, info.getPos()); //return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } else if (info.getState(Direction.UP, 3).isAir()) { - //TODO: 1.18 this needs to change to a dynamic block return EndBiome.findUnderMaterial(world, info.getPos()); // return world.getBiome(info.getPos()) // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index b82ffbb7d..ccb9d5f26 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -42,7 +42,6 @@ public boolean place(FeaturePlaceContext featureConfig MutableBlockPos max = new MutableBlockPos().set(pos); fillSets(sx, sz, world.getChunk(pos), floorPositions, ceilPositions, min, max); EndCaveBiome biome = supplier.get(); - //TODO: 1.18 This needs to change to a configured material BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 436dacae3..c6a924812 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -76,7 +76,6 @@ public boolean place(FeaturePlaceContext featureConfig } }); - //TODO: 1.18 this needs to change to a dynamic block BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 0d55a62e1..fbca390cd 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -168,7 +168,6 @@ else if (world.getBlockState(mut).getMaterial().isReplaceable()) { } floorSets.forEach((biome, floorPositions) -> { - //TODO: 1.18 this needs to change to a dynamic block BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); // BlockState surfaceBlock = biome.getBiome() // .getGenerationSettings() diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index 3970cad8d..2413de9fa 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -30,7 +30,6 @@ public class CrystalMountainPiece extends MountainPiece { public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); - //TODO: 1.18 this needs to change to a dynamic block top = EndBiome.findTopMaterial(biome); //biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } @@ -40,7 +39,7 @@ public CrystalMountainPiece(StructurePieceSerializationContext type, CompoundTag @Override protected void fromNbt(CompoundTag tag) { - super.fromNbt(tag);//TODO: 1.18 this needs to change to a dynamic block + super.fromNbt(tag); top = EndBiome.findTopMaterial(BiomeAPI.getBiome(biomeID)); //BiomeAPI.getBiome(biomeID).getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 4c01b7b94..7434f1c18 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -133,7 +133,6 @@ else if (dist <= r3 && mut.getY() < center.getY()) { )) { state = chunk.getBlockState(mut.above()); if (state.isAir()) { - //TODO: 1.18 this needs to change to a dynamic block state = EndBiome.findTopMaterial(world, worldPos); // state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) // .getGenerationSettings() @@ -170,7 +169,6 @@ private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mu BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - //TODO: 1.18 this needs to change to a dynamic block bState = EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() @@ -194,7 +192,6 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { mut.setY(y + 1); BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - //TODO: 1.18 this needs to change to a dynamic block bState =EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); // bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) // .getGenerationSettings() From 514749d1211ad32b59decb1df7df50828eb9385f Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 21:52:08 +0100 Subject: [PATCH 33/93] Another BCLib compat fix --- src/main/java/ru/betterend/BetterEnd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index fac7cc0a9..e55231885 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -82,7 +82,7 @@ public void onInitialize() { Configs.saveConfigs(); if (GeneratorOptions.useNewGenerator()) { - ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock() > 250000L); + ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes((int)GeneratorOptions.getIslandDistBlock()); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } From 520fca63c34c6b00e79a0675222b8ea674c2ef36 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 22:16:16 +0100 Subject: [PATCH 34/93] reenabled feature add --- src/main/java/ru/betterend/BetterEnd.java | 57 +---------------------- 1 file changed, 2 insertions(+), 55 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index e55231885..98d03696e 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -1,28 +1,8 @@ package ru.betterend; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; - -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import org.apache.commons.lang3.mutable.MutableInt; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; @@ -87,43 +67,10 @@ public void onInitialize() { } BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { - //EndStructures.addBiomeStructures(biomeID, biome); - //TODO: 1.18 disabled to test feature-sorting of BE biomes - //EndFeatures.addBiomeFeatures(biomeID, biome); - }); - List biomes = new LinkedList<>(); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endBarrens()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endHighlands()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.endMidlands()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.theEnd()); - biomes.add(net.minecraft.data.worldgen.biome.EndBiomes.smallEndIslands()); - - List lBiomes = new LinkedList<>(); - lBiomes.add(EndBiomes.FOGGY_MUSHROOMLAND.getBiome()); - lBiomes.add(EndBiomes.CHORUS_FOREST.getBiome()); - lBiomes.add(EndBiomes.DUST_WASTELANDS.getBiome()); - lBiomes.add(EndBiomes.MEGALAKE.getBiome()); - lBiomes.add(EndBiomes.MEGALAKE_GROVE.getBiome()); - lBiomes.add(EndBiomes.CRYSTAL_MOUNTAINS.getBiome()); - lBiomes.add(EndBiomes.PAINTED_MOUNTAINS.getBiome()); - lBiomes.add(EndBiomes.SHADOW_FOREST.getBiome()); - lBiomes.add(EndBiomes.AMBER_LAND.getBiome()); - lBiomes.add(EndBiomes.BLOSSOMING_SPIRES.getBiome()); - lBiomes.add(EndBiomes.SULPHUR_SPRINGS.getBiome()); - lBiomes.add(EndBiomes.UMBRELLA_JUNGLE.getBiome()); - lBiomes.add(EndBiomes.GLOWING_GRASSLANDS.getBiome()); - lBiomes.add(EndBiomes.DRAGON_GRAVEYARDS.getBiome()); - lBiomes.add(EndBiomes.DRY_SHRUBLAND.getBiome()); - lBiomes.add(EndBiomes.LANTERN_WOODS.getBiome()); - lBiomes.add(EndBiomes.NEON_OASIS.getBiome()); - lBiomes.add(EndBiomes.UMBRA_VALLEY.getBiome()); - - lBiomes.forEach(biome -> { - BiomeAPI.sortBiomeFeatures(biome); + EndStructures.addBiomeStructures(biomeID, biome); + EndFeatures.addBiomeFeatures(biomeID, biome); }); - biomes.addAll(lBiomes); - //buildFeaturesPerStep(lBiomes, true); } public static ResourceLocation makeID(String path) { return new ResourceLocation(MOD_ID, path); From 33d8fe86fd41afdc01d60ed578c8e08a39cc0ee5 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 22:30:14 +0100 Subject: [PATCH 35/93] Updated fabric loader --- gradle.properties | 2 +- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index ff2885736..c584ccb3e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2G # check these on https://fabricmc.net/use minecraft_version=1.18 yarn_mappings=6 -loader_version=0.12.8 +loader_version=0.12.9 #Loom loom_version=0.10-SNAPSHOT diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7d1697ab9..f6bfc8bde 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -42,7 +42,7 @@ ], "depends": { - "fabricloader": ">=0.12.4", + "fabricloader": ">=0.12.9", "fabric": ">=0.42.1", "minecraft": ">=1.17", "bclib": ">=0.5.4" From ef02d0ee5fca0712b73a34d4fac4c96d3e6a0b3a Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 22:35:56 +0100 Subject: [PATCH 36/93] Removed tested ToDo's --- .../java/ru/betterend/blocks/HydrothermalVentBlock.java | 6 ++---- src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java | 3 +-- .../java/ru/betterend/blocks/VentBubbleColumnBlock.java | 3 +-- src/main/java/ru/betterend/mixin/common/EntityMixin.java | 2 -- .../mixin/common/NoiseBasedChunkGeneratorMixin.java | 2 +- .../betterend/world/biome/land/FoggyMushroomlandBiome.java | 2 -- .../java/ru/betterend/world/biome/land/MegalakeBiome.java | 2 -- .../java/ru/betterend/world/biome/land/NeonOasisBiome.java | 2 -- .../ru/betterend/world/biome/land/SulphurSpringsBiome.java | 4 +--- .../ru/betterend/world/biome/land/UmbraValleyBiome.java | 2 -- .../ru/betterend/world/features/BiomeIslandFeature.java | 1 - .../world/features/terrain/SulphuricLakeFeature.java | 3 +-- .../java/ru/betterend/world/structures/piece/LakePiece.java | 3 ++- 13 files changed, 9 insertions(+), 26 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 780a35514..8353cb0c6 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -91,8 +91,7 @@ public BlockState updateShape(BlockState state, Direction facing, BlockState nei return Blocks.WATER.defaultBlockState(); } else if (state.getValue(WATERLOGGED) && facing == Direction.UP && neighborState.is(Blocks.WATER)) { - //TODO: 1.18 see if it still ticks - world./*getBlockTicks().*/scheduleTick(pos, this, 20); + world.scheduleTick(pos, this, 20); } return state; } @@ -120,8 +119,7 @@ public void tick(BlockState state, ServerLevel world, BlockPos pos, Random rando BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, EndBlocks.VENT_BUBBLE_COLUMN); - //TODO: 1.18 see if it still ticks - world./*getBlockTicks().*/scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); + world.scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); } } diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index c56749048..1c55c2f57 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -116,8 +116,7 @@ public FluidState getFluidState(BlockState state) { @Override public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { - //TODO: 1.18 Check if this still workd - world./*getBlockTicks().*/scheduleTick(pos, this, 2); + world.scheduleTick(pos, this, 2); if (state.getValue(WATERLOGGED)) { world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index b0d2ba083..a03fe9265 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -76,8 +76,7 @@ public BlockState updateShape(BlockState state, Direction direction, BlockState BlockPos up = pos.above(); if (world.getBlockState(up).is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, up, this); - //TODO: 1.18 check if this ticks - world./*getBlockTicks().*/scheduleTick(up, this, 5); + world.scheduleTick(up, this, 5); } } return state; diff --git a/src/main/java/ru/betterend/mixin/common/EntityMixin.java b/src/main/java/ru/betterend/mixin/common/EntityMixin.java index 20d4e1ee1..31b3876f2 100644 --- a/src/main/java/ru/betterend/mixin/common/EntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EntityMixin.java @@ -66,8 +66,6 @@ public void be_changeDimension(ServerLevel destination, CallbackInfoReturnable featureConfig BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); BlockState topMaterial = EndBiome.findTopMaterial(world, surfacePos);; - //TODO: 1.18 the block selection should be based on the surface rules of the biome if (BlocksHelper.isFluid(topMaterial)) { topBlock = Blocks.GRAVEL.defaultBlockState(); underBlock = Blocks.STONE.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 430259fa4..629628043 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -76,8 +76,7 @@ public boolean place(FeaturePlaceContext featureConfig else { if (!isAbsoluteBorder(world, POS)) { BlocksHelper.setWithoutUpdate(world, POS, Blocks.WATER); - //TODO: 1.18 check if this ticks - world./*getLiquidTicks().*/scheduleTick(POS, Fluids.WATER, 0); + world.scheduleTick(POS, Fluids.WATER, 0); brimstone.add(POS.below()); if (random.nextBoolean()) { brimstone.add(POS.below(2)); diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 7434f1c18..219e3f1e4 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -210,7 +210,8 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { } else if (chunk.getBlockState(mut.move(Direction.UP)).isAir()) { //TODO: 1.18 test if this is thr right tick - /*chunk.getLiquidTicks()*/world.scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); + chunk.markPosForPostprocessing(mut.move(Direction.DOWN)); +// /*chunk.getLiquidTicks()*/world.scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); } } } From a27f3e35e2726cd2d8efcee9ea754d3a9b058554 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 23:01:08 +0100 Subject: [PATCH 37/93] top Material handling --- .../java/ru/betterend/world/structures/piece/NBTPiece.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index c55746f54..c822913e5 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -20,6 +20,7 @@ import ru.bclib.util.MHelper; import ru.bclib.util.StructureHelper; import ru.betterend.registry.EndStructures; +import ru.betterend.world.biome.EndBiome; public class NBTPiece extends BasePiece { private ResourceLocation structureID; @@ -89,7 +90,7 @@ public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkG StructureHelper.erode(world, bounds, erosion, random); } if (cover) { - StructureHelper.cover(world, bounds, random); + StructureHelper.cover(world, bounds, random, EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); } } From f731351a6c568fd89eeafdf0eeef0978dbdc6f26 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 23:03:45 +0100 Subject: [PATCH 38/93] Fixed build errors --- src/main/java/ru/betterend/world/biome/EndBiome.java | 10 ++-------- .../betterend/world/features/CrashedShipFeature.java | 11 ++++++++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index eae4816c0..cc2a654ea 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -128,10 +128,7 @@ public BlockState getAltTopMaterial() { } public static BlockState findTopMaterial(BCLBiome biome){ - if (biome instanceof SurfaceMaterialProvider smp){ - return smp.getTopMaterial(); - } - return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + return BiomeAPI.findTopMaterial(biome).orElse(EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); } public static BlockState findTopMaterial(Biome biome){ @@ -143,10 +140,7 @@ public static BlockState findTopMaterial(WorldGenLevel world, BlockPos pos){ } public static BlockState findUnderMaterial(BCLBiome biome){ - if (biome instanceof SurfaceMaterialProvider smp){ - return smp.getTopMaterial(); - } - return EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial(); + return BiomeAPI.findUnderMaterial(biome).orElse(EndBiome.Config.DEFAULT_MATERIAL.getUnderMaterial()); } public static BlockState findUnderMaterial(WorldGenLevel world, BlockPos pos){ diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index 185c0901d..ff989a45b 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.LevelReader; @@ -23,14 +25,17 @@ import ru.bclib.util.StructureHelper; import ru.bclib.world.features.NBTStructureFeature; import ru.betterend.util.BlockFixer; - -import java.util.Random; +import ru.betterend.world.biome.EndBiome; public class CrashedShipFeature extends NBTStructureFeature { private static final StructureProcessor REPLACER; private static final String STRUCTURE_PATH = "/data/minecraft/structures/end_city/ship.nbt"; private StructureTemplate structure; - + + public CrashedShipFeature() { + super(EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); + } + @Override protected StructureTemplate getStructure(WorldGenLevel world, BlockPos pos, Random random) { if (structure == null) { From d11dc97fd9f81f92102516888cd9a2fa9ab0ef94 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 10 Dec 2021 12:51:42 +0100 Subject: [PATCH 39/93] Version update --- gradle.properties | 5 ++--- src/main/resources/fabric.mod.json | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index c584ccb3e..39934cd41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,8 +3,8 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version=1.18 -yarn_mappings=6 +minecraft_version=1.18.1 +fabric_version = 0.44.0+1.18 loader_version=0.12.9 #Loom @@ -19,7 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -fabric_version = 0.44.0+1.18 bclib_version = 1.0.3 rei_version = 7.0.343 canvas_version = 1.0.+ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f6bfc8bde..7514d2bfb 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -43,9 +43,9 @@ "depends": { "fabricloader": ">=0.12.9", - "fabric": ">=0.42.1", - "minecraft": ">=1.17", - "bclib": ">=0.5.4" + "fabric": ">=0.44.0", + "minecraft": ">=1.18.1", + "bclib": ">=1.0.3" }, "suggests": { "byg": ">=1.1.3", From 70e70710218463a33c382a532c58df100722d849 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 13 Dec 2021 18:15:56 +0100 Subject: [PATCH 40/93] New location for parent class --- .../betterend/world/surface/SulphuricSurfaceNoiseCondition.java | 2 +- .../ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index b18740789..1d04bdafc 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -1,6 +1,6 @@ package ru.betterend.world.surface; -import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.api.surface.rules.SurfaceNoiseCondition; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java index b146c3c0d..6fcae251f 100644 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -1,6 +1,6 @@ package ru.betterend.world.surface; -import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.api.surface.rules.SurfaceNoiseCondition; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; From ce727b26332f1d90ad83d27bde0a6af0d3c668a2 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 14 Dec 2021 13:46:45 +0100 Subject: [PATCH 41/93] Updated version --- gradle.properties | 4 ++-- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 39934cd41..858366fba 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2G # check these on https://fabricmc.net/use minecraft_version=1.18.1 fabric_version = 0.44.0+1.18 -loader_version=0.12.9 +loader_version=0.12.11 #Loom loom_version=0.10-SNAPSHOT @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.0.3 +bclib_version = 1.1.0 rei_version = 7.0.343 canvas_version = 1.0.+ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7514d2bfb..fd8da63ea 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", "minecraft": ">=1.18.1", - "bclib": ">=1.0.3" + "bclib": ">=1.1.0" }, "suggests": { "byg": ">=1.1.3", From 65dd58d86f6112803f2509512ae3814ff9141d17 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 10:25:01 +0100 Subject: [PATCH 42/93] Migrated to SurfaceBuilder --- .../ru/betterend/world/biome/EndBiome.java | 33 +++++++++++++++- .../world/biome/cave/LushAuroraCaveBiome.java | 13 ++++++- .../biome/cave/LushSmaragdantCaveBiome.java | 15 ++++++- .../world/biome/land/AmberLandBiome.java | 1 - .../biome/land/BlossomingSpiresBiome.java | 1 - .../world/biome/land/ChorusForestBiome.java | 1 - .../biome/land/CrystalMountainsBiome.java | 1 - .../biome/land/DragonGraveyardsBiome.java | 1 - .../world/biome/land/DryShrublandBiome.java | 1 - .../world/biome/land/DustWastelandsBiome.java | 1 - .../biome/land/FoggyMushroomlandBiome.java | 6 --- .../biome/land/GlowingGrasslandsBiome.java | 1 - .../world/biome/land/LanternWoodsBiome.java | 1 - .../world/biome/land/MegalakeBiome.java | 6 --- .../world/biome/land/MegalakeGroveBiome.java | 1 - .../world/biome/land/NeonOasisBiome.java | 6 --- .../biome/land/PaintedMountainsBiome.java | 1 - .../world/biome/land/ShadowForestBiome.java | 1 - .../world/biome/land/SulphurSpringsBiome.java | 35 +++++++++++++---- .../world/biome/land/UmbraValleyBiome.java | 39 ++++++++++++++----- .../world/biome/land/UmbrellaJungleBiome.java | 1 - .../SulphuricSurfaceNoiseCondition.java | 31 ++++++--------- .../surface/UmbraSurfaceNoiseCondition.java | 34 ++++++---------- 23 files changed, 137 insertions(+), 94 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index cc2a654ea..e56ce50f1 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.api.surface.SurfaceRuleBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; @@ -38,6 +39,28 @@ public BlockState getAltTopMaterial() { public BlockState getUnderMaterial() { return END_STONE; } + + @Override + public boolean generateFloorRule(){ + return true; + } + + @Override + public SurfaceRuleBuilder surface() { + SurfaceRuleBuilder builder = SurfaceRuleBuilder + .start() + .filler(getUnderMaterial()) + ; + + if (generateFloorRule() && getTopMaterial()!=getUnderMaterial()){ + if (getTopMaterial()!=getAltTopMaterial()){ + builder.floor(getTopMaterial()); + } else { + builder.chancedFloor(getTopMaterial(), getAltTopMaterial()); + } + } + return builder; + } } public abstract static class Config { @@ -94,7 +117,8 @@ public static EndBiome create(Config biomeConfig){ .mood(EndSounds.AMBIENT_DUST_WASTELANDS) .temperature(0.5f) .wetness(0.5f) - .precipitation(Biome.Precipitation.NONE); + .precipitation(Biome.Precipitation.NONE) + .surface(biomeConfig.surfaceMaterial().surface().build()); biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); @@ -118,6 +142,7 @@ public BlockState getTopMaterial() { return surfMatProv.getTopMaterial(); } + @Override public BlockState getUnderMaterial() { return surfMatProv.getUnderMaterial(); } @@ -127,6 +152,12 @@ public BlockState getAltTopMaterial() { return surfMatProv.getAltTopMaterial(); } + @Override + public boolean generateFloorRule() { return surfMatProv.generateFloorRule(); } + + @Override + public SurfaceRuleBuilder surface() { return surfMatProv.surface(); } + public static BlockState findTopMaterial(BCLBiome biome){ return BiomeAPI.findTopMaterial(biome).orElse(EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java index 6c7aafeb2..6f98a1b11 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.blocks.BlockProperties; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -58,11 +59,21 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .plantsColor(108, 25, 46) .waterAndFogColor(186, 77, 237) .particles(EndParticles.GLOWING_SPHERE, 0.001F) - .surface(EndBlocks.CAVE_MOSS); + ; } @Override public BiFunction getSupplier() { return LushAuroraCaveBiome.Biome::new; } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CAVE_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index c05d421ae..af18f335f 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -3,7 +3,9 @@ import java.util.function.BiFunction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; @@ -42,12 +44,21 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(2.0F) .plantsColor(0, 131, 145) .waterAndFogColor(31, 167, 212) - .particles(EndParticles.SMARAGDANT, 0.001F) - .surface(EndBlocks.CAVE_MOSS); + .particles(EndParticles.SMARAGDANT, 0.001F); } @Override public BiFunction getSupplier() { return LushSmaragdantCaveBiome.Biome::new; } + + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.CAVE_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index d167bb2be..c79a0adad 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -25,7 +25,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_AMBER_LAND) .particles(EndParticles.AMBER_SPHERE, 0.001F) - .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.AMBER_ORE) .feature(EndFeatures.END_LAKE_RARE) .feature(EndFeatures.HELIX_TREE) diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index c51f5a187..553e5f7f2 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -25,7 +25,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(241, 146, 229) .fogDensity(1.7F) .plantsColor(122, 45, 122) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) .feature(EndFeatures.SPIRE) diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 1a71d5bf1..9c4b49b36 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -24,7 +24,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.5F) .plantsColor(122, 45, 122) .waterAndFogColor(73, 30, 73) - .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.PORTAL, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index 68471a097..af1624f58 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -19,7 +19,6 @@ public CrystalMountainsBiome() { protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) .plantsColor(255, 133, 211) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.CRYSTAL_GRASS) .spawn(EntityType.ENDERMAN, 50, 1, 2); diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index 1824e9fab..e6a47d627 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -23,7 +23,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.FIREFLY, 0.0007F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(203, 59, 167) .plantsColor(244, 46, 79) .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index d72a857ea..c81b67df5 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -20,7 +20,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.2F) .waterAndFogColor(113, 88, 53) .plantsColor(237, 122, 66) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_OPENSPACE) .feature(EndFeatures.LUCERNIA_BUSH_RARE) .feature(EndFeatures.ORANGO) diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 7c520147a..cd14af8a9 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -19,7 +19,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 40720f837..808bdb0ed 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -2,7 +2,6 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -25,11 +24,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogColor(41, 122, 173) .fogDensity(3) .waterAndFogColor(119, 227, 250) - .chancedSurface( - SurfaceRules.state(surfaceMaterial().getTopMaterial()), - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - END_STONE - ) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) .music(EndSounds.MUSIC_FOREST) diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 113625dca..90530fc49 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -22,7 +22,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.FIREFLY, 0.001F) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .surface(surfaceMaterial().getTopMaterial()) .waterAndFogColor(92, 250, 230) .plantsColor(73, 210, 209) .feature(EndFeatures.END_LAKE_RARE) diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index f8a80ba53..b9a4ba457 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -21,7 +21,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.1F) .waterAndFogColor(171, 234, 226) .plantsColor(254, 85, 57) - .surface(surfaceMaterial().getTopMaterial()) .music(EndSounds.MUSIC_FOREST) .particles(EndParticles.GLOWING_SPHERE, 0.001F) .feature(EndFeatures.END_LAKE_NORMAL) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index 7d1b08e30..e99aeb207 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -2,7 +2,6 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -26,11 +25,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.75F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) - .chancedSurface( - SurfaceRules.state(surfaceMaterial().getTopMaterial()), - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - END_STONE - ) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.END_LOTUS) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 2615344ad..107057763 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -27,7 +27,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .surface(surfaceMaterial().getTopMaterial()) //TODO: 1.18 removed //.depth(0F) .feature(EndFeatures.LACUGROVE) diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 23564790b..41f078dce 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -3,7 +3,6 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; @@ -22,11 +21,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(106, 238, 215) - .chancedSurface( - SurfaceRules.state(surfaceMaterial().getTopMaterial()), - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - END_STONE - ) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) .music(EndSounds.MUSIC_OPENSPACE) diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 33097c7c1..0f5f04944 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -23,7 +23,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .waterAndFogColor(192, 180, 131) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.WHITE_ASH, 0.01F) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 2b4065db1..2efbe920c 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -22,7 +22,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(2.5F) .plantsColor(45, 45, 45) .waterAndFogColor(42, 45, 80) - .surface(surfaceMaterial().getTopMaterial()) .particles(ParticleTypes.MYCELIUM, 0.01F) .loop(EndSounds.AMBIENT_CHORUS_FOREST) .music(EndSounds.MUSIC_DARK) diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 7741c5ce9..35e66a81d 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,10 +1,14 @@ package ru.betterend.world.biome.land; +import java.util.List; + import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.surface.SurfaceRuleBuilder; +import ru.bclib.api.surface.rules.SwitchRuleSource; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; @@ -27,13 +31,6 @@ protected boolean hasCaves() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { builder - .surface( - SurfaceRules.sequence( - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.6), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(-0.3), SurfaceRules.state(surfaceMaterial().getTopMaterial())), - SurfaceRules.ifTrue(new SulphuricSurfaceNoiseCondition(0.5), SULPHURIC_ROCK), - BRIMSTONE - )) .music(EndSounds.MUSIC_OPENSPACE) .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) .waterColor(25, 90, 157) @@ -68,6 +65,30 @@ public BlockState getTopMaterial() { public BlockState getAltTopMaterial() { return Blocks.END_STONE.defaultBlockState(); } + + @Override + public boolean generateFloorRule() { + return false; + } + + @Override + public SurfaceRuleBuilder surface() { + return super + .surface() + .rule( + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + new SwitchRuleSource( + new SulphuricSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SULPHURIC_ROCK, + BRIMSTONE + ) + ) + ) + ); + } }; } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 369fbb64b..d593195b6 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,8 +1,12 @@ package ru.betterend.world.biome.land; +import java.util.List; + import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.surface.SurfaceRuleBuilder; +import ru.bclib.api.surface.rules.SwitchRuleSource; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; @@ -21,16 +25,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(100, 100, 100) .plantsColor(172, 189, 190) .waterAndFogColor(69, 104, 134) - .surface( - SurfaceRules.sequence( - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.4), SurfaceRules.state(surfaceMaterial().getAltTopMaterial())), - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(0.15), PALLIDIUM_HEAVY), - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.15), PALLIDIUM_THIN), - SurfaceRules.ifTrue(new UmbraSurfaceNoiseCondition(-0.4), PALLIDIUM_TINY) - )), SurfaceRules.state(surfaceMaterial().getTopMaterial()) - ) - ) .particles(EndParticles.AMBER_SPHERE, 0.0001F) .loop(EndSounds.UMBRA_VALLEY) .music(EndSounds.MUSIC_DARK) @@ -52,6 +46,31 @@ public BlockState getTopMaterial() { public BlockState getAltTopMaterial() { return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); } + + @Override + public boolean generateFloorRule() { + return false; + } + + @Override + public SurfaceRuleBuilder surface() { + return super + .surface() + .rule( + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + new SwitchRuleSource( + new UmbraSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + PALLIDIUM_HEAVY, + PALLIDIUM_THIN, + PALLIDIUM_TINY, + SurfaceRules.state(surfaceMaterial().getTopMaterial()) + ) + ) + ) + ); + } }; } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index 7af2d0453..a14bcec77 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -24,7 +24,6 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.JUNGLE_SPORE, 0.001F) .music(EndSounds.MUSIC_FOREST) .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .surface(surfaceMaterial().getTopMaterial()) .feature(EndFeatures.END_LAKE) .feature(EndFeatures.UMBRELLA_TREE) .feature(EndFeatures.JELLYSHROOM) diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index 1d04bdafc..dc7e3f54b 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -1,37 +1,28 @@ package ru.betterend.world.surface; -import ru.bclib.api.surface.rules.SurfaceNoiseCondition; +import ru.bclib.interfaces.NumericProvider; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -public class SulphuricSurfaceNoiseCondition extends SurfaceNoiseCondition { +/** + * Noise source that returns a value in [0, 3] + */ +public class SulphuricSurfaceNoiseCondition implements NumericProvider { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); - private final double threshold; - public SulphuricSurfaceNoiseCondition(double threshold){ - this.threshold = threshold; - } - - private static int lastX = Integer.MIN_VALUE; - private static int lastZ = Integer.MIN_VALUE; - private static double lastValue = 0; - @Override - public boolean test(SurfaceRulesContextAccessor context) { + public int getNumber(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); - if (lastX==x && lastZ==z) return lastValue < threshold; - - double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( -0.1, 0.1, MHelper.RANDOM ); - - lastX=x; - lastZ=z; - lastValue=value; - return value < threshold; + if (value < -0.6) return 0; + if (value < -0.3) return 1; + if (value < -0.5) return 2; + return 3; } } diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java index 6fcae251f..845e88c72 100644 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -1,39 +1,29 @@ package ru.betterend.world.surface; -import ru.bclib.api.surface.rules.SurfaceNoiseCondition; +import ru.bclib.interfaces.NumericProvider; import ru.bclib.mixin.common.SurfaceRulesContextAccessor; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -public class UmbraSurfaceNoiseCondition extends SurfaceNoiseCondition { +/** + * Noise source that returns a value in [0, 4] + */ +public class UmbraSurfaceNoiseCondition implements NumericProvider { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); - private final double threshold; - public UmbraSurfaceNoiseCondition(double threshold){ - this.threshold = threshold; - } - - private static int lastX = Integer.MIN_VALUE; - private static int lastZ = Integer.MIN_VALUE; - private static double lastValue = 0; - @Override - public boolean test(SurfaceRulesContextAccessor context) { + public int getNumber(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); - if (lastX==x && lastZ==z) return lastValue > threshold; - - double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( -0.1, 0.1, MHelper.RANDOM ); - - lastX=x; - lastZ=z; - lastValue=value; - return value > threshold; - //int depth = (int) (NOISE.eval(x * 0.1, z * 0.1) * 20 + NOISE.eval(x * 0.5, z * 0.5) * 10 + 60); - //SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise + depth, defaultBlock, defaultFluid, seaLevel, seed, n, config); + if (value > 0.4) return 0; + if (value > 0.15) return 1; + if (value > -0.15) return 2; + if (value > -0.4) return 3; + return 4; } } From 71ecd6d17ed0a5b45f451782a3eea15cb01f7d87 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 10:25:16 +0100 Subject: [PATCH 43/93] Exclude *the_void* biome --- src/main/java/ru/betterend/BetterEnd.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 98d03696e..011173df0 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -3,6 +3,7 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biomes; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.Logger; @@ -67,8 +68,10 @@ public void onInitialize() { } BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { - EndStructures.addBiomeStructures(biomeID, biome); - EndFeatures.addBiomeFeatures(biomeID, biome); + if (!biomeID.equals(Biomes.THE_VOID.location())) { + EndStructures.addBiomeStructures(biomeID, biome); + EndFeatures.addBiomeFeatures(biomeID, biome); + } }); } From 1593e7dc412235b477a00138078465f769eec72e Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 11:59:01 +0100 Subject: [PATCH 44/93] Fixed priorities in SurfaceRules --- .../java/ru/betterend/world/biome/EndBiome.java | 15 ++++++--------- .../world/biome/land/SulphurSpringsBiome.java | 6 +++--- .../world/biome/land/UmbraValleyBiome.java | 6 +++--- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index e56ce50f1..7e0601d4a 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; @@ -22,12 +20,14 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; +import java.util.function.BiFunction; + public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { public static class DefaultSurfaceMaterialProvider implements SurfaceMaterialProvider{ public static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @Override public BlockState getTopMaterial() { - return END_STONE; + return getUnderMaterial(); } @Override @@ -47,11 +47,8 @@ public boolean generateFloorRule(){ @Override public SurfaceRuleBuilder surface() { - SurfaceRuleBuilder builder = SurfaceRuleBuilder - .start() - .filler(getUnderMaterial()) - ; - + SurfaceRuleBuilder builder = SurfaceRuleBuilder.start(); + if (generateFloorRule() && getTopMaterial()!=getUnderMaterial()){ if (getTopMaterial()!=getAltTopMaterial()){ builder.floor(getTopMaterial()); @@ -59,7 +56,7 @@ public SurfaceRuleBuilder surface() { builder.chancedFloor(getTopMaterial(), getAltTopMaterial()); } } - return builder; + return builder.filler(getUnderMaterial()); } } diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 35e66a81d..467021317 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.land; -import java.util.List; - import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -18,6 +16,8 @@ import ru.betterend.world.biome.EndBiome; import ru.betterend.world.surface.SulphuricSurfaceNoiseCondition; +import java.util.List; + public class SulphurSpringsBiome extends EndBiome.Config { public SulphurSpringsBiome() { super("sulphur_springs"); @@ -75,7 +75,7 @@ public boolean generateFloorRule() { public SurfaceRuleBuilder surface() { return super .surface() - .rule( + .rule(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, new SwitchRuleSource( new SulphuricSurfaceNoiseCondition(), diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index d593195b6..b24afe2d1 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.land; -import java.util.List; - import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; @@ -15,6 +13,8 @@ import ru.betterend.world.biome.EndBiome; import ru.betterend.world.surface.UmbraSurfaceNoiseCondition; +import java.util.List; + public class UmbraValleyBiome extends EndBiome.Config { public UmbraValleyBiome() { super("umbra_valley"); @@ -56,7 +56,7 @@ public boolean generateFloorRule() { public SurfaceRuleBuilder surface() { return super .surface() - .rule( + .rule(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, new SwitchRuleSource( new UmbraSurfaceNoiseCondition(), From 19b48a87a4eef7f19bcc8c47370a6f8e5b14bf10 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 11:59:53 +0100 Subject: [PATCH 45/93] Use LifeCycle API --- .../mixin/common/ServerLevelMixin.java | 32 +++++++------------ .../java/ru/betterend/registry/EndBiomes.java | 8 +++-- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index b5381cc97..9ad8f7bd4 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -1,21 +1,14 @@ package ru.betterend.mixin.common; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.world.level.CustomSpawner; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WritableLevelData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -25,32 +18,29 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.api.biomes.BiomeAPI; import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; -import java.util.List; -import java.util.concurrent.Executor; import java.util.function.Supplier; @Mixin(ServerLevel.class) public abstract class ServerLevelMixin extends Level { - private static String be_lastWorld = null; + //private static String be_lastWorld = null; protected ServerLevelMixin(WritableLevelData writableLevelData, ResourceKey resourceKey, DimensionType dimensionType, Supplier supplier, boolean bl, boolean bl2, long l) { super(writableLevelData, resourceKey, dimensionType, supplier, bl, bl2, l); } - @Inject(method = "*", at = @At("TAIL")) - private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { - if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { - return; - } - - be_lastWorld = session.getLevelId(); - ServerLevel world = ServerLevel.class.cast(this); - EndBiomes.onWorldLoad(world.getSeed(), world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); - } +// @Inject(method = "*", at = @At("TAIL")) +// private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { +// if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { +// return; +// } +// +// be_lastWorld = session.getLevelId(); +// //ServerLevel world = ServerLevel.class.cast(this); +// //EndBiomes.onWorldLoad(world.getSeed(), world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); +// } @Inject(method = "getSharedSpawnPos", at = @At("HEAD"), cancellable = true) private void be_getSharedSpawnPos(CallbackInfoReturnable info) { diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index ec247e54d..75823c172 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -2,7 +2,9 @@ import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.biome.Biome; +import ru.bclib.api.LifeCycleAPI; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.generator.BiomePicker; @@ -74,9 +76,11 @@ public class EndBiomes { public static final EndCaveBiome LUSH_AURORA_CAVE = registerCaveBiome(new LushAuroraCaveBiome()); public static final EndCaveBiome JADE_CAVE = registerCaveBiome(new JadeCaveBiome()); - public static void register() {} + public static void register() { + LifeCycleAPI.onLevelLoad(EndBiomes::onWorldLoad); + } - public static void onWorldLoad(long seed, Registry registry) { + private static void onWorldLoad(ServerLevel level, long seed, Registry registry) { CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry)); CAVE_BIOMES.rebuild(); if (caveBiomeMap == null || lastSeed != seed) { From 784834aef8509ecbe9eefbd1a900977d4eb04318 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 12:01:29 +0100 Subject: [PATCH 46/93] Make sure we set the distance as a square --- src/main/java/ru/betterend/BetterEnd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 011173df0..8ab9eb719 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -63,7 +63,7 @@ public void onInitialize() { Configs.saveConfigs(); if (GeneratorOptions.useNewGenerator()) { - ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes((int)GeneratorOptions.getIslandDistBlock()); + ru.bclib.world.generator.GeneratorOptions.setFarEndBiomesSqr(GeneratorOptions.getIslandDistBlock()); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } From ae755a6d11a8edd17a3296d106c973b79dee2421 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 15 Dec 2021 17:25:58 +0300 Subject: [PATCH 47/93] Library update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 858366fba..fd5774cc4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.0 +bclib_version = 1.1.1 rei_version = 7.0.343 canvas_version = 1.0.+ From e019dc2031ed8045c897a97135e7bd1e06301b08 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 16:02:53 +0100 Subject: [PATCH 48/93] Loader update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 858366fba..586eb7e83 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2G # check these on https://fabricmc.net/use minecraft_version=1.18.1 fabric_version = 0.44.0+1.18 -loader_version=0.12.11 +loader_version=0.12.12 #Loom loom_version=0.10-SNAPSHOT From dd1ef90f7e3d93d8de1117aa90b7030a3e2397f2 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 15 Dec 2021 16:03:35 +0100 Subject: [PATCH 49/93] Dependency update --- src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fd8da63ea..e5760f908 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", "minecraft": ">=1.18.1", - "bclib": ">=1.1.0" + "bclib": ">=1.1.1" }, "suggests": { "byg": ">=1.1.3", From e4d534d1c642ada6bc69be60b3525de06ddf209f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 15 Dec 2021 18:51:30 +0300 Subject: [PATCH 50/93] Small distance fix --- src/main/java/ru/betterend/BetterEnd.java | 2 +- .../ru/betterend/world/generator/GeneratorOptions.java | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 8ab9eb719..40e6c3065 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -63,7 +63,7 @@ public void onInitialize() { Configs.saveConfigs(); if (GeneratorOptions.useNewGenerator()) { - ru.bclib.world.generator.GeneratorOptions.setFarEndBiomesSqr(GeneratorOptions.getIslandDistBlock()); + ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock()); ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y)); } diff --git a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java index 4e404a6f6..79f0850d6 100644 --- a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java +++ b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java @@ -22,9 +22,9 @@ public class GeneratorOptions { private static BlockPos spawn; private static boolean replacePortal; private static boolean replacePillars; - private static long islandDistBlock; private static int islandDistChunk; private static boolean directSpikeHeight; + private static int circleRadius = 1000; public static void init() { biomeSizeCaves = Configs.GENERATOR_CONFIG.getInt("biomeMap", "biomeSizeCaves", 32); @@ -76,8 +76,7 @@ public static void init() { ); replacePortal = Configs.GENERATOR_CONFIG.getBoolean("portal", "customEndPortal", true); replacePillars = Configs.GENERATOR_CONFIG.getBoolean("spikes", "customObsidianSpikes", true); - int circleRadius = Configs.GENERATOR_CONFIG.getInt("customGenerator", "voidRingSize", 1000); - islandDistBlock = (long) circleRadius * (long) circleRadius; + circleRadius = Configs.GENERATOR_CONFIG.getInt("customGenerator", "voidRingSize", 1000); islandDistChunk = (circleRadius >> 3); // Twice bigger than normal } @@ -137,8 +136,8 @@ public static boolean replacePillars() { return replacePillars; } - public static long getIslandDistBlock() { - return islandDistBlock; + public static int getIslandDistBlock() { + return circleRadius; } public static int getIslandDistChunk() { From 5460ccba2b7459cdafb72be06613a447701105f4 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 15 Dec 2021 19:03:28 +0300 Subject: [PATCH 51/93] Average depth getter --- .../world/generator/TerrainGenerator.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index d5518706c..f8c3bfbb7 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -11,7 +11,9 @@ import net.minecraft.util.Mth; import net.minecraft.world.level.biome.BiomeSource; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; +import ru.bclib.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; public class TerrainGenerator { @@ -83,23 +85,22 @@ public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource } private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - //TODO: 1.18 find alternative -// if (getBiome(biomeSource, x, z).getDepth() < 0.1F) { -// return 0F; -// } -// float depth = 0F; -// for (int i = 0; i < OFFS.length; i++) { -// int px = x + OFFS[i].x; -// int pz = z + OFFS[i].y; -// depth += getBiome(biomeSource, px, pz).getDepth() * COEF[i]; -// } -// return depth; - return 0; + if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { + return 0F; + } + float depth = 0F; + for (int i = 0; i < OFFS.length; i++) { + int px = x + OFFS[i].x; + int pz = z + OFFS[i].y; + depth += getBiome(biomeSource, px, pz).getTerrainHeight() * COEF[i]; + } + return depth; } -// private static Biome getBiome(BiomeSource biomeSource, int x, int z) { -// return biomeSource.getNoiseBiome(x, 0, z); -// } + private static BCLBiome getBiome(BiomeSource biomeSource, int x, int z) { + // TODO replace null sampler + return BiomeAPI.getBiome(biomeSource.getNoiseBiome(x, 0, z, null)); + } /** * Check if this is land From 934efc9aeddb55334ccabd0c06b96c83541b719a Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 16 Dec 2021 15:13:25 +0300 Subject: [PATCH 52/93] Land generator (WIP) --- .../common/NoiseBasedChunkGeneratorMixin.java | 146 ++++++++++++++++++ .../mixin/common/NoiseInterpolatorMixin.java | 24 +++ .../world/generator/EndNoiseFiller.java | 67 ++++++++ .../world/generator/TerrainGenerator.java | 46 +++++- .../resources/betterend.mixins.common.json | 3 +- 5 files changed, 283 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java create mode 100644 src/main/java/ru/betterend/world/generator/EndNoiseFiller.java diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index 5aa420b4f..e67932ad9 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,19 +1,52 @@ package ru.betterend.mixin.common; +import java.util.HashSet; +import java.util.OptionalInt; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.stream.IntStream; +import com.google.common.collect.Sets; +import net.minecraft.Util; import net.minecraft.core.Registry; +import net.minecraft.server.level.WorldGenRegion; +import net.minecraft.util.Mth; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; +import net.minecraft.world.level.NoiseColumn; +import net.minecraft.world.level.StructureFeatureManager; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.levelgen.Beardifier; +import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; +import net.minecraft.world.level.levelgen.NoiseChunk; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.StructureSettings; +import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.SurfaceSystem; +import net.minecraft.world.level.levelgen.WorldGenerationContext; +import net.minecraft.world.level.levelgen.blending.Blender; +import org.jetbrains.annotations.Nullable; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.betterend.world.generator.EndNoiseFiller; +import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; @Mixin(NoiseBasedChunkGenerator.class) @@ -22,6 +55,14 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { @Shadow protected Supplier settings; + @Final + @Shadow + protected BlockState defaultBlock; + + @Final + @Shadow + private SurfaceSystem surfaceSystem; + public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource biomeSource, StructureSettings structuresConfig, long worldSeed) { super(populationSource, biomeSource, structuresConfig, worldSeed); } @@ -29,6 +70,9 @@ public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource b @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { TerrainGenerator.initNoise(seed); + if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { + EndNoiseFiller.INSTANCE.setBiomeSource(biomeSource); + } } //TODO: 1.18 Find another place for this @@ -39,4 +83,106 @@ private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource bi // info.cancel(); // } // } + + @Inject(method = "buildSurface", at = @At("HEAD"), cancellable = true) + private void be_buildSurface(WorldGenRegion worldGenRegion, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess, CallbackInfo info) { + //NoiseChunk noiseChunk = chunkAccess.getOrCreateNoiseChunk(this.sampler, () -> new Beardifier(structureFeatureManager, chunkAccess), noiseGeneratorSettings, this.globalFluidPicker, Blender.of(worldGenRegion)); + /*WorldGenerationContext worldGenerationContext = new WorldGenerationContext(this, worldGenRegion); + NoiseGeneratorSettings noiseGeneratorSettings = this.settings.get(); + surfaceSystem.buildSurface( + worldGenRegion.getBiomeManager(), + worldGenRegion.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), + noiseGeneratorSettings.useLegacyRandomSource(), + worldGenerationContext, + chunkAccess, + null, + noiseGeneratorSettings.surfaceRule() + );*/ + //System.out.println("Build surface!"); + } + + @Inject(method = "fillFromNoise", at = @At("HEAD"), cancellable = true) + private void be_fillFromNoise(Executor executor, Blender blender, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess2, CallbackInfoReturnable> info) { + info.setReturnValue(CompletableFuture.supplyAsync( + Util.wrapThreadWithTaskName( + "wgen_fill_noise", + () -> this.fill(chunkAccess2) + ), + Util.backgroundExecutor() + )); + } + + private ChunkAccess fill(ChunkAccess chunkAccess) { + ChunkPos chunkPos = chunkAccess.getPos(); + + int px = chunkPos.x << 1; + int pz = chunkPos.z << 1; + double[][][] noiseColumns = new double[3][3][33]; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); + } + } + + // Testing + BlockState grass = Blocks.GRASS_BLOCK.defaultBlockState(); + + Heightmap heightmap = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); + Heightmap heightmap2 = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); + + short maxHeight = (short) (Math.min(127, chunkAccess.getMaxBuildHeight()) - chunkAccess.getMinBuildHeight()); + short start = (short) ((-chunkAccess.getMinBuildHeight()) >> 4); + short end = (short) (maxHeight >> 4); + + //IntStream.range(start, end).parallel().forEach(sectionIndex -> { + for (short sectionIndex = start; sectionIndex <= end; sectionIndex++) { + LevelChunkSection section = chunkAccess.getSection(sectionIndex); + for (byte y = 0; y < 16; y++) { + short iy = (short) ((y >> 2) | ((sectionIndex - start) << 2)); + float dy = (y & 3) / 4F; + for (byte x = 0; x < 16; x++) { + float dx = (x & 7) / 8F; + byte ix = (byte) (x >> 3); + for (byte z = 0; z < 16; z++) { + float dz = (z & 7) / 8F; + byte iz = (byte) (z >> 3); + + float a = (float) noiseColumns[ix][iz][iy]; + float b = (float) noiseColumns[ix + 1][iz][iy]; + float c = (float) noiseColumns[ix][iz][iy + 1]; + float d = (float) noiseColumns[ix + 1][iz][iy + 1]; + + float e = (float) noiseColumns[ix][iz + 1][iy]; + float f = (float) noiseColumns[ix + 1][iz + 1][iy]; + float g = (float) noiseColumns[ix][iz + 1][iy + 1]; + float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; + + a = Mth.lerp(dx, a, b); + b = Mth.lerp(dx, c, d); + c = Mth.lerp(dx, e, f); + d = Mth.lerp(dx, g, h); + + a = Mth.lerp(dy, a, b); + b = Mth.lerp(dy, c, d); + + if (Mth.lerp(dz, a, b) > 0) { + section.setBlockState(x, y, z, defaultBlock); + heightmap.update(x, y, z, defaultBlock); + heightmap2.update(x, y, z, defaultBlock); + } + else if (iy > 0) { + byte py = (byte) ((y - 1) & 15); + LevelChunkSection section2 = y == 0 ? chunkAccess.getSection(sectionIndex - 1) : section; + if (section2.getBlockState(x, py, z).equals(defaultBlock)) { + section2.setBlockState(x, py, z, grass); + } + } + } + } + } + } + //}); + + return chunkAccess; + } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java new file mode 100644 index 000000000..bd4a557f5 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java @@ -0,0 +1,24 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.level.levelgen.NoiseChunk; +import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import ru.betterend.world.generator.EndNoiseFiller; + +@Mixin(NoiseChunk.NoiseInterpolator.class) +public class NoiseInterpolatorMixin { + /*@Redirect( + method = "fillSlice([[DI)V", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseInterpolator;noiseFiller:Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseFiller;", + opcode = Opcodes.GETFIELD + ) + ) + private NoiseFiller getFiller(NoiseChunk.NoiseInterpolator interpolator) { + return EndNoiseFiller.INSTANCE; + }*/ +} diff --git a/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java b/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java new file mode 100644 index 000000000..97e445c59 --- /dev/null +++ b/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java @@ -0,0 +1,67 @@ +package ru.betterend.world.generator; + +import net.minecraft.util.Mth; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; + +public class EndNoiseFiller implements NoiseFiller { + public static final EndNoiseFiller INSTANCE = new EndNoiseFiller(); + private double[][][] noiseColumns = new double[3][3][33]; + private BiomeSource biomeSource; + private int chunkX; + private int chunkZ; + + private EndNoiseFiller() {} + + public void setBiomeSource(BiomeSource biomeSource) { + this.biomeSource = biomeSource; + } + + @Override + public double calculateNoise(int x, int y, int z) { + if (y < 0 || y > 127) { + return -10; + } + + int cx = x >> 4; + int cz = z >> 4; + if (chunkX != cx || chunkZ != cz) { + chunkX = cx; + chunkZ = cz; + int px = cx << 1; + int pz = cz << 1; + for (byte i = 0; i < 3; i++) { + for (byte j = 0; j < 3; j++) { + TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); + } + } + } + + byte ix = (byte) ((x & 15) >> 3); + byte iy = (byte) (y >> 2); + byte iz = (byte) ((z & 15) >> 3); + float dx = (x & 7) / 8F; + float dy = (y & 3) / 4F; + float dz = (z & 7) / 8F; + + float a = (float) noiseColumns[ix][iz][iy]; + float b = (float) noiseColumns[ix + 1][iz][iy]; + float c = (float) noiseColumns[ix][iz][iy + 1]; + float d = (float) noiseColumns[ix + 1][iz][iy + 1]; + + float e = (float) noiseColumns[ix][iz + 1][iy]; + float f = (float) noiseColumns[ix + 1][iz + 1][iy]; + float g = (float) noiseColumns[ix][iz + 1][iy + 1]; + float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; + + a = Mth.lerp(dx, a, b); + b = Mth.lerp(dx, c, d); + c = Mth.lerp(dx, e, f); + d = Mth.lerp(dx, g, h); + + a = Mth.lerp(dy, a, b); + b = Mth.lerp(dy, c, d); + + return Mth.lerp(dz, a, b); + } +} diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index f8c3bfbb7..3de5c44ed 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -84,8 +84,49 @@ public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource LOCKER.unlock(); } + public static float getTerrainDensity(int x, int y, int z, BiomeSource biomeSource) { + LOCKER.lock(); + + largeIslands.clearCache(); + mediumIslands.clearCache(); + smallIslands.clearCache(); + + double distortion1 = noise1.eval(x * 0.1, z * 0.1) * 20 + noise2.eval( + x * 0.2, + z * 0.2 + ) * 10 + noise1.eval(x * 0.4, z * 0.4) * 5; + double distortion2 = noise2.eval(x * 0.1, z * 0.1) * 20 + noise1.eval( + x * 0.2, + z * 0.2 + ) * 10 + noise2.eval(x * 0.4, z * 0.4) * 5; + double px = (double) x * SCALE_XZ + distortion1; + double pz = (double) z * SCALE_XZ + distortion2; + + largeIslands.updatePositions(px, pz); + mediumIslands.updatePositions(px, pz); + smallIslands.updatePositions(px, pz); + + float height = getAverageDepth(biomeSource, x << 1, z << 1) * 0.5F; + + double py = (double) y * SCALE_Y; + float dist = largeIslands.getDensity(px, py, pz, height); + dist = dist > 1 ? dist : MHelper.max(dist, mediumIslands.getDensity(px, py, pz, height)); + dist = dist > 1 ? dist : MHelper.max(dist, smallIslands.getDensity(px, py, pz, height)); + if (dist > -0.5F) { + dist += noise1.eval(px * 0.01, py * 0.01, pz * 0.01) * 0.02 + 0.02; + dist += noise2.eval(px * 0.05, py * 0.05, pz * 0.05) * 0.01 + 0.01; + dist += noise1.eval(px * 0.1, py * 0.1, pz * 0.1) * 0.005 + 0.005; + } + if (py > 100) { + dist = (float) Mth.lerp((py - 100) / 27F, dist, -1); + } + + LOCKER.unlock(); + return dist; + } + private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { + /*if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { return 0F; } float depth = 0F; @@ -94,7 +135,8 @@ private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { int pz = z + OFFS[i].y; depth += getBiome(biomeSource, px, pz).getTerrainHeight() * COEF[i]; } - return depth; + return depth;*/ + return 0F; } private static BCLBiome getBiome(BiomeSource biomeSource, int x, int z) { diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 006ceeee1..6764b2a12 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -25,7 +25,8 @@ "EntityMixin", "PlayerMixin", "SlimeMixin", - "StructureFeaturesMixin" + "StructureFeaturesMixin", + "NoiseInterpolatorMixin" ], "injectors": { "defaultRequire": 1 From fb19abdc45790a5313a187dcd9130ca0c58a2cc0 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 16 Dec 2021 20:29:16 +0300 Subject: [PATCH 53/93] Library update --- build.gradle | 1 + gradle.properties | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f3d07a807..f2e1ce501 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ repositories { maven { url 'https://maven.blamejared.com' } maven { url "https://maven.shedaniel.me/" } maven { url 'https://jitpack.io' } + maven { url 'https://maven.terraformersmc.com/releases' } } dependencies { diff --git a/gradle.properties b/gradle.properties index fc6664310..18c828002 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.1 +bclib_version = 1.1.2 rei_version = 7.0.343 canvas_version = 1.0.+ From c515c3c36707a7b822c7110fd04d96e23d52aa87 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 16 Dec 2021 21:27:43 +0300 Subject: [PATCH 54/93] Library integration update --- .../java/ru/betterend/integration/EnderscapeIntegration.java | 2 +- .../integration/FlamboyantRefabricatedIntegration.java | 2 +- src/main/java/ru/betterend/integration/Integrations.java | 2 +- src/main/java/ru/betterend/integration/NourishIntegration.java | 2 +- src/main/java/ru/betterend/integration/byg/BYGIntegration.java | 2 +- src/main/resources/fabric.mod.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java index c1be368b5..19b088ec5 100644 --- a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java +++ b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import ru.bclib.api.TagAPI; import ru.bclib.api.biomes.BiomeAPI; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.bclib.world.features.BCLFeature; public class EnderscapeIntegration extends ModIntegration { diff --git a/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java b/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java index c8f452676..f2c7d1780 100644 --- a/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java +++ b/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java @@ -2,7 +2,7 @@ import com.google.common.collect.Maps; import net.minecraft.world.level.ItemLike; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.bclib.util.ColorUtil; import ru.betterend.blocks.HydraluxPetalColoredBlock; import ru.betterend.complexmaterials.ColoredMaterial; diff --git a/src/main/java/ru/betterend/integration/Integrations.java b/src/main/java/ru/betterend/integration/Integrations.java index 21a7a9aa6..837b8fb88 100644 --- a/src/main/java/ru/betterend/integration/Integrations.java +++ b/src/main/java/ru/betterend/integration/Integrations.java @@ -5,7 +5,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import ru.bclib.api.ModIntegrationAPI; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.bclib.recipes.GridRecipe; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; diff --git a/src/main/java/ru/betterend/integration/NourishIntegration.java b/src/main/java/ru/betterend/integration/NourishIntegration.java index cddd69233..4d17a0201 100644 --- a/src/main/java/ru/betterend/integration/NourishIntegration.java +++ b/src/main/java/ru/betterend/integration/NourishIntegration.java @@ -3,7 +3,7 @@ import net.minecraft.tags.Tag; import net.minecraft.world.item.Item; import ru.bclib.api.TagAPI; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.betterend.registry.EndItems; public class NourishIntegration extends ModIntegration { diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index dff88aedc..7d00ea2ab 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -1,6 +1,6 @@ package ru.betterend.integration.byg; -import ru.bclib.integration.ModIntegration; +import ru.bclib.integration.modmenu.ModIntegration; import ru.betterend.integration.EndBiomeIntegration; public class BYGIntegration extends ModIntegration implements EndBiomeIntegration { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index e5760f908..4c41216d9 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", "minecraft": ">=1.18.1", - "bclib": ">=1.1.1" + "bclib": ">=1.1.2" }, "suggests": { "byg": ">=1.1.3", From ce88ec23f7d1577ebdf3b8a62f4a2f9c6b0b45be Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 18 Dec 2021 23:57:44 +0300 Subject: [PATCH 55/93] Terrain generator (WIP) --- build.gradle | 4 + .../betterend/blocks/EndLotusStemBlock.java | 5 +- .../blocks/HydrothermalVentBlock.java | 7 +- .../betterend/blocks/LumecornSeedBlock.java | 6 +- .../blocks/NeonCactusPlantBlock.java | 9 +- .../betterend/blocks/SmallAmaranitaBlock.java | 6 +- .../blocks/SmallJellyshroomBlock.java | 11 +- .../blocks/VentBubbleColumnBlock.java | 6 +- .../blocks/basis/EndLanternBlock.java | 4 +- .../blocks/basis/PottableFeatureSapling.java | 4 +- .../entities/EndStoneSmelterBlockEntity.java | 9 +- .../byg/biomes/NightshadeRedwoods.java | 4 +- .../byg/biomes/OldBulbisGardens.java | 6 +- .../integration/rei/REIAlloyingCategory.java | 10 +- .../integration/rei/REIAnvilCategory.java | 12 +- .../integration/rei/REIInfusionCategory.java | 10 +- .../betterend/integration/rei/REIPlugin.java | 7 +- .../betterend/interfaces/TargetChecker.java | 5 + .../java/ru/betterend/item/GuideBookItem.java | 4 +- .../mixin/common/EndCityFeatureMixin.java | 6 +- .../mixin/common/EndPodiumFeatureMixin.java | 6 +- .../common/NoiseBasedChunkGeneratorMixin.java | 168 +----------------- .../mixin/common/NoiseChunkAccessor.java | 24 +++ .../mixin/common/NoiseChunkMixin.java | 28 +++ .../mixin/common/NoiseInterpolatorMixin.java | 60 +++++-- .../java/ru/betterend/util/BlockFixer.java | 7 +- .../biome/cave/EmptyAuroraCaveBiome.java | 4 +- .../world/biome/cave/EmptyEndCaveBiome.java | 4 +- .../biome/cave/EmptySmaragdantCaveBiome.java | 4 +- .../world/biome/cave/EndCaveBiome.java | 6 +- .../world/biome/cave/JadeCaveBiome.java | 4 +- .../world/biome/cave/LushAuroraCaveBiome.java | 4 +- .../biome/cave/LushSmaragdantCaveBiome.java | 4 +- .../world/features/CrashedShipFeature.java | 4 +- .../features/terrain/DesertLakeFeature.java | 4 +- .../features/terrain/EndLakeFeature.java | 4 +- .../terrain/FloatingSpireFeature.java | 9 +- .../world/features/terrain/GeyserFeature.java | 8 +- .../world/features/terrain/SpireFeature.java | 11 +- .../terrain/SulphuricCaveFeature.java | 7 +- .../terrain/SulphuricLakeFeature.java | 7 +- .../caves/CaveChunkPopulatorFeature.java | 11 +- .../terrain/caves/EndCaveFeature.java | 11 +- .../terrain/caves/TunelCaveFeature.java | 13 +- .../world/generator/TerrainGenerator.java | 13 +- .../features/EternalPortalStructure.java | 4 +- .../features/FeatureBaseStructure.java | 4 +- .../features/GiantIceStarStructure.java | 8 +- .../GiantMossyGlowshroomStructure.java | 6 +- .../features/MegaLakeSmallStructure.java | 4 +- .../features/MegaLakeStructure.java | 4 +- .../features/MountainStructure.java | 4 +- .../features/PaintedMountainStructure.java | 4 +- .../features/SDFStructureFeature.java | 6 +- .../world/structures/piece/BasePiece.java | 1 - .../world/structures/piece/CavePiece.java | 4 +- .../piece/CrystalMountainPiece.java | 4 +- .../world/structures/piece/LakePiece.java | 7 +- .../world/structures/piece/MountainPiece.java | 7 +- .../world/structures/piece/NBTPiece.java | 4 +- .../piece/PaintedMountainPiece.java | 4 +- .../world/structures/piece/VoxelPiece.java | 6 +- src/main/resources/betterend.accesswidener | 4 + .../resources/betterend.mixins.common.json | 8 +- src/main/resources/fabric.mod.json | 1 + 65 files changed, 283 insertions(+), 371 deletions(-) create mode 100644 src/main/java/ru/betterend/interfaces/TargetChecker.java create mode 100644 src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java create mode 100644 src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java create mode 100644 src/main/resources/betterend.accesswidener diff --git a/build.gradle b/build.gradle index f2e1ce501..dca83c4c6 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,10 @@ repositories { maven { url 'https://maven.terraformersmc.com/releases' } } +loom { + accessWidenerPath = file("src/main/resources/betterend.accesswidener") +} + dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings minecraft.officialMojangMappings() diff --git a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java index 4eb88dace..462446881 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java @@ -1,9 +1,6 @@ package ru.betterend.blocks; -import java.util.Map; - import com.google.common.collect.Maps; - import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -32,6 +29,8 @@ import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.util.BlocksHelper; +import java.util.Map; + public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlock, RenderLayerProvider { public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 8353cb0c6..a53a457aa 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -1,9 +1,5 @@ package ru.betterend.blocks; -import java.util.Random; - -import org.jetbrains.annotations.Nullable; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -38,12 +34,15 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.entities.BlockEntityHydrothermalVent; import ru.betterend.registry.EndBlocks; +import java.util.Random; + @SuppressWarnings("deprecation") public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlock, LiquidBlockContainer, SimpleWaterloggedBlock { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index c50867743..2689b8702 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -1,8 +1,5 @@ package ru.betterend.blocks; -import java.util.Optional; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -14,6 +11,9 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; +import java.util.Optional; +import java.util.Random; + public class LumecornSeedBlock extends EndPlantWithAgeBlock { @Override diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index 1c55c2f57..2e4281820 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -1,12 +1,7 @@ package ru.betterend.blocks; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -51,6 +46,10 @@ import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndBlocks; +import java.util.EnumMap; +import java.util.List; +import java.util.Random; + @SuppressWarnings("deprecation") public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, RenderLayerProvider, PottablePlant { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; diff --git a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java index d8303db9a..290b35c1c 100644 --- a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java @@ -1,8 +1,5 @@ package ru.betterend.blocks; -import java.util.Optional; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; @@ -21,6 +18,9 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; +import java.util.Optional; +import java.util.Random; + public class SmallAmaranitaBlock extends EndPlantBlock { private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 10, 12); diff --git a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java index a2a6ebfc4..cda6ec187 100644 --- a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java @@ -1,13 +1,7 @@ package ru.betterend.blocks; -import java.util.EnumMap; -import java.util.List; -import java.util.Optional; -import java.util.Random; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -43,6 +37,11 @@ import ru.betterend.interfaces.PottablePlant; import ru.betterend.registry.EndFeatures; +import java.util.EnumMap; +import java.util.List; +import java.util.Optional; +import java.util.Random; + public class SmallJellyshroomBlock extends BaseAttachedBlock implements RenderLayerProvider, BonemealableBlock, PottablePlant { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index a03fe9265..3ea9dc38f 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -1,8 +1,5 @@ package ru.betterend.blocks; -import java.util.Optional; -import java.util.Random; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -36,6 +33,9 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; +import java.util.Optional; +import java.util.Random; + public class VentBubbleColumnBlock extends Block implements BucketPickup, LiquidBlockContainer { public VentBubbleColumnBlock() { super(FabricBlockSettings.of(Material.BUBBLE_COLUMN).noOcclusion().noCollission().noDrops()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index 72f01e29a..065444ed8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -1,7 +1,5 @@ package ru.betterend.blocks.basis; -import java.util.Map; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -28,6 +26,8 @@ import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; +import java.util.Map; + @SuppressWarnings("deprecation") public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { public static final BooleanProperty IS_FLOOR = BlockProperties.IS_FLOOR; diff --git a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java index 22363d30e..b8dc1fb42 100644 --- a/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java +++ b/src/main/java/ru/betterend/blocks/basis/PottableFeatureSapling.java @@ -1,12 +1,12 @@ package ru.betterend.blocks.basis; -import java.util.function.Function; - import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import ru.bclib.blocks.FeatureSaplingBlock; import ru.betterend.interfaces.PottablePlant; +import java.util.function.Function; + public abstract class PottableFeatureSapling extends FeatureSaplingBlock implements PottablePlant { public PottableFeatureSapling(Function> featureSupplier) { super(featureSupplier); diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java index aa5851678..5325a67f0 100644 --- a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -1,12 +1,7 @@ package ru.betterend.blocks.entities; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.fabric.api.registry.FuelRegistry; @@ -46,6 +41,10 @@ import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlockEntities; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity implements WorldlyContainer, RecipeHolder, StackedContentsCompatible { private static final int[] TOP_SLOTS = new int[] {0, 1}; diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index a3b6df636..36f0ec4aa 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -1,7 +1,5 @@ package ru.betterend.integration.byg.biomes; -import java.util.List; - import net.minecraft.core.particles.ParticleTypes; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.entity.EntityType; @@ -18,6 +16,8 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; + public class NightshadeRedwoods extends EndBiome.Config { public NightshadeRedwoods() { super("nightshade_redwoods"); diff --git a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java index d7eb15e49..a654cc835 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -1,8 +1,5 @@ package ru.betterend.integration.byg.biomes; -import java.util.List; -import java.util.function.Supplier; - import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.BuiltinRegistries; @@ -25,6 +22,9 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; +import java.util.function.Supplier; + public class OldBulbisGardens extends EndBiome.Config { public OldBulbisGardens() { diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index e24c0a1c5..9b9abaec2 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -1,12 +1,6 @@ package ru.betterend.integration.rei; -import java.text.DecimalFormat; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; - import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; @@ -20,8 +14,12 @@ import net.minecraft.client.gui.GuiComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; +import org.jetbrains.annotations.NotNull; import ru.betterend.registry.EndBlocks; +import java.text.DecimalFormat; +import java.util.List; + public class REIAlloyingCategory implements DisplayCategory { private final EntryStack ICON; diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index fa2d0ebbf..ef1220e1c 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -1,13 +1,6 @@ package ru.betterend.integration.rei; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; - import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; @@ -25,8 +18,13 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import org.jetbrains.annotations.NotNull; import ru.betterend.blocks.basis.EndAnvilBlock; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class REIAnvilCategory implements DisplayCategory { private final EntryStack[] ANVILS; diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index 12214fbd1..0be2955af 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -1,12 +1,6 @@ package ru.betterend.integration.rei; -import java.util.ArrayList; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; - import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; @@ -18,9 +12,13 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; +import java.util.ArrayList; +import java.util.List; + public class REIInfusionCategory implements DisplayCategory { private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png"); diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java index 622b41457..3371c6051 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,10 +1,6 @@ package ru.betterend.integration.rei; -import java.util.List; -import java.util.stream.Collectors; - import com.google.common.collect.Lists; - import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; @@ -26,6 +22,9 @@ import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.stream.Collectors; + //https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java public class REIPlugin implements REIClientPlugin { public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin"); diff --git a/src/main/java/ru/betterend/interfaces/TargetChecker.java b/src/main/java/ru/betterend/interfaces/TargetChecker.java new file mode 100644 index 000000000..fde54ed25 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/TargetChecker.java @@ -0,0 +1,5 @@ +package ru.betterend.interfaces; + +public interface TargetChecker { + boolean isTarget(); +} diff --git a/src/main/java/ru/betterend/item/GuideBookItem.java b/src/main/java/ru/betterend/item/GuideBookItem.java index 6a1fab055..91971e54b 100644 --- a/src/main/java/ru/betterend/item/GuideBookItem.java +++ b/src/main/java/ru/betterend/item/GuideBookItem.java @@ -1,7 +1,5 @@ package ru.betterend.item; -import java.util.List; - import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -18,6 +16,8 @@ import ru.betterend.registry.EndItems; import ru.betterend.util.LangUtil; +import java.util.List; + public class GuideBookItem extends ModelProviderItem { public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); public static final Item GUIDE_BOOK = EndItems.getItemRegistry().register(BOOK_ID, new GuideBookItem()); diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 1895cd725..241e3d000 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,8 +1,5 @@ package ru.betterend.mixin.common; -import java.util.Optional; -import java.util.Random; - import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.chunk.ChunkGenerator; @@ -19,6 +16,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.world.generator.GeneratorOptions; +import java.util.Optional; +import java.util.Random; + @Mixin(EndCityFeature.class) public class EndCityFeatureMixin { @Inject(method = "pieceGeneratorSupplier", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 71514556f..1e8380805 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -1,8 +1,5 @@ package ru.betterend.mixin.common; -import java.util.Optional; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; @@ -26,6 +23,9 @@ import ru.betterend.BetterEnd; import ru.betterend.world.generator.GeneratorOptions; +import java.util.Optional; +import java.util.Random; + @Mixin(EndPodiumFeature.class) public class EndPodiumFeatureMixin { private static BlockPos be_portalPosition; diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index e67932ad9..392de48e0 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,188 +1,26 @@ package ru.betterend.mixin.common; -import java.util.HashSet; -import java.util.OptionalInt; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.IntStream; - -import com.google.common.collect.Sets; -import net.minecraft.Util; import net.minecraft.core.Registry; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.util.Mth; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.NoiseColumn; -import net.minecraft.world.level.StructureFeatureManager; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.LevelChunkSection; -import net.minecraft.world.level.levelgen.Beardifier; -import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseChunk; -import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import net.minecraft.world.level.levelgen.StructureSettings; -import net.minecraft.world.level.levelgen.SurfaceRules; -import net.minecraft.world.level.levelgen.SurfaceSystem; -import net.minecraft.world.level.levelgen.WorldGenerationContext; -import net.minecraft.world.level.levelgen.blending.Blender; -import org.jetbrains.annotations.Nullable; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.betterend.world.generator.EndNoiseFiller; -import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; +import java.util.function.Supplier; + @Mixin(NoiseBasedChunkGenerator.class) public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { - @Final - @Shadow - protected Supplier settings; - - @Final - @Shadow - protected BlockState defaultBlock; - - @Final - @Shadow - private SurfaceSystem surfaceSystem; - public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource biomeSource, StructureSettings structuresConfig, long worldSeed) { super(populationSource, biomeSource, structuresConfig, worldSeed); } @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) - private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { + private void be_onInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { TerrainGenerator.initNoise(seed); - if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { - EndNoiseFiller.INSTANCE.setBiomeSource(biomeSource); - } - } - - //TODO: 1.18 Find another place for this -// @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) -// private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { -// if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { -// TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); -// info.cancel(); -// } -// } - - @Inject(method = "buildSurface", at = @At("HEAD"), cancellable = true) - private void be_buildSurface(WorldGenRegion worldGenRegion, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess, CallbackInfo info) { - //NoiseChunk noiseChunk = chunkAccess.getOrCreateNoiseChunk(this.sampler, () -> new Beardifier(structureFeatureManager, chunkAccess), noiseGeneratorSettings, this.globalFluidPicker, Blender.of(worldGenRegion)); - /*WorldGenerationContext worldGenerationContext = new WorldGenerationContext(this, worldGenRegion); - NoiseGeneratorSettings noiseGeneratorSettings = this.settings.get(); - surfaceSystem.buildSurface( - worldGenRegion.getBiomeManager(), - worldGenRegion.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), - noiseGeneratorSettings.useLegacyRandomSource(), - worldGenerationContext, - chunkAccess, - null, - noiseGeneratorSettings.surfaceRule() - );*/ - //System.out.println("Build surface!"); - } - - @Inject(method = "fillFromNoise", at = @At("HEAD"), cancellable = true) - private void be_fillFromNoise(Executor executor, Blender blender, StructureFeatureManager structureFeatureManager, ChunkAccess chunkAccess2, CallbackInfoReturnable> info) { - info.setReturnValue(CompletableFuture.supplyAsync( - Util.wrapThreadWithTaskName( - "wgen_fill_noise", - () -> this.fill(chunkAccess2) - ), - Util.backgroundExecutor() - )); - } - - private ChunkAccess fill(ChunkAccess chunkAccess) { - ChunkPos chunkPos = chunkAccess.getPos(); - - int px = chunkPos.x << 1; - int pz = chunkPos.z << 1; - double[][][] noiseColumns = new double[3][3][33]; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); - } - } - - // Testing - BlockState grass = Blocks.GRASS_BLOCK.defaultBlockState(); - - Heightmap heightmap = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.OCEAN_FLOOR_WG); - Heightmap heightmap2 = chunkAccess.getOrCreateHeightmapUnprimed(Heightmap.Types.WORLD_SURFACE_WG); - - short maxHeight = (short) (Math.min(127, chunkAccess.getMaxBuildHeight()) - chunkAccess.getMinBuildHeight()); - short start = (short) ((-chunkAccess.getMinBuildHeight()) >> 4); - short end = (short) (maxHeight >> 4); - - //IntStream.range(start, end).parallel().forEach(sectionIndex -> { - for (short sectionIndex = start; sectionIndex <= end; sectionIndex++) { - LevelChunkSection section = chunkAccess.getSection(sectionIndex); - for (byte y = 0; y < 16; y++) { - short iy = (short) ((y >> 2) | ((sectionIndex - start) << 2)); - float dy = (y & 3) / 4F; - for (byte x = 0; x < 16; x++) { - float dx = (x & 7) / 8F; - byte ix = (byte) (x >> 3); - for (byte z = 0; z < 16; z++) { - float dz = (z & 7) / 8F; - byte iz = (byte) (z >> 3); - - float a = (float) noiseColumns[ix][iz][iy]; - float b = (float) noiseColumns[ix + 1][iz][iy]; - float c = (float) noiseColumns[ix][iz][iy + 1]; - float d = (float) noiseColumns[ix + 1][iz][iy + 1]; - - float e = (float) noiseColumns[ix][iz + 1][iy]; - float f = (float) noiseColumns[ix + 1][iz + 1][iy]; - float g = (float) noiseColumns[ix][iz + 1][iy + 1]; - float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; - - a = Mth.lerp(dx, a, b); - b = Mth.lerp(dx, c, d); - c = Mth.lerp(dx, e, f); - d = Mth.lerp(dx, g, h); - - a = Mth.lerp(dy, a, b); - b = Mth.lerp(dy, c, d); - - if (Mth.lerp(dz, a, b) > 0) { - section.setBlockState(x, y, z, defaultBlock); - heightmap.update(x, y, z, defaultBlock); - heightmap2.update(x, y, z, defaultBlock); - } - else if (iy > 0) { - byte py = (byte) ((y - 1) & 15); - LevelChunkSection section2 = y == 0 ? chunkAccess.getSection(sectionIndex - 1) : section; - if (section2.getBlockState(x, py, z).equals(defaultBlock)) { - section2.setBlockState(x, py, z, grass); - } - } - } - } - } - } - //}); - - return chunkAccess; } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java b/src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java new file mode 100644 index 000000000..718caa541 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/NoiseChunkAccessor.java @@ -0,0 +1,24 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.level.levelgen.NoiseChunk; +import net.minecraft.world.level.levelgen.NoiseSettings; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(NoiseChunk.class) +public interface NoiseChunkAccessor { + @Accessor("noiseSettings") + NoiseSettings bnv_getNoiseSettings(); + + @Accessor("cellCountXZ") + int bnv_getCellCountXZ(); + + @Accessor("cellCountY") + int bnv_getCellCountY(); + + @Accessor("firstCellZ") + int bnv_getFirstCellZ(); + + @Accessor("cellNoiseMinY") + int bnv_getCellNoiseMinY(); +} diff --git a/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java new file mode 100644 index 000000000..f01fcb512 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java @@ -0,0 +1,28 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.level.levelgen.Aquifer; +import net.minecraft.world.level.levelgen.NoiseChunk; +import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.NoiseSampler; +import net.minecraft.world.level.levelgen.blending.Blender; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.betterend.interfaces.TargetChecker; + +@Mixin(NoiseChunk.class) +public class NoiseChunkMixin implements TargetChecker { + private boolean bnv_isNetherGenerator; + + @Inject(method = "*", at = @At("TAIL")) + private void bnv_onNoiseChunkInit(int i, int j, int k, NoiseSampler noiseSampler, int l, int m, NoiseFiller noiseFiller, NoiseGeneratorSettings noiseGeneratorSettings, Aquifer.FluidPicker fluidPicker, Blender blender, CallbackInfo info) { + bnv_isNetherGenerator = noiseGeneratorSettings.stable(NoiseGeneratorSettings.END); + } + + @Override + public boolean isTarget() { + return bnv_isNetherGenerator; + } +} diff --git a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java index bd4a557f5..24d643dc5 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java @@ -1,24 +1,54 @@ package ru.betterend.mixin.common; import net.minecraft.world.level.levelgen.NoiseChunk; -import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; -import org.objectweb.asm.Opcodes; +import net.minecraft.world.level.levelgen.NoiseSettings; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; -import ru.betterend.world.generator.EndNoiseFiller; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.betterend.interfaces.TargetChecker; @Mixin(NoiseChunk.NoiseInterpolator.class) public class NoiseInterpolatorMixin { - /*@Redirect( - method = "fillSlice([[DI)V", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseInterpolator;noiseFiller:Lnet/minecraft/world/level/levelgen/NoiseChunk$NoiseFiller;", - opcode = Opcodes.GETFIELD - ) - ) - private NoiseFiller getFiller(NoiseChunk.NoiseInterpolator interpolator) { - return EndNoiseFiller.INSTANCE; - }*/ + @Final + @Shadow(aliases = "this$0") + private NoiseChunk this$0; + + @Inject(method = "fillSlice", at = @At("HEAD"), cancellable = true) + private void be_fillSlice(double[][] data, int x, CallbackInfo info) { + if (!TargetChecker.class.cast(this$0).isTarget()) { + return; + } + + info.cancel(); + + NoiseChunkAccessor accessor = NoiseChunkAccessor.class.cast(this$0); + NoiseSettings noiseSettings = accessor.bnv_getNoiseSettings(); + + final int sizeY = noiseSettings.getCellHeight(); + final int sizeXZ = noiseSettings.getCellWidth(); + final int cellsY = accessor.bnv_getCellCountY() + 1; + final int cellsXZ = accessor.bnv_getCellCountXZ() + 1; + final int firstCellZ = accessor.bnv_getFirstCellZ(); + final int cellNoiseMinY = accessor.bnv_getCellNoiseMinY(); + + x *= sizeXZ; + + for (int cellXZ = 0; cellXZ < cellsXZ; ++cellXZ) { + int z = (firstCellZ + cellXZ) * sizeXZ; + for (int cellY = 0; cellY < cellsY; ++cellY) { + int y = (cellY + cellNoiseMinY) * sizeY; + data[cellXZ][cellY] = be_calculateNoise(x, y, z); + } + } + } + + private float be_calculateNoise(int x, int y, int z) { + float gradient = (64 - y) * 0.1F; + float sinX = (float) Math.sin(x * 0.1); + float sinZ = (float) Math.sin(z * 0.1); + return gradient + sinX + sinZ; + } } diff --git a/src/main/java/ru/betterend/util/BlockFixer.java b/src/main/java/ru/betterend/util/BlockFixer.java index f6fd4b065..76b6de893 100644 --- a/src/main/java/ru/betterend/util/BlockFixer.java +++ b/src/main/java/ru/betterend/util/BlockFixer.java @@ -1,10 +1,6 @@ package ru.betterend.util; -import java.util.Set; -import java.util.stream.IntStream; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -23,6 +19,9 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.registry.EndBlocks; +import java.util.Set; +import java.util.stream.IntStream; + public class BlockFixer { private static final BlockState AIR = Blocks.AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java index f70316413..b7b0bdc56 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java @@ -1,13 +1,13 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class EmptyAuroraCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java index a9b75604a..4adf3ece9 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java @@ -1,12 +1,12 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class EmptyEndCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java index ba464371f..38a1b643e 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java @@ -1,13 +1,13 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class EmptySmaragdantCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index a9e712ade..0b1a1db37 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -1,8 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.Random; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; @@ -19,6 +16,9 @@ import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; +import java.util.Random; +import java.util.function.BiFunction; + public class EndCaveBiome extends EndBiome { public static abstract class Config extends EndBiome.Config { protected Config(String name) { diff --git a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java index ce01dcc41..90382c998 100644 --- a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -11,6 +9,8 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class JadeCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); diff --git a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java index 6f98a1b11..95518656e 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; @@ -13,6 +11,8 @@ import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class LushAuroraCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index af18f335f..6674466b1 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.function.BiFunction; - import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.biomes.BCLBiomeBuilder; @@ -11,6 +9,8 @@ import ru.betterend.registry.EndParticles; import ru.betterend.world.biome.EndBiome; +import java.util.function.BiFunction; + public class LushSmaragdantCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome) { diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index ff989a45b..b63012354 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -1,7 +1,5 @@ package ru.betterend.world.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.LevelReader; @@ -27,6 +25,8 @@ import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class CrashedShipFeature extends NBTStructureFeature { private static final StructureProcessor REPLACER; private static final String STRUCTURE_PATH = "/data/minecraft/structures/end_city/ship.nbt"; diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 6b863f957..8774f75c0 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -1,7 +1,5 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -20,6 +18,8 @@ import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 7af472fa9..591c412d5 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,7 +1,5 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -20,6 +18,8 @@ import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index 1b04a7f7a..632b51017 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -1,11 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.List; -import java.util.Optional; -import java.util.Random; - import com.google.common.collect.Lists; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -23,6 +18,10 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; +import java.util.Optional; +import java.util.Random; + public class FloatingSpireFeature extends SpireFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { diff --git a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java index 7e6fd35ec..ca9db523d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -1,9 +1,5 @@ package ru.betterend.world.features.terrain; -import java.util.Optional; -import java.util.Random; -import java.util.function.Function; - import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; @@ -41,6 +37,10 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.util.BlockFixer; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + public class GeyserFeature extends DefaultFeature { protected static final Function REPLACE1; protected static final Function REPLACE2; diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index e52333e25..044404168 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -1,12 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.List; -import java.util.Optional; -import java.util.Random; -import java.util.function.Function; - import com.google.common.collect.Lists; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -31,6 +25,11 @@ import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index 244a6e471..39c261a18 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -1,10 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -26,6 +22,9 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import java.util.Random; +import java.util.Set; + public class SulphuricCaveFeature extends DefaultFeature { private static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 629628043..0962cc36f 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -1,10 +1,6 @@ package ru.betterend.world.features.terrain; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -23,6 +19,9 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.Random; +import java.util.Set; + public class SulphuricLakeFeature extends DefaultFeature { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index ccb9d5f26..e092dec87 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -1,12 +1,6 @@ package ru.betterend.world.features.terrain.caves; -import java.util.Optional; -import java.util.Random; -import java.util.Set; -import java.util.function.Supplier; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -22,6 +16,11 @@ import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.function.Supplier; + public class CaveChunkPopulatorFeature extends DefaultFeature { private Supplier supplier; diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index c6a924812..9505cdaea 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -1,13 +1,7 @@ package ru.betterend.world.features.terrain.caves; -import java.util.List; -import java.util.Optional; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Lists; import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -30,6 +24,11 @@ import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.Set; + public abstract class EndCaveFeature extends DefaultFeature { protected static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); protected static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index fbca390cd..8f95755d6 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -1,14 +1,7 @@ package ru.betterend.world.features.terrain.caves; -import java.util.Map; -import java.util.Optional; -import java.util.Random; -import java.util.Set; -import java.util.stream.IntStream; - import com.google.common.collect.Maps; import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -30,6 +23,12 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.stream.IntStream; + public class TunelCaveFeature extends EndCaveFeature { private Set generate(WorldGenLevel world, BlockPos center, Random random) { int cx = center.getX() >> 4; diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index 3de5c44ed..df9f20877 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -1,14 +1,7 @@ package ru.betterend.world.generator; -import java.awt.Point; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.locks.ReentrantLock; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import net.minecraft.util.Mth; import net.minecraft.world.level.biome.BiomeSource; import ru.bclib.api.biomes.BiomeAPI; @@ -16,6 +9,12 @@ import ru.bclib.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; +import java.awt.Point; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.locks.ReentrantLock; + public class TerrainGenerator { private static final Map TERRAIN_BOOL_CACHE_MAP = Maps.newHashMap(); private static final ReentrantLock LOCKER = new ReentrantLock(); diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index c9ab83d81..738a67d15 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.ChunkPos; @@ -19,6 +17,8 @@ import ru.betterend.BetterEnd; import ru.betterend.world.structures.piece.NBTPiece; +import java.util.Random; + public class EternalPortalStructure extends FeatureBaseStructure { private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index f16cea4f6..e40adc528 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.block.Blocks; @@ -14,6 +12,8 @@ import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import ru.bclib.world.structures.BCLStructureFeature; +import java.util.Random; + public abstract class FeatureBaseStructure extends StructureFeature { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java index fa336cfcb..737ec6f4f 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java @@ -1,9 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; @@ -22,6 +18,10 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.VoxelPiece; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + public class GiantIceStarStructure extends SDFStructureFeature { private static final float minSize = 20; private static final float maxSize = 35; diff --git a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java index 99267bf97..691558b10 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java @@ -1,8 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.List; -import java.util.Random; - import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -31,6 +28,9 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.Random; + public class GiantMossyGlowshroomStructure extends SDFStructureFeature { public GiantMossyGlowshroomStructure() { super(GiantMossyGlowshroomStructure::generatePieces); diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index 55b94dc23..691c373ea 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -15,6 +13,8 @@ import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; +import java.util.Random; + public class MegaLakeSmallStructure extends FeatureBaseStructure { public MegaLakeSmallStructure() { super(PieceGeneratorSupplier.simple( diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index d17dedf18..d8b4159eb 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -15,6 +13,8 @@ import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.LakePiece; +import java.util.Random; + public class MegaLakeStructure extends FeatureBaseStructure { diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index c04f97ea9..642e2eef7 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -15,6 +13,8 @@ import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.CrystalMountainPiece; +import java.util.Random; + public class MountainStructure extends FeatureBaseStructure { public MountainStructure() { diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index 086273467..f94714359 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -18,6 +16,8 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.PaintedMountainPiece; +import java.util.Random; + public class PaintedMountainStructure extends FeatureBaseStructure { private static final BlockState[] VARIANTS; diff --git a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java index d2ca8d860..81af35260 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -1,8 +1,5 @@ package ru.betterend.world.structures.features; -import java.util.Random; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; @@ -16,6 +13,9 @@ import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.VoxelPiece; +import java.util.Random; +import java.util.function.BiFunction; + public abstract class SDFStructureFeature extends FeatureBaseStructure { public SDFStructureFeature(PieceGenerator generator) { super(PieceGeneratorSupplier.simple( diff --git a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java index e74a2e92f..9122c8fa0 100644 --- a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java @@ -1,7 +1,6 @@ package ru.betterend.world.structures.piece; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.levelgen.feature.StructurePieceType; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructurePiece; diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 39bd6f586..25c911691 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -19,6 +17,8 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndStructures; +import java.util.Random; + public class CavePiece extends BasePiece { private OpenSimplexNoise noise; private BlockPos center; diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index 2413de9fa..60acae3be 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -25,6 +23,8 @@ import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class CrystalMountainPiece extends MountainPiece { private BlockState top; diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 219e3f1e4..2588ddd34 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -1,10 +1,6 @@ package ru.betterend.world.structures.piece; -import java.util.Map; -import java.util.Random; - import com.google.common.collect.Maps; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -34,6 +30,9 @@ import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; +import java.util.Map; +import java.util.Random; + public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index 0afc39e35..896f70998 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -1,10 +1,6 @@ package ru.betterend.world.structures.piece; -import java.util.Map; -import java.util.Random; - import com.google.common.collect.Maps; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -20,6 +16,9 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; +import java.util.Map; +import java.util.Random; + public abstract class MountainPiece extends BasePiece { protected Map heightmap = Maps.newHashMap(); protected OpenSimplexNoise noise1; diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index c822913e5..b4112065c 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; @@ -22,6 +20,8 @@ import ru.betterend.registry.EndStructures; import ru.betterend.world.biome.EndBiome; +import java.util.Random; + public class NBTPiece extends BasePiece { private ResourceLocation structureID; private Rotation rotation; diff --git a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java index a52122850..4c37167c4 100644 --- a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java @@ -1,7 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; @@ -21,6 +19,8 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndStructures; +import java.util.Random; + public class PaintedMountainPiece extends MountainPiece { private BlockState[] slises; diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index 69edcbaa5..ae7853c09 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -1,8 +1,5 @@ package ru.betterend.world.structures.piece; -import java.util.Random; -import java.util.function.Consumer; - import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.ChunkPos; @@ -14,6 +11,9 @@ import ru.bclib.world.structures.StructureWorld; import ru.betterend.registry.EndStructures; +import java.util.Random; +import java.util.function.Consumer; + public class VoxelPiece extends BasePiece { private StructureWorld world; diff --git a/src/main/resources/betterend.accesswidener b/src/main/resources/betterend.accesswidener new file mode 100644 index 000000000..1c8e98afa --- /dev/null +++ b/src/main/resources/betterend.accesswidener @@ -0,0 +1,4 @@ +accessWidener v1 named + +# Classes +accessible class net/minecraft/world/level/levelgen/SurfaceRules$SurfaceRule diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 6764b2a12..d0c31df6d 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -8,25 +8,27 @@ "ChorusPlantFeatureMixin", "PlayerAdvancementsMixin", "ChorusFlowerBlockMixin", + "StructureFeaturesMixin", + "NoiseInterpolatorMixin", "ChorusPlantBlockMixin", "EndPodiumFeatureMixin", "EndDragonFightMixin", "WorldGenRegionMixin", "BlockBehaviourMixin", + "NoiseChunkAccessor", "DimensionTypeMixin", "CraftingMenuMixin", "LivingEntityMixin", "ServerPlayerMixin", "SpikeFeatureMixin", "ServerLevelMixin", + "NoiseChunkMixin", "EnderManMixin", "EndSpikeMixin", "MonsterMixin", "EntityMixin", "PlayerMixin", - "SlimeMixin", - "StructureFeaturesMixin", - "NoiseInterpolatorMixin" + "SlimeMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 4c41216d9..67b2f16de 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -35,6 +35,7 @@ "ru.betterend.integration.rei.REIPlugin" ] }, + "accessWidener" : "betterend.accesswidener", "mixins": [ "betterend.mixins.common.json", "betterend.mixins.client.json", From 4256e954cae8a3b870e35f992e6ac2ce4a808fa9 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 19 Dec 2021 00:21:45 +0300 Subject: [PATCH 56/93] Terrain generator fixes --- .../common/NoiseBasedChunkGeneratorMixin.java | 26 --- .../mixin/common/NoiseChunkMixin.java | 8 +- .../mixin/common/NoiseInterpolatorMixin.java | 17 +- .../mixin/common/ServerLevelMixin.java | 17 ++ .../world/generator/EndNoiseFiller.java | 67 ------- .../world/generator/TerrainGenerator.java | 179 ++++-------------- .../resources/betterend.mixins.common.json | 1 - 7 files changed, 66 insertions(+), 249 deletions(-) delete mode 100644 src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java delete mode 100644 src/main/java/ru/betterend/world/generator/EndNoiseFiller.java diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java deleted file mode 100644 index 392de48e0..000000000 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.betterend.mixin.common; - -import net.minecraft.core.Registry; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; -import net.minecraft.world.level.levelgen.StructureSettings; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.betterend.world.generator.TerrainGenerator; - -import java.util.function.Supplier; - -@Mixin(NoiseBasedChunkGenerator.class) -public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { - public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource biomeSource, StructureSettings structuresConfig, long worldSeed) { - super(populationSource, biomeSource, structuresConfig, worldSeed); - } - - @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) - private void be_onInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { - TerrainGenerator.initNoise(seed); - } -} diff --git a/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java index f01fcb512..5154eaf13 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseChunkMixin.java @@ -14,15 +14,15 @@ @Mixin(NoiseChunk.class) public class NoiseChunkMixin implements TargetChecker { - private boolean bnv_isNetherGenerator; + private boolean be_isEndGenerator; @Inject(method = "*", at = @At("TAIL")) - private void bnv_onNoiseChunkInit(int i, int j, int k, NoiseSampler noiseSampler, int l, int m, NoiseFiller noiseFiller, NoiseGeneratorSettings noiseGeneratorSettings, Aquifer.FluidPicker fluidPicker, Blender blender, CallbackInfo info) { - bnv_isNetherGenerator = noiseGeneratorSettings.stable(NoiseGeneratorSettings.END); + private void be_onNoiseChunkInit(int i, int j, int k, NoiseSampler noiseSampler, int l, int m, NoiseFiller noiseFiller, NoiseGeneratorSettings noiseGeneratorSettings, Aquifer.FluidPicker fluidPicker, Blender blender, CallbackInfo info) { + be_isEndGenerator = noiseGeneratorSettings.stable(NoiseGeneratorSettings.END); } @Override public boolean isTarget() { - return bnv_isNetherGenerator; + return be_isEndGenerator; } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java index 24d643dc5..14dcdfe52 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseInterpolatorMixin.java @@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.betterend.interfaces.TargetChecker; +import ru.betterend.world.generator.TerrainGenerator; @Mixin(NoiseChunk.NoiseInterpolator.class) public class NoiseInterpolatorMixin { @@ -29,26 +30,16 @@ private void be_fillSlice(double[][] data, int x, CallbackInfo info) { final int sizeY = noiseSettings.getCellHeight(); final int sizeXZ = noiseSettings.getCellWidth(); - final int cellsY = accessor.bnv_getCellCountY() + 1; + //final int cellsY = accessor.bnv_getCellCountY() + 1; final int cellsXZ = accessor.bnv_getCellCountXZ() + 1; final int firstCellZ = accessor.bnv_getFirstCellZ(); - final int cellNoiseMinY = accessor.bnv_getCellNoiseMinY(); + //final int cellNoiseMinY = accessor.bnv_getCellNoiseMinY(); x *= sizeXZ; for (int cellXZ = 0; cellXZ < cellsXZ; ++cellXZ) { int z = (firstCellZ + cellXZ) * sizeXZ; - for (int cellY = 0; cellY < cellsY; ++cellY) { - int y = (cellY + cellNoiseMinY) * sizeY; - data[cellXZ][cellY] = be_calculateNoise(x, y, z); - } + TerrainGenerator.fillTerrainDensity(data[cellXZ], x, z, sizeXZ, sizeY); } } - - private float be_calculateNoise(int x, int y, int z) { - float gradient = (64 - y) * 0.1F; - float sinX = (float) Math.sin(x * 0.1); - float sinZ = (float) Math.sin(z * 0.1); - return gradient + sinX + sinZ; - } } diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index 9ad8f7bd4..4cb230da5 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -3,12 +3,18 @@ import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.level.CustomSpawner; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelStorageSource.LevelStorageAccess; +import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WritableLevelData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -20,7 +26,10 @@ import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; +import ru.betterend.world.generator.TerrainGenerator; +import java.util.List; +import java.util.concurrent.Executor; import java.util.function.Supplier; @Mixin(ServerLevel.class) @@ -42,6 +51,14 @@ protected ServerLevelMixin(WritableLevelData writableLevelData, ResourceKey resourceKey, DimensionType dimensionType, ChunkProgressListener chunkProgressListener, ChunkGenerator chunkGenerator, boolean bl, long seed, List list, boolean bl2, CallbackInfo ci) { + ServerLevel level = ServerLevel.class.cast(this); + if (level.dimension() == Level.END) { + TerrainGenerator.initNoise(seed, chunkGenerator.getBiomeSource(), chunkGenerator.climateSampler()); + } + } + @Inject(method = "getSharedSpawnPos", at = @At("HEAD"), cancellable = true) private void be_getSharedSpawnPos(CallbackInfoReturnable info) { if (GeneratorOptions.changeSpawn()) { diff --git a/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java b/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java deleted file mode 100644 index 97e445c59..000000000 --- a/src/main/java/ru/betterend/world/generator/EndNoiseFiller.java +++ /dev/null @@ -1,67 +0,0 @@ -package ru.betterend.world.generator; - -import net.minecraft.util.Mth; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.levelgen.NoiseChunk.NoiseFiller; - -public class EndNoiseFiller implements NoiseFiller { - public static final EndNoiseFiller INSTANCE = new EndNoiseFiller(); - private double[][][] noiseColumns = new double[3][3][33]; - private BiomeSource biomeSource; - private int chunkX; - private int chunkZ; - - private EndNoiseFiller() {} - - public void setBiomeSource(BiomeSource biomeSource) { - this.biomeSource = biomeSource; - } - - @Override - public double calculateNoise(int x, int y, int z) { - if (y < 0 || y > 127) { - return -10; - } - - int cx = x >> 4; - int cz = z >> 4; - if (chunkX != cx || chunkZ != cz) { - chunkX = cx; - chunkZ = cz; - int px = cx << 1; - int pz = cz << 1; - for (byte i = 0; i < 3; i++) { - for (byte j = 0; j < 3; j++) { - TerrainGenerator.fillTerrainDensity(noiseColumns[i][j], px + i, pz + j, biomeSource); - } - } - } - - byte ix = (byte) ((x & 15) >> 3); - byte iy = (byte) (y >> 2); - byte iz = (byte) ((z & 15) >> 3); - float dx = (x & 7) / 8F; - float dy = (y & 3) / 4F; - float dz = (z & 7) / 8F; - - float a = (float) noiseColumns[ix][iz][iy]; - float b = (float) noiseColumns[ix + 1][iz][iy]; - float c = (float) noiseColumns[ix][iz][iy + 1]; - float d = (float) noiseColumns[ix + 1][iz][iy + 1]; - - float e = (float) noiseColumns[ix][iz + 1][iy]; - float f = (float) noiseColumns[ix + 1][iz + 1][iy]; - float g = (float) noiseColumns[ix][iz + 1][iy + 1]; - float h = (float) noiseColumns[ix + 1][iz + 1][iy + 1]; - - a = Mth.lerp(dx, a, b); - b = Mth.lerp(dx, c, d); - c = Mth.lerp(dx, e, f); - d = Mth.lerp(dx, g, h); - - a = Mth.lerp(dy, a, b); - b = Mth.lerp(dy, c, d); - - return Mth.lerp(dz, a, b); - } -} diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index df9f20877..afe82b9cc 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -4,6 +4,7 @@ import com.google.common.collect.Maps; import net.minecraft.util.Mth; import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.biome.Climate.Sampler; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.MHelper; import ru.bclib.world.biomes.BCLBiome; @@ -29,8 +30,10 @@ public class TerrainGenerator { private static IslandLayer smallIslands; private static OpenSimplexNoise noise1; private static OpenSimplexNoise noise2; + private static BiomeSource biomeSource; + private static Sampler sampler; - public static void initNoise(long seed) { + public static void initNoise(long seed, BiomeSource biomeSource, Sampler sampler) { Random random = new Random(seed); largeIslands = new IslandLayer(random.nextInt(), GeneratorOptions.bigOptions); mediumIslands = new IslandLayer(random.nextInt(), GeneratorOptions.mediumOptions); @@ -38,15 +41,19 @@ public static void initNoise(long seed) { noise1 = new OpenSimplexNoise(random.nextInt()); noise2 = new OpenSimplexNoise(random.nextInt()); TERRAIN_BOOL_CACHE_MAP.clear(); + TerrainGenerator.biomeSource = biomeSource; + TerrainGenerator.sampler = sampler; } - public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource biomeSource) { + public static void fillTerrainDensity(double[] buffer, int posX, int posZ, int scaleXZ, int scaleY) { LOCKER.lock(); largeIslands.clearCache(); mediumIslands.clearCache(); smallIslands.clearCache(); + int x = Mth.floor(posX / scaleXZ); + int z = Mth.floor(posZ / scaleXZ); double distortion1 = noise1.eval(x * 0.1, z * 0.1) * 20 + noise2.eval( x * 0.2, z * 0.2 @@ -55,17 +62,17 @@ public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource x * 0.2, z * 0.2 ) * 10 + noise2.eval(x * 0.4, z * 0.4) * 5; - double px = (double) x * SCALE_XZ + distortion1; - double pz = (double) z * SCALE_XZ + distortion2; + double px = (double) x * scaleXZ + distortion1; + double pz = (double) z * scaleXZ + distortion2; largeIslands.updatePositions(px, pz); mediumIslands.updatePositions(px, pz); smallIslands.updatePositions(px, pz); - float height = getAverageDepth(biomeSource, x << 1, z << 1) * 0.5F; + float height = getAverageDepth(x << 1, z << 1) * 0.5F; for (int y = 0; y < buffer.length; y++) { - double py = (double) y * SCALE_Y; + double py = (double) y * scaleY; float dist = largeIslands.getDensity(px, py, pz, height); dist = dist > 1 ? dist : MHelper.max(dist, mediumIslands.getDensity(px, py, pz, height)); dist = dist > 1 ? dist : MHelper.max(dist, smallIslands.getDensity(px, py, pz, height)); @@ -83,49 +90,11 @@ public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource LOCKER.unlock(); } - public static float getTerrainDensity(int x, int y, int z, BiomeSource biomeSource) { - LOCKER.lock(); - - largeIslands.clearCache(); - mediumIslands.clearCache(); - smallIslands.clearCache(); - - double distortion1 = noise1.eval(x * 0.1, z * 0.1) * 20 + noise2.eval( - x * 0.2, - z * 0.2 - ) * 10 + noise1.eval(x * 0.4, z * 0.4) * 5; - double distortion2 = noise2.eval(x * 0.1, z * 0.1) * 20 + noise1.eval( - x * 0.2, - z * 0.2 - ) * 10 + noise2.eval(x * 0.4, z * 0.4) * 5; - double px = (double) x * SCALE_XZ + distortion1; - double pz = (double) z * SCALE_XZ + distortion2; - - largeIslands.updatePositions(px, pz); - mediumIslands.updatePositions(px, pz); - smallIslands.updatePositions(px, pz); - - float height = getAverageDepth(biomeSource, x << 1, z << 1) * 0.5F; - - double py = (double) y * SCALE_Y; - float dist = largeIslands.getDensity(px, py, pz, height); - dist = dist > 1 ? dist : MHelper.max(dist, mediumIslands.getDensity(px, py, pz, height)); - dist = dist > 1 ? dist : MHelper.max(dist, smallIslands.getDensity(px, py, pz, height)); - if (dist > -0.5F) { - dist += noise1.eval(px * 0.01, py * 0.01, pz * 0.01) * 0.02 + 0.02; - dist += noise2.eval(px * 0.05, py * 0.05, pz * 0.05) * 0.01 + 0.01; - dist += noise1.eval(px * 0.1, py * 0.1, pz * 0.1) * 0.005 + 0.005; - } - if (py > 100) { - dist = (float) Mth.lerp((py - 100) / 27F, dist, -1); + private static float getAverageDepth(int x, int z) { + if (biomeSource == null) { + return 0; } - - LOCKER.unlock(); - return dist; - } - - private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { - /*if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { + if (getBiome(biomeSource, x, z).getTerrainHeight() < 0.1F) { return 0F; } float depth = 0F; @@ -134,22 +103,35 @@ private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { int pz = z + OFFS[i].y; depth += getBiome(biomeSource, px, pz).getTerrainHeight() * COEF[i]; } - return depth;*/ - return 0F; + return depth; } private static BCLBiome getBiome(BiomeSource biomeSource, int x, int z) { - // TODO replace null sampler - return BiomeAPI.getBiome(biomeSource.getNoiseBiome(x, 0, z, null)); + return BiomeAPI.getBiome(biomeSource.getNoiseBiome(x, 0, z, sampler)); + } + + static { + float sum = 0; + List coef = Lists.newArrayList(); + List pos = Lists.newArrayList(); + for (int x = -3; x <= 3; x++) { + for (int z = -3; z <= 3; z++) { + float dist = MHelper.length(x, z) / 3F; + if (dist <= 1) { + sum += dist; + coef.add(dist); + pos.add(new Point(x, z)); + } + } + } + OFFS = pos.toArray(new Point[] {}); + COEF = new float[coef.size()]; + for (int i = 0; i < COEF.length; i++) { + COEF[i] = coef.get(i) / sum; + } } - /** - * Check if this is land - * - * @param x - biome pos x - * @param z - biome pos z - */ - public static boolean isLand(int x, int z) { + public static Boolean isLand(int x, int z) { int sectionX = TerrainBoolCache.scaleCoordinate(x); int sectionZ = TerrainBoolCache.scaleCoordinate(z); @@ -210,83 +192,4 @@ public static boolean isLand(int x, int z) { return result; } - - /** - * Get something like height - * - * @param x - block pos x - * @param z - block pos z - */ - public static int getHeight(int x, int z, BiomeSource biomeSource) { - int posX = (x >> 3) << 3; - int posZ = (z >> 3) << 3; - float dx = (x - posX) / 8.0F; - float dz = (z - posZ) / 8.0F; - double[][][] buffer = new double[2][2][32]; - - LOCKER.lock(); - for (int i = 0; i < 4; i++) { - int ix = i & 1; - int iz = i >> 1; - int px = ((ix << 3) + posX) >> 3; - int pz = ((iz << 3) + posZ) >> 3; - fillTerrainDensity(buffer[ix][iz], px, pz, biomeSource); - } - LOCKER.unlock(); - - for (int j = 30; j >= 0; j--) { - float a = (float) buffer[0][0][j]; - float b = (float) buffer[1][0][j]; - float c = (float) buffer[0][1][j]; - float d = (float) buffer[1][1][j]; - - float e = (float) buffer[0][0][j + 1]; - float f = (float) buffer[1][0][j + 1]; - float g = (float) buffer[0][1][j + 1]; - float h = (float) buffer[1][1][j + 1]; - - if (a < 0 && b < 0 && c < 0 && d < 0 && e < 0 && f < 0 && g < 0 && h < 0) { - continue; - } - - a = Mth.lerp(dx, a, b); - b = Mth.lerp(dx, c, d); - c = Mth.lerp(dx, e, f); - d = Mth.lerp(dx, g, h); - - a = Mth.lerp(dz, a, b); - b = Mth.lerp(dz, c, d); - - for (int n = 7; n >= 0; n--) { - float dy = n / 8.0F; - float dens = Mth.lerp(dy, a, b); - if (dens > 0) { - return (j << 3 | n) + 1; - } - } - } - - return -256; - } - - static { - float sum = 0; - List coef = Lists.newArrayList(); - List pos = Lists.newArrayList(); - for (int x = -3; x <= 3; x++) { - for (int z = -3; z <= 3; z++) { - float dist = MHelper.length(x, z) / 3F; - if (dist <= 1) { - sum += dist; - coef.add(dist); - pos.add(new Point(x, z)); - } - } - } - OFFS = pos.toArray(new Point[] {}); - COEF = new float[coef.size()]; - for (int i = 0; i < COEF.length; i++) { - COEF[i] = coef.get(i) / sum; - } - } } diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index d0c31df6d..c92e2fc1f 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -4,7 +4,6 @@ "package": "ru.betterend.mixin.common", "compatibilityLevel": "JAVA_16", "mixins": [ - "NoiseBasedChunkGeneratorMixin", "ChorusPlantFeatureMixin", "PlayerAdvancementsMixin", "ChorusFlowerBlockMixin", From 91e7bab99379678a05336f7a0a6b7f42dc5f7473 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 17:51:48 +0300 Subject: [PATCH 57/93] Library update --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 18c828002..e213d2658 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.2 +bclib_version = 1.1.4 rei_version = 7.0.343 canvas_version = 1.0.+ From 58310d020c4a3f831ad72cde12a2390f02dcf00e Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 18:06:48 +0300 Subject: [PATCH 58/93] Replaced spaces, proper biome getter, imports cleanup --- .../betterend/blocks/LumecornSeedBlock.java | 36 +- .../betterend/blocks/basis/PedestalBlock.java | 2 +- .../complexmaterials/MetalMaterial.java | 838 +++++++++--------- .../byg/biomes/NightshadeRedwoods.java | 116 +-- .../byg/biomes/OldBulbisGardens.java | 162 ++-- .../interfaces/StructureFeaturesAccessor.java | 2 +- .../mixin/common/EndPodiumFeatureMixin.java | 2 +- .../mixin/common/StructureFeaturesMixin.java | 8 +- .../ru/betterend/recipe/AnvilRecipes.java | 146 +-- .../ru/betterend/rituals/EternalRitual.java | 12 +- .../world/biome/land/AmberLandBiome.java | 72 +- .../world/biome/land/UmbraValleyBiome.java | 104 +-- .../world/features/BiomeIslandFeature.java | 2 +- .../features/terrain/ThinArchFeature.java | 100 +-- .../features/EternalPortalStructure.java | 90 +- .../features/MegaLakeSmallStructure.java | 57 +- .../features/MegaLakeStructure.java | 57 +- .../features/MountainStructure.java | 68 +- .../world/structures/piece/CavePiece.java | 2 +- .../SulphuricSurfaceNoiseCondition.java | 30 +- .../surface/UmbraSurfaceNoiseCondition.java | 32 +- .../rendering/v1/ArmorRenderingRegistry.java | 40 +- .../rendering/ArmorProviderExtensions.java | 2 +- .../rendering/ArmorRenderingRegistryImpl.java | 2 +- .../rendering/MixinArmorFeatureRenderer.java | 2 +- .../mixin/client/rendering/MixinItem.java | 2 +- 26 files changed, 992 insertions(+), 994 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index 2689b8702..31363deed 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -16,24 +16,24 @@ public class LumecornSeedBlock extends EndPlantWithAgeBlock { - @Override - public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { - ((Feature) (EndFeatures.LUMECORN.getFeature())).place(new FeaturePlaceContext<>( - Optional.empty(), - world, - null, - random, - pos, - (NoneFeatureConfiguration) null)); - } + @Override + public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { + ((Feature) (EndFeatures.LUMECORN.getFeature())).place(new FeaturePlaceContext<>( + Optional.empty(), + world, + null, + random, + pos, + (NoneFeatureConfiguration) null)); + } - @Override - protected boolean isTerrain(BlockState state) { - return state.is(EndBlocks.END_MOSS); - } + @Override + protected boolean isTerrain(BlockState state) { + return state.is(EndBlocks.END_MOSS); + } - @Override - public BlockBehaviour.OffsetType getOffsetType() { - return BlockBehaviour.OffsetType.NONE; - } + @Override + public BlockBehaviour.OffsetType getOffsetType() { + return BlockBehaviour.OffsetType.NONE; + } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index e7b131cdc..784377f5f 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -82,7 +82,7 @@ public static Block registerPedestal(String name, Block source) { /** * Register new Pedestal block with specified mod id. * - * @param id pedestal id + * @param id pedestal id * @param source source block * @return new Pedestal block with specified id. */ diff --git a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java index 87985bb0a..53183d2d8 100644 --- a/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java +++ b/src/main/java/ru/betterend/complexmaterials/MetalMaterial.java @@ -48,452 +48,452 @@ import ru.betterend.registry.EndItems; public class MetalMaterial { - public final Block ore; - public final Block block; - public final Block tile; - public final Block bars; - public final Block pressurePlate; - public final Block door; - public final Block trapdoor; - public final Block chain; - public final Block stairs; - public final Block slab; + public final Block ore; + public final Block block; + public final Block tile; + public final Block bars; + public final Block pressurePlate; + public final Block door; + public final Block trapdoor; + public final Block chain; + public final Block stairs; + public final Block slab; - public final Block chandelier; - public final Block bulb_lantern; - public final ColoredMaterial bulb_lantern_colored; + public final Block chandelier; + public final Block bulb_lantern; + public final ColoredMaterial bulb_lantern_colored; - public final Block anvilBlock; + public final Block anvilBlock; - public final Item rawOre; - public final Item nugget; - public final Item ingot; + public final Item rawOre; + public final Item nugget; + public final Item ingot; - public final Item shovelHead; - public final Item pickaxeHead; - public final Item axeHead; - public final Item hoeHead; - public final Item swordBlade; - public final Item swordHandle; + public final Item shovelHead; + public final Item pickaxeHead; + public final Item axeHead; + public final Item hoeHead; + public final Item swordBlade; + public final Item swordHandle; - public final Item shovel; - public final Item sword; - public final Item pickaxe; - public final Item axe; - public final Item hoe; - public final Item hammer; + public final Item shovel; + public final Item sword; + public final Item pickaxe; + public final Item axe; + public final Item hoe; + public final Item hammer; - public final Item forgedPlate; - public final Item helmet; - public final Item chestplate; - public final Item leggings; - public final Item boots; + public final Item forgedPlate; + public final Item helmet; + public final Item chestplate; + public final Item leggings; + public final Item boots; - public final Tag.Named alloyingOre; + public final Tag.Named alloyingOre; - public static MetalMaterial makeNormal(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - true, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeNormal(String name, MaterialColor color, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + true, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - public static MetalMaterial makeNormal(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - true, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) - .mapColor(color) - .hardness(hardness) - .resistance(resistance), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeNormal(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + true, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) + .mapColor(color) + .hardness(hardness) + .resistance(resistance), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - public static MetalMaterial makeOreless(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - false, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeOreless(String name, MaterialColor color, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + false, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).mapColor(color), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - public static MetalMaterial makeOreless(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial( - name, - false, - FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) - .mapColor(color) - .hardness(hardness) - .resistance(resistance), - EndItems.makeEndItemSettings(), - material, - armor - ); - } + public static MetalMaterial makeOreless(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { + return new MetalMaterial( + name, + false, + FabricBlockSettings.copyOf(Blocks.IRON_BLOCK) + .mapColor(color) + .hardness(hardness) + .resistance(resistance), + EndItems.makeEndItemSettings(), + material, + armor + ); + } - private MetalMaterial(String name, boolean hasOre, FabricBlockSettings settings, Properties itemSettings, Tier material, ArmorMaterial armor) { - BlockBehaviour.Properties lanternProperties = FabricBlockSettings.copyOf(settings) - .hardness(1) - .resistance(1) - .luminance(15) - .sound(SoundType.LANTERN); - final int level = material.getLevel(); + private MetalMaterial(String name, boolean hasOre, FabricBlockSettings settings, Properties itemSettings, Tier material, ArmorMaterial armor) { + BlockBehaviour.Properties lanternProperties = FabricBlockSettings.copyOf(settings) + .hardness(1) + .resistance(1) + .luminance(15) + .sound(SoundType.LANTERN); + final int level = material.getLevel(); - rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; - ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(()->rawOre, 1, 3, 1)) : null; - alloyingOre = hasOre ? TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_alloying") : null; - if (hasOre) { - TagAPI.addTag(alloyingOre, ore, rawOre); - } + rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; + ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(()->rawOre, 1, 3, 1)) : null; + alloyingOre = hasOre ? TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_alloying") : null; + if (hasOre) { + TagAPI.addTag(alloyingOre, ore, rawOre); + } - block = EndBlocks.registerBlock(name + "_block", new BaseBlock(settings)); - tile = EndBlocks.registerBlock(name + "_tile", new BaseBlock(settings)); - stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(tile)); - slab = EndBlocks.registerBlock(name + "_slab", new BaseSlabBlock(tile)); - door = EndBlocks.registerBlock(name + "_door", new BaseDoorBlock(block)); - trapdoor = EndBlocks.registerBlock(name + "_trapdoor", new BaseTrapdoorBlock(block)); - bars = EndBlocks.registerBlock(name + "_bars", new BaseMetalBarsBlock(block)); - chain = EndBlocks.registerBlock(name + "_chain", new BaseChainBlock(block.defaultMaterialColor())); - pressurePlate = EndBlocks.registerBlock(name + "_plate", new WoodenPressurePlateBlock(block)); + block = EndBlocks.registerBlock(name + "_block", new BaseBlock(settings)); + tile = EndBlocks.registerBlock(name + "_tile", new BaseBlock(settings)); + stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(tile)); + slab = EndBlocks.registerBlock(name + "_slab", new BaseSlabBlock(tile)); + door = EndBlocks.registerBlock(name + "_door", new BaseDoorBlock(block)); + trapdoor = EndBlocks.registerBlock(name + "_trapdoor", new BaseTrapdoorBlock(block)); + bars = EndBlocks.registerBlock(name + "_bars", new BaseMetalBarsBlock(block)); + chain = EndBlocks.registerBlock(name + "_chain", new BaseChainBlock(block.defaultMaterialColor())); + pressurePlate = EndBlocks.registerBlock(name + "_plate", new WoodenPressurePlateBlock(block)); - chandelier = EndBlocks.registerBlock(name + "_chandelier", new ChandelierBlock(block)); - bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties)); - bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false); + chandelier = EndBlocks.registerBlock(name + "_chandelier", new ChandelierBlock(block)); + bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties)); + bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false); - nugget = EndItems.registerEndItem(name + "_nugget", new ModelProviderItem(itemSettings)); - ingot = EndItems.registerEndItem(name + "_ingot", new ModelProviderItem(itemSettings)); + nugget = EndItems.registerEndItem(name + "_nugget", new ModelProviderItem(itemSettings)); + ingot = EndItems.registerEndItem(name + "_ingot", new ModelProviderItem(itemSettings)); - shovelHead = EndItems.registerEndItem(name + "_shovel_head"); - pickaxeHead = EndItems.registerEndItem(name + "_pickaxe_head"); - axeHead = EndItems.registerEndItem(name + "_axe_head"); - hoeHead = EndItems.registerEndItem(name + "_hoe_head"); - swordBlade = EndItems.registerEndItem(name + "_sword_blade"); - swordHandle = EndItems.registerEndItem(name + "_sword_handle"); + shovelHead = EndItems.registerEndItem(name + "_shovel_head"); + pickaxeHead = EndItems.registerEndItem(name + "_pickaxe_head"); + axeHead = EndItems.registerEndItem(name + "_axe_head"); + hoeHead = EndItems.registerEndItem(name + "_hoe_head"); + swordBlade = EndItems.registerEndItem(name + "_sword_blade"); + swordHandle = EndItems.registerEndItem(name + "_sword_handle"); - shovel = EndItems.registerEndTool(name + "_shovel", new BaseShovelItem(material, 1.5F, -3.0F, itemSettings)); - sword = EndItems.registerEndTool(name + "_sword", new BaseSwordItem(material, 3, -2.4F, itemSettings)); - pickaxe = EndItems.registerEndTool(name + "_pickaxe", new EndPickaxe(material, 1, -2.8F, itemSettings)); - axe = EndItems.registerEndTool(name + "_axe", new BaseAxeItem(material, 6.0F, -3.0F, itemSettings)); - hoe = EndItems.registerEndTool(name + "_hoe", new BaseHoeItem(material, -3, 0.0F, itemSettings)); - hammer = EndItems.registerEndTool( - name + "_hammer", - new EndHammerItem(material, 5.0F, -3.2F, 0.3D, itemSettings) - ); + shovel = EndItems.registerEndTool(name + "_shovel", new BaseShovelItem(material, 1.5F, -3.0F, itemSettings)); + sword = EndItems.registerEndTool(name + "_sword", new BaseSwordItem(material, 3, -2.4F, itemSettings)); + pickaxe = EndItems.registerEndTool(name + "_pickaxe", new EndPickaxe(material, 1, -2.8F, itemSettings)); + axe = EndItems.registerEndTool(name + "_axe", new BaseAxeItem(material, 6.0F, -3.0F, itemSettings)); + hoe = EndItems.registerEndTool(name + "_hoe", new BaseHoeItem(material, -3, 0.0F, itemSettings)); + hammer = EndItems.registerEndTool( + name + "_hammer", + new EndHammerItem(material, 5.0F, -3.2F, 0.3D, itemSettings) + ); - forgedPlate = EndItems.registerEndItem(name + "_forged_plate"); - helmet = EndItems.registerEndItem(name + "_helmet", new EndArmorItem(armor, EquipmentSlot.HEAD, itemSettings)); - chestplate = EndItems.registerEndItem( - name + "_chestplate", - new EndArmorItem(armor, EquipmentSlot.CHEST, itemSettings) - ); - leggings = EndItems.registerEndItem( - name + "_leggings", - new EndArmorItem(armor, EquipmentSlot.LEGS, itemSettings) - ); - boots = EndItems.registerEndItem(name + "_boots", new EndArmorItem(armor, EquipmentSlot.FEET, itemSettings)); + forgedPlate = EndItems.registerEndItem(name + "_forged_plate"); + helmet = EndItems.registerEndItem(name + "_helmet", new EndArmorItem(armor, EquipmentSlot.HEAD, itemSettings)); + chestplate = EndItems.registerEndItem( + name + "_chestplate", + new EndArmorItem(armor, EquipmentSlot.CHEST, itemSettings) + ); + leggings = EndItems.registerEndItem( + name + "_leggings", + new EndArmorItem(armor, EquipmentSlot.LEGS, itemSettings) + ); + boots = EndItems.registerEndItem(name + "_boots", new EndArmorItem(armor, EquipmentSlot.FEET, itemSettings)); - anvilBlock = EndBlocks.registerBlock( - name + "_anvil", - new EndAnvilBlock(this, block.defaultMaterialColor(), level) - ); + anvilBlock = EndBlocks.registerBlock( + name + "_anvil", + new EndAnvilBlock(this, block.defaultMaterialColor(), level) + ); - if (hasOre) { - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_ore", ore, ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_ingot") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_raw", rawOre, ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_ingot") - .buildWithBlasting(); - AlloyingRecipe.Builder.create(name + "_ingot_alloy") - .setInput(alloyingOre, alloyingOre) - .setOutput(ingot, 3) - .setExpiriense(2.1F) - .build(); - } + if (hasOre) { + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_ore", ore, ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_ingot") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_raw", rawOre, ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_ingot") + .buildWithBlasting(); + AlloyingRecipe.Builder.create(name + "_ingot_alloy") + .setInput(alloyingOre, alloyingOre) + .setOutput(ingot, 3) + .setExpiriense(2.1F) + .build(); + } - // Basic recipes - GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_nuggets", ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "###", "###") - .addMaterial('#', nugget) - .setGroup("end_metal_ingots_nug") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_nuggets_from_ingot", nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(9) - .setList("#") - .addMaterial('#', ingot) - .setGroup("end_metal_nuggets_ing") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_block", block) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "###", "###") - .addMaterial('#', ingot) - .setGroup("end_metal_blocks") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_block", ingot) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(9) - .setList("#") - .addMaterial('#', block) - .setGroup("end_metal_ingots") - .build(); + // Basic recipes + GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_nuggets", ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "###", "###") + .addMaterial('#', nugget) + .setGroup("end_metal_ingots_nug") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_nuggets_from_ingot", nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(9) + .setList("#") + .addMaterial('#', ingot) + .setGroup("end_metal_nuggets_ing") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_block", block) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "###", "###") + .addMaterial('#', ingot) + .setGroup("end_metal_blocks") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_block", ingot) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(9) + .setList("#") + .addMaterial('#', block) + .setGroup("end_metal_ingots") + .build(); - // Block recipes - GridRecipe.make(BetterEnd.MOD_ID, name + "_tile", tile) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(4) - .setShape("##", "##") - .addMaterial('#', block) - .setGroup("end_metal_tiles") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_bars", bars) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(16) - .setShape("###", "###") - .addMaterial('#', ingot) - .setGroup("end_metal_bars") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_pressure_plate", pressurePlate) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("##") - .addMaterial('#', ingot) - .setGroup("end_metal_plates") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_door", door) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(3) - .setShape("##", "##", "##") - .addMaterial('#', ingot) - .setGroup("end_metal_doors") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_trapdoor", trapdoor) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("##", "##") - .addMaterial('#', ingot) - .setGroup("end_metal_trapdoors") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_stairs", stairs) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(4) - .setShape("# ", "## ", "###") - .addMaterial('#', block, tile) - .setGroup("end_metal_stairs") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_slab", slab) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(6) - .setShape("###") - .addMaterial('#', block, tile) - .setGroup("end_metal_slabs") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_chain", chain) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("N", "#", "N") - .addMaterial('#', ingot) - .addMaterial('N', nugget) - .setGroup("end_metal_chain") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_anvil", anvilBlock) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", " I ", "III") - .addMaterial('#', block, tile) - .addMaterial('I', ingot) - .setGroup("end_metal_anvil") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_bulb_lantern", bulb_lantern) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("C", "I", "#") - .addMaterial('C', chain) - .addMaterial('I', ingot) - .addMaterial('#', EndItems.GLOWING_BULB) - .build(); + // Block recipes + GridRecipe.make(BetterEnd.MOD_ID, name + "_tile", tile) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(4) + .setShape("##", "##") + .addMaterial('#', block) + .setGroup("end_metal_tiles") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_bars", bars) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(16) + .setShape("###", "###") + .addMaterial('#', ingot) + .setGroup("end_metal_bars") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_pressure_plate", pressurePlate) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("##") + .addMaterial('#', ingot) + .setGroup("end_metal_plates") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_door", door) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(3) + .setShape("##", "##", "##") + .addMaterial('#', ingot) + .setGroup("end_metal_doors") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_trapdoor", trapdoor) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("##", "##") + .addMaterial('#', ingot) + .setGroup("end_metal_trapdoors") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_stairs", stairs) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(4) + .setShape("# ", "## ", "###") + .addMaterial('#', block, tile) + .setGroup("end_metal_stairs") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_slab", slab) + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(6) + .setShape("###") + .addMaterial('#', block, tile) + .setGroup("end_metal_slabs") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_chain", chain) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("N", "#", "N") + .addMaterial('#', ingot) + .addMaterial('N', nugget) + .setGroup("end_metal_chain") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_anvil", anvilBlock) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", " I ", "III") + .addMaterial('#', block, tile) + .addMaterial('I', ingot) + .setGroup("end_metal_anvil") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_bulb_lantern", bulb_lantern) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("C", "I", "#") + .addMaterial('C', chain) + .addMaterial('I', ingot) + .addMaterial('#', EndItems.GLOWING_BULB) + .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_chandelier", chandelier) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("I#I", " # ") - .addMaterial('#', ingot) - .addMaterial('I', EndItems.LUMECORN_ROD) - .setGroup("end_metal_chandelier") - .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_chandelier", chandelier) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("I#I", " # ") + .addMaterial('#', ingot) + .addMaterial('I', EndItems.LUMECORN_ROD) + .setGroup("end_metal_chandelier") + .build(); - // Tools & armor into nuggets - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_axe_nugget", axe, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hoe_nugget", hoe, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_pickaxe_nugget", pickaxe, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_sword_nugget", sword, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hammer_nugget", hammer, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_helmet_nugget", helmet, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_chestplate_nugget", chestplate, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_leggings_nugget", leggings, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_boots_nugget", boots, nugget) - .checkConfig(Configs.RECIPE_CONFIG) - .setGroup("end_nugget") - .buildWithBlasting(); + // Tools & armor into nuggets + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_axe_nugget", axe, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hoe_nugget", hoe, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_pickaxe_nugget", pickaxe, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_sword_nugget", sword, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hammer_nugget", hammer, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_helmet_nugget", helmet, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_chestplate_nugget", chestplate, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_leggings_nugget", leggings, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_boots_nugget", boots, nugget) + .checkConfig(Configs.RECIPE_CONFIG) + .setGroup("end_nugget") + .buildWithBlasting(); - // Tool parts from ingots - AnvilRecipe.create(name + "_shovel_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setOutput(shovelHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_pickaxe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setInputCount(3) - .setOutput(pickaxeHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_axe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setInputCount(3) - .setOutput(axeHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_hoe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setInputCount(2) - .setOutput(hoeHead) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_sword_blade") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setOutput(swordBlade) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); - AnvilRecipe.create(name + "_forged_plate") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(ingot) - .setOutput(forgedPlate) - .setAnvilLevel(level) - .setToolLevel(level) - .setDamage(level) - .build(); + // Tool parts from ingots + AnvilRecipe.create(name + "_shovel_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setOutput(shovelHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_pickaxe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setInputCount(3) + .setOutput(pickaxeHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_axe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setInputCount(3) + .setOutput(axeHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_hoe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setInputCount(2) + .setOutput(hoeHead) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_sword_blade") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setOutput(swordBlade) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); + AnvilRecipe.create(name + "_forged_plate") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(ingot) + .setOutput(forgedPlate) + .setAnvilLevel(level) + .setToolLevel(level) + .setDamage(level) + .build(); - // Tools from parts - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hammer") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(hammer) - .setBase(block) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_axe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(axe) - .setBase(axeHead) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_pickaxe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(pickaxe) - .setBase(pickaxeHead) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hoe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(hoe) - .setBase(hoeHead) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword_handle") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(swordHandle) - .setBase(ingot) - .setAddition(Items.STICK) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(sword) - .setBase(swordBlade) - .setAddition(swordHandle) - .build(); - SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_shovel") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(shovel) - .setBase(shovelHead) - .setAddition(Items.STICK) - .build(); + // Tools from parts + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hammer") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(hammer) + .setBase(block) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_axe") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(axe) + .setBase(axeHead) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_pickaxe") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(pickaxe) + .setBase(pickaxeHead) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hoe") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(hoe) + .setBase(hoeHead) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword_handle") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(swordHandle) + .setBase(ingot) + .setAddition(Items.STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(sword) + .setBase(swordBlade) + .setAddition(swordHandle) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_shovel") + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(shovel) + .setBase(shovelHead) + .setAddition(Items.STICK) + .build(); - // Armor crafting - GridRecipe.make(BetterEnd.MOD_ID, name + "_helmet", helmet) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "# #") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_helmets") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_chestplate", chestplate) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("# #", "###", "###") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_chestplates") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_leggings", leggings) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("###", "# #", "# #") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_leggings") - .build(); - GridRecipe.make(BetterEnd.MOD_ID, name + "_boots", boots) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("# #", "# #") - .addMaterial('#', forgedPlate) - .setGroup("end_metal_boots") - .build(); + // Armor crafting + GridRecipe.make(BetterEnd.MOD_ID, name + "_helmet", helmet) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "# #") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_helmets") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_chestplate", chestplate) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("# #", "###", "###") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_chestplates") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_leggings", leggings) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("###", "# #", "# #") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_leggings") + .build(); + GridRecipe.make(BetterEnd.MOD_ID, name + "_boots", boots) + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("# #", "# #") + .addMaterial('#', forgedPlate) + .setGroup("end_metal_boots") + .build(); - TagAPI.addTag(BlockTags.ANVIL, anvilBlock); - TagAPI.addTag(BlockTags.BEACON_BASE_BLOCKS, block); - TagAPI.addTag(ItemTags.BEACON_PAYMENT_ITEMS, ingot); - TagAPI.addTag(TagAPI.BLOCK_DRAGON_IMMUNE, ore, bars); - TagAPI.addTag(TagAPI.ITEM_HAMMERS, hammer); - } + TagAPI.addTag(BlockTags.ANVIL, anvilBlock); + TagAPI.addTag(BlockTags.BEACON_BASE_BLOCKS, block); + TagAPI.addTag(ItemTags.BEACON_PAYMENT_ITEMS, ingot); + TagAPI.addTag(TagAPI.BLOCK_DRAGON_IMMUNE, ore, bars); + TagAPI.addTag(TagAPI.ITEM_HAMMERS, hammer); + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index 36f0ec4aa..c3471b12b 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -19,66 +19,66 @@ import java.util.List; public class NightshadeRedwoods extends EndBiome.Config { - public NightshadeRedwoods() { - super("nightshade_redwoods"); - } + public NightshadeRedwoods() { + super("nightshade_redwoods"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - Biome biome = Integrations.BYG.getBiome("nightshade_forest"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("nightshade_forest"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); - builder.fogColor(140, 108, 47) - .fogDensity(1.5F) - .waterAndFogColor(55, 70, 186) - .foliageColor(122, 17, 155) - .particles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - //TODO: 1.18 surface rules -// .setSurface(biome.getGenerationSettings() -// .getSurfaceBuilder() -// .get()) - .grassColor(48, 13, 89) - .plantsColor(200, 125, 9) - .feature(EndFeatures.END_LAKE_RARE) - .feature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) - .feature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) - .feature(BYGFeatures.NIGHTSHADE_MOSS); + builder.fogColor(140, 108, 47) + .fogDensity(1.5F) + .waterAndFogColor(55, 70, 186) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules +// .setSurface(biome.getGenerationSettings() +// .getSurfaceBuilder() +// .get()) + .grassColor(48, 13, 89) + .plantsColor(200, 125, 9) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) + .feature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) + .feature(BYGFeatures.NIGHTSHADE_MOSS); - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent() - .get(); - SoundEvent music = effects.getBackgroundMusic() - .get() - .getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings() - .get() - .getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings() - .get() - .getSoundEvent(); - builder.loop(loop) - .music(music) - .additions(additions) - .mood(mood); - } - biome.getGenerationSettings() - .features() - .forEach((list) -> { - list.forEach((feature) -> { - builder.feature(Decoration.VEGETAL_DECORATION, feature.get()); - }); - }); + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } + biome.getGenerationSettings() + .features() + .forEach((list) -> { + list.forEach((feature) -> { + builder.feature(Decoration.VEGETAL_DECORATION, feature.get()); + }); + }); - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings() - .getMobs(group) - .unwrap(); - list.forEach((entry) -> { - builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); - }); - } - } + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } + } } diff --git a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java index a654cc835..ac7244545 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -27,91 +27,91 @@ public class OldBulbisGardens extends EndBiome.Config { - public OldBulbisGardens() { - super("old_bulbis_gardens"); - } + public OldBulbisGardens() { + super("old_bulbis_gardens"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); - BiomeSpecialEffects effects = biome.getSpecialEffects(); + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); + BiomeSpecialEffects effects = biome.getSpecialEffects(); - Block ivis = Integrations.BYG.getBlock("ivis_phylium"); -// Block origin = biome.getGenerationSettings() -// .getSurfaceBuilderConfig() -// .getTopMaterial() -// .getBlock(); - builder.fogColor(215, 132, 207) - .fogDensity(1.8F) - .waterAndFogColor(40, 0, 56) - .foliageColor(122, 17, 155) - .particles( - ParticleTypes.REVERSE_PORTAL, - 0.002F - ) - //TODO: 1.18 surface rules - //.surface(ivis, origin) - .feature(EndFeatures.END_LAKE_RARE) - .feature(BYGFeatures.OLD_BULBIS_TREE); + Block ivis = Integrations.BYG.getBlock("ivis_phylium"); +// Block origin = biome.getGenerationSettings() +// .getSurfaceBuilderConfig() +// .getTopMaterial() +// .getBlock(); + builder.fogColor(215, 132, 207) + .fogDensity(1.8F) + .waterAndFogColor(40, 0, 56) + .foliageColor(122, 17, 155) + .particles( + ParticleTypes.REVERSE_PORTAL, + 0.002F + ) + //TODO: 1.18 surface rules + //.surface(ivis, origin) + .feature(EndFeatures.END_LAKE_RARE) + .feature(BYGFeatures.OLD_BULBIS_TREE); - if (BCLib.isClient()) { - SoundEvent loop = effects.getAmbientLoopSoundEvent() - .get(); - SoundEvent music = effects.getBackgroundMusic() - .get() - .getEvent(); - SoundEvent additions = effects.getAmbientAdditionsSettings() - .get() - .getSoundEvent(); - SoundEvent mood = effects.getAmbientMoodSettings() - .get() - .getSoundEvent(); - builder.loop(loop) - .music(music) - .additions(additions) - .mood(mood); - } + if (BCLib.isClient()) { + SoundEvent loop = effects.getAmbientLoopSoundEvent() + .get(); + SoundEvent music = effects.getBackgroundMusic() + .get() + .getEvent(); + SoundEvent additions = effects.getAmbientAdditionsSettings() + .get() + .getSoundEvent(); + SoundEvent mood = effects.getAmbientMoodSettings() + .get() + .getSoundEvent(); + builder.loop(loop) + .music(music) + .additions(additions) + .mood(mood); + } - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings() - .getMobs(group) - .unwrap(); - list.forEach((entry) -> { - builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); - }); - } + for (MobCategory group : MobCategory.values()) { + List list = biome.getMobSettings() + .getMobs(group) + .unwrap(); + list.forEach((entry) -> { + builder.spawn((EntityType) entry.type, 1, entry.minCount, entry.maxCount); + }); + } - List>> features = biome.getGenerationSettings() - .features(); - List> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); - if (vegetal.size() > 2) { - Supplier getter; - // Trees (first two features) - // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) - for (int i = 0; i < 2; i++) { - getter = vegetal.get(i); - PlacedFeature feature = getter.get(); - ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); - feature = Registry.register( - BuiltinRegistries.PLACED_FEATURE, - id, - //TODO: 1.18 Check if this is correct - feature//.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) - ); - builder.feature(Decoration.VEGETAL_DECORATION, feature); - } - // Grasses and other features - for (int i = 2; i < vegetal.size(); i++) { - getter = vegetal.get(i); - PlacedFeature feature = getter.get(); - builder.feature(Decoration.VEGETAL_DECORATION, feature); - } - } + List>> features = biome.getGenerationSettings() + .features(); + List> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); + if (vegetal.size() > 2) { + Supplier getter; + // Trees (first two features) + // I couldn't process them with conditions, so that's why they are hardcoded (paulevs) + for (int i = 0; i < 2; i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); + feature = Registry.register( + BuiltinRegistries.PLACED_FEATURE, + id, + //TODO: 1.18 Check if this is correct + feature//.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1) + ); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + // Grasses and other features + for (int i = 2; i < vegetal.size(); i++) { + getter = vegetal.get(i); + PlacedFeature feature = getter.get(); + builder.feature(Decoration.VEGETAL_DECORATION, feature); + } + } - builder.feature(EndFeatures.PURPLE_POLYPORE) - .feature(BYGFeatures.IVIS_MOSS_WOOD) - .feature(BYGFeatures.IVIS_MOSS) - .feature(BYGFeatures.IVIS_VINE) - .feature(BYGFeatures.IVIS_SPROUT); - } + builder.feature(EndFeatures.PURPLE_POLYPORE) + .feature(BYGFeatures.IVIS_MOSS_WOOD) + .feature(BYGFeatures.IVIS_MOSS) + .feature(BYGFeatures.IVIS_VINE) + .feature(BYGFeatures.IVIS_SPROUT); + } } diff --git a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java index 4d4666097..2813474bb 100644 --- a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java +++ b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java @@ -5,5 +5,5 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public interface StructureFeaturesAccessor { - ConfiguredStructureFeature> getEND_CITY(); + ConfiguredStructureFeature> getEND_CITY(); } diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 1e8380805..5dbf4f2bb 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -58,7 +58,7 @@ private FeaturePlaceContext be_setPosOnGround(FeatureP WorldGenLevel world = featurePlaceContext.level(); BlockPos pos = be_updatePortalPos(world); return new FeaturePlaceContext( - Optional.empty(), + Optional.empty(), world, featurePlaceContext.chunkGenerator(), featurePlaceContext.random(), diff --git a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java index bad4c7813..c3126b2d6 100644 --- a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java +++ b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java @@ -11,9 +11,9 @@ @Mixin(StructureFeatures.class) public class StructureFeaturesMixin implements StructureFeaturesAccessor { - @Shadow @Final private static ConfiguredStructureFeature> END_CITY; + @Shadow @Final private static ConfiguredStructureFeature> END_CITY; - public ConfiguredStructureFeature> getEND_CITY(){ - return END_CITY; - } + public ConfiguredStructureFeature> getEND_CITY(){ + return END_CITY; + } } diff --git a/src/main/java/ru/betterend/recipe/AnvilRecipes.java b/src/main/java/ru/betterend/recipe/AnvilRecipes.java index dde61edb9..55bc83d45 100644 --- a/src/main/java/ru/betterend/recipe/AnvilRecipes.java +++ b/src/main/java/ru/betterend/recipe/AnvilRecipes.java @@ -7,78 +7,78 @@ import ru.betterend.registry.EndItems; public class AnvilRecipes { - public static void register() { - AnvilRecipe.create("ender_pearl_to_dust") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(Items.ENDER_PEARL) - .setOutput(EndItems.ENDER_DUST) - .setToolLevel(4) - .setDamage(5) - .build(); - AnvilRecipe.create("ender_shard_to_dust") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.ENDER_SHARD) - .setOutput(EndItems.ENDER_DUST) - .setToolLevel(0) - .setDamage(3) - .build(); + public static void register() { + AnvilRecipe.create("ender_pearl_to_dust") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(Items.ENDER_PEARL) + .setOutput(EndItems.ENDER_DUST) + .setToolLevel(4) + .setDamage(5) + .build(); + AnvilRecipe.create("ender_shard_to_dust") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.ENDER_SHARD) + .setOutput(EndItems.ENDER_DUST) + .setToolLevel(0) + .setDamage(3) + .build(); - int anvilLevel = EndToolMaterial.AETERNIUM.getLevel(); - AnvilRecipe.create("aeternium_axe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_AXE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_pickaxe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_PICKAXE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_shovel_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_SHOVEL_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_hoe_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_HOE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_hammer_head") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_HAMMER_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(EndToolMaterial.THALLASIUM.getLevel()) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_sword_blade") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_SWORD_BLADE) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - AnvilRecipe.create("aeternium_forged_plate") - .checkConfig(Configs.RECIPE_CONFIG) - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_FORGED_PLATE) - .setAnvilLevel(anvilLevel) - .setToolLevel(anvilLevel) - .setDamage(6) - .build(); - } + int anvilLevel = EndToolMaterial.AETERNIUM.getLevel(); + AnvilRecipe.create("aeternium_axe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_AXE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_pickaxe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_PICKAXE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_shovel_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_SHOVEL_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_hoe_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_HOE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_hammer_head") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_HAMMER_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(EndToolMaterial.THALLASIUM.getLevel()) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_sword_blade") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_SWORD_BLADE) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + AnvilRecipe.create("aeternium_forged_plate") + .checkConfig(Configs.RECIPE_CONFIG) + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_FORGED_PLATE) + .setAnvilLevel(anvilLevel) + .setToolLevel(anvilLevel) + .setDamage(6) + .build(); + } } diff --git a/src/main/java/ru/betterend/rituals/EternalRitual.java b/src/main/java/ru/betterend/rituals/EternalRitual.java index 7bb5e3dad..e10973f84 100644 --- a/src/main/java/ru/betterend/rituals/EternalRitual.java +++ b/src/main/java/ru/betterend/rituals/EternalRitual.java @@ -694,9 +694,9 @@ private static boolean isStateInvalid(BlockState state) { } /** - * @param world World for search - * @param checkPos Start search position - * @param radius Search radius + * @param world World for search + * @param checkPos Start search position + * @param radius Search radius * @param searchBlock Target block * @param condition Predicate for test block states in the chunk section * @return Position of the first found block or null. @@ -733,9 +733,9 @@ public static BlockPos.MutableBlockPos findBlockPos(Level world, BlockPos.Mutabl } /** - * @param world World for search - * @param checkPos Start search position - * @param radius Search radius + * @param world World for search + * @param checkPos Start search position + * @param radius Search radius * @param searchBlock Target block * @param condition Predicate for test block states in the chunk section * @return List of positions of the all found blocks or empty list. diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index c79a0adad..b1d14021f 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -12,42 +12,42 @@ import ru.betterend.world.biome.EndBiome; public class AmberLandBiome extends EndBiome.Config { - public AmberLandBiome() { - super("amber_land"); - } + public AmberLandBiome() { + super("amber_land"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(255, 184, 71) - .fogDensity(2.0F) - .plantsColor(219, 115, 38) - .waterAndFogColor(145, 108, 72) - .music(EndSounds.MUSIC_FOREST) - .loop(EndSounds.AMBIENT_AMBER_LAND) - .particles(EndParticles.AMBER_SPHERE, 0.001F) - .feature(EndFeatures.AMBER_ORE) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.HELIX_TREE) - .feature(EndFeatures.LANCELEAF) - .feature(EndFeatures.GLOW_PILLAR) - .feature(EndFeatures.AMBER_GRASS) - .feature(EndFeatures.AMBER_ROOT) - .feature(EndFeatures.BULB_MOSS) - .feature(EndFeatures.BULB_MOSS_WOOD) - .feature(EndFeatures.CHARNIA_ORANGE) - .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EntityType.ENDERMAN, 50, 1, 4) - .spawn(EndEntities.END_SLIME, 30, 1, 2); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(255, 184, 71) + .fogDensity(2.0F) + .plantsColor(219, 115, 38) + .waterAndFogColor(145, 108, 72) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_AMBER_LAND) + .particles(EndParticles.AMBER_SPHERE, 0.001F) + .feature(EndFeatures.AMBER_ORE) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.HELIX_TREE) + .feature(EndFeatures.LANCELEAF) + .feature(EndFeatures.GLOW_PILLAR) + .feature(EndFeatures.AMBER_GRASS) + .feature(EndFeatures.AMBER_ROOT) + .feature(EndFeatures.BULB_MOSS) + .feature(EndFeatures.BULB_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.END_SLIME, 30, 1, 2); + } - @Override - protected SurfaceMaterialProvider surfaceMaterial() { - return new EndBiome.DefaultSurfaceMaterialProvider() { - @Override - public BlockState getTopMaterial() { - return EndBlocks.AMBER_MOSS.defaultBlockState(); - } - }; - } + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.AMBER_MOSS.defaultBlockState(); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index b24afe2d1..5bea07bbd 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -16,61 +16,61 @@ import java.util.List; public class UmbraValleyBiome extends EndBiome.Config { - public UmbraValleyBiome() { - super("umbra_valley"); - } + public UmbraValleyBiome() { + super("umbra_valley"); + } - @Override - protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(100, 100, 100) - .plantsColor(172, 189, 190) - .waterAndFogColor(69, 104, 134) - .particles(EndParticles.AMBER_SPHERE, 0.0001F) - .loop(EndSounds.UMBRA_VALLEY) - .music(EndSounds.MUSIC_DARK) - .feature(EndFeatures.UMBRALITH_ARCH) - .feature(EndFeatures.THIN_UMBRALITH_ARCH) - .feature(EndFeatures.INFLEXIA) - .feature(EndFeatures.FLAMMALIX); - } + @Override + protected void addCustomBuildData(BCLBiomeBuilder builder) { + builder.fogColor(100, 100, 100) + .plantsColor(172, 189, 190) + .waterAndFogColor(69, 104, 134) + .particles(EndParticles.AMBER_SPHERE, 0.0001F) + .loop(EndSounds.UMBRA_VALLEY) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.UMBRALITH_ARCH) + .feature(EndFeatures.THIN_UMBRALITH_ARCH) + .feature(EndFeatures.INFLEXIA) + .feature(EndFeatures.FLAMMALIX); + } - @Override - protected SurfaceMaterialProvider surfaceMaterial() { - return new EndBiome.DefaultSurfaceMaterialProvider() { - @Override - public BlockState getTopMaterial() { - return EndBlocks.UMBRALITH.stone.defaultBlockState(); - } + @Override + protected SurfaceMaterialProvider surfaceMaterial() { + return new EndBiome.DefaultSurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return EndBlocks.UMBRALITH.stone.defaultBlockState(); + } - @Override - public BlockState getAltTopMaterial() { - return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); - } + @Override + public BlockState getAltTopMaterial() { + return EndBlocks.PALLIDIUM_FULL.defaultBlockState(); + } - @Override - public boolean generateFloorRule() { - return false; - } + @Override + public boolean generateFloorRule() { + return false; + } - @Override - public SurfaceRuleBuilder surface() { - return super - .surface() - .rule(2, - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, - new SwitchRuleSource( - new UmbraSurfaceNoiseCondition(), - List.of( - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - PALLIDIUM_HEAVY, - PALLIDIUM_THIN, - PALLIDIUM_TINY, - SurfaceRules.state(surfaceMaterial().getTopMaterial()) - ) - ) - ) - ); - } - }; - } + @Override + public SurfaceRuleBuilder surface() { + return super + .surface() + .rule(2, + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + new SwitchRuleSource( + new UmbraSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + PALLIDIUM_HEAVY, + PALLIDIUM_THIN, + PALLIDIUM_TINY, + SurfaceRules.state(surfaceMaterial().getTopMaterial()) + ) + ) + ) + ); + } + }; + } } diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 9015529e8..95e7c05ef 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -30,7 +30,7 @@ public boolean place(FeaturePlaceContext featureConfig final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); Biome biome = world.getBiome(pos); - int dist = BlocksHelper.downRay(world, pos, 10) + 1; + int dist = BlocksHelper.downRay(world, pos, 10) + 1; BlockPos surfacePos = new BlockPos(pos.getX(), pos.getY()-dist, pos.getZ()); BlockState topMaterial = EndBiome.findTopMaterial(world, surfacePos);; diff --git a/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java b/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java index c85eb9804..95bb6edbb 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ThinArchFeature.java @@ -23,55 +23,55 @@ import java.util.Random; public class ThinArchFeature extends DefaultFeature { - private Block block; - - public ThinArchFeature(Block block) { - this.block = block; - } - - @Override - public boolean place(FeaturePlaceContext featurePlaceContext) { - final WorldGenLevel world = featurePlaceContext.level(); - BlockPos origin = featurePlaceContext.origin(); - Random random = featurePlaceContext.random(); + private Block block; + + public ThinArchFeature(Block block) { + this.block = block; + } + + @Override + public boolean place(FeaturePlaceContext featurePlaceContext) { + final WorldGenLevel world = featurePlaceContext.level(); + BlockPos origin = featurePlaceContext.origin(); + Random random = featurePlaceContext.random(); - BlockPos pos = getPosOnSurfaceWG(world, new BlockPos((origin.getX() & 0xFFFFFFF0) | 7, 0, (origin.getZ() & 0xFFFFFFF0) | 7)); - if (!world.getBlockState(pos.below(5)).is(TagAPI.BLOCK_GEN_TERRAIN)) { - return false; - } - - SDF sdf = null; - float bigRadius = MHelper.randRange(15F, 20F, random); - float variation = bigRadius * 0.3F; - int count = MHelper.randRange(2, 4, random); - - for (int i = 0; i < count; i++) { - float smallRadius = MHelper.randRange(0.6F, 1.3F, random); - SDF arch = new SDFTorus().setBigRadius(bigRadius - random.nextFloat() * variation).setSmallRadius(smallRadius).setBlock(block); - float angle = (i - count * 0.5F) * 0.3F + random.nextFloat() * 0.05F + (float) Math.PI * 0.5F; - arch = new SDFRotation().setRotation(Vector3f.XP, angle).setSource(arch); - sdf = sdf == null ? arch : new SDFUnion().setSourceA(sdf).setSourceB(arch); - } - - sdf = new SDFRotation().setRotation(MHelper.randomHorizontal(random), random.nextFloat() * MHelper.PI2).setSource(sdf); - - OpenSimplexNoise noise = new OpenSimplexNoise(random.nextLong()); - sdf = new SDFCoordModify().setFunction(vec -> { - float dx = (float) noise.eval(vec.y() * 0.02, vec.z() * 0.02); - float dy = (float) noise.eval(vec.x() * 0.02, vec.z() * 0.02); - float dz = (float) noise.eval(vec.x() * 0.02, vec.y() * 0.02); - vec.add(dx * 10, dy * 10, dz * 10); - }).setSource(sdf); - sdf = new SDFDisplacement().setFunction(vec -> { - float offset = vec.y() / bigRadius - 0.5F; - return Mth.clamp(offset * 3, -10F, 0F); - }).setSource(sdf); - - float side = (bigRadius + 2.5F) * 2; - if (side > 47) { - side = 47; - } - sdf.fillArea(world, pos, AABB.ofSize(Vec3.atCenterOf(pos), side, side, side)); - return true; - } + BlockPos pos = getPosOnSurfaceWG(world, new BlockPos((origin.getX() & 0xFFFFFFF0) | 7, 0, (origin.getZ() & 0xFFFFFFF0) | 7)); + if (!world.getBlockState(pos.below(5)).is(TagAPI.BLOCK_GEN_TERRAIN)) { + return false; + } + + SDF sdf = null; + float bigRadius = MHelper.randRange(15F, 20F, random); + float variation = bigRadius * 0.3F; + int count = MHelper.randRange(2, 4, random); + + for (int i = 0; i < count; i++) { + float smallRadius = MHelper.randRange(0.6F, 1.3F, random); + SDF arch = new SDFTorus().setBigRadius(bigRadius - random.nextFloat() * variation).setSmallRadius(smallRadius).setBlock(block); + float angle = (i - count * 0.5F) * 0.3F + random.nextFloat() * 0.05F + (float) Math.PI * 0.5F; + arch = new SDFRotation().setRotation(Vector3f.XP, angle).setSource(arch); + sdf = sdf == null ? arch : new SDFUnion().setSourceA(sdf).setSourceB(arch); + } + + sdf = new SDFRotation().setRotation(MHelper.randomHorizontal(random), random.nextFloat() * MHelper.PI2).setSource(sdf); + + OpenSimplexNoise noise = new OpenSimplexNoise(random.nextLong()); + sdf = new SDFCoordModify().setFunction(vec -> { + float dx = (float) noise.eval(vec.y() * 0.02, vec.z() * 0.02); + float dy = (float) noise.eval(vec.x() * 0.02, vec.z() * 0.02); + float dz = (float) noise.eval(vec.x() * 0.02, vec.y() * 0.02); + vec.add(dx * 10, dy * 10, dz * 10); + }).setSource(sdf); + sdf = new SDFDisplacement().setFunction(vec -> { + float offset = vec.y() / bigRadius - 0.5F; + return Mth.clamp(offset * 3, -10F, 0F); + }).setSource(sdf); + + float side = (bigRadius + 2.5F) * 2; + if (side > 47) { + side = 47; + } + sdf.fillArea(world, pos, AABB.ofSize(Vec3.atCenterOf(pos), side, side, side)); + return true; + } } diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index 738a67d15..dd27ed415 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -20,54 +20,54 @@ import java.util.Random; public class EternalPortalStructure extends FeatureBaseStructure { - private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); - private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); + private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); + private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); - public EternalPortalStructure() { - super(PieceGeneratorSupplier.simple( - EternalPortalStructure::checkLocation, - EternalPortalStructure::generatePieces - )); - } + public EternalPortalStructure() { + super(PieceGeneratorSupplier.simple( + EternalPortalStructure::checkLocation, + EternalPortalStructure::generatePieces + )); + } - protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { - if (!BCLStructureFeature.isValidBiome(context)) return false; + protected static boolean checkLocation(PieceGeneratorSupplier.Context context) { + if (!BCLStructureFeature.isValidBiome(context)) return false; - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - long x = (long) chunkPos.x * (long) chunkPos.x; - long z = (long) chunkPos.z * (long) chunkPos.z; - if (x + z < 1024L) { - return false; - } - if (chunkGenerator.getBaseHeight( - chunkPos.getBlockX(8), - chunkPos.getBlockZ(8), - Heightmap.Types.WORLD_SURFACE_WG, - levelHeightAccessor - ) < 5) { - return false; - } - return FeatureBaseStructure.checkLocation(context); - } + long x = (long) chunkPos.x * (long) chunkPos.x; + long z = (long) chunkPos.z * (long) chunkPos.z; + if (x + z < 1024L) { + return false; + } + if (chunkGenerator.getBaseHeight( + chunkPos.getBlockX(8), + chunkPos.getBlockZ(8), + Heightmap.Types.WORLD_SURFACE_WG, + levelHeightAccessor + ) < 5) { + return false; + } + return FeatureBaseStructure.checkLocation(context); + } - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - int x = chunkPos.getBlockX(8); - int z = chunkPos.getBlockZ(8); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - structurePiecesBuilder.addPiece(new NBTPiece( - STRUCTURE_ID, - STRUCTURE, - new BlockPos(x, y - 4, z), - random.nextInt(5), - true, - random - )); - } + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + int x = chunkPos.getBlockX(8); + int z = chunkPos.getBlockZ(8); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + structurePiecesBuilder.addPiece(new NBTPiece( + STRUCTURE_ID, + STRUCTURE, + new BlockPos(x, y - 4, z), + random.nextInt(5), + true, + random + )); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index 691c373ea..5db2bacae 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -16,33 +16,32 @@ import java.util.Random; public class MegaLakeSmallStructure extends FeatureBaseStructure { - public MegaLakeSmallStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MegaLakeSmallStructure::generatePieces - )); - } - - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - - - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - if (y > 5) { - float radius = MHelper.randRange(20, 40, random); - float depth = MHelper.randRange(5, 10, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - structurePiecesBuilder.addPiece(piece); - } - - //this.calculateBoundingBox(); - } + public MegaLakeSmallStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeSmallStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + + Biome biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); + if (y > 5) { + float radius = MHelper.randRange(20, 40, random); + float depth = MHelper.randRange(5, 10, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index d8b4159eb..c26342a3d 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -18,34 +18,33 @@ public class MegaLakeStructure extends FeatureBaseStructure { - public MegaLakeStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MegaLakeStructure::generatePieces - )); - } - - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - - if (y > 5) { - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - - float radius = MHelper.randRange(32, 64, random); - float depth = MHelper.randRange(7, 15, random); - LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); - structurePiecesBuilder.addPiece(piece); - } - - //this.calculateBoundingBox(); - } + public MegaLakeStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MegaLakeStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + + if (y > 5) { + Biome biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); + + float radius = MHelper.randRange(32, 64, random); + float depth = MHelper.randRange(7, 15, random); + LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index 642e2eef7..fa75499d2 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -17,39 +17,39 @@ public class MountainStructure extends FeatureBaseStructure { - public MountainStructure() { - super(PieceGeneratorSupplier.simple( - FeatureBaseStructure::checkLocation, - MountainStructure::generatePieces - )); - } - - protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { - final Random random = context.random(); - final ChunkPos chunkPos = context.chunkPos(); - final ChunkGenerator chunkGenerator = context.chunkGenerator(); - final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); - - int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); - int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); - if (y > 5) { - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - - float radius = MHelper.randRange(50, 100, random); - float height = radius * MHelper.randRange(0.8F, 1.2F, random); - CrystalMountainPiece piece = new CrystalMountainPiece( - new BlockPos(x, y, z), - radius, - height, - random, - biome - ); - structurePiecesBuilder.addPiece(piece); - } - - //this.calculateBoundingBox(); - } + public MountainStructure() { + super(PieceGeneratorSupplier.simple( + FeatureBaseStructure::checkLocation, + MountainStructure::generatePieces + )); + } + + protected static void generatePieces(StructurePiecesBuilder structurePiecesBuilder, PieceGenerator.Context context) { + final Random random = context.random(); + final ChunkPos chunkPos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); + if (y > 5) { + //TODO: 1.18 right way to get biome? + Biome biome = chunkGenerator.getNoiseBiome(x, y, z); + + float radius = MHelper.randRange(50, 100, random); + float height = radius * MHelper.randRange(0.8F, 1.2F, random); + CrystalMountainPiece piece = new CrystalMountainPiece( + new BlockPos(x, y, z), + radius, + height, + random, + biome + ); + structurePiecesBuilder.addPiece(piece); + } + + //this.calculateBoundingBox(); + } } diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 25c911691..bd9ecbbf2 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -38,7 +38,7 @@ public CavePiece(StructurePieceSerializationContext type, CompoundTag tag) { } - @Override + @Override public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { int x1 = MHelper.max(this.boundingBox.minX(), blockBox.minX()); int z1 = MHelper.max(this.boundingBox.minZ(), blockBox.minZ()); diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index dc7e3f54b..3e4da424f 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -9,20 +9,20 @@ * Noise source that returns a value in [0, 3] */ public class SulphuricSurfaceNoiseCondition implements NumericProvider { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); - @Override - public int getNumber(SurfaceRulesContextAccessor context) { - final int x = context.getBlockX(); - final int z = context.getBlockZ(); - final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); - if (value < -0.6) return 0; - if (value < -0.3) return 1; - if (value < -0.5) return 2; - return 3; - } + @Override + public int getNumber(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + if (value < -0.6) return 0; + if (value < -0.3) return 1; + if (value < -0.5) return 2; + return 3; + } } diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java index 845e88c72..dfa847ebb 100644 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -9,21 +9,21 @@ * Noise source that returns a value in [0, 4] */ public class UmbraSurfaceNoiseCondition implements NumericProvider { - private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(1512); - @Override - public int getNumber(SurfaceRulesContextAccessor context) { - final int x = context.getBlockX(); - final int z = context.getBlockZ(); - final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); - if (value > 0.4) return 0; - if (value > 0.15) return 1; - if (value > -0.15) return 2; - if (value > -0.4) return 3; - return 4; - } + @Override + public int getNumber(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( + -0.1, + 0.1, + MHelper.RANDOM + ); + if (value > 0.4) return 0; + if (value > 0.15) return 1; + if (value > -0.15) return 2; + if (value > -0.4) return 3; + return 4; + } } diff --git a/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java b/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java index 76d6ad884..fa1783e69 100644 --- a/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java +++ b/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://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, @@ -56,7 +56,7 @@ private ArmorRenderingRegistry() { * Registers a provider for custom armor models for an item. * * @param provider the provider for the model - * @param items the items to be registered for + * @param items the items to be registered for */ public static void registerModel(@Nullable ModelProvider provider, Item... items) { registerModel(provider, Arrays.asList(items)); @@ -66,7 +66,7 @@ public static void registerModel(@Nullable ModelProvider provider, Item... items * Registers a provider for custom armor models for an item. * * @param provider the provider for the model - * @param items the items to be registered for + * @param items the items to be registered for */ public static void registerModel(@Nullable ModelProvider provider, Iterable items) { ArmorRenderingRegistryImpl.registerModel(provider, items); @@ -76,7 +76,7 @@ public static void registerModel(@Nullable ModelProvider provider, Iterable items) { ArmorRenderingRegistryImpl.registerTexture(provider, items); @@ -96,7 +96,7 @@ public static void registerTexture(@Nullable TextureProvider provider, Iterable< * Register simple armor items to use the vanilla armor file name under the mods namespace. * * @param identifier The namespace + path to use for the armor texture location. - * @param items the items to be registered + * @param items the items to be registered */ public static void registerSimpleTexture(ResourceLocation identifier, Item... items) { registerTexture((entity, stack, slot, secondLayer, suffix, defaultTexture) -> { @@ -110,9 +110,9 @@ public static void registerSimpleTexture(ResourceLocation identifier, Item... it /** * Gets the model of the armor piece. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in * @param defaultModel The default model that vanilla provides * @return The model of the armor piece. */ @@ -124,11 +124,11 @@ public static HumanoidModel getArmorModel(LivingEntity entity, Ite /** * Gets the armor texture {@link net.minecraft.resources.ResourceLocation}. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in - * @param secondLayer True if using the second texture layer - * @param suffix The texture suffix, used in vanilla by {@link net.minecraft.world.item.DyeableArmorItem} + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in + * @param secondLayer True if using the second texture layer + * @param suffix The texture suffix, used in vanilla by {@link net.minecraft.world.item.DyeableArmorItem} * @param defaultTexture The default vanilla texture identifier * @return the custom armor texture identifier, return null to use the vanilla ones. Defaulted to the item's registry id. */ @@ -143,9 +143,9 @@ public interface ModelProvider { /** * Gets the model of the armor piece. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in * @param defaultModel The default vanilla armor model * @return The model of the armor piece. Should never be null. */ @@ -158,9 +158,9 @@ public interface TextureProvider { /** * Gets the armor texture {@link net.minecraft.resources.ResourceLocation}. * - * @param entity The entity equipping the armor - * @param stack The item stack of the armor - * @param slot The slot which the armor is in + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in * @param defaultTexture The default vanilla texture identifier * @return the custom armor texture identifier. Should never be null. */ diff --git a/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java b/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java index 5c96d4ad7..ccb6a838a 100644 --- a/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java +++ b/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://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, diff --git a/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java b/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java index 4c4f6e888..5e23e5c4f 100644 --- a/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java +++ b/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://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, diff --git a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java index 62e9adc52..7a26ae46a 100644 --- a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java +++ b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://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, diff --git a/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java b/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java index 719b8f926..32ed410ec 100644 --- a/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java +++ b/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://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, From c2ab690d370ce649e3d2db8f3f00ffb3f54ee579 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 18:11:01 +0300 Subject: [PATCH 59/93] End city new random --- .../ru/betterend/mixin/common/EndCityFeatureMixin.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 241e3d000..e7581297f 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -3,8 +3,8 @@ import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.LegacyRandomSource; import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.XoroshiroRandomSource; import net.minecraft.world.level.levelgen.feature.EndCityFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; @@ -26,9 +26,8 @@ private static void be_isFeatureChunk(PieceGeneratorSupplier.Context Date: Tue, 21 Dec 2021 18:12:31 +0300 Subject: [PATCH 60/93] Updated Enderscape integration --- .../java/ru/betterend/integration/EnderscapeIntegration.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java index 19b088ec5..83099d0cc 100644 --- a/src/main/java/ru/betterend/integration/EnderscapeIntegration.java +++ b/src/main/java/ru/betterend/integration/EnderscapeIntegration.java @@ -36,7 +36,9 @@ public void init() { BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { if (!biomeID.getNamespace().equals("enderscape")) { - BiomeAPI.addBiomeFeatures(biome, scatteredShadowQuartzOre, voidNebuliteOre, nebuliteOre); + BiomeAPI.addBiomeFeature(biome, scatteredShadowQuartzOre); + BiomeAPI.addBiomeFeature(biome, voidNebuliteOre); + BiomeAPI.addBiomeFeature(biome, nebuliteOre); } }); From 1300e1a09b1e887cbacc3f52f873c45174222f63 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 18:18:14 +0300 Subject: [PATCH 61/93] Cave feature adding fix --- src/main/java/ru/betterend/registry/EndFeatures.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index b41b1f829..50f1d2eb2 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -303,14 +303,18 @@ public static void addBiomeFeatures(ResourceLocation id, Biome biome) { return; } - BiomeAPI.addBiomeFeatures(biome, FLAVOLITE_LAYER, THALLASIUM_ORE, ENDER_ORE, CRASHED_SHIP); + BiomeAPI.addBiomeFeature(biome, FLAVOLITE_LAYER); + BiomeAPI.addBiomeFeature(biome, THALLASIUM_ORE); + BiomeAPI.addBiomeFeature(biome, ENDER_ORE); + BiomeAPI.addBiomeFeature(biome, CRASHED_SHIP); BCLBiome bclbiome = BiomeAPI.getBiome(id); boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome); if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) { if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) { // TODO replace caves with carvers - BiomeAPI.addBiomeFeatures(biome, ROUND_CAVE, TUNEL_CAVE); + BiomeAPI.addBiomeFeature(biome, ROUND_CAVE); + BiomeAPI.addBiomeFeature(biome, TUNEL_CAVE); } } From 2f490fa75cd5ca67e56e99d91f11b039be98b142 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 04:47:03 +0300 Subject: [PATCH 62/93] Lib update, ability to use local jars fom libs folder --- .gitignore | 1 + build.gradle | 3 +++ gradle.properties | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 457a96bdb..48acde5a3 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ output/ *.getBlock("log") Convert.class ModelPart.class +libs/ diff --git a/build.gradle b/build.gradle index 772978a6b..93c749efe 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,9 @@ repositories { maven { url "https://maven.shedaniel.me/" } maven { url 'https://jitpack.io' } maven { url 'https://maven.terraformersmc.com/releases' } + flatDir { + dirs 'libs' + } } loom { diff --git a/gradle.properties b/gradle.properties index e213d2658..ff609827c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.4 +bclib_version = 1.1.6 rei_version = 7.0.343 canvas_version = 1.0.+ From 5585d8952c2fc208a6dc454c62c5b0451393fab6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 05:44:44 +0300 Subject: [PATCH 63/93] Umbra valley filler & arches fixes --- .../ru/betterend/registry/EndFeatures.java | 31 ++++++------ .../world/biome/land/UmbraValleyBiome.java | 47 ++++++++++++------- .../surface/UmbraSurfaceNoiseCondition.java | 10 ++-- 3 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 50f1d2eb2..7d9b9bc56 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -14,6 +14,8 @@ import net.minecraft.world.level.levelgen.placement.PlacementModifier; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.api.features.BCLCommonFeatures; +import ru.bclib.api.features.BCLFeatureBuilder; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.DefaultFeature; @@ -21,6 +23,7 @@ import ru.betterend.complexmaterials.StoneMaterial; import ru.betterend.config.Configs; import ru.betterend.world.biome.cave.EndCaveBiome; +import ru.betterend.world.biome.land.UmbraValleyBiome; import ru.betterend.world.features.BiomeIslandFeature; import ru.betterend.world.features.BlueVineFeature; import ru.betterend.world.features.CavePumpkinFeature; @@ -191,7 +194,7 @@ public class EndFeatures { public static final BCLFeature CHARNIA_GREEN = redisterVegetation("charnia_green", new CharniaFeature(EndBlocks.CHARNIA_GREEN), 10); public static final BCLFeature MENGER_SPONGE = redisterVegetation("menger_sponge", new MengerSpongeFeature(5), 1); public static final BCLFeature CHARNIA_RED_RARE = redisterVegetation("charnia_red_rare", new CharniaFeature(EndBlocks.CHARNIA_RED),2); - public static final BCLFeature BIOME_ISLAND = BCLFeature.makeFeatureConfigured(BetterEnd.makeID("overworld_island"), Decoration.RAW_GENERATION, new BiomeIslandFeature()); + public static final BCLFeature BIOME_ISLAND = BCLFeatureBuilder.start(BetterEnd.makeID("overworld_island"), new BiomeIslandFeature()).decoration(Decoration.RAW_GENERATION).build(); public static final BCLFeature FLAMAEA = redisterVegetation("flamaea", new SinglePlantFeature(EndBlocks.FLAMAEA, 12, false, 5), 20); // Terrain // @@ -204,7 +207,7 @@ public class EndFeatures { public static final BCLFeature FLOATING_SPIRE = registerRawGen("floating_spire", new FloatingSpireFeature(), 8); public static final BCLFeature GEYSER = registerRawGen("geyser", new GeyserFeature(), 8); public static final BCLFeature SULPHURIC_LAKE = registerLake("sulphuric_lake", new SulphuricLakeFeature(), 8); - public static final BCLFeature SULPHURIC_CAVE = BCLFeature.makeCountFeature(BetterEnd.makeID("sulphuric_cave"), Decoration.RAW_GENERATION, new SulphuricCaveFeature(), 2); + public static final BCLFeature SULPHURIC_CAVE = BCLCommonFeatures.makeCountFeature(BetterEnd.makeID("sulphuric_cave"), Decoration.RAW_GENERATION, new SulphuricCaveFeature(), 2); public static final BCLFeature ICE_STAR = registerRawGen("ice_star", new IceStarFeature(5, 15, 10, 25), 15); public static final BCLFeature ICE_STAR_SMALL = registerRawGen("ice_star_small", new IceStarFeature(3, 5, 7, 12), 8); public static final BCLFeature SURFACE_VENT = registerChanced("surface_vent", new SurfaceVentFeature(), 4); @@ -212,15 +215,11 @@ public class EndFeatures { public static final BCLFeature OBSIDIAN_PILLAR_BASEMENT = registerChanced("obsidian_pillar_basement", new ObsidianPillarBasementFeature(), 8); public static final BCLFeature OBSIDIAN_BOULDER = registerChanced("obsidian_boulder", new ObsidianBoulderFeature(), 10); public static final BCLFeature FALLEN_PILLAR = registerChanced("fallen_pillar", new FallenPillarFeature(), 20); - public static final BCLFeature TUNEL_CAVE = BCLFeature.makeChunkFeature(BetterEnd.makeID("tunel_cave"), Decoration.RAW_GENERATION, new TunelCaveFeature()); - public static final BCLFeature UMBRALITH_ARCH = registerChanced( - "umbralith_arch", - new ArchFeature( - EndBlocks.UMBRALITH.stone, - //TODO: 1.18 this needs to change to a dynamic block - (pos)->Blocks.END_STONE.defaultBlockState() //UmbraSurfaceBuilder::getSurfaceState - ), - 10); + public static final BCLFeature TUNEL_CAVE = BCLCommonFeatures.makeChunkFeature(BetterEnd.makeID("tunel_cave"), Decoration.RAW_GENERATION, new TunelCaveFeature()); + public static final BCLFeature UMBRALITH_ARCH = registerChanced("umbralith_arch", new ArchFeature( + EndBlocks.UMBRALITH.stone, + pos -> UmbraValleyBiome.getSurface(pos.getX(), pos.getZ()).defaultBlockState() + ), 10); public static final BCLFeature THIN_UMBRALITH_ARCH = registerChanced("thin_umbralith_arch", new ThinArchFeature(EndBlocks.UMBRALITH.stone), 15); // Ores // @@ -269,23 +268,23 @@ public class EndFeatures { public static final DefaultFeature CAVE_PUMPKIN = new CavePumpkinFeature(); private static BCLFeature redisterVegetation(String name, Feature feature, int density) { - return BCLFeature.makeVegetationFeature(BetterEnd.makeID(name), feature, density); + return BCLCommonFeatures.makeVegetationFeature(BetterEnd.makeID(name), feature, density); } private static BCLFeature registerRawGen(String name, Feature feature, int chance) { - return BCLFeature.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance); + return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance); } private static BCLFeature registerLake(String name, Feature feature, int chance) { - return BCLFeature.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance); + return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance); } private static BCLFeature registerChanced(String name, Feature feature, int chance) { - return BCLFeature.makeChancedFeature(BetterEnd.makeID(name), Decoration.SURFACE_STRUCTURES, feature, chance); + return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.SURFACE_STRUCTURES, feature, chance); } private static BCLFeature registerOre(String name, Block blockOre, int veins, int veinSize, int minY, int maxY) { - return BCLFeature.makeOreFeature(BetterEnd.makeID(name), blockOre, Blocks.END_STONE, veins, veinSize, minY, maxY); + return BCLCommonFeatures.makeOreFeature(BetterEnd.makeID(name), blockOre, Blocks.END_STONE, veins, veinSize, minY, maxY); } private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) { diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index 5bea07bbd..cb7a086d2 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -1,5 +1,6 @@ package ru.betterend.world.biome.land; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; @@ -16,6 +17,14 @@ import java.util.List; public class UmbraValleyBiome extends EndBiome.Config { + private static final Block[] SURFACE_BLOCKS = new Block[] { + EndBlocks.PALLIDIUM_FULL, + EndBlocks.PALLIDIUM_HEAVY, + EndBlocks.PALLIDIUM_THIN, + EndBlocks.PALLIDIUM_TINY, + EndBlocks.UMBRALITH.stone + }; + public UmbraValleyBiome() { super("umbra_valley"); } @@ -41,6 +50,11 @@ protected SurfaceMaterialProvider surfaceMaterial() { public BlockState getTopMaterial() { return EndBlocks.UMBRALITH.stone.defaultBlockState(); } + + @Override + public BlockState getUnderMaterial() { + return EndBlocks.UMBRALITH.stone.defaultBlockState(); + } @Override public BlockState getAltTopMaterial() { @@ -54,23 +68,24 @@ public boolean generateFloorRule() { @Override public SurfaceRuleBuilder surface() { - return super - .surface() - .rule(2, - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, - new SwitchRuleSource( - new UmbraSurfaceNoiseCondition(), - List.of( - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - PALLIDIUM_HEAVY, - PALLIDIUM_THIN, - PALLIDIUM_TINY, - SurfaceRules.state(surfaceMaterial().getTopMaterial()) - ) - ) - ) - ); + return super.surface() + .rule(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + new SwitchRuleSource( + new UmbraSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + PALLIDIUM_HEAVY, + PALLIDIUM_THIN, + PALLIDIUM_TINY, + SurfaceRules.state(surfaceMaterial().getTopMaterial()) + ) + ) + )); } }; } + + public static Block getSurface(int x, int z) { + return SURFACE_BLOCKS[UmbraSurfaceNoiseCondition.getDepth(x, z)]; + } } diff --git a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java index dfa847ebb..83fea882b 100644 --- a/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/UmbraSurfaceNoiseCondition.java @@ -15,11 +15,11 @@ public class UmbraSurfaceNoiseCondition implements NumericProvider { public int getNumber(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); - final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); + return getDepth(x, z); + } + + public static int getDepth(int x, int z) { + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange(-0.1, 0.1, MHelper.RANDOM); if (value > 0.4) return 0; if (value > 0.15) return 1; if (value > -0.15) return 2; From 064c8509e2eb14b9052c67fa18a01eab3c91c384 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 06:29:33 +0300 Subject: [PATCH 64/93] Plant distribution fix --- src/main/java/ru/betterend/registry/EndFeatures.java | 3 ++- .../ru/betterend/world/biome/land/DustWastelandsBiome.java | 3 +-- src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java | 3 +-- .../java/ru/betterend/world/biome/land/MegalakeGroveBiome.java | 3 +-- .../ru/betterend/world/biome/land/SulphurSpringsBiome.java | 3 +-- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 7d9b9bc56..fde80e79c 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -268,7 +268,8 @@ public class EndFeatures { public static final DefaultFeature CAVE_PUMPKIN = new CavePumpkinFeature(); private static BCLFeature redisterVegetation(String name, Feature feature, int density) { - return BCLCommonFeatures.makeVegetationFeature(BetterEnd.makeID(name), feature, density); + ResourceLocation id = BetterEnd.makeID(name); + return BCLFeatureBuilder.start(id, feature).countLayersMax(density).onlyInBiome().build(); } private static BCLFeature registerRawGen(String name, Feature feature, int chance) { diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index cd14af8a9..1037f7be8 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -19,8 +19,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { builder.fogColor(226, 239, 168) .fogDensity(2) .waterAndFogColor(192, 180, 131) - //TODO: 1.18 removed - //.depth(1.5F) + .terrainHeight(1.5F) .particles(ParticleTypes.WHITE_ASH, 0.01F) .loop(EndSounds.AMBIENT_DUST_WASTELANDS) .music(EndSounds.MUSIC_OPENSPACE) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index e99aeb207..c197dfae3 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -25,8 +25,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .fogDensity(1.75F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE) - //TODO: 1.18 removed - //.depth(0F) + .terrainHeight(0F) .feature(EndFeatures.END_LOTUS) .feature(EndFeatures.END_LOTUS_LEAF) .feature(EndFeatures.BUBBLE_CORAL_RARE) diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 107057763..14e09e1cf 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -27,8 +27,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .particles(EndParticles.GLOWING_SPHERE, 0.001F) .music(EndSounds.MUSIC_WATER) .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - //TODO: 1.18 removed - //.depth(0F) + .terrainHeight(0F) .feature(EndFeatures.LACUGROVE) .feature(EndFeatures.END_LOTUS) .feature(EndFeatures.END_LOTUS_LEAF) diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 467021317..9a4b7236d 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -37,8 +37,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .waterFogColor(30, 65, 61) .fogColor(207, 194, 62) .fogDensity(1.5F) - //TODO: 1.18 removed - //.depth(0F) + .terrainHeight(0F) .particles(EndParticles.SULPHUR_PARTICLE, 0.001F) .feature(EndFeatures.GEYSER) .feature(EndFeatures.SURFACE_VENT) From 5f516ac2a090f722db5c783d32f2256f99c9a9d6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 06:41:20 +0300 Subject: [PATCH 65/93] Lake generation fixes --- .../world/structures/piece/LakePiece.java | 35 ++++++------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 2588ddd34..5a812c4bf 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -108,7 +108,7 @@ public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkG double x3 = MHelper.sqr(x2 + noise.eval(nx, nz, 100) * 10); double z3 = MHelper.sqr(z2 + noise.eval(nx, nz, -100) * 10); - for (int y = minY; y <= maxY; y++) { + for (int y = maxY; y >= minY; y--) { mut.setY((int) (y + n)); double y2 = MHelper.sqr((y - center.getY()) * aspect); double r2 = radius * clamp; @@ -132,15 +132,10 @@ else if (dist <= r3 && mut.getY() < center.getY()) { )) { state = chunk.getBlockState(mut.above()); if (state.isAir()) { - state = EndBiome.findTopMaterial(world, worldPos); -// state = random.nextBoolean() ? ENDSTONE : world.getBiome(worldPos) -// .getGenerationSettings() -// .getSurfaceBuilderConfig() -// .getTopMaterial(); + state = random.nextBoolean() ? ENDSTONE : EndBiome.findTopMaterial(world, worldPos); } else { - state = state.getFluidState() - .isEmpty() ? ENDSTONE : EndBlocks.ENDSTONE_DUST.defaultBlockState(); + state = state.getFluidState().isEmpty() ? ENDSTONE : EndBlocks.ENDSTONE_DUST.defaultBlockState(); } chunk.setBlockState(mut, state, false); } @@ -168,15 +163,10 @@ private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mu BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - bState = EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); -// bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) -// .getGenerationSettings() -// .getSurfaceBuilderConfig() -// .getTopMaterial(); + bState = random.nextBoolean() ? ENDSTONE : EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); } else { - bState = bState.getFluidState() - .isEmpty() ? ENDSTONE : EndBlocks.ENDSTONE_DUST.defaultBlockState(); + bState = bState.getFluidState().isEmpty() ? ENDSTONE : EndBlocks.ENDSTONE_DUST.defaultBlockState(); } mut.setY(y); @@ -191,15 +181,10 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { mut.setY(y + 1); BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { - bState =EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); -// bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)) -// .getGenerationSettings() -// .getSurfaceBuilderConfig() -// .getTopMaterial(); + bState = random.nextBoolean() ? ENDSTONE : EndBiome.findTopMaterial(world, mut.offset(sx, 0, sz)); } else { - bState = bState.getFluidState() - .isEmpty() ? ENDSTONE : EndBlocks.ENDSTONE_DUST.defaultBlockState(); + bState = bState.getFluidState().isEmpty() ? ENDSTONE : EndBlocks.ENDSTONE_DUST.defaultBlockState(); } mut.setY(y); makeEndstonePillar(chunk, mut, bState); @@ -209,10 +194,12 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { } else if (chunk.getBlockState(mut.move(Direction.UP)).isAir()) { //TODO: 1.18 test if this is thr right tick - chunk.markPosForPostprocessing(mut.move(Direction.DOWN)); -// /*chunk.getLiquidTicks()*/world.scheduleTick(mut.move(Direction.DOWN), state.getType(), 0); + chunk.markPosForPostprocessing(mut.move(Direction.DOWN).immutable()); } } + else if (chunk.getBlockState(mut).isRandomlyTicking()) { + chunk.markPosForPostprocessing(mut.immutable()); + } } } } From 800bf72faf2732505fb37c3f2688374f12561242 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 06:43:57 +0300 Subject: [PATCH 66/93] Feature fixes --- .../world/structures/features/MountainStructure.java | 4 +--- .../world/structures/features/PaintedMountainStructure.java | 4 +--- .../java/ru/betterend/world/structures/piece/LakePiece.java | 1 - 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index fa75499d2..34359e0f2 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -34,9 +34,7 @@ protected static void generatePieces(StructurePiecesBuilder structurePiecesBuild int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 5) { - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - + Biome biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.8F, 1.2F, random); CrystalMountainPiece piece = new CrystalMountainPiece( diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index f94714359..3b58fbb98 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -38,9 +38,7 @@ protected static void generatePieces(StructurePiecesBuilder structurePiecesBuild int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 50) { - //TODO: 1.18 right way to get biome? - Biome biome = chunkGenerator.getNoiseBiome(x, y, z); - + Biome biome = chunkGenerator.getNoiseBiome(x >> 2, y >> 2, z >> 2); float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); int count = MHelper.floor(height * MHelper.randRange(0.1F, 0.35F, random) + 1); diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 5a812c4bf..4a582e274 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -193,7 +193,6 @@ else if (x > 1 && x < 15 && z > 1 && z < 15) { } } else if (chunk.getBlockState(mut.move(Direction.UP)).isAir()) { - //TODO: 1.18 test if this is thr right tick chunk.markPosForPostprocessing(mut.move(Direction.DOWN).immutable()); } } From 2c819071a5e3f341675dce06a294fb7f42725c01 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 07:06:01 +0300 Subject: [PATCH 67/93] Biome setting in caves --- .../world/features/terrain/caves/EndCaveFeature.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 9505cdaea..dd0403eae 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -153,11 +153,7 @@ protected void setBiomes(WorldGenLevel world, EndCaveBiome biome, Set } protected void setBiome(WorldGenLevel world, BlockPos pos, EndCaveBiome biome) { - //TODO: 1.18 No longer implemented in BCLib -// BiomeSetter array = (BiomeSetter) world.getChunk(pos).getBiomes(); -// if (array != null) { -// array.bclib_setBiome(biome.getActualBiome(), pos); -// } + BiomeAPI.setBiome(world, pos, biome.getActualBiome()); } private BlockPos findPos(WorldGenLevel world, BlockPos pos, int radius, Random random) { From 6bd2a08726588cdd2724ea1e99a7831ab0a1ba8d Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 07:10:58 +0300 Subject: [PATCH 68/93] Cave floor generation --- .../ru/betterend/world/features/terrain/EndLakeFeature.java | 4 ---- .../world/features/terrain/caves/EndCaveFeature.java | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 591c412d5..7a9b7dba9 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -129,10 +129,6 @@ public boolean place(FeaturePlaceContext featureConfig pos = POS.below(); if (world.getBlockState(pos).is(TagAPI.BLOCK_GEN_TERRAIN)) { state = EndBiome.findTopMaterial(world, pos); - //state = world.getBiome(pos) -// .getGenerationSettings() -// .getSurfaceBuilderConfig() -// .getTopMaterial(); if (y > waterLevel + 1) BlocksHelper.setWithoutUpdate(world, pos, state); else if (y > waterLevel) BlocksHelper.setWithoutUpdate( diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index dd0403eae..cb3cbee9f 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -22,6 +22,7 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.registry.EndBiomes; import ru.betterend.util.BlockFixer; +import ru.betterend.world.biome.EndBiome; import ru.betterend.world.biome.cave.EndCaveBiome; import java.util.List; @@ -75,7 +76,7 @@ public boolean place(FeaturePlaceContext featureConfig } }); - BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); //biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); + BlockState surfaceBlock = EndBiome.findTopMaterial(biome); placeFloor(world, biome, floorPositions, random, surfaceBlock); placeCeil(world, biome, ceilPositions, random); placeWalls(world, biome, caveBlocks, random); From d0b23a9c9f1123dd7c6623c5da571a99a482cc84 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 09:37:50 +0300 Subject: [PATCH 69/93] Tunnel caves fixes --- .../world/features/terrain/caves/EndCaveFeature.java | 3 +-- .../world/features/terrain/caves/RoundCaveFeature.java | 8 ++++---- .../world/features/terrain/caves/TunelCaveFeature.java | 7 ++----- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index cb3cbee9f..c0f202cfe 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -128,8 +128,7 @@ protected void placeWalls(WorldGenLevel world, EndCaveBiome biome, Set if (wallBlock != null) { for (Vec3i offset : SPHERE) { BlockPos wallPos = pos.offset(offset); - if (!positions.contains(wallPos) && !placed.contains(wallPos) && world.getBlockState(wallPos) - .is(TagAPI.BLOCK_GEN_TERRAIN)) { + if (!positions.contains(wallPos) && !placed.contains(wallPos) && world.getBlockState(wallPos).is(TagAPI.BLOCK_GEN_TERRAIN)) { wallBlock = biome.getWall(wallPos); BlocksHelper.setWithoutUpdate(world, wallPos, wallBlock); placed.add(wallPos); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java index 35c5c35c5..07afd22da 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java @@ -74,9 +74,9 @@ protected Set generate(WorldGenLevel world, BlockPos center, int radiu } private boolean isReplaceable(BlockState state) { - return state.is(TagAPI.BLOCK_GEN_TERRAIN) || state.getMaterial().isReplaceable() || state.getMaterial() - .equals(Material.PLANT) || state - .getMaterial() - .equals(Material.LEAVES); + return state.is(TagAPI.BLOCK_GEN_TERRAIN) || + state.getMaterial().isReplaceable() || + state.getMaterial().equals(Material.PLANT) || + state.getMaterial().equals(Material.LEAVES); } } diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 8f95755d6..7b23abb4d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -21,6 +21,7 @@ import ru.bclib.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; +import ru.betterend.world.biome.EndBiome; import ru.betterend.world.biome.cave.EndCaveBiome; import java.util.Map; @@ -167,11 +168,7 @@ else if (world.getBlockState(mut).getMaterial().isReplaceable()) { } floorSets.forEach((biome, floorPositions) -> { - BlockState surfaceBlock = Blocks.END_STONE.defaultBlockState(); -// BlockState surfaceBlock = biome.getBiome() -// .getGenerationSettings() -// .getSurfaceBuilderConfig() -// .getTopMaterial(); + BlockState surfaceBlock = EndBiome.findTopMaterial(biome); placeFloor(world, biome, floorPositions, random, surfaceBlock); }); ceilSets.forEach((biome, ceilPositions) -> { From affd63646a825f8ed4f75a76f7141783d4ab91dc Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 09:47:34 +0300 Subject: [PATCH 70/93] Tree fixes --- .../java/ru/betterend/registry/EndFeatures.java | 2 +- .../world/features/trees/DragonTreeFeature.java | 7 ++++--- .../features/trees/GiganticAmaranitaFeature.java | 6 +++--- .../world/features/trees/HelixTreeFeature.java | 4 ++-- .../world/features/trees/JellyshroomFeature.java | 5 +++-- .../world/features/trees/LacugroveFeature.java | 7 ++++--- .../world/features/trees/LucerniaFeature.java | 7 ++++--- .../features/trees/MossyGlowshroomFeature.java | 5 ++--- .../features/trees/PythadendronTreeFeature.java | 5 ++--- .../world/features/trees/TenaneaFeature.java | 8 ++++---- .../world/features/trees/UmbrellaTreeFeature.java | 15 ++++++--------- 11 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index fde80e79c..5452ed843 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -277,7 +277,7 @@ private static BCLFeature registerRawGen(String name, Feature feature, int chance) { - return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.RAW_GENERATION, feature, chance); + return BCLCommonFeatures.makeChancedFeature(BetterEnd.makeID(name), Decoration.LAKES, feature, chance); } private static BCLFeature registerChanced(String name, Feature feature, int chance) { diff --git a/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java index 88b0932ce..6a46e8250 100644 --- a/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java @@ -5,6 +5,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; @@ -45,7 +46,7 @@ public boolean place(FeaturePlaceContext featureConfig final Random random = featureConfig.random(); final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; float size = MHelper.randRange(10, 25, random); List spline = SplineHelper.makeSpline(0, 0, 0, 0, size, 0, 6); @@ -195,9 +196,9 @@ private void leavesBall(WorldGenLevel world, BlockPos pos, float radius, Random static { REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND)) { + /*if (state.is(TagAPI.BLOCK_END_GROUND)) { return true; - } + }*/ if (state.getBlock() == EndBlocks.DRAGON_TREE_LEAVES) { return true; } diff --git a/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java b/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java index ad793ad1f..040c678b7 100644 --- a/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java @@ -6,13 +6,13 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.AxisDirection; +import net.minecraft.tags.BlockTags; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.TagAPI; import ru.bclib.blocks.BaseAttachedBlock; import ru.bclib.sdf.PosInfo; import ru.bclib.sdf.SDF; @@ -36,7 +36,7 @@ public boolean place(FeaturePlaceContext featureConfig final Random random = featureConfig.random(); final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; float size = MHelper.randRange(5, 10, random); List spline = SplineHelper.makeSpline(0, 0, 0, 0, size, 0, 5); @@ -361,7 +361,7 @@ else if (radius < 4) { static { REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND) || state.getMaterial().equals(Material.PLANT)) { + if (/*state.is(TagAPI.BLOCK_END_GROUND) || */state.getMaterial().equals(Material.PLANT)) { return true; } return state.getMaterial().isReplaceable(); diff --git a/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java index 6739c527f..50829f041 100644 --- a/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java @@ -3,13 +3,13 @@ import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; +import net.minecraft.tags.BlockTags; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.phys.AABB; -import ru.bclib.api.TagAPI; import ru.bclib.sdf.PosInfo; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFRotation; @@ -37,7 +37,7 @@ public boolean place(FeaturePlaceContext featureConfig final Random random = featureConfig.random(); final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; BlocksHelper.setWithoutUpdate(world, pos, AIR); float angle = random.nextFloat() * MHelper.PI2; diff --git a/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java b/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java index 20b1f7385..696bfeda8 100644 --- a/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java @@ -3,6 +3,7 @@ import com.google.common.collect.Lists; import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; @@ -36,7 +37,7 @@ public boolean place(FeaturePlaceContext featureConfig final Random random = featureConfig.random(); final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; BlockState bark = EndBlocks.JELLYSHROOM.getBark().defaultBlockState(); BlockState membrane = EndBlocks.JELLYSHROOM_CAP_PURPLE.defaultBlockState(); @@ -122,7 +123,7 @@ private SDF makeCap(float radius, Random random, BlockState cap) { SplineHelper.offset(ROOT, new Vector3f(0, -0.45F, 0)); REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND) || state.getMaterial().equals(Material.PLANT)) { + if (/*state.is(TagAPI.BLOCK_END_GROUND) || */state.getMaterial().equals(Material.PLANT)) { return true; } return state.getMaterial().isReplaceable(); diff --git a/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java b/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java index 953a33a00..50d726307 100644 --- a/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java @@ -4,6 +4,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; @@ -38,7 +39,7 @@ public boolean place(FeaturePlaceContext featureConfig final Random random = featureConfig.random(); final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; float size = MHelper.randRange(15, 25, random); List spline = SplineHelper.makeSpline(0, 0, 0, 0, size, 0, 6); @@ -188,9 +189,9 @@ private void leavesBall(WorldGenLevel world, BlockPos pos, float radius, Random static { REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND)) { + /*if (state.is(TagAPI.BLOCK_END_GROUND)) { return true; - } + }*/ if (EndBlocks.LACUGROVE.isTreeLog(state)) { return true; } diff --git a/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java b/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java index 50cfb4872..f1145e30f 100644 --- a/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java @@ -5,6 +5,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; @@ -46,7 +47,7 @@ public boolean place(FeaturePlaceContext featureConfig final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); final NoneFeatureConfiguration config = featureConfig.config(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; float size = MHelper.randRange(12, 20, random); int count = (int) (size * 0.3F); @@ -194,9 +195,9 @@ private void makeRoots(WorldGenLevel world, BlockPos pos, float radius, Random r static { REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND)) { + /*if (state.is(TagAPI.BLOCK_END_GROUND)) { return true; - } + }*/ if (state.getBlock() == EndBlocks.LUCERNIA_LEAVES) { return true; } diff --git a/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java index 72b9f8658..cdbc29c39 100644 --- a/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java @@ -8,7 +8,6 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.TagAPI; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFBinary; import ru.bclib.sdf.operator.SDFCoordModify; @@ -172,9 +171,9 @@ else if (info.getState().getBlock() == EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE) { .setSourceB(new SDFUnion().setSourceA(HEAD_POS).setSourceB(ROOTS_ROT)); REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND)) { + /*if (state.is(TagAPI.BLOCK_END_GROUND)) { return true; - } + }*/ if (state.getMaterial().equals(Material.PLANT)) { return true; } diff --git a/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java index 96ad51f79..087a19030 100644 --- a/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java @@ -10,7 +10,6 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.TagAPI; import ru.bclib.sdf.PosInfo; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFDisplacement; @@ -188,9 +187,9 @@ private void leavesBall(WorldGenLevel world, BlockPos pos, Random random, OpenSi static { REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND)) { + /*if (state.is(TagAPI.BLOCK_END_GROUND)) { return true; - } + }*/ if (state.getBlock() == EndBlocks.PYTHADENDRON_LEAVES) { return true; } diff --git a/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java b/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java index 596248e34..01aa5d650 100644 --- a/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java @@ -5,13 +5,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; -import ru.bclib.api.TagAPI; import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties.TripleShape; import ru.bclib.sdf.SDF; @@ -44,7 +44,7 @@ public boolean place(FeaturePlaceContext featureConfig final Random random = featureConfig.random(); final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; float size = MHelper.randRange(7, 10, random); int count = (int) (size * 0.45F); @@ -175,9 +175,9 @@ private void leavesBall(WorldGenLevel world, BlockPos pos, float radius, Random static { REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND)) { + /*if (state.is(TagAPI.BLOCK_END_GROUND)) { return true; - } + }*/ if (state.getBlock() == EndBlocks.TENANEA_LEAVES) { return true; } diff --git a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java index bf38fb951..e37207cd5 100644 --- a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java @@ -5,6 +5,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; @@ -44,15 +45,12 @@ public boolean place(FeaturePlaceContext featureConfig final BlockPos pos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); final NoneFeatureConfiguration config = featureConfig.config(); - if (!world.getBlockState(pos.below()).is(TagAPI.BLOCK_END_GROUND)) return false; + if (!world.getBlockState(pos.below()).is(BlockTags.NYLIUM)) return false; BlockState wood = EndBlocks.UMBRELLA_TREE.getBark().defaultBlockState(); - BlockState membrane = EndBlocks.UMBRELLA_TREE_MEMBRANE.defaultBlockState() - .setValue(UmbrellaTreeMembraneBlock.COLOR, 1); - BlockState center = EndBlocks.UMBRELLA_TREE_MEMBRANE.defaultBlockState() - .setValue(UmbrellaTreeMembraneBlock.COLOR, 0); - BlockState fruit = EndBlocks.UMBRELLA_TREE_CLUSTER.defaultBlockState() - .setValue(UmbrellaTreeClusterBlock.NATURAL, true); + BlockState membrane = EndBlocks.UMBRELLA_TREE_MEMBRANE.defaultBlockState().setValue(UmbrellaTreeMembraneBlock.COLOR, 1); + BlockState center = EndBlocks.UMBRELLA_TREE_MEMBRANE.defaultBlockState().setValue(UmbrellaTreeMembraneBlock.COLOR, 0); + BlockState fruit = EndBlocks.UMBRELLA_TREE_CLUSTER.defaultBlockState().setValue(UmbrellaTreeClusterBlock.NATURAL, true); float size = MHelper.randRange(10, 20, random); int count = (int) (size * 0.15F); @@ -220,8 +218,7 @@ private void makeFruits(WorldGenLevel world, double px, double py, double pz, Bl SplineHelper.offset(ROOT, new Vector3f(0, -0.45F, 0)); REPLACE = (state) -> { - if (state.is(TagAPI.BLOCK_END_GROUND) || state.getMaterial() - .equals(Material.PLANT) || state.is(EndBlocks.UMBRELLA_TREE_MEMBRANE)) { + if (/*state.is(TagAPI.BLOCK_END_GROUND) || */state.getMaterial().equals(Material.PLANT) || state.is(EndBlocks.UMBRELLA_TREE_MEMBRANE)) { return true; } return state.getMaterial().isReplaceable(); From 54258d38e33cde7783e94f31d579522e1ecd0c54 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 10:16:02 +0300 Subject: [PATCH 71/93] Erosion with fixes --- .../blocks/MossyGlowshroomCapBlock.java | 23 +- .../ru/betterend/util/StructureErode.java | 273 ++++++++++++++++++ .../world/features/CrashedShipFeature.java | 3 +- .../terrain/SulphuricCaveFeature.java | 4 +- .../world/structures/piece/NBTPiece.java | 9 +- 5 files changed, 297 insertions(+), 15 deletions(-) create mode 100644 src/main/java/ru/betterend/util/StructureErode.java diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java index 3320e2ef0..3fbf69b2c 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java @@ -2,6 +2,8 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.tags.Tag.Named; +import net.minecraft.world.item.Item; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SoundType; @@ -9,26 +11,35 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.material.Material; +import ru.bclib.api.TagAPI; import ru.bclib.blocks.BaseBlock; +import ru.bclib.interfaces.TagProvider; import ru.betterend.registry.EndBlocks; -public class MossyGlowshroomCapBlock extends BaseBlock { +import java.util.List; + +public class MossyGlowshroomCapBlock extends BaseBlock implements TagProvider { public static final BooleanProperty TRANSITION = EndBlockProperties.TRANSITION; public MossyGlowshroomCapBlock() { - super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).sound(SoundType.WOOD)); + super(FabricBlockSettings.of(Material.WOOD).sound(SoundType.WOOD)); this.registerDefaultState(this.stateDefinition.any().setValue(TRANSITION, false)); } public BlockState getStateForPlacement(BlockPlaceContext ctx) { return this.defaultBlockState() - .setValue( - TRANSITION, - EndBlocks.MOSSY_GLOWSHROOM.isTreeLog(ctx.getLevel().getBlockState(ctx.getClickedPos().below())) - ); + .setValue( + TRANSITION, + EndBlocks.MOSSY_GLOWSHROOM.isTreeLog(ctx.getLevel().getBlockState(ctx.getClickedPos().below())) + ); } protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(TRANSITION); } + + @Override + public void addTags(List> blockTags, List> itemTags) { + blockTags.add(TagAPI.MINEABLE_AXE); + } } diff --git a/src/main/java/ru/betterend/util/StructureErode.java b/src/main/java/ru/betterend/util/StructureErode.java new file mode 100644 index 000000000..3da5858dc --- /dev/null +++ b/src/main/java/ru/betterend/util/StructureErode.java @@ -0,0 +1,273 @@ +package ru.betterend.util; + +import com.google.common.collect.Sets; +import net.minecraft.core.BlockPos; +import net.minecraft.core.BlockPos.MutableBlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.material.Material; +import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.util.BlocksHelper; +import ru.bclib.util.MHelper; + +import java.util.Random; +import java.util.Set; + +public class StructureErode { + private static final Direction[] DIR = BlocksHelper.makeHorizontal(); + + public static void erode(WorldGenLevel world, BoundingBox bounds, int iterations, Random random) { + MutableBlockPos mut = new MutableBlockPos(); + boolean canDestruct = true; + for (int i = 0; i < iterations; i++) { + for (int x = bounds.minX(); x <= bounds.maxX(); x++) { + mut.setX(x); + for (int z = bounds.minZ(); z <= bounds.maxZ(); z++) { + mut.setZ(z); + for (int y = bounds.maxY(); y >= bounds.minY(); y--) { + mut.setY(y); + BlockState state = world.getBlockState(mut); + boolean ignore = ignore(state, world, mut); + if (canDestruct && BlocksHelper.isInvulnerable( + state, + world, + mut + ) && random.nextInt(8) == 0 && world.isEmptyBlock(mut.below(2))) { + int r = MHelper.randRange(1, 4, random); + int cx = mut.getX(); + int cy = mut.getY(); + int cz = mut.getZ(); + int x1 = cx - r; + int y1 = cy - r; + int z1 = cz - r; + int x2 = cx + r; + int y2 = cy + r; + int z2 = cz + r; + for (int px = x1; px <= x2; px++) { + int dx = px - cx; + dx *= dx; + mut.setX(px); + for (int py = y1; py <= y2; py++) { + int dy = py - cy; + dy *= dy; + mut.setY(py); + for (int pz = z1; pz <= z2; pz++) { + int dz = pz - cz; + dz *= dz; + mut.setZ(pz); + if (dx + dy + dz <= r && BlocksHelper.isInvulnerable( + world.getBlockState(mut), + world, + mut + )) { + BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); + } + } + } + } + mut.setX(cx); + mut.setY(cy); + mut.setZ(cz); + canDestruct = false; + continue; + } + else if (ignore) { + continue; + } + if (!state.isAir() && random.nextBoolean()) { + MHelper.shuffle(DIR, random); + for (Direction dir : DIR) { + if (world.isEmptyBlock(mut.relative(dir)) && world.isEmptyBlock(mut.below() + .relative(dir))) { + BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); + mut.move(dir).move(Direction.DOWN); + for (int py = mut.getY(); y >= bounds.minY() - 10; y--) { + mut.setY(py - 1); + if (!world.isEmptyBlock(mut)) { + mut.setY(py); + BlocksHelper.setWithoutUpdate(world, mut, state); + break; + } + } + } + } + break; + } + else if (random.nextInt(8) == 0 && !BlocksHelper.isInvulnerable( + world.getBlockState(mut.above()), + world, + mut + )) { + BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); + } + } + } + } + } + for (int x = bounds.minX(); x <= bounds.maxX(); x++) { + mut.setX(x); + for (int z = bounds.minZ(); z <= bounds.maxZ(); z++) { + mut.setZ(z); + for (int y = bounds.maxY(); y >= bounds.minY(); y--) { + mut.setY(y); + BlockState state = world.getBlockState(mut); + if (!ignore(state, world, mut) && world.isEmptyBlock(mut.below())) { + BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); + for (int py = mut.getY(); py >= bounds.minY() - 10; py--) { + mut.setY(py - 1); + if (!world.isEmptyBlock(mut)) { + mut.setY(py); + BlocksHelper.setWithoutUpdate(world, mut, state); + break; + } + } + } + } + } + } + } + + public static void erodeIntense(WorldGenLevel world, BoundingBox bounds, Random random) { + MutableBlockPos mut = new MutableBlockPos(); + MutableBlockPos mut2 = new MutableBlockPos(); + int minY = bounds.minY() - 10; + for (int x = bounds.minX(); x <= bounds.maxX(); x++) { + mut.setX(x); + for (int z = bounds.minZ(); z <= bounds.maxZ(); z++) { + mut.setZ(z); + for (int y = bounds.maxY(); y >= bounds.minY(); y--) { + mut.setY(y); + BlockState state = world.getBlockState(mut); + if (!ignore(state, world, mut)) { + if (random.nextInt(6) == 0) { + BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); + if (random.nextBoolean()) { + int px = MHelper.floor(random.nextGaussian() * 2 + x + 0.5); + int pz = MHelper.floor(random.nextGaussian() * 2 + z + 0.5); + mut2.set(px, y, pz); + while (world.getBlockState(mut2).getMaterial().isReplaceable() && mut2.getY() > minY) { + mut2.setY(mut2.getY() - 1); + } + if (!world.getBlockState(mut2).isAir() && state.canSurvive(world, mut2)) { + mut2.setY(mut2.getY() + 1); + BlocksHelper.setWithoutUpdate(world, mut2, state); + } + } + } + else if (random.nextInt(8) == 0) { + BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); + } + } + } + } + } + + drop(world, bounds); + } + + private static void drop(WorldGenLevel world, BoundingBox bounds) { + MutableBlockPos mut = new MutableBlockPos(); + + Set blocks = Sets.newHashSet(); + Set edge = Sets.newHashSet(); + Set add = Sets.newHashSet(); + + for (int x = bounds.minX(); x <= bounds.maxX(); x++) { + mut.setX(x); + for (int z = bounds.minZ(); z <= bounds.maxZ(); z++) { + mut.setZ(z); + for (int y = bounds.minY(); y <= bounds.maxY(); y++) { + mut.setY(y); + BlockState state = world.getBlockState(mut); + if (!ignore(state, world, mut) && isTerrainNear(world, mut)) { + edge.add(mut.immutable()); + } + } + } + } + + if (edge.isEmpty()) { + return; + } + + while (!edge.isEmpty()) { + for (BlockPos center : edge) { + for (Direction dir : BlocksHelper.DIRECTIONS) { + BlockState state = world.getBlockState(center); + if (state.isCollisionShapeFullBlock(world, center)) { + mut.set(center).move(dir); + if (bounds.isInside(mut)) { + state = world.getBlockState(mut); + if (!ignore(state, world, mut) && !blocks.contains(mut)) { + add.add(mut.immutable()); + } + } + } + } + } + + blocks.addAll(edge); + edge.clear(); + edge.addAll(add); + add.clear(); + } + + int minY = bounds.minY() - 10; + for (int x = bounds.minX(); x <= bounds.maxX(); x++) { + mut.setX(x); + for (int z = bounds.minZ(); z <= bounds.maxZ(); z++) { + mut.setZ(z); + for (int y = bounds.minY(); y <= bounds.maxY(); y++) { + mut.setY(y); + BlockState state = world.getBlockState(mut); + if (!ignore(state, world, mut) && !blocks.contains(mut)) { + BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); + while (world.getBlockState(mut).getMaterial().isReplaceable() && mut.getY() > minY) { + mut.setY(mut.getY() - 1); + } + if (mut.getY() > minY) { + mut.setY(mut.getY() + 1); + BlocksHelper.setWithoutUpdate(world, mut, state); + } + } + } + } + } + } + + private static boolean ignore(BlockState state, WorldGenLevel world, BlockPos pos) { + return !state.getMaterial().equals(Material.STONE) || BlocksHelper.isInvulnerable(state, world, pos); + } + + private static boolean isTerrainNear(WorldGenLevel world, BlockPos pos) { + for (Direction dir : BlocksHelper.DIRECTIONS) { + if (world.getBlockState(pos.relative(dir)).is(TagAPI.BLOCK_GEN_TERRAIN)) { + return true; + } + } + return false; + } + + public static void cover(WorldGenLevel world, BoundingBox bounds, Random random, BlockState defaultBlock) { + MutableBlockPos mut = new MutableBlockPos(); + for (int x = bounds.minX(); x <= bounds.maxX(); x++) { + mut.setX(x); + for (int z = bounds.minZ(); z <= bounds.maxZ(); z++) { + mut.setZ(z); + BlockState top = BiomeAPI.findTopMaterial(world.getBiome(mut)).orElse(defaultBlock); + for (int y = bounds.maxY(); y >= bounds.minY(); y--) { + mut.setY(y); + BlockState state = world.getBlockState(mut); + if (state.is(TagAPI.BLOCK_END_GROUND) && !world.getBlockState(mut.above()).getMaterial().isSolidBlocking()) { + BlocksHelper.setWithoutUpdate(world, mut, top); + } + } + } + } + } +} diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index b63012354..124e07eab 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -23,6 +23,7 @@ import ru.bclib.util.StructureHelper; import ru.bclib.world.features.NBTStructureFeature; import ru.betterend.util.BlockFixer; +import ru.betterend.util.StructureErode; import ru.betterend.world.biome.EndBiome; import java.util.Random; @@ -111,7 +112,7 @@ public boolean place(FeaturePlaceContext featureConfig addStructureData(placementData); structure.placeInWorld(world, center, center, placementData.setBoundingBox(bounds), random, 2); - StructureHelper.erodeIntense(world, bounds, random); + StructureErode.erodeIntense(world, bounds, random); BlockFixer.fixBlocks( world, new BlockPos(bounds.minX(), bounds.minY(), bounds.minZ()), diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index 39c261a18..00398093f 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -167,9 +167,7 @@ else if (dist < r2 * r2) { state = world.getBlockState(mut); while (state.is(Blocks.WATER)) { BlocksHelper.setWithoutUpdate(world, mut, EndBlocks.VENT_BUBBLE_COLUMN.defaultBlockState()); - //TODO: 1.18 test ticks - world/*.getBlockTicks()*/ - .scheduleTick(mut, EndBlocks.VENT_BUBBLE_COLUMN, MHelper.randRange(8, 32, random)); + world.scheduleTick(mut.immutable(), EndBlocks.VENT_BUBBLE_COLUMN, MHelper.randRange(8, 32, random)); mut.setY(mut.getY() + 1); state = world.getBlockState(mut); } diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index b4112065c..9242bb5dd 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -18,6 +18,7 @@ import ru.bclib.util.MHelper; import ru.bclib.util.StructureHelper; import ru.betterend.registry.EndStructures; +import ru.betterend.util.StructureErode; import ru.betterend.world.biome.EndBiome; import java.util.Random; @@ -77,9 +78,7 @@ public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkG this.boundingBox.minY(), blockBox.minZ() ), new Vec3i(blockBox.maxX(), this.boundingBox.maxX(), blockBox.maxZ())); - StructurePlaceSettings placementData = new StructurePlaceSettings().setRotation(rotation) - .setMirror(mirror) - .setBoundingBox(bounds); + StructurePlaceSettings placementData = new StructurePlaceSettings().setRotation(rotation).setMirror(mirror).setBoundingBox(bounds); structure.placeInWorld(world, pos, pos, placementData, random, 2); if (erosion > 0) { int x1 = MHelper.min(bounds.maxX(), boundingBox.maxX()); @@ -87,10 +86,10 @@ public void postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkG int z1 = MHelper.min(bounds.maxZ(), boundingBox.maxZ()); int z0 = MHelper.max(bounds.minZ(), boundingBox.minZ()); bounds = BoundingBox.fromCorners(new Vec3i(x0, bounds.minY(), z0), new Vec3i(x1, bounds.maxY(), z1)); - StructureHelper.erode(world, bounds, erosion, random); + StructureErode.erode(world, bounds, erosion, random); } if (cover) { - StructureHelper.cover(world, bounds, random, EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); + StructureErode.cover(world, bounds, random, EndBiome.Config.DEFAULT_MATERIAL.getTopMaterial()); } } From 35f9cd876944aff93d10b38dd80237e8402d769b Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 16:22:38 +0300 Subject: [PATCH 72/93] Biome features --- .../blocks/MossyGlowshroomCapBlock.java | 1 - .../ru/betterend/registry/EndFeatures.java | 69 ++++++++++++++++--- .../ru/betterend/util/StructureErode.java | 3 + 3 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java index 3fbf69b2c..4bd1bbcbd 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java @@ -1,7 +1,6 @@ package ru.betterend.blocks; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.tags.Tag.Named; import net.minecraft.world.item.Item; import net.minecraft.world.item.context.BlockPlaceContext; diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 5452ed843..7145c7d34 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -1,5 +1,10 @@ package ru.betterend.registry; +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import net.minecraft.core.Registry; +import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; @@ -16,9 +21,14 @@ import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.features.BCLCommonFeatures; import ru.bclib.api.features.BCLFeatureBuilder; +import ru.bclib.util.JsonFactory; +import ru.bclib.util.StructureHelper; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.DefaultFeature; +import ru.bclib.world.features.ListFeature; +import ru.bclib.world.features.ListFeature.StructureInfo; +import ru.bclib.world.features.NBTStructureFeature.TerrainMerge; import ru.betterend.BetterEnd; import ru.betterend.complexmaterials.StoneMaterial; import ru.betterend.config.Configs; @@ -84,6 +94,9 @@ import ru.betterend.world.features.trees.TenaneaFeature; import ru.betterend.world.features.trees.UmbrellaTreeFeature; +import java.io.InputStream; +import java.util.List; + public class EndFeatures { // Trees // public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3); @@ -270,6 +283,7 @@ public class EndFeatures { private static BCLFeature redisterVegetation(String name, Feature feature, int density) { ResourceLocation id = BetterEnd.makeID(name); return BCLFeatureBuilder.start(id, feature).countLayersMax(density).onlyInBiome().build(); + //return BCLFeatureBuilder.start(id, feature).countMax(density).heightmap().squarePlacement().onlyInBiome().build(); } private static BCLFeature registerRawGen(String name, Feature feature, int chance) { @@ -299,16 +313,21 @@ private static BCLFeature registerLayer(String name, StoneMaterial material, flo } public static void addBiomeFeatures(ResourceLocation id, Biome biome) { - if (id.getNamespace().equals(BetterEnd.MOD_ID)) { - return; - } - BiomeAPI.addBiomeFeature(biome, FLAVOLITE_LAYER); BiomeAPI.addBiomeFeature(biome, THALLASIUM_ORE); BiomeAPI.addBiomeFeature(biome, ENDER_ORE); BiomeAPI.addBiomeFeature(biome, CRASHED_SHIP); BCLBiome bclbiome = BiomeAPI.getBiome(id); + BCLFeature feature = getBiomeStructures(bclbiome); + if (feature != null) { + BiomeAPI.addBiomeFeature(biome, feature); + } + + if (id.getNamespace().equals(BetterEnd.MOD_ID)) { + return; + } + boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome); if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) { if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) { @@ -317,12 +336,44 @@ public static void addBiomeFeatures(ResourceLocation id, Biome biome) { BiomeAPI.addBiomeFeature(biome, TUNEL_CAVE); } } + } + + private static BCLFeature getBiomeStructures(BCLBiome biome) { + String ns = biome.getID().getNamespace(); + String nm = biome.getID().getPath(); + ResourceLocation id = new ResourceLocation(ns, nm + "_structures"); - // TODO restore biome structures - /*BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature(); - if (feature != null) { - addFeature(feature, features); - }*/ + if (BuiltinRegistries.PLACED_FEATURE.containsKey(id)) { + PlacedFeature placed = BuiltinRegistries.PLACED_FEATURE.get(id); + Feature feature = Registry.FEATURE.get(id); + return new BCLFeature(id, feature, Decoration.SURFACE_STRUCTURES, placed); + } + + String path = "/data/" + ns + "/structures/biome/" + nm + "/"; + InputStream inputstream = StructureHelper.class.getResourceAsStream(path + "structures.json"); + if (inputstream != null) { + JsonObject obj = JsonFactory.getJsonObject(inputstream); + JsonArray enties = obj.getAsJsonArray("structures"); + if (enties != null) { + List list = Lists.newArrayList(); + enties.forEach((entry) -> { + JsonObject e = entry.getAsJsonObject(); + String structure = path + e.get("nbt").getAsString() + ".nbt"; + TerrainMerge terrainMerge = TerrainMerge.getFromString(e.get("terrainMerge").getAsString()); + int offsetY = e.get("offsetY").getAsInt(); + list.add(new StructureInfo(structure, offsetY, terrainMerge)); + }); + if (!list.isEmpty()) { + return BCLCommonFeatures.makeChancedFeature( + new ResourceLocation(ns, nm + "_structures"), + Decoration.SURFACE_STRUCTURES, + new ListFeature(list, Blocks.END_STONE.defaultBlockState()), + 10 + ); + } + } + } + return null; } public static BCLBiomeBuilder addDefaultFeatures(BCLBiomeBuilder builder, boolean hasCaves) { diff --git a/src/main/java/ru/betterend/util/StructureErode.java b/src/main/java/ru/betterend/util/StructureErode.java index 3da5858dc..824411940 100644 --- a/src/main/java/ru/betterend/util/StructureErode.java +++ b/src/main/java/ru/betterend/util/StructureErode.java @@ -241,6 +241,9 @@ private static void drop(WorldGenLevel world, BoundingBox bounds) { } private static boolean ignore(BlockState state, WorldGenLevel world, BlockPos pos) { + if (state.is(TagAPI.BLOCK_GEN_TERRAIN) || state.is(BlockTags.NYLIUM)) { + return true; + } return !state.getMaterial().equals(Material.STONE) || BlocksHelper.isInvulnerable(state, world, pos); } From a4ec4522cf7567eee47eb95e8d6f86bd8f8d5efc Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 19:41:46 +0300 Subject: [PATCH 73/93] Ore fix, amber lands re-balance --- .../ru/betterend/registry/EndFeatures.java | 34 +++++++++++---- .../world/biome/land/AmberLandBiome.java | 43 ++++++++++--------- 2 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 7145c7d34..792949aa0 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -6,17 +6,23 @@ import net.minecraft.core.Registry; import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; +import net.minecraft.world.level.levelgen.VerticalAnchor; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; import net.minecraft.world.level.levelgen.placement.CountPlacement; +import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraft.world.level.levelgen.placement.PlacementModifier; +import net.minecraft.world.level.levelgen.placement.RandomOffsetPlacement; +import net.minecraft.world.level.levelgen.structure.templatesystem.BlockMatchTest; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.features.BCLCommonFeatures; @@ -104,7 +110,7 @@ public class EndFeatures { public static final BCLFeature LACUGROVE = redisterVegetation("lacugrove", new LacugroveFeature(), 4); public static final BCLFeature DRAGON_TREE = redisterVegetation("dragon_tree", new DragonTreeFeature(), 3); public static final BCLFeature TENANEA = redisterVegetation("tenanea", new TenaneaFeature(), 3); - public static final BCLFeature HELIX_TREE = redisterVegetation("helix_tree", new HelixTreeFeature(), 2); + public static final BCLFeature HELIX_TREE = redisterVegetation("helix_tree", new HelixTreeFeature(), 1); public static final BCLFeature UMBRELLA_TREE = redisterVegetation("umbrella_tree", new UmbrellaTreeFeature(), 4); public static final BCLFeature JELLYSHROOM = redisterVegetation("jellyshroom", new JellyshroomFeature(), 3); public static final BCLFeature GIGANTIC_AMARANITA = redisterVegetation("gigantic_amaranita", new GiganticAmaranitaFeature(), 1); @@ -132,8 +138,8 @@ public class EndFeatures { public static final BCLFeature SHADOW_BERRY = redisterVegetation("shadow_berry", new SinglePlantFeature(EndBlocks.SHADOW_BERRY, 2), 1); public static final BCLFeature BUSHY_GRASS = redisterVegetation("bushy_grass", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 8, false), 20); public static final BCLFeature BUSHY_GRASS_WG = redisterVegetation("bushy_grass_wg", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 5), 10); - public static final BCLFeature AMBER_GRASS = redisterVegetation("amber_grass", new SinglePlantFeature(EndBlocks.AMBER_GRASS, 6), 9); - public static final BCLFeature LANCELEAF = redisterVegetation("lanceleaf", new LanceleafFeature(), 3); + public static final BCLFeature AMBER_GRASS = redisterVegetation("amber_grass", new SinglePlantFeature(EndBlocks.AMBER_GRASS, 6), 7); + public static final BCLFeature LANCELEAF = redisterVegetation("lanceleaf", new LanceleafFeature(), 2); public static final BCLFeature GLOW_PILLAR = redisterVegetation("glow_pillar", new GlowPillarFeature(), 1); public static final BCLFeature TWISTED_UMBRELLA_MOSS = redisterVegetation("twisted_umbrella_moss", new DoublePlantFeature(EndBlocks.TWISTED_UMBRELLA_MOSS, EndBlocks.TWISTED_UMBRELLA_MOSS_TALL, 6), 5); public static final BCLFeature JUNGLE_GRASS = redisterVegetation("jungle_grass", new SinglePlantFeature(EndBlocks.JUNGLE_GRASS, 7, 3), 8); @@ -236,10 +242,10 @@ public class EndFeatures { public static final BCLFeature THIN_UMBRALITH_ARCH = registerChanced("thin_umbralith_arch", new ThinArchFeature(EndBlocks.UMBRALITH.stone), 15); // Ores // - public static final BCLFeature THALLASIUM_ORE = registerOre("thallasium_ore", EndBlocks.THALLASIUM.ore, 24, 8, 5, 128); - public static final BCLFeature ENDER_ORE = registerOre("ender_ore", EndBlocks.ENDER_ORE, 12, 4, 5, 128); - public static final BCLFeature AMBER_ORE = registerOre("amber_ore", EndBlocks.AMBER_ORE, 24, 6, 5, 128); - public static final BCLFeature DRAGON_BONE_BLOCK_ORE = registerOre("dragon_bone_ore", EndBlocks.DRAGON_BONE_BLOCK, 24, 8, 5, 128); + public static final BCLFeature THALLASIUM_ORE = registerOre("thallasium_ore", EndBlocks.THALLASIUM.ore, 24, 8); + public static final BCLFeature ENDER_ORE = registerOre("ender_ore", EndBlocks.ENDER_ORE, 12, 4); + public static final BCLFeature AMBER_ORE = registerOre("amber_ore", EndBlocks.AMBER_ORE, 60, 6); + public static final BCLFeature DRAGON_BONE_BLOCK_ORE = registerOre("dragon_bone_ore", EndBlocks.DRAGON_BONE_BLOCK, 24, 8); public static final BCLFeature VIOLECITE_LAYER = registerLayer("violecite_layer", EndBlocks.VIOLECITE, 15, 16, 128, 8); public static final BCLFeature FLAVOLITE_LAYER = registerLayer("flavolite_layer", EndBlocks.FLAVOLITE, 12, 16, 128, 6); @@ -298,8 +304,18 @@ private static BCLFeature registerChanced(String name, Feature Date: Thu, 23 Dec 2021 20:09:11 +0300 Subject: [PATCH 74/93] Blossoming Spires re-balance --- .../ru/betterend/registry/EndFeatures.java | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 792949aa0..72bc0cb99 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -109,7 +109,7 @@ public class EndFeatures { public static final BCLFeature PYTHADENDRON_TREE = redisterVegetation("pythadendron_tree", new PythadendronTreeFeature(), 2); public static final BCLFeature LACUGROVE = redisterVegetation("lacugrove", new LacugroveFeature(), 4); public static final BCLFeature DRAGON_TREE = redisterVegetation("dragon_tree", new DragonTreeFeature(), 3); - public static final BCLFeature TENANEA = redisterVegetation("tenanea", new TenaneaFeature(), 3); + public static final BCLFeature TENANEA = redisterVegetation("tenanea", new TenaneaFeature(), 2); public static final BCLFeature HELIX_TREE = redisterVegetation("helix_tree", new HelixTreeFeature(), 1); public static final BCLFeature UMBRELLA_TREE = redisterVegetation("umbrella_tree", new UmbrellaTreeFeature(), 4); public static final BCLFeature JELLYSHROOM = redisterVegetation("jellyshroom", new JellyshroomFeature(), 3); @@ -119,7 +119,7 @@ public class EndFeatures { // Bushes // public static final BCLFeature PYTHADENDRON_BUSH = redisterVegetation("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.getBark()), 4); public static final BCLFeature DRAGON_TREE_BUSH = redisterVegetation("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.getBark()), 15); - public static final BCLFeature TENANEA_BUSH = redisterVegetation("tenanea_bush", new TenaneaBushFeature(), 10); + public static final BCLFeature TENANEA_BUSH = redisterVegetation("tenanea_bush", new TenaneaBushFeature(), 6); public static final BCLFeature LUMECORN = redisterVegetation("lumecorn", new Lumecorn(), 5); public static final BCLFeature LARGE_AMARANITA = redisterVegetation("large_amaranita", new LargeAmaranitaFeature(), 5); public static final BCLFeature LUCERNIA_BUSH = redisterVegetation("lucernia_bush", new BushWithOuterFeature(EndBlocks.LUCERNIA_LEAVES, EndBlocks.LUCERNIA_OUTER_LEAVES, EndBlocks.LUCERNIA.getBark()), 10); @@ -136,8 +136,8 @@ public class EndFeatures { public static final BCLFeature MURKWEED = redisterVegetation("murkweed", new SinglePlantFeature(EndBlocks.MURKWEED, 3), 2); public static final BCLFeature NEEDLEGRASS = redisterVegetation("needlegrass", new SinglePlantFeature(EndBlocks.NEEDLEGRASS, 3), 2); public static final BCLFeature SHADOW_BERRY = redisterVegetation("shadow_berry", new SinglePlantFeature(EndBlocks.SHADOW_BERRY, 2), 1); - public static final BCLFeature BUSHY_GRASS = redisterVegetation("bushy_grass", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 8, false), 20); - public static final BCLFeature BUSHY_GRASS_WG = redisterVegetation("bushy_grass_wg", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 5), 10); + public static final BCLFeature BUSHY_GRASS = redisterVegetation("bushy_grass", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 8, false), 10); + public static final BCLFeature BUSHY_GRASS_WG = redisterVegetation("bushy_grass_wg", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 5), 8); public static final BCLFeature AMBER_GRASS = redisterVegetation("amber_grass", new SinglePlantFeature(EndBlocks.AMBER_GRASS, 6), 7); public static final BCLFeature LANCELEAF = redisterVegetation("lanceleaf", new LanceleafFeature(), 2); public static final BCLFeature GLOW_PILLAR = redisterVegetation("glow_pillar", new GlowPillarFeature(), 1); @@ -169,7 +169,7 @@ public class EndFeatures { // Vines // public static final BCLFeature DENSE_VINE = redisterVegetation("dense_vine", new VineFeature(EndBlocks.DENSE_VINE, 24), 3); public static final BCLFeature TWISTED_VINE = redisterVegetation("twisted_vine", new VineFeature(EndBlocks.TWISTED_VINE, 24), 3); - public static final BCLFeature BULB_VINE = redisterVegetation("bulb_vine", new VineFeature(EndBlocks.BULB_VINE, 24), 5); + public static final BCLFeature BULB_VINE = redisterVegetation("bulb_vine", new VineFeature(EndBlocks.BULB_VINE, 24), 3); public static final BCLFeature JUNGLE_VINE = redisterVegetation("jungle_vine", new VineFeature(EndBlocks.JUNGLE_VINE, 24), 5); // Ceil plants @@ -222,7 +222,7 @@ public class EndFeatures { public static final BCLFeature END_LAKE_RARE = registerLake("end_lake_rare", new EndLakeFeature(), 40); public static final BCLFeature DESERT_LAKE = registerLake("desert_lake", new DesertLakeFeature(), 8); public static final BCLFeature ROUND_CAVE = registerRawGen("round_cave", new RoundCaveFeature(), 2); - public static final BCLFeature SPIRE = registerRawGen("spire", new SpireFeature(), 2); + public static final BCLFeature SPIRE = registerRawGen("spire", new SpireFeature(), 4); public static final BCLFeature FLOATING_SPIRE = registerRawGen("floating_spire", new FloatingSpireFeature(), 8); public static final BCLFeature GEYSER = registerRawGen("geyser", new GeyserFeature(), 8); public static final BCLFeature SULPHURIC_LAKE = registerLake("sulphuric_lake", new SulphuricLakeFeature(), 8); @@ -289,7 +289,6 @@ public class EndFeatures { private static BCLFeature redisterVegetation(String name, Feature feature, int density) { ResourceLocation id = BetterEnd.makeID(name); return BCLFeatureBuilder.start(id, feature).countLayersMax(density).onlyInBiome().build(); - //return BCLFeatureBuilder.start(id, feature).countMax(density).heightmap().squarePlacement().onlyInBiome().build(); } private static BCLFeature registerRawGen(String name, Feature feature, int chance) { @@ -305,16 +304,6 @@ private static BCLFeature registerChanced(String name, Feature Date: Thu, 23 Dec 2021 20:16:59 +0300 Subject: [PATCH 75/93] Chorus Forest re-balance --- src/main/java/ru/betterend/registry/EndFeatures.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 72bc0cb99..e2ed1d565 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -106,7 +106,7 @@ public class EndFeatures { // Trees // public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3); - public static final BCLFeature PYTHADENDRON_TREE = redisterVegetation("pythadendron_tree", new PythadendronTreeFeature(), 2); + public static final BCLFeature PYTHADENDRON_TREE = redisterVegetation("pythadendron_tree", new PythadendronTreeFeature(), 1); public static final BCLFeature LACUGROVE = redisterVegetation("lacugrove", new LacugroveFeature(), 4); public static final BCLFeature DRAGON_TREE = redisterVegetation("dragon_tree", new DragonTreeFeature(), 3); public static final BCLFeature TENANEA = redisterVegetation("tenanea", new TenaneaFeature(), 2); @@ -117,7 +117,7 @@ public class EndFeatures { public static final BCLFeature LUCERNIA = redisterVegetation("lucernia", new LucerniaFeature(), 3); // Bushes // - public static final BCLFeature PYTHADENDRON_BUSH = redisterVegetation("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.getBark()), 4); + public static final BCLFeature PYTHADENDRON_BUSH = redisterVegetation("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.getBark()), 3); public static final BCLFeature DRAGON_TREE_BUSH = redisterVegetation("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.getBark()), 15); public static final BCLFeature TENANEA_BUSH = redisterVegetation("tenanea_bush", new TenaneaBushFeature(), 6); public static final BCLFeature LUMECORN = redisterVegetation("lumecorn", new Lumecorn(), 5); @@ -130,7 +130,7 @@ public class EndFeatures { public static final BCLFeature UMBRELLA_MOSS = redisterVegetation("umbrella_moss", new DoublePlantFeature(EndBlocks.UMBRELLA_MOSS, EndBlocks.UMBRELLA_MOSS_TALL, 5), 5); public static final BCLFeature CREEPING_MOSS = redisterVegetation("creeping_moss", new SinglePlantFeature(EndBlocks.CREEPING_MOSS, 5), 5); public static final BCLFeature BLUE_VINE = redisterVegetation("blue_vine", new BlueVineFeature(), 1); - public static final BCLFeature CHORUS_GRASS = redisterVegetation("chorus_grass", new SinglePlantFeature(EndBlocks.CHORUS_GRASS, 4), 5); + public static final BCLFeature CHORUS_GRASS = redisterVegetation("chorus_grass", new SinglePlantFeature(EndBlocks.CHORUS_GRASS, 4), 3); public static final BCLFeature CRYSTAL_GRASS = redisterVegetation("crystal_grass", new SinglePlantFeature(EndBlocks.CRYSTAL_GRASS, 8, false), 5); public static final BCLFeature SHADOW_PLANT = redisterVegetation("shadow_plant", new SinglePlantFeature(EndBlocks.SHADOW_PLANT, 6), 9); public static final BCLFeature MURKWEED = redisterVegetation("murkweed", new SinglePlantFeature(EndBlocks.MURKWEED, 3), 2); @@ -160,7 +160,7 @@ public class EndFeatures { public static final BCLFeature GLOBULAGUS = redisterVegetation("globulagus", new SinglePlantFeature(EndBlocks.GLOBULAGUS, 5, 3), 6); public static final BCLFeature CLAWFERN = redisterVegetation("clawfern", new SinglePlantFeature(EndBlocks.CLAWFERN, 5, 4), 5); public static final BCLFeature BOLUX_MUSHROOM = redisterVegetation("bolux_mushroom", new SinglePlantFeature(EndBlocks.BOLUX_MUSHROOM, 5, 5), 2); - public static final BCLFeature CHORUS_MUSHROOM = redisterVegetation("chorus_mushroom", new SinglePlantFeature(EndBlocks.CHORUS_MUSHROOM, 5, 5), 1); + public static final BCLFeature CHORUS_MUSHROOM = redisterVegetation("chorus_mushroom", new SinglePlantFeature(EndBlocks.CHORUS_MUSHROOM, 3, 5), 1); public static final BCLFeature AMBER_ROOT = redisterVegetation("amber_root", new SinglePlantFeature(EndBlocks.AMBER_ROOT, 5, 5), 1); //public static final BCLFeature PEARLBERRY = redisterVegetation("pearlberry", new SinglePlantFeature(EndBlocks.PEARLBERRY, 5, 5), 1); public static final BCLFeature INFLEXIA = redisterVegetation("inflexia", new SinglePlantFeature(EndBlocks.INFLEXIA, 7, false, 3), 16); From a5e203acb3e1fbd9bc38d379c9d55a1165892b34 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 20:25:26 +0300 Subject: [PATCH 76/93] Sulphur Springs fixes --- .../world/biome/land/ChorusForestBiome.java | 45 ++++++------- .../world/biome/land/SulphurSpringsBiome.java | 66 +++++++++---------- .../SulphuricSurfaceNoiseCondition.java | 8 +-- 3 files changed, 58 insertions(+), 61 deletions(-) diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index 9c4b49b36..c5fc3d833 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -20,28 +20,29 @@ public ChorusForestBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(87, 26, 87) - .fogDensity(1.5F) - .plantsColor(122, 45, 122) - .waterAndFogColor(73, 30, 73) - .particles(ParticleTypes.PORTAL, 0.01F) - .loop(EndSounds.AMBIENT_CHORUS_FOREST) - .music(EndSounds.MUSIC_DARK) - .feature(EndFeatures.VIOLECITE_LAYER) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.PYTHADENDRON_TREE) - .feature(EndFeatures.PYTHADENDRON_BUSH) - .feature(EndFeatures.PURPLE_POLYPORE) - .feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) - .feature(EndFeatures.CHORUS_GRASS) - .feature(EndFeatures.CHORUS_MUSHROOM) - .feature(EndFeatures.TAIL_MOSS) - .feature(EndFeatures.TAIL_MOSS_WOOD) - .feature(EndFeatures.CHARNIA_PURPLE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EndEntities.END_SLIME, 5, 1, 2) - .spawn(EntityType.ENDERMAN, 50, 1, 4); + builder + .fogColor(87, 26, 87) + .fogDensity(1.5F) + .plantsColor(122, 45, 122) + .waterAndFogColor(73, 30, 73) + .particles(ParticleTypes.PORTAL, 0.01F) + .loop(EndSounds.AMBIENT_CHORUS_FOREST) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.VIOLECITE_LAYER) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.PYTHADENDRON_TREE) + .feature(EndFeatures.PYTHADENDRON_BUSH) + .feature(EndFeatures.PURPLE_POLYPORE) + .feature(Decoration.VEGETAL_DECORATION, EndPlacements.CHORUS_PLANT) + .feature(EndFeatures.CHORUS_GRASS) + .feature(EndFeatures.CHORUS_MUSHROOM) + .feature(EndFeatures.TAIL_MOSS) + .feature(EndFeatures.TAIL_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_PURPLE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 50, 1, 4); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java index 9a4b7236d..0b4a25d56 100644 --- a/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/SulphurSpringsBiome.java @@ -4,6 +4,8 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; +import net.minecraft.world.level.levelgen.placement.CaveSurface; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.surface.SurfaceRuleBuilder; import ru.bclib.api.surface.rules.SwitchRuleSource; @@ -31,25 +33,25 @@ protected boolean hasCaves() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { builder - .music(EndSounds.MUSIC_OPENSPACE) - .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) - .waterColor(25, 90, 157) - .waterFogColor(30, 65, 61) - .fogColor(207, 194, 62) - .fogDensity(1.5F) - .terrainHeight(0F) - .particles(EndParticles.SULPHUR_PARTICLE, 0.001F) - .feature(EndFeatures.GEYSER) - .feature(EndFeatures.SURFACE_VENT) - .feature(EndFeatures.SULPHURIC_LAKE) - .feature(EndFeatures.SULPHURIC_CAVE) - .feature(EndFeatures.HYDRALUX) - .feature(EndFeatures.CHARNIA_GREEN) - .feature(EndFeatures.CHARNIA_ORANGE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .spawn(EndEntities.END_FISH, 50, 3, 8) - .spawn(EndEntities.CUBOZOA, 50, 3, 8) - .spawn(EntityType.ENDERMAN, 50, 1, 4); + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_SULPHUR_SPRINGS) + .waterColor(25, 90, 157) + .waterFogColor(30, 65, 61) + .fogColor(207, 194, 62) + .fogDensity(1.5F) + .terrainHeight(0F) + .particles(EndParticles.SULPHUR_PARTICLE, 0.001F) + .feature(EndFeatures.GEYSER) + .feature(EndFeatures.SURFACE_VENT) + .feature(EndFeatures.SULPHURIC_LAKE) + .feature(EndFeatures.SULPHURIC_CAVE) + .feature(EndFeatures.HYDRALUX) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .spawn(EndEntities.END_FISH, 50, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EntityType.ENDERMAN, 50, 1, 4); } @Override @@ -72,21 +74,19 @@ public boolean generateFloorRule() { @Override public SurfaceRuleBuilder surface() { + RuleSource surfaceBlockRule = new SwitchRuleSource( + new SulphuricSurfaceNoiseCondition(), + List.of( + SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), + SurfaceRules.state(surfaceMaterial().getTopMaterial()), + SULPHURIC_ROCK, + BRIMSTONE + ) + ); return super - .surface() - .rule(2, - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, - new SwitchRuleSource( - new SulphuricSurfaceNoiseCondition(), - List.of( - SurfaceRules.state(surfaceMaterial().getAltTopMaterial()), - SurfaceRules.state(surfaceMaterial().getTopMaterial()), - SULPHURIC_ROCK, - BRIMSTONE - ) - ) - ) - ); + .surface() + .rule(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, surfaceBlockRule)) + .rule(2, SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(5, false, false, CaveSurface.FLOOR), surfaceBlockRule)); } }; } diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java index 3e4da424f..1ad16c080 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceNoiseCondition.java @@ -15,14 +15,10 @@ public class SulphuricSurfaceNoiseCondition implements NumericProvider { public int getNumber(SurfaceRulesContextAccessor context) { final int x = context.getBlockX(); final int z = context.getBlockZ(); - final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange( - -0.1, - 0.1, - MHelper.RANDOM - ); + final double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange(-0.1, 0.1, MHelper.RANDOM); if (value < -0.6) return 0; if (value < -0.3) return 1; - if (value < -0.5) return 2; + if (value < 0.5) return 2; return 3; } } From 7ab1d6917faa474affbae6bf5b6df728ed6c8353 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 21:02:32 +0300 Subject: [PATCH 77/93] Shadow Forest re-balance --- .../ru/betterend/registry/EndFeatures.java | 10 ++-- .../biome/land/CrystalMountainsBiome.java | 11 ++-- .../biome/land/DragonGraveyardsBiome.java | 37 +++++++------- .../world/biome/land/ShadowForestBiome.java | 51 ++++++++++--------- 4 files changed, 56 insertions(+), 53 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index e2ed1d565..a43c08d07 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -108,7 +108,7 @@ public class EndFeatures { public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3); public static final BCLFeature PYTHADENDRON_TREE = redisterVegetation("pythadendron_tree", new PythadendronTreeFeature(), 1); public static final BCLFeature LACUGROVE = redisterVegetation("lacugrove", new LacugroveFeature(), 4); - public static final BCLFeature DRAGON_TREE = redisterVegetation("dragon_tree", new DragonTreeFeature(), 3); + public static final BCLFeature DRAGON_TREE = redisterVegetation("dragon_tree", new DragonTreeFeature(), 2); public static final BCLFeature TENANEA = redisterVegetation("tenanea", new TenaneaFeature(), 2); public static final BCLFeature HELIX_TREE = redisterVegetation("helix_tree", new HelixTreeFeature(), 1); public static final BCLFeature UMBRELLA_TREE = redisterVegetation("umbrella_tree", new UmbrellaTreeFeature(), 4); @@ -118,7 +118,7 @@ public class EndFeatures { // Bushes // public static final BCLFeature PYTHADENDRON_BUSH = redisterVegetation("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.getBark()), 3); - public static final BCLFeature DRAGON_TREE_BUSH = redisterVegetation("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.getBark()), 15); + public static final BCLFeature DRAGON_TREE_BUSH = redisterVegetation("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.getBark()), 5); public static final BCLFeature TENANEA_BUSH = redisterVegetation("tenanea_bush", new TenaneaBushFeature(), 6); public static final BCLFeature LUMECORN = redisterVegetation("lumecorn", new Lumecorn(), 5); public static final BCLFeature LARGE_AMARANITA = redisterVegetation("large_amaranita", new LargeAmaranitaFeature(), 5); @@ -132,9 +132,9 @@ public class EndFeatures { public static final BCLFeature BLUE_VINE = redisterVegetation("blue_vine", new BlueVineFeature(), 1); public static final BCLFeature CHORUS_GRASS = redisterVegetation("chorus_grass", new SinglePlantFeature(EndBlocks.CHORUS_GRASS, 4), 3); public static final BCLFeature CRYSTAL_GRASS = redisterVegetation("crystal_grass", new SinglePlantFeature(EndBlocks.CRYSTAL_GRASS, 8, false), 5); - public static final BCLFeature SHADOW_PLANT = redisterVegetation("shadow_plant", new SinglePlantFeature(EndBlocks.SHADOW_PLANT, 6), 9); + public static final BCLFeature SHADOW_PLANT = redisterVegetation("shadow_plant", new SinglePlantFeature(EndBlocks.SHADOW_PLANT, 6), 5); public static final BCLFeature MURKWEED = redisterVegetation("murkweed", new SinglePlantFeature(EndBlocks.MURKWEED, 3), 2); - public static final BCLFeature NEEDLEGRASS = redisterVegetation("needlegrass", new SinglePlantFeature(EndBlocks.NEEDLEGRASS, 3), 2); + public static final BCLFeature NEEDLEGRASS = redisterVegetation("needlegrass", new SinglePlantFeature(EndBlocks.NEEDLEGRASS, 3), 1); public static final BCLFeature SHADOW_BERRY = redisterVegetation("shadow_berry", new SinglePlantFeature(EndBlocks.SHADOW_BERRY, 2), 1); public static final BCLFeature BUSHY_GRASS = redisterVegetation("bushy_grass", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 8, false), 10); public static final BCLFeature BUSHY_GRASS_WG = redisterVegetation("bushy_grass_wg", new SinglePlantFeature(EndBlocks.BUSHY_GRASS, 5), 8); @@ -168,7 +168,7 @@ public class EndFeatures { // Vines // public static final BCLFeature DENSE_VINE = redisterVegetation("dense_vine", new VineFeature(EndBlocks.DENSE_VINE, 24), 3); - public static final BCLFeature TWISTED_VINE = redisterVegetation("twisted_vine", new VineFeature(EndBlocks.TWISTED_VINE, 24), 3); + public static final BCLFeature TWISTED_VINE = redisterVegetation("twisted_vine", new VineFeature(EndBlocks.TWISTED_VINE, 24), 1); public static final BCLFeature BULB_VINE = redisterVegetation("bulb_vine", new VineFeature(EndBlocks.BULB_VINE, 24), 3); public static final BCLFeature JUNGLE_VINE = redisterVegetation("jungle_vine", new VineFeature(EndBlocks.JUNGLE_VINE, 24), 5); diff --git a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java index af1624f58..67e2d18ff 100644 --- a/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/CrystalMountainsBiome.java @@ -17,11 +17,12 @@ public CrystalMountainsBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.structure(EndStructures.MOUNTAIN.getFeatureConfigured()) - .plantsColor(255, 133, 211) - .music(EndSounds.MUSIC_OPENSPACE) - .feature(EndFeatures.CRYSTAL_GRASS) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .structure(EndStructures.MOUNTAIN.getFeatureConfigured()) + .plantsColor(255, 133, 211) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.CRYSTAL_GRASS) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java index e6a47d627..07a600853 100644 --- a/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DragonGraveyardsBiome.java @@ -17,24 +17,25 @@ public DragonGraveyardsBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.genChance(0.1f) - .fogColor(244, 46, 79) - .fogDensity(1.3F) - .particles(EndParticles.FIREFLY, 0.0007F) - .music(EndSounds.MUSIC_OPENSPACE) - .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .waterAndFogColor(203, 59, 167) - .plantsColor(244, 46, 79) - .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) - .feature(EndFeatures.DRAGON_BONE_BLOCK_ORE) - .feature(EndFeatures.FALLEN_PILLAR) - .feature(EndFeatures.OBSIDIAN_BOULDER) - .feature(EndFeatures.GIGANTIC_AMARANITA) - .feature(EndFeatures.LARGE_AMARANITA) - .feature(EndFeatures.SMALL_AMARANITA) - .feature(EndFeatures.GLOBULAGUS) - .feature(EndFeatures.CLAWFERN) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .genChance(0.1f) + .fogColor(244, 46, 79) + .fogDensity(1.3F) + .particles(EndParticles.FIREFLY, 0.0007F) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) + .waterAndFogColor(203, 59, 167) + .plantsColor(244, 46, 79) + .feature(EndFeatures.OBSIDIAN_PILLAR_BASEMENT) + .feature(EndFeatures.DRAGON_BONE_BLOCK_ORE) + .feature(EndFeatures.FALLEN_PILLAR) + .feature(EndFeatures.OBSIDIAN_BOULDER) + .feature(EndFeatures.GIGANTIC_AMARANITA) + .feature(EndFeatures.LARGE_AMARANITA) + .feature(EndFeatures.SMALL_AMARANITA) + .feature(EndFeatures.GLOBULAGUS) + .feature(EndFeatures.CLAWFERN) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 2efbe920c..7233b3857 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -18,31 +18,32 @@ public ShadowForestBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(0, 0, 0) - .fogDensity(2.5F) - .plantsColor(45, 45, 45) - .waterAndFogColor(42, 45, 80) - .particles(ParticleTypes.MYCELIUM, 0.01F) - .loop(EndSounds.AMBIENT_CHORUS_FOREST) - .music(EndSounds.MUSIC_DARK) - .feature(EndFeatures.VIOLECITE_LAYER) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.DRAGON_TREE) - .feature(EndFeatures.DRAGON_TREE_BUSH) - .feature(EndFeatures.SHADOW_PLANT) - .feature(EndFeatures.MURKWEED) - .feature(EndFeatures.NEEDLEGRASS) - .feature(EndFeatures.SHADOW_BERRY) - .feature(EndFeatures.TWISTED_VINE) - .feature(EndFeatures.PURPLE_POLYPORE) - .feature(EndFeatures.TAIL_MOSS) - .feature(EndFeatures.TAIL_MOSS_WOOD) - .feature(EndFeatures.CHARNIA_PURPLE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EndEntities.SHADOW_WALKER, 80, 2, 4) - .spawn(EntityType.ENDERMAN, 40, 1, 4) - .spawn(EntityType.PHANTOM, 1, 1, 2); + builder + .fogColor(0, 0, 0) + .fogDensity(2.5F) + .plantsColor(45, 45, 45) + .waterAndFogColor(42, 45, 80) + .particles(ParticleTypes.MYCELIUM, 0.01F) + .loop(EndSounds.AMBIENT_CHORUS_FOREST) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.VIOLECITE_LAYER) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.DRAGON_TREE) + .feature(EndFeatures.DRAGON_TREE_BUSH) + .feature(EndFeatures.SHADOW_PLANT) + .feature(EndFeatures.MURKWEED) + .feature(EndFeatures.NEEDLEGRASS) + .feature(EndFeatures.SHADOW_BERRY) + .feature(EndFeatures.TWISTED_VINE) + .feature(EndFeatures.PURPLE_POLYPORE) + .feature(EndFeatures.TAIL_MOSS) + .feature(EndFeatures.TAIL_MOSS_WOOD) + .feature(EndFeatures.CHARNIA_PURPLE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEND_CITY()) + .spawn(EndEntities.SHADOW_WALKER, 80, 2, 4) + .spawn(EntityType.ENDERMAN, 40, 1, 4) + .spawn(EntityType.PHANTOM, 1, 1, 2); } @Override From bf493330eccb624f5a7c76ab405a057805d816fa Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 21:17:45 +0300 Subject: [PATCH 78/93] Dust Wastelands dust depth --- .../interfaces/StructureFeaturesAccessor.java | 2 +- .../mixin/common/StructureFeaturesMixin.java | 2 +- .../world/biome/land/AmberLandBiome.java | 2 +- .../world/biome/land/ChorusForestBiome.java | 2 +- .../world/biome/land/DryShrublandBiome.java | 2 +- .../world/biome/land/DustWastelandsBiome.java | 34 ++++++++++++++----- .../biome/land/FoggyMushroomlandBiome.java | 2 +- .../biome/land/GlowingGrasslandsBiome.java | 2 +- .../world/biome/land/LanternWoodsBiome.java | 2 +- .../world/biome/land/NeonOasisBiome.java | 2 +- .../world/biome/land/ShadowForestBiome.java | 2 +- .../world/biome/land/UmbrellaJungleBiome.java | 2 +- 12 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java index 2813474bb..ff2f3f846 100644 --- a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java +++ b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java @@ -5,5 +5,5 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public interface StructureFeaturesAccessor { - ConfiguredStructureFeature> getEND_CITY(); + ConfiguredStructureFeature> getEndCity(); } diff --git a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java index c3126b2d6..58712fd78 100644 --- a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java +++ b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java @@ -13,7 +13,7 @@ public class StructureFeaturesMixin implements StructureFeaturesAccessor { @Shadow @Final private static ConfiguredStructureFeature> END_CITY; - public ConfiguredStructureFeature> getEND_CITY(){ + public ConfiguredStructureFeature> getEndCity(){ return END_CITY; } } diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index cb250772f..10ab2c0d3 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -37,7 +37,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.BULB_MOSS_WOOD) .feature(EndFeatures.CHARNIA_ORANGE) .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EntityType.ENDERMAN, 50, 1, 4) .spawn(EndEntities.END_SLIME, 30, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java index c5fc3d833..e3f2c38a5 100644 --- a/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ChorusForestBiome.java @@ -40,7 +40,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.TAIL_MOSS_WOOD) .feature(EndFeatures.CHARNIA_PURPLE) .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EndEntities.END_SLIME, 5, 1, 2) .spawn(EntityType.ENDERMAN, 50, 1, 4); } diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index c81b67df5..ced2823a8 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -26,7 +26,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.AERIDIUM) .feature(EndFeatures.LUTEBUS) .feature(EndFeatures.LAMELLARIUM) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 1037f7be8..85dfc4d24 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -2,8 +2,13 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.SurfaceRules.SurfaceRule; +import net.minecraft.world.level.levelgen.placement.CaveSurface; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.surface.SurfaceRuleBuilder; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndSounds; @@ -16,15 +21,16 @@ public DustWastelandsBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(226, 239, 168) - .fogDensity(2) - .waterAndFogColor(192, 180, 131) - .terrainHeight(1.5F) - .particles(ParticleTypes.WHITE_ASH, 0.01F) - .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .music(EndSounds.MUSIC_OPENSPACE) - .structure(VANILLA_FEATURES.getEND_CITY()) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(192, 180, 131) + .terrainHeight(1.5F) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .music(EndSounds.MUSIC_OPENSPACE) + .structure(VANILLA_FEATURES.getEndCity()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override @@ -34,6 +40,16 @@ protected SurfaceMaterialProvider surfaceMaterial() { public BlockState getTopMaterial() { return EndBlocks.ENDSTONE_DUST.defaultBlockState(); } + + @Override + public SurfaceRuleBuilder surface() { + return super + .surface() + .ceil(Blocks.END_STONE.defaultBlockState()) + .rule(4, SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(5, false, false, CaveSurface.FLOOR), + SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()) + )); + } }; } } diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 808bdb0ed..29fc75a0d 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -41,7 +41,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.CHARNIA_CYAN) .feature(EndFeatures.CHARNIA_LIGHT_BLUE) .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EndEntities.DRAGONFLY, 80, 2, 5) .spawn(EndEntities.END_FISH, 20, 2, 5) .spawn(EndEntities.CUBOZOA, 10, 3, 8) diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index 90530fc49..dcee170d3 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -37,7 +37,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.CHARNIA_GREEN) .feature(EndFeatures.CHARNIA_LIGHT_BLUE) .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index b9a4ba457..06213252b 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -37,7 +37,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.CHARNIA_RED) .feature(EndFeatures.RUSCUS) .feature(EndFeatures.RUSCUS_WOOD) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 41f078dce..7baa3e812 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -31,7 +31,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.CHARNIA_GREEN) .feature(EndFeatures.CHARNIA_CYAN) .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } diff --git a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java index 7233b3857..ad3fdeed3 100644 --- a/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/ShadowForestBiome.java @@ -40,7 +40,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.TAIL_MOSS_WOOD) .feature(EndFeatures.CHARNIA_PURPLE) .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EndEntities.SHADOW_WALKER, 80, 2, 4) .spawn(EntityType.ENDERMAN, 40, 1, 4) .spawn(EntityType.PHANTOM, 1, 1, 2); diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index a14bcec77..59fbc4df2 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -41,7 +41,7 @@ protected void addCustomBuildData(BCLBiomeBuilder builder) { .feature(EndFeatures.CHARNIA_GREEN) .feature(EndFeatures.CHARNIA_LIGHT_BLUE) .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEND_CITY()) + .structure(VANILLA_FEATURES.getEndCity()) .spawn(EntityType.ENDERMAN, 50, 1, 2); } From b6e87d9103b3142b812b258e3a00a5112d1b48c6 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 25 Dec 2021 14:44:32 +0300 Subject: [PATCH 79/93] New logo --- src/main/resources/assets/betterend/icon.png | Bin 21516 -> 56787 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/betterend/icon.png b/src/main/resources/assets/betterend/icon.png index 07383b0eaca9a7f50b73c56aa9d5067c511b6f6b..408be2ca23068f786c3823bf215fe628fab2414c 100644 GIT binary patch literal 56787 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 Z%FZemhqN!;=mD=3GB(6v?jLXt{WmNenAQLQ From f668a3b0ef4a886cfbe2c234a399dda4bd8acc9e Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 25 Dec 2021 17:56:31 +0300 Subject: [PATCH 80/93] Mod json changes --- src/main/resources/fabric.mod.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 67b2f16de..cfc28d7c6 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,8 +45,8 @@ "depends": { "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", - "minecraft": ">=1.18.1", - "bclib": ">=1.1.2" + "minecraft": ">=1.18.x", + "bclib": ">=1.1.6" }, "suggests": { "byg": ">=1.1.3", From a307cb7dc5752d8b7aea110049a303e62fa75c05 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 25 Dec 2021 18:13:03 +0300 Subject: [PATCH 81/93] Neon Oasis surface fix --- .../world/biome/land/NeonOasisBiome.java | 28 +++++++++++++++++++ .../world/surface/SplitNoiseCondition.java | 21 ++++++++++++++ src/main/resources/fabric.mod.json | 2 +- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 7baa3e812..19e9d448e 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -2,13 +2,23 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; +import net.minecraft.world.level.levelgen.placement.CaveSurface; import ru.bclib.api.biomes.BCLBiomeBuilder; +import ru.bclib.api.surface.SurfaceRuleBuilder; +import ru.bclib.api.surface.rules.SwitchRuleSource; import ru.bclib.interfaces.SurfaceMaterialProvider; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; +import ru.betterend.world.surface.SplitNoiseCondition; +import ru.betterend.world.surface.SulphuricSurfaceNoiseCondition; + +import java.util.List; public class NeonOasisBiome extends EndBiome.Config { public NeonOasisBiome() { @@ -47,6 +57,24 @@ public BlockState getTopMaterial() { public BlockState getAltTopMaterial() { return EndBlocks.END_MOSS.defaultBlockState(); } + + @Override + public SurfaceRuleBuilder surface() { + RuleSource surfaceBlockRule = new SwitchRuleSource( + new SplitNoiseCondition(), + List.of( + SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()), + SurfaceRules.state(EndBlocks.END_MOSS.defaultBlockState()) + ) + ); + return super + .surface() + .ceil(Blocks.END_STONE.defaultBlockState()) + .rule(1, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, surfaceBlockRule)) + .rule(4, SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(5, false, false, CaveSurface.FLOOR), + SurfaceRules.state(EndBlocks.ENDSTONE_DUST.defaultBlockState()) + )); + } }; } } diff --git a/src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java b/src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java new file mode 100644 index 000000000..d3e6aa4e3 --- /dev/null +++ b/src/main/java/ru/betterend/world/surface/SplitNoiseCondition.java @@ -0,0 +1,21 @@ +package ru.betterend.world.surface; + +import ru.bclib.interfaces.NumericProvider; +import ru.bclib.mixin.common.SurfaceRulesContextAccessor; +import ru.bclib.util.MHelper; +import ru.betterend.noise.OpenSimplexNoise; + +/** + * Noise source that returns a value in [0, 1] + */ +public class SplitNoiseCondition implements NumericProvider { + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(4141); + + @Override + public int getNumber(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + float noise = (float) NOISE.eval(x * 0.1, z * 0.1) + MHelper.randRange(-0.4F, 0.4F, MHelper.RANDOM); + return noise > 0 ? 1 : 0; + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index cfc28d7c6..f1a9638e7 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -45,7 +45,7 @@ "depends": { "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", - "minecraft": ">=1.18.x", + "minecraft": "1.18.x", "bclib": ">=1.1.6" }, "suggests": { From ce11929d5ae03e1c083d1508a87080a8f07073af Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 25 Dec 2021 18:15:42 +0300 Subject: [PATCH 82/93] Biome formatting fix --- .../ru/betterend/registry/EndFeatures.java | 4 -- .../biome/land/BlossomingSpiresBiome.java | 37 ++++++------ .../world/biome/land/DryShrublandBiome.java | 25 ++++---- .../world/biome/land/DustWastelandsBiome.java | 1 - .../biome/land/FoggyMushroomlandBiome.java | 57 ++++++++++--------- .../biome/land/GlowingGrasslandsBiome.java | 45 ++++++++------- .../world/biome/land/LanternWoodsBiome.java | 45 ++++++++------- .../world/biome/land/MegalakeBiome.java | 49 ++++++++-------- .../world/biome/land/MegalakeGroveBiome.java | 53 ++++++++--------- .../world/biome/land/NeonOasisBiome.java | 34 +++++------ .../biome/land/PaintedMountainsBiome.java | 17 +++--- .../world/biome/land/UmbraValleyBiome.java | 21 +++---- .../world/biome/land/UmbrellaJungleBiome.java | 53 ++++++++--------- 13 files changed, 223 insertions(+), 218 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index a43c08d07..99cf7e816 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -6,7 +6,6 @@ import net.minecraft.core.Registry; import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -16,13 +15,10 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; import net.minecraft.world.level.levelgen.placement.CountPlacement; import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraft.world.level.levelgen.placement.PlacementModifier; -import net.minecraft.world.level.levelgen.placement.RandomOffsetPlacement; -import net.minecraft.world.level.levelgen.structure.templatesystem.BlockMatchTest; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.features.BCLCommonFeatures; diff --git a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java index 553e5f7f2..90fdda64d 100644 --- a/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/BlossomingSpiresBiome.java @@ -22,24 +22,25 @@ protected boolean hasCaves() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(241, 146, 229) - .fogDensity(1.7F) - .plantsColor(122, 45, 122) - .music(EndSounds.MUSIC_FOREST) - .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) - .feature(EndFeatures.SPIRE) - .feature(EndFeatures.FLOATING_SPIRE) - .feature(EndFeatures.TENANEA) - .feature(EndFeatures.TENANEA_BUSH) - .feature(EndFeatures.BULB_VINE) - .feature(EndFeatures.BUSHY_GRASS) - .feature(EndFeatures.BUSHY_GRASS_WG) - .feature(EndFeatures.BLOSSOM_BERRY) - .feature(EndFeatures.TWISTED_MOSS) - .feature(EndFeatures.TWISTED_MOSS_WOOD) - .feature(EndFeatures.SILK_MOTH_NEST) - .spawn(EntityType.ENDERMAN, 50, 1, 4) - .spawn(EndEntities.SILK_MOTH, 5, 1, 2); + builder + .fogColor(241, 146, 229) + .fogDensity(1.7F) + .plantsColor(122, 45, 122) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_BLOSSOMING_SPIRES) + .feature(EndFeatures.SPIRE) + .feature(EndFeatures.FLOATING_SPIRE) + .feature(EndFeatures.TENANEA) + .feature(EndFeatures.TENANEA_BUSH) + .feature(EndFeatures.BULB_VINE) + .feature(EndFeatures.BUSHY_GRASS) + .feature(EndFeatures.BUSHY_GRASS_WG) + .feature(EndFeatures.BLOSSOM_BERRY) + .feature(EndFeatures.TWISTED_MOSS) + .feature(EndFeatures.TWISTED_MOSS_WOOD) + .feature(EndFeatures.SILK_MOTH_NEST) + .spawn(EntityType.ENDERMAN, 50, 1, 4) + .spawn(EndEntities.SILK_MOTH, 5, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java index ced2823a8..d8e2362f9 100644 --- a/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DryShrublandBiome.java @@ -16,18 +16,19 @@ public DryShrublandBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(132, 35, 13) - .fogDensity(1.2F) - .waterAndFogColor(113, 88, 53) - .plantsColor(237, 122, 66) - .music(EndSounds.MUSIC_OPENSPACE) - .feature(EndFeatures.LUCERNIA_BUSH_RARE) - .feature(EndFeatures.ORANGO) - .feature(EndFeatures.AERIDIUM) - .feature(EndFeatures.LUTEBUS) - .feature(EndFeatures.LAMELLARIUM) - .structure(VANILLA_FEATURES.getEndCity()) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .fogColor(132, 35, 13) + .fogDensity(1.2F) + .waterAndFogColor(113, 88, 53) + .plantsColor(237, 122, 66) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.LUCERNIA_BUSH_RARE) + .feature(EndFeatures.ORANGO) + .feature(EndFeatures.AERIDIUM) + .feature(EndFeatures.LUTEBUS) + .feature(EndFeatures.LAMELLARIUM) + .structure(VANILLA_FEATURES.getEndCity()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java index 85dfc4d24..ebed3bbcb 100644 --- a/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/DustWastelandsBiome.java @@ -5,7 +5,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; -import net.minecraft.world.level.levelgen.SurfaceRules.SurfaceRule; import net.minecraft.world.level.levelgen.placement.CaveSurface; import ru.bclib.api.biomes.BCLBiomeBuilder; import ru.bclib.api.surface.SurfaceRuleBuilder; diff --git a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java index 29fc75a0d..1f8d065dd 100644 --- a/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/FoggyMushroomlandBiome.java @@ -19,34 +19,35 @@ public FoggyMushroomlandBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.structure(EndStructures.GIANT_MOSSY_GLOWSHROOM.getFeatureConfigured()) - .plantsColor(73, 210, 209) - .fogColor(41, 122, 173) - .fogDensity(3) - .waterAndFogColor(119, 227, 250) - .particles(EndParticles.GLOWING_SPHERE, 0.001F) - .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) - .music(EndSounds.MUSIC_FOREST) - .feature(EndFeatures.END_LAKE) - .feature(EndFeatures.MOSSY_GLOWSHROOM) - .feature(EndFeatures.BLUE_VINE) - .feature(EndFeatures.UMBRELLA_MOSS) - .feature(EndFeatures.CREEPING_MOSS) - .feature(EndFeatures.DENSE_VINE) - //.feature(EndFeatures.PEARLBERRY) - .feature(EndFeatures.CYAN_MOSS) - .feature(EndFeatures.CYAN_MOSS_WOOD) - .feature(EndFeatures.END_LILY) - .feature(EndFeatures.BUBBLE_CORAL) - .feature(EndFeatures.CHARNIA_CYAN) - .feature(EndFeatures.CHARNIA_LIGHT_BLUE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEndCity()) - .spawn(EndEntities.DRAGONFLY, 80, 2, 5) - .spawn(EndEntities.END_FISH, 20, 2, 5) - .spawn(EndEntities.CUBOZOA, 10, 3, 8) - .spawn(EndEntities.END_SLIME, 10, 1, 2) - .spawn(EntityType.ENDERMAN, 10, 1, 2); + builder + .structure(EndStructures.GIANT_MOSSY_GLOWSHROOM.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(41, 122, 173) + .fogDensity(3) + .waterAndFogColor(119, 227, 250) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .loop(EndSounds.AMBIENT_FOGGY_MUSHROOMLAND) + .music(EndSounds.MUSIC_FOREST) + .feature(EndFeatures.END_LAKE) + .feature(EndFeatures.MOSSY_GLOWSHROOM) + .feature(EndFeatures.BLUE_VINE) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.DENSE_VINE) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CYAN_MOSS) + .feature(EndFeatures.CYAN_MOSS_WOOD) + .feature(EndFeatures.END_LILY) + .feature(EndFeatures.BUBBLE_CORAL) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEndCity()) + .spawn(EndEntities.DRAGONFLY, 80, 2, 5) + .spawn(EndEntities.END_FISH, 20, 2, 5) + .spawn(EndEntities.CUBOZOA, 10, 3, 8) + .spawn(EndEntities.END_SLIME, 10, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java index dcee170d3..6e84c5218 100644 --- a/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/GlowingGrasslandsBiome.java @@ -17,28 +17,29 @@ public GlowingGrasslandsBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(99, 228, 247) - .fogDensity(1.3F) - .particles(EndParticles.FIREFLY, 0.001F) - .music(EndSounds.MUSIC_OPENSPACE) - .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) - .waterAndFogColor(92, 250, 230) - .plantsColor(73, 210, 209) - .feature(EndFeatures.END_LAKE_RARE) - .feature(EndFeatures.LUMECORN) - .feature(EndFeatures.BLOOMING_COOKSONIA) - .feature(EndFeatures.SALTEAGO) - .feature(EndFeatures.VAIOLUSH_FERN) - .feature(EndFeatures.FRACTURN) - .feature(EndFeatures.UMBRELLA_MOSS_RARE) - .feature(EndFeatures.CREEPING_MOSS_RARE) - .feature(EndFeatures.TWISTED_UMBRELLA_MOSS_RARE) - .feature(EndFeatures.CHARNIA_CYAN) - .feature(EndFeatures.CHARNIA_GREEN) - .feature(EndFeatures.CHARNIA_LIGHT_BLUE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEndCity()) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .fogColor(99, 228, 247) + .fogDensity(1.3F) + .particles(EndParticles.FIREFLY, 0.001F) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_GLOWING_GRASSLANDS) + .waterAndFogColor(92, 250, 230) + .plantsColor(73, 210, 209) + .feature(EndFeatures.END_LAKE_RARE) + .feature(EndFeatures.LUMECORN) + .feature(EndFeatures.BLOOMING_COOKSONIA) + .feature(EndFeatures.SALTEAGO) + .feature(EndFeatures.VAIOLUSH_FERN) + .feature(EndFeatures.FRACTURN) + .feature(EndFeatures.UMBRELLA_MOSS_RARE) + .feature(EndFeatures.CREEPING_MOSS_RARE) + .feature(EndFeatures.TWISTED_UMBRELLA_MOSS_RARE) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEndCity()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java index 06213252b..d738a6efd 100644 --- a/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/LanternWoodsBiome.java @@ -17,28 +17,29 @@ public LanternWoodsBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(189, 82, 70) - .fogDensity(1.1F) - .waterAndFogColor(171, 234, 226) - .plantsColor(254, 85, 57) - .music(EndSounds.MUSIC_FOREST) - .particles(EndParticles.GLOWING_SPHERE, 0.001F) - .feature(EndFeatures.END_LAKE_NORMAL) - .feature(EndFeatures.FLAMAEA) - .feature(EndFeatures.LUCERNIA) - .feature(EndFeatures.LUCERNIA_BUSH) - .feature(EndFeatures.FILALUX) - .feature(EndFeatures.AERIDIUM) - .feature(EndFeatures.LAMELLARIUM) - .feature(EndFeatures.BOLUX_MUSHROOM) - .feature(EndFeatures.AURANT_POLYPORE) - .feature(EndFeatures.POND_ANEMONE) - .feature(EndFeatures.CHARNIA_ORANGE) - .feature(EndFeatures.CHARNIA_RED) - .feature(EndFeatures.RUSCUS) - .feature(EndFeatures.RUSCUS_WOOD) - .structure(VANILLA_FEATURES.getEndCity()) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .fogColor(189, 82, 70) + .fogDensity(1.1F) + .waterAndFogColor(171, 234, 226) + .plantsColor(254, 85, 57) + .music(EndSounds.MUSIC_FOREST) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .feature(EndFeatures.END_LAKE_NORMAL) + .feature(EndFeatures.FLAMAEA) + .feature(EndFeatures.LUCERNIA) + .feature(EndFeatures.LUCERNIA_BUSH) + .feature(EndFeatures.FILALUX) + .feature(EndFeatures.AERIDIUM) + .feature(EndFeatures.LAMELLARIUM) + .feature(EndFeatures.BOLUX_MUSHROOM) + .feature(EndFeatures.AURANT_POLYPORE) + .feature(EndFeatures.POND_ANEMONE) + .feature(EndFeatures.CHARNIA_ORANGE) + .feature(EndFeatures.CHARNIA_RED) + .feature(EndFeatures.RUSCUS) + .feature(EndFeatures.RUSCUS_WOOD) + .structure(VANILLA_FEATURES.getEndCity()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java index c197dfae3..964f329d4 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeBiome.java @@ -18,30 +18,31 @@ public MegalakeBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.structure(EndStructures.MEGALAKE.getFeatureConfigured()) - .plantsColor(73, 210, 209) - .fogColor(178, 209, 248) - .waterAndFogColor(96, 163, 255) - .fogDensity(1.75F) - .music(EndSounds.MUSIC_WATER) - .loop(EndSounds.AMBIENT_MEGALAKE) - .terrainHeight(0F) - .feature(EndFeatures.END_LOTUS) - .feature(EndFeatures.END_LOTUS_LEAF) - .feature(EndFeatures.BUBBLE_CORAL_RARE) - .feature(EndFeatures.END_LILY_RARE) - .feature(EndFeatures.UMBRELLA_MOSS) - .feature(EndFeatures.CREEPING_MOSS) - //.feature(EndFeatures.PEARLBERRY) - .feature(EndFeatures.CHARNIA_CYAN) - .feature(EndFeatures.CHARNIA_LIGHT_BLUE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .feature(EndFeatures.MENGER_SPONGE) - .spawn(EndEntities.DRAGONFLY, 50, 1, 3) - .spawn(EndEntities.END_FISH, 50, 3, 8) - .spawn(EndEntities.CUBOZOA, 50, 3, 8) - .spawn(EndEntities.END_SLIME, 5, 1, 2) - .spawn(EntityType.ENDERMAN, 10, 1, 2); + builder + .structure(EndStructures.MEGALAKE.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(178, 209, 248) + .waterAndFogColor(96, 163, 255) + .fogDensity(1.75F) + .music(EndSounds.MUSIC_WATER) + .loop(EndSounds.AMBIENT_MEGALAKE) + .terrainHeight(0F) + .feature(EndFeatures.END_LOTUS) + .feature(EndFeatures.END_LOTUS_LEAF) + .feature(EndFeatures.BUBBLE_CORAL_RARE) + .feature(EndFeatures.END_LILY_RARE) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .feature(EndFeatures.MENGER_SPONGE) + .spawn(EndEntities.DRAGONFLY, 50, 1, 3) + .spawn(EndEntities.END_FISH, 50, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java index 14e09e1cf..46e519021 100644 --- a/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/MegalakeGroveBiome.java @@ -19,32 +19,33 @@ public MegalakeGroveBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.structure(EndStructures.MEGALAKE_SMALL.getFeatureConfigured()) - .plantsColor(73, 210, 209) - .fogColor(178, 209, 248) - .waterAndFogColor(96, 163, 255) - .fogDensity(2.0F) - .particles(EndParticles.GLOWING_SPHERE, 0.001F) - .music(EndSounds.MUSIC_WATER) - .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) - .terrainHeight(0F) - .feature(EndFeatures.LACUGROVE) - .feature(EndFeatures.END_LOTUS) - .feature(EndFeatures.END_LOTUS_LEAF) - .feature(EndFeatures.BUBBLE_CORAL_RARE) - .feature(EndFeatures.END_LILY_RARE) - .feature(EndFeatures.UMBRELLA_MOSS) - //.feature(EndFeatures.PEARLBERRY) - .feature(EndFeatures.CREEPING_MOSS) - .feature(EndFeatures.CHARNIA_CYAN) - .feature(EndFeatures.CHARNIA_LIGHT_BLUE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .feature(EndFeatures.MENGER_SPONGE) - .spawn(EndEntities.DRAGONFLY, 20, 1, 3) - .spawn(EndEntities.END_FISH, 20, 3, 8) - .spawn(EndEntities.CUBOZOA, 50, 3, 8) - .spawn(EndEntities.END_SLIME, 5, 1, 2) - .spawn(EntityType.ENDERMAN, 10, 1, 2); + builder + .structure(EndStructures.MEGALAKE_SMALL.getFeatureConfigured()) + .plantsColor(73, 210, 209) + .fogColor(178, 209, 248) + .waterAndFogColor(96, 163, 255) + .fogDensity(2.0F) + .particles(EndParticles.GLOWING_SPHERE, 0.001F) + .music(EndSounds.MUSIC_WATER) + .loop(EndSounds.AMBIENT_MEGALAKE_GROVE) + .terrainHeight(0F) + .feature(EndFeatures.LACUGROVE) + .feature(EndFeatures.END_LOTUS) + .feature(EndFeatures.END_LOTUS_LEAF) + .feature(EndFeatures.BUBBLE_CORAL_RARE) + .feature(EndFeatures.END_LILY_RARE) + .feature(EndFeatures.UMBRELLA_MOSS) + //.feature(EndFeatures.PEARLBERRY) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .feature(EndFeatures.MENGER_SPONGE) + .spawn(EndEntities.DRAGONFLY, 20, 1, 3) + .spawn(EndEntities.END_FISH, 20, 3, 8) + .spawn(EndEntities.CUBOZOA, 50, 3, 8) + .spawn(EndEntities.END_SLIME, 5, 1, 2) + .spawn(EntityType.ENDERMAN, 10, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java index 19e9d448e..b5fa62946 100644 --- a/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/NeonOasisBiome.java @@ -16,7 +16,6 @@ import ru.betterend.registry.EndSounds; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.surface.SplitNoiseCondition; -import ru.betterend.world.surface.SulphuricSurfaceNoiseCondition; import java.util.List; @@ -27,22 +26,23 @@ public NeonOasisBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.genChance(0.5F) - .fogColor(226, 239, 168) - .fogDensity(2) - .waterAndFogColor(106, 238, 215) - .particles(ParticleTypes.WHITE_ASH, 0.01F) - .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .music(EndSounds.MUSIC_OPENSPACE) - .feature(EndFeatures.DESERT_LAKE) - .feature(EndFeatures.NEON_CACTUS) - .feature(EndFeatures.UMBRELLA_MOSS) - .feature(EndFeatures.CREEPING_MOSS) - .feature(EndFeatures.CHARNIA_GREEN) - .feature(EndFeatures.CHARNIA_CYAN) - .feature(EndFeatures.CHARNIA_RED) - .structure(VANILLA_FEATURES.getEndCity()) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .genChance(0.5F) + .fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(106, 238, 215) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .music(EndSounds.MUSIC_OPENSPACE) + .feature(EndFeatures.DESERT_LAKE) + .feature(EndFeatures.NEON_CACTUS) + .feature(EndFeatures.UMBRELLA_MOSS) + .feature(EndFeatures.CREEPING_MOSS) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_RED) + .structure(VANILLA_FEATURES.getEndCity()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java index 0f5f04944..f313a5973 100644 --- a/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/PaintedMountainsBiome.java @@ -17,14 +17,15 @@ public PaintedMountainsBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.structure(EndStructures.PAINTED_MOUNTAIN.getFeatureConfigured()) - .fogColor(226, 239, 168) - .fogDensity(2) - .waterAndFogColor(192, 180, 131) - .music(EndSounds.MUSIC_OPENSPACE) - .loop(EndSounds.AMBIENT_DUST_WASTELANDS) - .particles(ParticleTypes.WHITE_ASH, 0.01F) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .structure(EndStructures.PAINTED_MOUNTAIN.getFeatureConfigured()) + .fogColor(226, 239, 168) + .fogDensity(2) + .waterAndFogColor(192, 180, 131) + .music(EndSounds.MUSIC_OPENSPACE) + .loop(EndSounds.AMBIENT_DUST_WASTELANDS) + .particles(ParticleTypes.WHITE_ASH, 0.01F) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java index cb7a086d2..5e75208d0 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbraValleyBiome.java @@ -31,16 +31,17 @@ public UmbraValleyBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(100, 100, 100) - .plantsColor(172, 189, 190) - .waterAndFogColor(69, 104, 134) - .particles(EndParticles.AMBER_SPHERE, 0.0001F) - .loop(EndSounds.UMBRA_VALLEY) - .music(EndSounds.MUSIC_DARK) - .feature(EndFeatures.UMBRALITH_ARCH) - .feature(EndFeatures.THIN_UMBRALITH_ARCH) - .feature(EndFeatures.INFLEXIA) - .feature(EndFeatures.FLAMMALIX); + builder + .fogColor(100, 100, 100) + .plantsColor(172, 189, 190) + .waterAndFogColor(69, 104, 134) + .particles(EndParticles.AMBER_SPHERE, 0.0001F) + .loop(EndSounds.UMBRA_VALLEY) + .music(EndSounds.MUSIC_DARK) + .feature(EndFeatures.UMBRALITH_ARCH) + .feature(EndFeatures.THIN_UMBRALITH_ARCH) + .feature(EndFeatures.INFLEXIA) + .feature(EndFeatures.FLAMMALIX); } @Override diff --git a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java index 59fbc4df2..35b5d09f8 100644 --- a/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/UmbrellaJungleBiome.java @@ -17,32 +17,33 @@ public UmbrellaJungleBiome() { @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { - builder.fogColor(87, 223, 221) - .waterAndFogColor(119, 198, 253) - .foliageColor(27, 183, 194) - .fogDensity(2.3F) - .particles(EndParticles.JUNGLE_SPORE, 0.001F) - .music(EndSounds.MUSIC_FOREST) - .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) - .feature(EndFeatures.END_LAKE) - .feature(EndFeatures.UMBRELLA_TREE) - .feature(EndFeatures.JELLYSHROOM) - .feature(EndFeatures.TWISTED_UMBRELLA_MOSS) - .feature(EndFeatures.SMALL_JELLYSHROOM_FLOOR) - .feature(EndFeatures.JUNGLE_GRASS) - .feature(EndFeatures.CYAN_MOSS) - .feature(EndFeatures.CYAN_MOSS_WOOD) - .feature(EndFeatures.JUNGLE_FERN_WOOD) - .feature(EndFeatures.SMALL_JELLYSHROOM_WALL) - .feature(EndFeatures.SMALL_JELLYSHROOM_WOOD) - .feature(EndFeatures.SMALL_JELLYSHROOM_CEIL) - .feature(EndFeatures.JUNGLE_VINE) - .feature(EndFeatures.CHARNIA_CYAN) - .feature(EndFeatures.CHARNIA_GREEN) - .feature(EndFeatures.CHARNIA_LIGHT_BLUE) - .feature(EndFeatures.CHARNIA_RED_RARE) - .structure(VANILLA_FEATURES.getEndCity()) - .spawn(EntityType.ENDERMAN, 50, 1, 2); + builder + .fogColor(87, 223, 221) + .waterAndFogColor(119, 198, 253) + .foliageColor(27, 183, 194) + .fogDensity(2.3F) + .particles(EndParticles.JUNGLE_SPORE, 0.001F) + .music(EndSounds.MUSIC_FOREST) + .loop(EndSounds.AMBIENT_UMBRELLA_JUNGLE) + .feature(EndFeatures.END_LAKE) + .feature(EndFeatures.UMBRELLA_TREE) + .feature(EndFeatures.JELLYSHROOM) + .feature(EndFeatures.TWISTED_UMBRELLA_MOSS) + .feature(EndFeatures.SMALL_JELLYSHROOM_FLOOR) + .feature(EndFeatures.JUNGLE_GRASS) + .feature(EndFeatures.CYAN_MOSS) + .feature(EndFeatures.CYAN_MOSS_WOOD) + .feature(EndFeatures.JUNGLE_FERN_WOOD) + .feature(EndFeatures.SMALL_JELLYSHROOM_WALL) + .feature(EndFeatures.SMALL_JELLYSHROOM_WOOD) + .feature(EndFeatures.SMALL_JELLYSHROOM_CEIL) + .feature(EndFeatures.JUNGLE_VINE) + .feature(EndFeatures.CHARNIA_CYAN) + .feature(EndFeatures.CHARNIA_GREEN) + .feature(EndFeatures.CHARNIA_LIGHT_BLUE) + .feature(EndFeatures.CHARNIA_RED_RARE) + .structure(VANILLA_FEATURES.getEndCity()) + .spawn(EntityType.ENDERMAN, 50, 1, 2); } @Override From 87c37f1cef16344a328dd93d281666f5f5ca2c5c Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 25 Dec 2021 18:38:20 +0300 Subject: [PATCH 83/93] Mosses & glowshrooms count re-balance --- src/main/java/ru/betterend/registry/EndFeatures.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 99cf7e816..5b0ff23d0 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -101,7 +101,7 @@ public class EndFeatures { // Trees // - public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3); + public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 2); public static final BCLFeature PYTHADENDRON_TREE = redisterVegetation("pythadendron_tree", new PythadendronTreeFeature(), 1); public static final BCLFeature LACUGROVE = redisterVegetation("lacugrove", new LacugroveFeature(), 4); public static final BCLFeature DRAGON_TREE = redisterVegetation("dragon_tree", new DragonTreeFeature(), 2); @@ -123,8 +123,8 @@ public class EndFeatures { public static final BCLFeature NEON_CACTUS = redisterVegetation("neon_cactus", new NeonCactusFeature(), 2); // Plants // - public static final BCLFeature UMBRELLA_MOSS = redisterVegetation("umbrella_moss", new DoublePlantFeature(EndBlocks.UMBRELLA_MOSS, EndBlocks.UMBRELLA_MOSS_TALL, 5), 5); - public static final BCLFeature CREEPING_MOSS = redisterVegetation("creeping_moss", new SinglePlantFeature(EndBlocks.CREEPING_MOSS, 5), 5); + public static final BCLFeature UMBRELLA_MOSS = redisterVegetation("umbrella_moss", new DoublePlantFeature(EndBlocks.UMBRELLA_MOSS, EndBlocks.UMBRELLA_MOSS_TALL, 5), 3); + public static final BCLFeature CREEPING_MOSS = redisterVegetation("creeping_moss", new SinglePlantFeature(EndBlocks.CREEPING_MOSS, 5), 3); public static final BCLFeature BLUE_VINE = redisterVegetation("blue_vine", new BlueVineFeature(), 1); public static final BCLFeature CHORUS_GRASS = redisterVegetation("chorus_grass", new SinglePlantFeature(EndBlocks.CHORUS_GRASS, 4), 3); public static final BCLFeature CRYSTAL_GRASS = redisterVegetation("crystal_grass", new SinglePlantFeature(EndBlocks.CRYSTAL_GRASS, 8, false), 5); From 1ae6d0d63e2ae16547c84a4dc2f79970cf8518f8 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 28 Dec 2021 21:50:15 +0300 Subject: [PATCH 84/93] Partial pedestals fix --- .../java/ru/betterend/blocks/EndPedestal.java | 20 ++--- .../betterend/blocks/basis/PedestalBlock.java | 88 +++++++------------ .../entities/InfusionPedestalEntity.java | 2 +- .../blocks/entities/PedestalBlockEntity.java | 46 +++++----- .../client/render/PedestalItemRenderer.java | 32 ++----- 5 files changed, 68 insertions(+), 120 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/EndPedestal.java b/src/main/java/ru/betterend/blocks/EndPedestal.java index 2478b1b10..b0106f957 100644 --- a/src/main/java/ru/betterend/blocks/EndPedestal.java +++ b/src/main/java/ru/betterend/blocks/EndPedestal.java @@ -1,12 +1,12 @@ package ru.betterend.blocks; +import com.google.common.collect.Maps; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import ru.betterend.BetterEnd; import ru.betterend.blocks.basis.PedestalBlock; -import java.util.HashMap; import java.util.Map; public class EndPedestal extends PedestalBlock { @@ -19,16 +19,12 @@ public EndPedestal(Block parent) { protected Map createTexturesMap() { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath(); - return new HashMap() { - private static final long serialVersionUID = 1L; - - { - put("%mod%", BetterEnd.MOD_ID); - put("%top%", name + "_polished"); - put("%base%", name + "_polished"); - put("%pillar%", name + "_pillar_side"); - put("%bottom%", name + "_polished"); - } - }; + Map textures = Maps.newHashMap(); + textures.put("%mod%", BetterEnd.MOD_ID); + textures.put("%top%", name + "_polished"); + textures.put("%base%", name + "_polished"); + textures.put("%pillar%", name + "_pillar_side"); + textures.put("%bottom%", name + "_polished"); + return textures; } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 784377f5f..1b9720ef4 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks.basis; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -23,8 +24,6 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; @@ -45,17 +44,14 @@ import ru.betterend.blocks.entities.InfusionPedestalEntity; import ru.betterend.blocks.entities.PedestalBlockEntity; import ru.betterend.client.models.Patterns; -import ru.betterend.registry.EndBlocks; import ru.betterend.rituals.InfusionRitual; import java.awt.Point; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.ToIntFunction; -@SuppressWarnings({"deprecation"}) public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { public final static EnumProperty STATE = EndBlockProperties.PEDESTAL_STATE; public static final BooleanProperty HAS_ITEM = EndBlockProperties.HAS_ITEM; @@ -68,37 +64,18 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { private static final VoxelShape SHAPE_COLUMN_TOP; private static final VoxelShape SHAPE_BOTTOM; - /** - * Register new Pedestal block with Better End mod id. - * - * @param name pedestal name - * @param source source block - * @return new Pedestal block with Better End id. - */ - public static Block registerPedestal(String name, Block source) { - return EndBlocks.registerBlock(name, new PedestalBlock(source)); - } - - /** - * Register new Pedestal block with specified mod id. - * - * @param id pedestal id - * @param source source block - * @return new Pedestal block with specified id. - */ - public static Block registerPedestal(ResourceLocation id, Block source) { - return EndBlocks.registerBlock(id, new PedestalBlock(source)); - } - protected final Block parent; protected float height = 1.0F; public PedestalBlock(Block parent) { super(FabricBlockSettings.copyOf(parent).luminance(getLuminance(parent.defaultBlockState()))); - this.registerDefaultState(stateDefinition.any() - .setValue(STATE, PedestalState.DEFAULT) - .setValue(HAS_ITEM, false) - .setValue(HAS_LIGHT, false)); + this.registerDefaultState( + stateDefinition + .any() + .setValue(STATE, PedestalState.DEFAULT) + .setValue(HAS_ITEM, false) + .setValue(HAS_LIGHT, false) + ); this.parent = parent; } @@ -118,28 +95,29 @@ public float getHeight(BlockState state) { } @Override - @Deprecated - public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - if (world.isClientSide || !state.is(this)) return InteractionResult.CONSUME; - if (!isPlaceable(state)) { + @SuppressWarnings("deprecation") + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + if (!state.is(this) || !isPlaceable(state)) { return InteractionResult.PASS; } - BlockEntity blockEntity = world.getBlockEntity(pos); + BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof PedestalBlockEntity) { PedestalBlockEntity pedestal = (PedestalBlockEntity) blockEntity; if (pedestal.isEmpty()) { ItemStack itemStack = player.getItemInHand(hand); if (itemStack.isEmpty()) return InteractionResult.CONSUME; pedestal.setItem(0, itemStack); - checkRitual(world, pos); - return InteractionResult.SUCCESS; + level.blockEntityChanged(pos); + checkRitual(level, pos); + return InteractionResult.SUCCESS;//InteractionResult.sidedSuccess(level.isClientSide()); } else { ItemStack itemStack = pedestal.getItem(0); if (player.addItem(itemStack)) { pedestal.removeItemNoUpdate(0); - checkRitual(world, pos); - return InteractionResult.SUCCESS; + level.blockEntityChanged(pos); + checkRitual(level, pos); + return InteractionResult.SUCCESS;//InteractionResult.sidedSuccess(level.isClientSide()); } return InteractionResult.FAIL; } @@ -207,7 +185,7 @@ else if (hasPedestalOver) { } @Override - @Deprecated + @SuppressWarnings("deprecation") public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { BlockState updated = getUpdatedState(state, direction, newState, world, pos, posFrom); if (!updated.is(this)) return updated; @@ -344,7 +322,7 @@ public boolean isPlaceable(BlockState state) { } @Override - @Deprecated + @SuppressWarnings("deprecation") public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (state.is(this)) { switch (state.getValue(STATE)) { @@ -386,13 +364,13 @@ public boolean hasUniqueEntity() { } @Override - @Deprecated + @SuppressWarnings("deprecation") public boolean hasAnalogOutputSignal(BlockState state) { return state.getBlock() instanceof PedestalBlock; } @Override - @Deprecated + @SuppressWarnings("deprecation") public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { return state.getValue(HAS_ITEM) ? 15 : 0; } @@ -446,17 +424,13 @@ public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockSt protected Map createTexturesMap() { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath(); - return new HashMap() { - private static final long serialVersionUID = 1L; - - { - put("%mod%", blockId.getNamespace()); - put("%top%", name + "_top"); - put("%base%", name + "_base"); - put("%pillar%", name + "_pillar"); - put("%bottom%", name + "_bottom"); - } - }; + Map textures = Maps.newHashMap(); + textures.put("%mod%", blockId.getNamespace()); + textures.put("%top%", name + "_top"); + textures.put("%base%", name + "_base"); + textures.put("%pillar%", name + "_pillar"); + textures.put("%bottom%", name + "_bottom"); + return textures; } static { @@ -478,9 +452,9 @@ protected Map createTexturesMap() { SHAPE_BOTTOM = Shapes.or(basin, SHAPE_PILLAR); } - @Override + /*@Override @Nullable public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { return level.isClientSide() ? PedestalBlockEntity::tick : null; - } + }*/ } diff --git a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java index 8d6781764..47420b67b 100644 --- a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java @@ -62,7 +62,7 @@ public static void tickEnity(Level level, BlockPos block if (blockEntity.hasRitual()) { blockEntity.linkedRitual.tick(); } - PedestalBlockEntity.tick(level, blockPos, blockState, blockEntity); + //PedestalBlockEntity.tick(level, blockPos, blockState, blockEntity); } } } diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 4a581bcf0..06c3ff738 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -1,12 +1,13 @@ package ru.betterend.blocks.entities; //import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; + import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -18,8 +19,8 @@ public class PedestalBlockEntity extends BlockEntity implements Container/*, BlockEntityClientSerializable*/ { private ItemStack activeItem = ItemStack.EMPTY; - private final int maxAge = 314; - private int age; + //private final int maxAge = 314; + //private int age; public PedestalBlockEntity(BlockPos blockPos, BlockState blockState) { this(EndBlockEntities.PEDESTAL, blockPos, blockState); @@ -29,13 +30,13 @@ public PedestalBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos super(blockEntityType, blockPos, blockState); } - public int getAge() { + /*public int getAge() { return age; - } + }*/ - public int getMaxAge() { + /*public int getMaxAge() { return maxAge; - } + }*/ @Override public int getContainerSize() { @@ -99,7 +100,6 @@ public void setChanged() { super.setChanged(); } - @Override public boolean stillValid(Player player) { return true; @@ -111,22 +111,12 @@ public void load(CompoundTag tag) { fromTag(tag); } - /*@Override - public CompoundTag save(CompoundTag tag) { - tag.put("active_item", activeItem.save(new CompoundTag())); - return super.save(tag); - } - @Override - public void fromClientTag(CompoundTag tag) { + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); fromTag(tag); } - @Override - public CompoundTag toClientTag(CompoundTag tag) { - return save(tag); - }*/ - protected void fromTag(CompoundTag tag) { if (tag.contains("active_item")) { CompoundTag itemTag = tag.getCompound("active_item"); @@ -134,16 +124,26 @@ protected void fromTag(CompoundTag tag) { } } - public static void tick(Level level, BlockPos blockPos, BlockState blockState, T uncastedEntity) { + /*public static void tick(Level level, BlockPos blockPos, BlockState blockState, T uncastedEntity) { clientTick(level, blockPos, blockState, (PedestalBlockEntity) uncastedEntity); - } + }*/ - private static void clientTick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { + /*private static void clientTick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { if (!blockEntity.isEmpty()) { blockEntity.age++; if (blockEntity.age > blockEntity.maxAge) { blockEntity.age = 0; } } + }*/ + + @Override + public ClientboundBlockEntityDataPacket getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public CompoundTag getUpdateTag() { + return this.saveWithoutMetadata(); } } diff --git a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java index 4edb08c84..9b19e613d 100644 --- a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java @@ -24,7 +24,6 @@ @Environment(EnvType.CLIENT) public class PedestalItemRenderer implements BlockEntityRenderer { - public PedestalItemRenderer(BlockEntityRendererProvider.Context ctx) { super(); } @@ -41,7 +40,6 @@ public void render(T blockEntity, float tickDelta, PoseStack matrices, MultiBuff matrices.pushPose(); Minecraft minecraft = Minecraft.getInstance(); - //TODO: check i=0 BakedModel model = minecraft.getItemRenderer().getModel(activeItem, world, null, 0); Vector3f translate = model.getTransforms().ground.translation; PedestalBlock pedestal = (PedestalBlock) state.getBlock(); @@ -52,28 +50,17 @@ public void render(T blockEntity, float tickDelta, PoseStack matrices, MultiBuff else { matrices.scale(1.25F, 1.25F, 1.25F); } - int age = blockEntity.getAge(); + int age = (int) (minecraft.level.getGameTime() % 314); if (state.is(EndBlocks.ETERNAL_PEDESTAL) && state.getValue(EternalPedestal.ACTIVATED)) { float[] colors = EternalCrystalRenderer.colors(age); int y = blockEntity.getBlockPos().getY(); - BeamRenderer.renderLightBeam( - matrices, - vertexConsumers, - age, - tickDelta, - -y, - 1024 - y, - colors, - 0.25F, - 0.13F, - 0.16F - ); - float altitude = Mth.sin((blockEntity.getAge() + tickDelta) / 10.0F) * 0.1F + 0.1F; + BeamRenderer.renderLightBeam(matrices, vertexConsumers, age, tickDelta, -y, 1024 - y, colors, 0.25F, 0.13F, 0.16F); + float altitude = Mth.sin((age + tickDelta) / 10.0F) * 0.1F + 0.1F; matrices.translate(0.0D, altitude, 0.0D); } if (activeItem.getItem() == Items.END_CRYSTAL) { - EndCrystalRenderer.render(age, blockEntity.getMaxAge(), tickDelta, matrices, vertexConsumers, light); + EndCrystalRenderer.render(age, 314, tickDelta, matrices, vertexConsumers, light); } else if (activeItem.getItem() == EndItems.ETERNAL_CRYSTAL) { EternalCrystalRenderer.render(age, tickDelta, matrices, vertexConsumers, light); @@ -81,16 +68,7 @@ else if (activeItem.getItem() == EndItems.ETERNAL_CRYSTAL) { else { float rotation = (age + tickDelta) / 25.0F + 6.0F; matrices.mulPose(Vector3f.YP.rotation(rotation)); - minecraft.getItemRenderer() - .render(activeItem, - ItemTransforms.TransformType.GROUND, - false, - matrices, - vertexConsumers, - light, - overlay, - model - ); + minecraft.getItemRenderer().render(activeItem, ItemTransforms.TransformType.GROUND, false, matrices, vertexConsumers, light, overlay, model); } matrices.popPose(); } From 30046b25c81b70c8fbb896be911d8be374658d2b Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 28 Dec 2021 22:11:24 +0300 Subject: [PATCH 85/93] Pedestals entity fix --- .../betterend/blocks/basis/PedestalBlock.java | 4 +- .../blocks/entities/PedestalBlockEntity.java | 47 +++++-------------- 2 files changed, 15 insertions(+), 36 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 1b9720ef4..597e7de4f 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -109,7 +109,7 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player pedestal.setItem(0, itemStack); level.blockEntityChanged(pos); checkRitual(level, pos); - return InteractionResult.SUCCESS;//InteractionResult.sidedSuccess(level.isClientSide()); + return InteractionResult.sidedSuccess(level.isClientSide()); } else { ItemStack itemStack = pedestal.getItem(0); @@ -117,7 +117,7 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player pedestal.removeItemNoUpdate(0); level.blockEntityChanged(pos); checkRitual(level, pos); - return InteractionResult.SUCCESS;//InteractionResult.sidedSuccess(level.isClientSide()); + return InteractionResult.sidedSuccess(level.isClientSide()); } return InteractionResult.FAIL; } diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 06c3ff738..52a62b05e 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -1,7 +1,5 @@ package ru.betterend.blocks.entities; -//import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; - import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; @@ -15,13 +13,9 @@ import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndItems; -// TODO Fix client serialisation -public class PedestalBlockEntity extends BlockEntity implements Container/*, BlockEntityClientSerializable*/ { +public class PedestalBlockEntity extends BlockEntity implements Container { private ItemStack activeItem = ItemStack.EMPTY; - //private final int maxAge = 314; - //private int age; - public PedestalBlockEntity(BlockPos blockPos, BlockState blockState) { this(EndBlockEntities.PEDESTAL, blockPos, blockState); } @@ -30,13 +24,18 @@ public PedestalBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos super(blockEntityType, blockPos, blockState); } - /*public int getAge() { - return age; - }*/ + protected void toTag(CompoundTag tag) { + if (activeItem != ItemStack.EMPTY) { + tag.put("active_item", activeItem.save(new CompoundTag())); + } + } - /*public int getMaxAge() { - return maxAge; - }*/ + protected void fromTag(CompoundTag tag) { + if (tag.contains("active_item")) { + CompoundTag itemTag = tag.getCompound("active_item"); + activeItem = ItemStack.of(itemTag); + } + } @Override public int getContainerSize() { @@ -114,29 +113,9 @@ public void load(CompoundTag tag) { @Override protected void saveAdditional(CompoundTag tag) { super.saveAdditional(tag); - fromTag(tag); + toTag(tag); } - protected void fromTag(CompoundTag tag) { - if (tag.contains("active_item")) { - CompoundTag itemTag = tag.getCompound("active_item"); - activeItem = ItemStack.of(itemTag); - } - } - - /*public static void tick(Level level, BlockPos blockPos, BlockState blockState, T uncastedEntity) { - clientTick(level, blockPos, blockState, (PedestalBlockEntity) uncastedEntity); - }*/ - - /*private static void clientTick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { - if (!blockEntity.isEmpty()) { - blockEntity.age++; - if (blockEntity.age > blockEntity.maxAge) { - blockEntity.age = 0; - } - } - }*/ - @Override public ClientboundBlockEntityDataPacket getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); From 2f701885f4125152186d80eaad31350c4f7a12a1 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 28 Dec 2021 22:58:41 +0300 Subject: [PATCH 86/93] Small crystal rendering fixes --- .../ru/betterend/client/render/EternalCrystalRenderer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java index cddd38f2a..1d2509188 100644 --- a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java @@ -19,6 +19,7 @@ import ru.betterend.BetterEnd; import ru.betterend.blocks.AuroraCrystalBlock; +// TODO make crystals bright public class EternalCrystalRenderer { private static final RenderType RENDER_LAYER; private static final ModelPart[] SHARDS; @@ -116,7 +117,7 @@ public static LayerDefinition getTexturedModelData() { } static { - RENDER_LAYER = RenderType.beaconBeam(BetterEnd.makeID("textures/entity/eternal_crystal.png"), true); + RENDER_LAYER = RenderType.itemEntityTranslucentCull(BetterEnd.makeID("textures/entity/eternal_crystal.png")); SHARDS = new ModelPart[4]; ModelPart root = getTexturedModelData().bakeRoot(); From 023708f72f5d048b8a2eea9499a9d6c688929384 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 28 Dec 2021 23:00:48 +0300 Subject: [PATCH 87/93] Island feature restored (ritual) --- src/main/java/ru/betterend/registry/EndFeatures.java | 4 +--- src/main/java/ru/betterend/rituals/EternalRitual.java | 7 +++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 5b0ff23d0..7266707e0 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -332,7 +332,6 @@ public static void addBiomeFeatures(ResourceLocation id, Biome biome) { boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome); if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) { if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) { - // TODO replace caves with carvers BiomeAPI.addBiomeFeature(biome, ROUND_CAVE); BiomeAPI.addBiomeFeature(biome, TUNEL_CAVE); } @@ -382,8 +381,7 @@ public static BCLBiomeBuilder addDefaultFeatures(BCLBiomeBuilder builder, boolea builder.feature(THALLASIUM_ORE); builder.feature(ENDER_ORE); builder.feature(CRASHED_SHIP); - - // TODO replace cave features with carvers + if (hasCaves) { builder.feature(ROUND_CAVE); builder.feature(TUNEL_CAVE); diff --git a/src/main/java/ru/betterend/rituals/EternalRitual.java b/src/main/java/ru/betterend/rituals/EternalRitual.java index e10973f84..c2df4716c 100644 --- a/src/main/java/ru/betterend/rituals/EternalRitual.java +++ b/src/main/java/ru/betterend/rituals/EternalRitual.java @@ -440,16 +440,15 @@ private BlockPos findPortalPos(int portalId) { direction = direction.getClockWise(); } } - // TODO find island feature - /*if (targetWorld.dimension() == Level.END) { - Features.END_ISLAND.place( + if (targetWorld.dimension() == Level.END) { + net.minecraft.data.worldgen.features.EndFeatures.END_ISLAND.place( targetWorld, targetWorld.getChunkSource().getGenerator(), new Random(basePos.asLong()), basePos.below() ); } - else */if (targetWorld.dimension() == Level.OVERWORLD) { + else if (targetWorld.dimension() == Level.OVERWORLD) { basePos.setY(targetWorld.getChunk(basePos).getHeight(Heightmap.Types.WORLD_SURFACE, basePos.getX(), basePos.getZ()) + 1); } EndFeatures.BIOME_ISLAND From 25f4dc0ed5e77c727a2a43130efdf0e2ea4346c0 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 30 Dec 2021 02:49:26 +0300 Subject: [PATCH 88/93] Library update --- gradle.properties | 2 +- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index ff609827c..5f1354b6e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,6 +19,6 @@ archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -bclib_version = 1.1.6 +bclib_version = 1.2.0 rei_version = 7.0.343 canvas_version = 1.0.+ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f1a9638e7..c674a170f 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -46,7 +46,7 @@ "fabricloader": ">=0.12.9", "fabric": ">=0.44.0", "minecraft": "1.18.x", - "bclib": ">=1.1.6" + "bclib": ">=1.2.0" }, "suggests": { "byg": ">=1.1.3", From d0f2e6cd5926e3bc6e89cc36233f0da4000f0e02 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 30 Dec 2021 03:08:08 +0300 Subject: [PATCH 89/93] Fixed textures wrong pixels --- .../textures/block/bulb_vine_seed_2.png | Bin 245 -> 969 bytes .../textures/block/end_lotus_leaf_center.png | Bin 401 -> 1052 bytes .../textures/block/end_lotus_leaf_corner.png | Bin 311 -> 963 bytes .../textures/block/end_lotus_leaf_side.png | Bin 312 -> 1020 bytes .../textures/block/hydralux_bloom_top.png | Bin 209 -> 230 bytes .../textures/block/hydralux_flower_petal.png | Bin 227 -> 239 bytes .../textures/block/hydralux_flower_petal_e.png | Bin 227 -> 239 bytes .../textures/block/lumecorn_big_petal.png | Bin 378 -> 1138 bytes .../textures/block/sulphuric_rock_polished.png | Bin 280 -> 998 bytes .../textures/block/tenanea_flowers_stem.png | Bin 273 -> 294 bytes .../block/tenanea_flowers_stem_bottom.png | Bin 226 -> 248 bytes .../textures/block/thallasium_trapdoor.png | Bin 329 -> 1027 bytes .../block/twisted_umbrella_moss_end.png | Bin 260 -> 974 bytes 13 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/betterend/textures/block/bulb_vine_seed_2.png b/src/main/resources/assets/betterend/textures/block/bulb_vine_seed_2.png index ae3e5bb8462520054d3c3f59b313a2f0f1f881ee..a156152cbd8f94e25b1f66441afab19db45fdaa4 100644 GIT binary patch literal 969 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR|m<|G&wvug$n1(IDbr z=b0r%vXPTjZJ7&Q#JQ0gTe~t#66wzSDWIC-(E5-@)CU0 zDr&WL|JpQ%bDj&A$M?Aj-t}DjGR`sMufy*Mp6$XbdyXA9G&wI`?Hzw?x{R}=;)_2Z OcX+z`xvXXJvs(lzMwBjQ4m(?{P$oJeF3 zX&07!cnob=%)%#$n|+JVil-hm?w`yj!rG&+5ZAb}^*6`XNRgwb{bVp3&zyJUM M07*qoM6N<$f`8RQp8x;= diff --git a/src/main/resources/assets/betterend/textures/block/end_lotus_leaf_center.png b/src/main/resources/assets/betterend/textures/block/end_lotus_leaf_center.png index 709b0b91cc1cd5ed2db038f2d4cf039a197b3dec..068f948e5156f291c2f9a8e994de02369c0149f1 100644 GIT binary patch literal 1052 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR^g(G-&r1+OFv~S=i{j zX`RprHBu2KA0?*DaHQ;y?xV>w1A|Y*u$cq)Zkxn9Tz!ZZMoz zr$4Ohf8ISZv2}PEAWPyD^t*SndDqi+li0+ zS1wlje{AAT=1m1r;nIEUb5nXQ@Ba3#YPDg>8j;lnXQ$=yH8(P?%WzQp=XmN`+mfjt zZaKeoPIo!IGV03IcY6&tNuJ+)_ngV;gF9pTgdBWMzB(yhawhr3g?W=+3pZb%D0(q+ mLAeN{-tHN-@1}=${9$@j8DHXbtLrH!%spNGT-G@yGywpbXRYu6 delta 243 zcmVt6B|mLR|m<|L?hDI#AGQ;{@Xc z4KAA}IjrxqTiXL<8_cbB-!|24>lD{5lY!#)>w1CWM)T_p=hXqF^yk#*OfA!%QmQq% zL~~NHR)3*NbDDBfs$xU3QeCoaX%x`RQ7{?;gFFQ0O0JLqI+3d+$Pbt&82!rg6d`dp0fT@70000;0YISu015ygU;G^3Xh?3C8SZHf zsh+&=RaJoXQF)%%XLk>zPMyf3t_76J&f7J!fr^~|`!xrsWc9jC=K#CTW4z1)?97^} ct^oc4fFB~FT9p-9000002uVdwM6N<$g5vE(Gynhq diff --git a/src/main/resources/assets/betterend/textures/block/end_lotus_leaf_side.png b/src/main/resources/assets/betterend/textures/block/end_lotus_leaf_side.png index 37c0828bb30e156c14dfc651fabf9d56ee978e65..db583ca80787d71a41bc7c2f4f4b48a225a289c4 100644 GIT binary patch literal 1020 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR^7d?fyc;d3EmFrn+sN z;<{zB^QMVT8z$O|kW3jNwVs4$${Cc1QgSoXpm0JCU8ol|dtr;pU=_<`>N_EK! zHHosNQ9yG>!Dt8!xeyRJee5RC(aa@5e!&cX|1l=Em;$*gJY5_^D&l1Qqx+5+a2WTi z+@3oz?Opw;zd6E9)2}gcM{-CzKCBLYxc=6vrG@j1TaSO`_!K7|o9yUa_+alNb)GNW zya61K7i@mTQRnqzPTRRSR_moLXPbX!y`5^Bb7Q*6kcK!=a_4$}3)Y4yhi;yyxuarDZ|t(j bl`;PqO_{}VT3gR005jxL_t(|UNwx- z7J@JgL#tF6Ia3Zub9Q~7!ZY@lez{p&z+=8_=4V1|GHw0y3A19Fo*T^vIy;*t{%a7sv8 zWXT)RLvphhb@1A|9^wD4Q!0&kG3JYD@< J);T3K0RY5>I;j8v delta 153 zcmaFHc#&~}iXcn6qpu?a!^VE@KZ&di3=Gl}Rpo29>s(|3vYAVQ{DK+&{nPTf{td_t z@^o7MwCsAmIKc>F5}177$!_9?wak*z%0|7!F%Ttmj(%+PNB7eyg$~kFqjGprCZHicNAzkgQu&X%Q~lo FCIC`LG=Bg9 diff --git a/src/main/resources/assets/betterend/textures/block/hydralux_flower_petal.png b/src/main/resources/assets/betterend/textures/block/hydralux_flower_petal.png index 3158adf5fc7e0c828d345e11cca26444d4f9b697..30150f2268ee43c920d52f8fa3f1042657ff6382 100644 GIT binary patch delta 184 zcmaFN_?~fs3Zub9Q~7!ZY(O9)APOkXToU9L%)sz(L9z5vAUE67#WAEJPW9AA-opkw zE*Jd|6=W7PHOMKZYE_HqKgit_9hJ(g=%E|Agj0nTO6T~Z&Sy4EP8T0B$7Uw4-;*0!dGwf1*bWBEQnAGK Sb!k^Y&hvEjb6Mw<&;$TK}|sb0I`n?{9y$E000}2B_Dr>A?CUO000AYQchC<0REtJ z8^r(s0Axu-K~#7F1;J4b!Y}{@!0RLXC2hht=@bAGa4-Y7!w?RN0v7n+xQo(G_tsi) z`5~>lnh;orz*(bg{=~h-aNsK0>W! a<_}%67e){;v55Qt00000nTO6T~Z&Sy4EP8T0B$7Uw4-;*0!dGwf1*bWBEQnAGK Sb!k^Y&hvEjb6Mw<&;$TK}|sb0I`n?{9y$E000}2B_Dr>A?CUO000AYQchC<0REtJ z8^r(s0Axu-K~#7F1;J4b!Y}{@!0RLXC2hht=@bAGa4-Y7!w?RN0v7n+xQo(G_tsi) z`5~>lnh;orz*(bg{=~h-aNsK0>W! a<_}%67e){;v55Qt000031=w-T}o^_I^&@^BE``w&i8$=9fS%9t*BJ&O8IuI0{BX zV2Fl5&4W34K&Nw*1o;JnyzmbQ_Sw}PXJBBI^mK6ysfc?!>9*ft1D>|p7e*31tiS&C zM+948hOi0N_4X(=E`JBJ~&mw z&i-j@FmKky&OH`l+l7t06APGR?rab?=J}U-YVvPZ&Dv>Ow*@K6FUyW!GfnCEzqi)E zdJn#Op3oP^pmN+pWp&)`l7pL{yuIX|GRJ(^*2=)5nCwtRryZL2!kkYQ7;&C)nc};8 zMxy=Y;yI1MNxfZx);=#wbCsWq6+TW-jhL4B=FzU*QXZ=F&tG6H>|C|)d}5 zrdmaZ&02WzxNzIM?}7T|7mxcfCR<*XJzd?Q(Rfa%ENR)_N3~8OE>}J`i%<2KaAwom j{hLI7ez^GWbNC;IcDKyd{1aRYKmq3I>gTe~DWM4f4HV2( delta 286 zcmV+(0pb4g2>Jq$BN6}vXF*Lt006O%3;baP0000&ktIfdhZ`WF00008bW%=J00000 z{{H^{zCM1(0002bNkliC~F$a0< z5V`=gO~P2v7}XbMK({r{fRI5|AkRt!W*C?`1p>3Ve+2{(R{*WwKCnD<(C8l}5a#EN z-)Uc-fv9kQg76S>W5Jfr05b^E0HRd>2SlB)CZZl@Tl$m};MN~>0uYt(5@-|(2N`-u zk1z`P)219&*HN3lgOX}oMuT$3#d26#`%us7KC7VzJ^vU$v!myq klz>NX+ZedKz4fXdb*>N(+diZp00000NkvXXu0mh|f@rRHoB#j- diff --git a/src/main/resources/assets/betterend/textures/block/sulphuric_rock_polished.png b/src/main/resources/assets/betterend/textures/block/sulphuric_rock_polished.png index 070b7232aa62f2dd2112264b63e9ab9e21ab333a..e9056aa078ae540d16345955ea40e53ac112b9ae 100644 GIT binary patch literal 998 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR=Gkead2EN@Jo+qN6f` zgVKWn(*grh1N@Wy{eV*OKHhQOUeO-zAx@6Ljt)T%_MTRj_J#&PLq@@92n>S|SoT@Y z4d@NVk|4j}e^QUxYk{08o-U3d6>+Bhr^OB{aImtQaNpLu^#8wK@uvVCm2Y_hJ9sp* zMPI0RZh3gVN94w4sadWDKfk>_9Fkt29%6Cz%AF!H9e4NH*F~8nt+HmPnoKzLN!><5 z)i!r}ze%8b_17?#z0cpAi?-PHtF@rTp6Ai;9iL9x8NPhF+<9iEM!zrLtY#zeo>$7Q mE4@GQs|W5*;hnO59)rDoiHWVn*Sl*#VeaYb=d#Wzp$Pyq4Q9ju delta 199 zcmV;&0672V2bcnoBN6}vXF*Lt006O%3;baP0000sktI5R?xX-B00001bW%=J{u<*4 zeE&fqcIf{9%K<6U)Rsra^9+^|!`wlMgR8P-Mdk_$kJLE$j9Dh3=DK>lA?SP*3Z&;?)&)cAk*{8ErXSiOQF0K+in zf?@$07EI`B@EU+@5Xcqi;zSz&@^?wBC&(3`F!+NmkD&n_1H<7zC^mpzU3VYUDO delta 222 zcmV<403rXT0+9lcBnQ|@L_t(|+L0?8f5(8!01yTl(2*a?2IG@#z^cAXkSkd6slh3c z7U;;-T^RZwXb1~gE&wS8g~QaU7?3Oe0r`JnVL_}5z!<3U|L*yvAcI&*@&e4cpjd#0 z1rtdIAR7d71<8R3!ytc`#Cn2U0SbdZBpUz>hyS410D6HLXb=lYVF1+3S{UgDOpXPT zy#R7L$nT&41Ua7^1Kn4~2LJ#7 diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers_stem_bottom.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers_stem_bottom.png index 3afd63eccb967a1f0997e02f59e4a10acc1f61ec..91483dfc55fc6020470acfabd13a5184abdfa498 100644 GIT binary patch delta 197 zcmV;$06PET0r&xsBnQ7qL_t(|UXd#se}^G}j6nu;k_$kJLE$j9Dh3=DK>lA?SP*3Z&;@Yz?)jx4gRpu9LjW6wh6NM4 zI8g?GyaI|!ba8?Pzyb{9Zy*~Kn4mEDgRTxkBf0@lHpmOiC9$6H7$M03P%NO!GZQob z7G&}VZlU}0U)n{ zqLSo5gasJL-#|7fFhODPhhzhwY>*e2OJY4)$T9#F3nY617GB|mLR|m<|L?SBkJIYiF0SGrQr)eKwKp&1oV}QR=0eu#^O>j4CGR_ywD)M@o+Chw z5M4H13#>cmTXoDcD(%rqssLIs3PwX=YYYsJjI z%yMSwvTf;oyB_MVJTvk3n(2!?-Llt+ZhBl0S#bO7Og5okJ-=@^=X~V so}#%Ey-N(&7yW5ER&%d8X`^5bB|mLR|m<|L=I=zvk>7)t+Yc zmiii31)u`m6`ep4y;YNSmIE2xnlt;=x@RiY*T@$(N+lKm6^w$>5EvdIP{z@82Iv#c zk{~}|o&bY?{}#t}bOM)QWZu2!L@Hn#{uIN1UzkXR;hKRY$;nTZoGyJw~ zW3azkn{joszFi%A@u{PelX$nCd)gAnq1t)Zky$$Ky;sf(@u+RL^qw6wn73r=Ezopr E0RIVHa{vGU delta 162 zcmV;T0A2si2ZREUBN6}vXF*Lt006O%3;baP0000pktH_-0U@@UlPv=nd}m2SK~#90 zjgLVR!!QT~)fAJ`faL$bwujVqatp_u6$0QshG)P(o7)ZSe4BgvGQKotOaR{xF@}+m zfQsS6U<6b!vk@UxJtNm0svf~v`%($GMoy5Cv!$2v%#4;^;@W}Mn(F_{54NcUCEavp Qq5uE@07*qoM6N<$g2IDC$^ZZW From 789f1ccabd3b024e46bae811e9bb61b0f7584bcd Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 30 Dec 2021 03:23:35 +0300 Subject: [PATCH 90/93] Fixed glass in structure --- .../biome/umbrella_jungle/ruins_1.nbt | Bin 906 -> 901 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/data/betterend/structures/biome/umbrella_jungle/ruins_1.nbt b/src/main/resources/data/betterend/structures/biome/umbrella_jungle/ruins_1.nbt index 427336a83c20218c34382dad297bdb8f6b3a2801..cba96af824a8c4ddd2e438075f935596334842ed 100644 GIT binary patch literal 901 zcmV;01A6=)iwFP^Ce2|0|Gikta@sHymGK*zK9cS_ea>|H581YxZaUqxTaRo6D3L9X zBqt@G)UT|JBW#Q$l%cTjFxW@uockos6o3>296ul*0MK5kykdDpDM(Nyu)v6WVDli# z2`z57qQ9ohiePalL_K!HGaLWh|+U;+zf;-IB4z5~WZE3{yIpu`SiY@QXy z<|lB_3ZB4Yiz{@{QW#rY3S;x5Fg8DtgCB*l`B4~KZzzn-bL^lMJ7~oYT8V>J;-J;` zvv)vC&EarPJx#s5kslMr#^WhZ1I$F@#}yM;Frfn`cF>9)cs4n9@EkaJK7@%Kv?hw{ zK-~{v0tZa!fQeOq9O&oG91bwPp`V95fyVQ==f{{x!xI`XHXfkqpGf0*jEN1Hz{0bw z>j0BzVjuI2wbWb;=QK57hFViieh$T@W@lK_nE_+dN;Gjj)A0Bs%s4JJr$av%hB@^e zFgDMzqgFW5dTzkjv_c1-(19lb`*Zq2<0l&B`K4s?t6WUM3>E_4p$rRDCSZc+;G)D8 zDi~adYlxW#!mqTcga^8(mpKvwF;va3YcxlakZ5W)p4C@p&>O~gc|tw^%<=h}_>^7> z!tYY3djaSOXL&(zeqF32mtoTmH_6ororf0Zr_hVfT$%XH@pH|6mmB+d&CIJT@+OEU;<|MGH^!da*5_3TtLF* z&5+YZtP~`yDC@rk_ozQTX=)G%)}XEQJG04qNXRL?_=Mj72P@G67PwkIk}8s`o}^gA zDk~}9t962Twjh+U&VV+ME#XJAD*`L|q%s+M%!DF((-ZMh#*^J3Le_l6C@oDCZIX^T zKeFJGobA!Ba>uB5&2p6gT@x<;gB2tT;0szC8*~M0Szj&~#LJa1X6wtqFs$b5LFIFX zi(8(_ErgjdgS+9oc-Q(3#9G>oaw>#Ol%o4=-fzkrf%#tNuOQ!StT4ZT@zvyUiz;_eekHZ+o?-%$aOWmk?_zV64d9_L7TowQT$W^W> literal 906 zcmV;519ki#iwFP!00000|GijSZ`v>z{X(w5x^C^>rd_3J|Dmtj%U-6vY_E|M47fEh zvdtL%N&A&^NKMjU8&?b}MHR{MIp@35bObPjNRWFR0ziEY)s?C%8A66DNhHAnVEZ5` zC@b&8NPYM@gmB4(J`_On6NC^8i6nkFVZsbNFp&c@@X*qj&;#S66+18?XtBc>muHP} z`H4KVq9^dU;)*@AG{zN|#<=`wjLT2r;YVX!el*6_8ye&CoO)=b9$Kk~R_39Vd1%%B z930TnbJ(5Jz)-KC=f{R|@dVma2Qx7E@x??AOzeS4J+x8}o^6gjJVzd$4`EUdt%2q` zQ1?Ta$O995U{c*52l{zChaF64>E|v_WboYY`93Bw@Wd93iw6w-lNdbrF{uR;Ie2z; z?O-xP?0ufTmY$35oDMCRuGYwqpF?r!+3D7FY{9s+GDBR?3_M{E(~nEfY1hw%Wllp6 zjLUQCsTKFMo?9?3t=NMn_Tb52e@-tAev)3EUnr)qD&z>psFdV4&WXf}35J0C)5ki9A9XNPwNdK z{-%VQ7l4LvT$Gd)H|1P$SvGBVlU$$BdF*h03cd8ql}XPWU!Z@VvGe+Rr=G0-H^M37 zi_ff=8tXTNbctwvwtjJcl|l3!Eik-m>CpX(taaW@bi_*f)of+D1{Oj%F}ktI#=Rvl*U1 zJVjKfo3UUkIoFW5V!Ztnt#NyLuv$VS`3mpE-`Z`i5v8Z_5>mGQ4_1;XDoHhaAk`$- zElIgSRlZ>R3C)Per<5_?7%&F1Bm7`@MNy@mR5oJ|nb1V9TOzSg@#MFd(v6sN#uhe; zI!VWz?^*Ck&hBVaxntCuW;x3LV-r69qdB5e2qjxu8+4AAs=h*UL}qho&DQ6RVN^{v zoyr%Sly@Rmdx&sr1|Ns->^Ea*9YEf|2nkbhX gFof|}B+)O-1!0wXm-q|+00TcPR$dkW0MpC3E&u=k From 57641fe02c0a780164123722ef4999c810ed5281 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 30 Dec 2021 05:31:42 +0300 Subject: [PATCH 91/93] Structures loot, Umbrella Jungle features rebalance --- .../ru/betterend/registry/EndFeatures.java | 23 ++++--- .../java/ru/betterend/util/LootTableUtil.java | 62 ++++++++++++++++--- .../world/features/BuildingListFeature.java | 56 +++++++++++++++++ .../betterend/loot_tables/chests/common.json | 4 ++ 4 files changed, 126 insertions(+), 19 deletions(-) create mode 100644 src/main/java/ru/betterend/world/features/BuildingListFeature.java create mode 100644 src/main/resources/data/betterend/loot_tables/chests/common.json diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 7266707e0..dac39292f 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -24,11 +24,9 @@ import ru.bclib.api.features.BCLCommonFeatures; import ru.bclib.api.features.BCLFeatureBuilder; import ru.bclib.util.JsonFactory; -import ru.bclib.util.StructureHelper; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.DefaultFeature; -import ru.bclib.world.features.ListFeature; import ru.bclib.world.features.ListFeature.StructureInfo; import ru.bclib.world.features.NBTStructureFeature.TerrainMerge; import ru.betterend.BetterEnd; @@ -38,6 +36,7 @@ import ru.betterend.world.biome.land.UmbraValleyBiome; import ru.betterend.world.features.BiomeIslandFeature; import ru.betterend.world.features.BlueVineFeature; +import ru.betterend.world.features.BuildingListFeature; import ru.betterend.world.features.CavePumpkinFeature; import ru.betterend.world.features.CharniaFeature; import ru.betterend.world.features.CrashedShipFeature; @@ -107,8 +106,8 @@ public class EndFeatures { public static final BCLFeature DRAGON_TREE = redisterVegetation("dragon_tree", new DragonTreeFeature(), 2); public static final BCLFeature TENANEA = redisterVegetation("tenanea", new TenaneaFeature(), 2); public static final BCLFeature HELIX_TREE = redisterVegetation("helix_tree", new HelixTreeFeature(), 1); - public static final BCLFeature UMBRELLA_TREE = redisterVegetation("umbrella_tree", new UmbrellaTreeFeature(), 4); - public static final BCLFeature JELLYSHROOM = redisterVegetation("jellyshroom", new JellyshroomFeature(), 3); + public static final BCLFeature UMBRELLA_TREE = redisterVegetation("umbrella_tree", new UmbrellaTreeFeature(), 2); + public static final BCLFeature JELLYSHROOM = redisterVegetation("jellyshroom", new JellyshroomFeature(), 2); public static final BCLFeature GIGANTIC_AMARANITA = redisterVegetation("gigantic_amaranita", new GiganticAmaranitaFeature(), 1); public static final BCLFeature LUCERNIA = redisterVegetation("lucernia", new LucerniaFeature(), 3); @@ -137,9 +136,9 @@ public class EndFeatures { public static final BCLFeature AMBER_GRASS = redisterVegetation("amber_grass", new SinglePlantFeature(EndBlocks.AMBER_GRASS, 6), 7); public static final BCLFeature LANCELEAF = redisterVegetation("lanceleaf", new LanceleafFeature(), 2); public static final BCLFeature GLOW_PILLAR = redisterVegetation("glow_pillar", new GlowPillarFeature(), 1); - public static final BCLFeature TWISTED_UMBRELLA_MOSS = redisterVegetation("twisted_umbrella_moss", new DoublePlantFeature(EndBlocks.TWISTED_UMBRELLA_MOSS, EndBlocks.TWISTED_UMBRELLA_MOSS_TALL, 6), 5); - public static final BCLFeature JUNGLE_GRASS = redisterVegetation("jungle_grass", new SinglePlantFeature(EndBlocks.JUNGLE_GRASS, 7, 3), 8); - public static final BCLFeature SMALL_JELLYSHROOM_FLOOR = redisterVegetation("small_jellyshroom_floor", new SinglePlantFeature(EndBlocks.SMALL_JELLYSHROOM, 5, 5), 4); + public static final BCLFeature TWISTED_UMBRELLA_MOSS = redisterVegetation("twisted_umbrella_moss", new DoublePlantFeature(EndBlocks.TWISTED_UMBRELLA_MOSS, EndBlocks.TWISTED_UMBRELLA_MOSS_TALL, 6), 3); + public static final BCLFeature JUNGLE_GRASS = redisterVegetation("jungle_grass", new SinglePlantFeature(EndBlocks.JUNGLE_GRASS, 7, 3), 6); + public static final BCLFeature SMALL_JELLYSHROOM_FLOOR = redisterVegetation("small_jellyshroom_floor", new SinglePlantFeature(EndBlocks.SMALL_JELLYSHROOM, 5, 5), 2); public static final BCLFeature BLOSSOM_BERRY = redisterVegetation("blossom_berry", new SinglePlantFeature(EndBlocks.BLOSSOM_BERRY, 3, 3), 2); public static final BCLFeature BLOOMING_COOKSONIA = redisterVegetation("blooming_cooksonia", new SinglePlantFeature(EndBlocks.BLOOMING_COOKSONIA, 5), 5); public static final BCLFeature SALTEAGO = redisterVegetation("salteago", new SinglePlantFeature(EndBlocks.SALTEAGO, 5), 5); @@ -350,13 +349,13 @@ private static BCLFeature getBiomeStructures(BCLBiome biome) { } String path = "/data/" + ns + "/structures/biome/" + nm + "/"; - InputStream inputstream = StructureHelper.class.getResourceAsStream(path + "structures.json"); + InputStream inputstream = EndFeatures.class.getResourceAsStream(path + "structures.json"); if (inputstream != null) { JsonObject obj = JsonFactory.getJsonObject(inputstream); - JsonArray enties = obj.getAsJsonArray("structures"); - if (enties != null) { + JsonArray structures = obj.getAsJsonArray("structures"); + if (structures != null) { List list = Lists.newArrayList(); - enties.forEach((entry) -> { + structures.forEach((entry) -> { JsonObject e = entry.getAsJsonObject(); String structure = path + e.get("nbt").getAsString() + ".nbt"; TerrainMerge terrainMerge = TerrainMerge.getFromString(e.get("terrainMerge").getAsString()); @@ -367,7 +366,7 @@ private static BCLFeature getBiomeStructures(BCLBiome biome) { return BCLCommonFeatures.makeChancedFeature( new ResourceLocation(ns, nm + "_structures"), Decoration.SURFACE_STRUCTURES, - new ListFeature(list, Blocks.END_STONE.defaultBlockState()), + new BuildingListFeature(list, Blocks.END_STONE.defaultBlockState()), 10 ); } diff --git a/src/main/java/ru/betterend/util/LootTableUtil.java b/src/main/java/ru/betterend/util/LootTableUtil.java index 02015f806..87ccce1bd 100644 --- a/src/main/java/ru/betterend/util/LootTableUtil.java +++ b/src/main/java/ru/betterend/util/LootTableUtil.java @@ -1,35 +1,83 @@ package ru.betterend.util; import net.fabricmc.fabric.api.loot.v1.FabricLootPoolBuilder; +import net.fabricmc.fabric.api.loot.v1.FabricLootSupplierBuilder; import net.fabricmc.fabric.api.loot.v1.event.LootTableLoadingCallback; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +import ru.betterend.BetterEnd; +import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; public class LootTableUtil { private static final ResourceLocation END_CITY_TREASURE_ID = new ResourceLocation("chests/end_city_treasure"); + public static final ResourceLocation COMMON = BetterEnd.makeID("chests/common"); public static void init() { - LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, supplier, setter) -> { + LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, table, setter) -> { if (END_CITY_TREASURE_ID.equals(id)) { FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); - builder.setRolls(UniformGenerator.between(0, 5)); - builder.withCondition(LootItemRandomChanceCondition.randomChance(0.5f).build()); + builder.setRolls(ConstantValue.exactly(1)); + builder.withCondition(LootItemRandomChanceCondition.randomChance(0.2f).build()); builder.withEntry(LootItem.lootTableItem(Items.GHAST_TEAR).build()); - supplier.withPool(builder); + table.withPool(builder); builder = FabricLootPoolBuilder.builder(); - builder.setRolls(UniformGenerator.between(0, 5)); - builder.withCondition(LootItemRandomChanceCondition.randomChance(0.1f).build()); + builder.setRolls(UniformGenerator.between(0, 3)); builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_STRANGE_AND_ALIEN).build()); builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_GRASPING_AT_STARS).build()); builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_ENDSEEKER).build()); builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_EO_DRACONA).build()); - supplier.withPool(builder); + table.withPool(builder); + } + + else if (COMMON.equals(id)) { + addCommonItems(table); } }); } + + private static void addCommonItems(FabricLootSupplierBuilder table) { + FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(0, 2)); + builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_STRANGE_AND_ALIEN).build()); + builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_GRASPING_AT_STARS).build()); + builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_ENDSEEKER).build()); + builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_EO_DRACONA).build()); + table.withPool(builder); + + builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(4, 8)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.THALLASIUM.ingot).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.THALLASIUM.rawOre).build()); + builder.withEntry(LootItem.lootTableItem(Items.ENDER_PEARL).build()); + table.withPool(builder); + + builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(2, 4)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.TERMINITE.ingot).build()); + builder.withEntry(LootItem.lootTableItem(EndItems.ENDER_SHARD).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.AURORA_CRYSTAL).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.THALLASIUM.axe).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.THALLASIUM.pickaxe).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.THALLASIUM.hoe).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.THALLASIUM.sword).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.THALLASIUM.shovel).build()); + builder.withEntry(LootItem.lootTableItem(Items.ENDER_EYE).build()); + builder.withEntry(LootItem.lootTableItem(Blocks.OBSIDIAN).build()); + table.withPool(builder); + + builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(0, 4)); + builder.withEntry(LootItem.lootTableItem(EndItems.AETERNIUM_INGOT).build()); + builder.withEntry(LootItem.lootTableItem(EndItems.AMBER_GEM).build()); + builder.withEntry(LootItem.lootTableItem(Items.END_CRYSTAL).build()); + builder.withEntry(LootItem.lootTableItem(Items.GHAST_TEAR).build()); + table.withPool(builder); + } } diff --git a/src/main/java/ru/betterend/world/features/BuildingListFeature.java b/src/main/java/ru/betterend/world/features/BuildingListFeature.java new file mode 100644 index 000000000..2c69829e1 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/BuildingListFeature.java @@ -0,0 +1,56 @@ +package ru.betterend.world.features; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.ChestBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorType; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; +import org.jetbrains.annotations.Nullable; +import ru.bclib.world.features.ListFeature; +import ru.betterend.util.LootTableUtil; + +import java.util.List; +import java.util.Random; + +public class BuildingListFeature extends ListFeature { + public BuildingListFeature(List list, BlockState defaultBlock) { + super(list, defaultBlock); + } + + @Override + protected void addStructureData(StructurePlaceSettings data) { + super.addStructureData(data); + data.addProcessor(new ChestProcessor()); + } + + class ChestProcessor extends StructureProcessor { + @Nullable + @Override + public StructureTemplate.StructureBlockInfo processBlock(LevelReader levelReader, BlockPos blockPos, BlockPos blockPos2, StructureBlockInfo structureBlockInfo, StructureBlockInfo structureBlockInfo2, StructurePlaceSettings structurePlaceSettings) { + BlockState blockState = structureBlockInfo2.state; + if (blockState.getBlock() instanceof ChestBlock) { + Random random = structurePlaceSettings.getRandom(structureBlockInfo2.pos); + BlockPos chestPos = structureBlockInfo2.pos; + ChestBlock chestBlock = ChestBlock.class.cast(blockState.getBlock()); + BlockEntity entity = chestBlock.newBlockEntity(chestPos, blockState); + levelReader.getChunk(chestPos).setBlockEntity(entity); + RandomizableContainerBlockEntity chestEntity = RandomizableContainerBlockEntity.class.cast(entity); + chestEntity.setLootTable(LootTableUtil.COMMON, random.nextLong()); + chestEntity.setChanged(); + System.out.println("Set loot at " + chestPos); + } + return structureBlockInfo2; + } + + @Override + protected StructureProcessorType getType() { + return StructureProcessorType.NOP; + } + } +} diff --git a/src/main/resources/data/betterend/loot_tables/chests/common.json b/src/main/resources/data/betterend/loot_tables/chests/common.json new file mode 100644 index 000000000..c135faf3f --- /dev/null +++ b/src/main/resources/data/betterend/loot_tables/chests/common.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:chest", + "pools": [] +} From 2c5f4287d301754b41add4ae77b08c37d7ec2614 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 30 Dec 2021 06:17:27 +0300 Subject: [PATCH 92/93] Biome structure loot, texture fixes --- .../java/ru/betterend/util/LootTableUtil.java | 77 +++++++++++++++++- .../world/features/BuildingListFeature.java | 8 +- .../textures/block/bulb_vine_seed_2.png | Bin 969 -> 268 bytes .../textures/block/end_lotus_leaf_center.png | Bin 1052 -> 351 bytes .../textures/block/end_lotus_leaf_corner.png | Bin 963 -> 298 bytes .../textures/block/end_lotus_leaf_side.png | Bin 1020 -> 309 bytes .../betterend/textures/block/jungle_grass.png | Bin 277 -> 977 bytes .../textures/block/jungle_grass_2.png | Bin 284 -> 976 bytes .../textures/block/tenanea_flowers.png | Bin 279 -> 278 bytes .../textures/block/tenanea_flowers_bottom.png | Bin 255 -> 253 bytes .../textures/block/tenanea_flowers_stem.png | Bin 294 -> 290 bytes .../block/tenanea_flowers_stem_bottom.png | Bin 248 -> 246 bytes .../textures/block/thallasium_trapdoor.png | Bin 1027 -> 358 bytes .../block/twisted_umbrella_moss_end.png | Bin 974 -> 239 bytes .../loot_tables/chests/chorus_forest.json | 4 + .../chests/foggy_mushroomland.json | 4 + .../loot_tables/chests/lantern_woods.json | 4 + .../loot_tables/chests/shadow_forest.json | 4 + .../loot_tables/chests/umbrella_jungle.json | 4 + 19 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/data/betterend/loot_tables/chests/chorus_forest.json create mode 100644 src/main/resources/data/betterend/loot_tables/chests/foggy_mushroomland.json create mode 100644 src/main/resources/data/betterend/loot_tables/chests/lantern_woods.json create mode 100644 src/main/resources/data/betterend/loot_tables/chests/shadow_forest.json create mode 100644 src/main/resources/data/betterend/loot_tables/chests/umbrella_jungle.json diff --git a/src/main/java/ru/betterend/util/LootTableUtil.java b/src/main/java/ru/betterend/util/LootTableUtil.java index 87ccce1bd..8f314f52c 100644 --- a/src/main/java/ru/betterend/util/LootTableUtil.java +++ b/src/main/java/ru/betterend/util/LootTableUtil.java @@ -5,18 +5,28 @@ import net.fabricmc.fabric.api.loot.v1.event.LootTableLoadingCallback; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +import ru.bclib.api.biomes.BiomeAPI; +import ru.bclib.complexmaterials.WoodenComplexMaterial; +import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; +import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; public class LootTableUtil { private static final ResourceLocation END_CITY_TREASURE_ID = new ResourceLocation("chests/end_city_treasure"); - public static final ResourceLocation COMMON = BetterEnd.makeID("chests/common"); + private static final ResourceLocation COMMON = BetterEnd.makeID("chests/common"); + private static final ResourceLocation FOGGY_MUSHROOMLAND = BetterEnd.makeID("chests/foggy_mushroomland"); + private static final ResourceLocation CHORUS_FOREST = BetterEnd.makeID("chests/chorus_forest"); + private static final ResourceLocation SHADOW_FOREST = BetterEnd.makeID("chests/shadow_forest"); + private static final ResourceLocation LANTERN_WOODS = BetterEnd.makeID("chests/lantern_woods"); + private static final ResourceLocation UMBRELLA_JUNGLE = BetterEnd.makeID("chests/umbrella_jungle"); public static void init() { LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, table, setter) -> { @@ -35,13 +45,73 @@ public static void init() { builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_EO_DRACONA).build()); table.withPool(builder); } - - else if (COMMON.equals(id)) { + else if (id.getNamespace().equals(BetterEnd.MOD_ID)) { addCommonItems(table); + if (FOGGY_MUSHROOMLAND.equals(id)) { + FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(4, 8)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.MOSSY_GLOWSHROOM.getBlock(WoodenComplexMaterial.BLOCK_PLANKS)).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.MOSSY_GLOWSHROOM_SAPLING).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.BLUE_VINE_SEED).build()); + table.withPool(builder); + } + else if (CHORUS_FOREST.equals(id)) { + FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(4, 8)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.PYTHADENDRON.getBlock(WoodenComplexMaterial.BLOCK_PLANKS)).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.PYTHADENDRON_SAPLING).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.CHORUS_MUSHROOM).build()); + table.withPool(builder); + } + else if (SHADOW_FOREST.equals(id)) { + FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(4, 8)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.DRAGON_TREE.getBlock(WoodenComplexMaterial.BLOCK_PLANKS)).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.DRAGON_TREE_SAPLING).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.SHADOW_BERRY).build()); + builder.withEntry(LootItem.lootTableItem(EndItems.SHADOW_BERRY_RAW).build()); + table.withPool(builder); + } + else if (LANTERN_WOODS.equals(id)) { + FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(4, 8)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.LUCERNIA.getBlock(WoodenComplexMaterial.BLOCK_PLANKS)).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.LUCERNIA_SAPLING).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.BOLUX_MUSHROOM).build()); + table.withPool(builder); + } + else if (UMBRELLA_JUNGLE.equals(id)) { + FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); + builder.setRolls(UniformGenerator.between(4, 8)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.UMBRELLA_TREE.getBlock(WoodenComplexMaterial.BLOCK_PLANKS)).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.UMBRELLA_TREE_SAPLING).build()); + builder.withEntry(LootItem.lootTableItem(EndBlocks.SMALL_JELLYSHROOM).build()); + table.withPool(builder); + } } }); } + public static ResourceLocation getTable(Biome biome) { + BCLBiome bclBiome = BiomeAPI.getBiome(biome); + if (bclBiome == EndBiomes.FOGGY_MUSHROOMLAND) { + return FOGGY_MUSHROOMLAND; + } + else if (bclBiome == EndBiomes.CHORUS_FOREST) { + return CHORUS_FOREST; + } + else if (bclBiome == EndBiomes.SHADOW_FOREST) { + return SHADOW_FOREST; + } + else if (bclBiome == EndBiomes.LANTERN_WOODS) { + return LANTERN_WOODS; + } + else if (bclBiome == EndBiomes.UMBRELLA_JUNGLE) { + return UMBRELLA_JUNGLE; + } + return COMMON; + } + private static void addCommonItems(FabricLootSupplierBuilder table) { FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); builder.setRolls(UniformGenerator.between(0, 2)); @@ -74,6 +144,7 @@ private static void addCommonItems(FabricLootSupplierBuilder table) { builder = FabricLootPoolBuilder.builder(); builder.setRolls(UniformGenerator.between(0, 4)); + builder.withEntry(LootItem.lootTableItem(EndBlocks.FLAVOLITE_RUNED).build()); builder.withEntry(LootItem.lootTableItem(EndItems.AETERNIUM_INGOT).build()); builder.withEntry(LootItem.lootTableItem(EndItems.AMBER_GEM).build()); builder.withEntry(LootItem.lootTableItem(Items.END_CRYSTAL).build()); diff --git a/src/main/java/ru/betterend/world/features/BuildingListFeature.java b/src/main/java/ru/betterend/world/features/BuildingListFeature.java index 2c69829e1..8490e4f56 100644 --- a/src/main/java/ru/betterend/world/features/BuildingListFeature.java +++ b/src/main/java/ru/betterend/world/features/BuildingListFeature.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.ChestBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; @@ -41,7 +42,12 @@ public StructureTemplate.StructureBlockInfo processBlock(LevelReader levelReader BlockEntity entity = chestBlock.newBlockEntity(chestPos, blockState); levelReader.getChunk(chestPos).setBlockEntity(entity); RandomizableContainerBlockEntity chestEntity = RandomizableContainerBlockEntity.class.cast(entity); - chestEntity.setLootTable(LootTableUtil.COMMON, random.nextLong()); + Biome biome = levelReader.getNoiseBiome( + chestPos.getX() >> 2, + chestPos.getY() >> 2, + chestPos.getZ() >> 2 + ); + chestEntity.setLootTable(LootTableUtil.getTable(biome), random.nextLong()); chestEntity.setChanged(); System.out.println("Set loot at " + chestPos); } diff --git a/src/main/resources/assets/betterend/textures/block/bulb_vine_seed_2.png b/src/main/resources/assets/betterend/textures/block/bulb_vine_seed_2.png index a156152cbd8f94e25b1f66441afab19db45fdaa4..0dc3c7cbd728cccce1d65e1e317805011bce33ce 100644 GIT binary patch delta 251 zcmVyA+Cm#IU~4KZL_xtqu=?^BM#79)cZ)~JWZ%nfk^o44F-&_HX9M(` zIrOtCX0UEAu4*_Dqel1pEw~f;PCxa?0jZ%WM5 zNmzh_Y@bL#ud59Z5q+{ZKq&g;zkv|UAQm%-B|mLR|m<|G&wvug$n1(IDbr z=b0r%vXPTjZJ7&Q#JQ0gTe~t#66wzSDWIC-(E5-@)CU0 zDr&WL|JpQ%bDj&A$M?Aj-t}DjGR`sMufy*Mp6$XbdyXA9G&wI`?Hzw?x{R}=;)_2Z OcX+z`xvX}_v z;gm9?DP?+7%k-y}>rbyRoL6Tyuikh*5H*<3Z!liaU;;!78?BeL+N|!fUDIv1w#R;5 zuk)sfE}JL0Zkf!w`N~9~(Xu5$e!&d?p`aedK&Brb6*~`9+3V@z7$Pw>)jyEyr~yau zr8Y%jmlg8&{x8sfTPMfE)fMYgol#VD^4?@-ZhNw)Jeg z<`^thYI>}4hr@fl~LfFzMbH|{f`P={)&E8KD9Y7 zdw%S*-#M4!_Z(}Q_c?p+!wnzPHXh#Va_*)2zJCn5J9(QLV;uB=E@SX?^>bP0l+XkK D!(5kU literal 1052 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR^g(G-&r1+OFv~S=i{j zX`RprHBu2KA0?*DaHQ;y?xV>w1A|Y*u$cq)Zkxn9Tz!ZZMoz zr$4Ohf8ISZv2}PEAWPyD^t*SndDqi+li0+ zS1wlje{AAT=1m1r;nIEUb5nXQ@Ba3#YPDg>8j;lnXQ$=yH8(P?%WzQp=XmN`+mfjt zZaKeoPIo!IGV03IcY6&tNuJ+)_ngV;gF9pTgdBWMzB(yhawhr3g?W=+3pZb%D0(q+ mLAeN{-tHN-@1}=${9$@j8DHXbtLrH!%spNGT-G@yGywpbXRYu6 diff --git a/src/main/resources/assets/betterend/textures/block/end_lotus_leaf_corner.png b/src/main/resources/assets/betterend/textures/block/end_lotus_leaf_corner.png index 1925c95318afe56dc14bcb770b3088f3bbf83164..d3b33e7d29339b058a385758e08198411401f572 100644 GIT binary patch delta 282 zcmV+#0p>nA1tqj9fhG8qiu$5uh ziaEB|mLR|m<|L?hDI#AGQ;{@Xc z4KAA}IjrxqTiXL<8_cbB-!|24>lD{5lY!#)>w1CWM)T_p=hXqF^yk#*OfA!%QmQq% zL~~NHR)3*NbDDBfs$xU3QeCoaX%x`RQ7{?;gFFQ0O0JLqI+3d+$Pbt&82T>QH1;kAs;IB`ba4!km}=U~$i<+@!Q#Cng`eyH|C`dU^Cq5243BpHxU!Zj zGd)l9-_B#rdWm(P7Ajny5Osdhk148?_B92iF{*m=ZZs(sj(IcpdCIABo(L`816FIx zXS*<-E9G@>KL736heBoMe8%~gwS)dLaURn7n~?p@E|c|4^7FW~Zm~Rlk-#|ir?LO` Rs{kFt;OXk;vd$@?2>|3Iejoq< literal 1020 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR^7d?fyc;d3EmFrn+sN z;<{zB^QMVT8z$O|kW3jNwVs4$${Cc1QgSoXpm0JCU8ol|dtr;pU=_<`>N_EK! zHHosNQ9yG>!Dt8!xeyRJee5RC(aa@5e!&cX|1l=Em;$*gJY5_^D&l1Qqx+5+a2WTi z+@3oz?Opw;zd6E9)2}gcM{-CzKCBLYxc=6vrG@j1TaSO`_!K7|o9yUa_+alNb)GNW zya61K7i@mTQRnqzPTRRSR_moLXPbX!y`5^Bb7Q*6kcK!=a_4$}3)Y4yhi;yyxuarDZ|t(j bl`;PqO_{B|mLR|m<|F1c_N4=#UC=O&m zkbF+P-r8>6HQgYo$rIHlPf+WgsoFI|xv2suC6!np8I>dMlK|8*3PwX?<`@p-va3iro!H^bgEkJWPOA~`cwzPQCC9sGEnSX9K?*WnVUPK#$5io2}ut&9S> N$J5o%Wt~$(69Db^U?czl delta 172 zcmV;d08{_b2bBVlBN6}vXF*Lt006O%3;baP0000yktIL`1k69FlPv=me{e}eK~#7F zox$4?!Y~W~!Ap*ZA~06u{(EJHj}*Wz|8h=c=aQPTa|t!rxfmKar~GVc2B`^nJT@_s zGz9W~Y>)w=0?BP7;{}llkjQHk7(;+}N{xbZ6tFlyPijB|mLR|m<|F1c_N4=#UC=O&m zkbF+P-r8>6HQgYo$rIHlPf+WgsoFI|xv2suC6!np8I>dMlK|8*3PwX3r+3;0s zmR_;_Vs&ncEwgb`x{7Ml#>JAl6Z8_6s+HZF8RzhQnwvED4fz)Hwft9BOSmk$H|HA2 NIi9Y5F6*2UngCNyW#j+= delta 173 zcmV;e08; z3Z98DX#=Tc9&3oU0JEN%HN^e_PO>JmW^?;}a@dnSVfJA*v&or#!t67L bIs5^B*#z995d9JW0000<2SrXqu0mjfUOY+8 diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers.png index 9483f3c726c67970da0b13392aec820c25f42518..5280ebaa71632b9b4f32f16267ad2e4e98ec82ea 100644 GIT binary patch delta 250 zcmV`fMG0i4)%}=etZgARSegPNL>-anVS|zG z+AvHW5D8F@eUBX++;!!@jQs3(*k?NjmKCIL-ZNf^k{(w;HZY>TQ(dv?t&6bd@L5JKuP>4|vF_8H? zGRBE5anRxM^+X`hx%8#bdz)d;I(aEG7(}urOb8|3&Olip2q21Cu;3Rwo`LlT3*=42 zB|z}Ft{{qq>vQ`R2XXq+qW%kLEw25Oym{p4Ey4U8jF+*AWllCob3u*kf7`3ieBPOae~$ZXo7zuh%rOzV`PM? zAIUCglZB_uK7LDfK~M`%xv$%SE(qcqBd%%q0RLjx`)WH;)p!5^002ovPDHLkV1jzC Ba&rIx diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers_bottom.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers_bottom.png index ee621cb73b594cc3148f363d045dd36f0b43473d..76c3e0e6863e94742dd3d731623b82ff53fb2e10 100644 GIT binary patch delta 225 zcmV<703QGU0sR4xB!9$7L_t(|UTu(J3d0}_g;U*j)&A&ZWLMZ30y{tv&r!%7)+)Ru z?F#DZ6EyhZ`;~hFU6OCsE8mDwxGEt7raJ zJEq{0XWu}c63q6Jk}~H@gGL|?7NEbmc7}7XGsFo}E^aubm_=&H<_M93PuGw}q3Koq bXXy0>r$YbNBW(V@00000NkvXXu0mjfQ&njo delta 227 zcmV<90384Q0sjGzB!9+9L_t(|UTu!eZH7P$M2DZGRV1phQbKz0A$PP}2)Kt2mQODS zg0v7k2ix+KXM_-{D_%i-9y8JbES;ALL-KWDB$fPe1mV|`^2 z-CviXaLPz~)FCe?lB~S|Hk=u4?q9_002ovPDHLkV1kbXXSM(U diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers_stem.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers_stem.png index e4fa6b7f7c60a585cf22cd06afaeabdd133ec0db..511d81d231aee75a4e720bd1c3620f136108fb3a 100644 GIT binary patch delta 181 zcmV;m080O+0-^$tBmwD>B~^buJS>PZ0O$fR25H}s-gA&;v*siQW-9=Ch%POQUCo<&;-Yby-kV?hYg-LB{52g`Mk*b zAk~l~a6mF!<4|*T0Zamih2QdkwROxCAySmVUt|wuU);SI$I9 zykzTREvW=^KUr%qIG%H#u70fHzk%6>muF@!)RO?3$>8O3qGo}vxrcY>*UWz!Yz+pU lY)e=z8~^;{K5}gOT*mg;t?To9qHP&~z|+;wWt~$(695b%Og;br diff --git a/src/main/resources/assets/betterend/textures/block/tenanea_flowers_stem_bottom.png b/src/main/resources/assets/betterend/textures/block/tenanea_flowers_stem_bottom.png index 91483dfc55fc6020470acfabd13a5184abdfa498..82e3bcb838f960fde6c426a8329fe0ce77aab58f 100644 GIT binary patch delta 136 zcmV;30C)fR0rmlqBmupVB~^SrJS>PZ0O$fZd-wcOkU?0zf+2tnL&JgzU7RQbKwbew zCAv6417HCL@;Au;AXfm{f6&!oXhb&v$_9CXxg^#T9wQ_f0Ez{4d4dMOq73A85Js0L qXaEf3vz;gd2w@BXQZa@AsTcs`+syPr?;Xnk00004CHSh8x)wJF!+P64nrfl0Z=x`3(O_4p70nU$pBC+pvx0902XDS00cQ7 sU7nx;FpST3q6{E}F$74(7y_hX0N5$a?wo%7O8@`>07*qoM6N<$f~6ER5&!@I diff --git a/src/main/resources/assets/betterend/textures/block/thallasium_trapdoor.png b/src/main/resources/assets/betterend/textures/block/thallasium_trapdoor.png index 4a29852158bc8cdcc632eb197ca7f8532f188e2f..30d1aeaa9bc34e64cb7da4f1d5af2335beba5c16 100644 GIT binary patch delta 342 zcmV-c0jd6j2<8Hi8Gi-<001BJ|6u?C0WC>HK~#8Njg!4j0#Oi!@AFt%iWT@GV&zY3 zVk5R;q5Ps9xURjfB`%Kqs=@cZhyjx0g#q=kM#vbZ^b&| zCL`O1#V=7y^}Vn!imL-GZa<8r(mc>VH3e;doz{c|Qz zTL_%aXL+W`w(sGbd`?xQdU>7QLgRg+B4xIVJrNM$<0=4vh__l6fg&yuh_3>6&k!Tq zzF#>!lg+y)Sx@heq}J|c0)9NpY+L`YQRbw*Ws4DU!%-%m#cF-M=!tVq5jPxVhJ+2a o89}g!`)8CX`}=ZD{){5-546v?#J|s>a{vGU07*qoM6N<$f?52dB>(^b literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR|m<|L?SBkJIYiF0SGrQr)eKwKp&1oV}QR=0eu#^O>j4CGR_ywD)M@o+Chw z5M4H13#>cmTXoDcD(%rqssLIs3PwX=YYYsJjI z%yMSwvTf;oyB_MVJTvk3n(2!?-Llt+ZhBl0S#bO7Og5okJ-=@^=X~V so}#%Ey-N(&7yW5ER&%d8X`^5bF}BJWTV)I=On1?qCu2Z|`6kWf zY#?EL7|(>`;J3m4l|%5}y`Sp<5L$$3klpDTK?whBfI~fma92Bw3qXf60K`EK6QDyb zfDnk``q;--x}6Jv(l8s9wo(KzjHf;;$rv8MyGC&U)d`{RT_gKQw~#{kV|Ca7wAQTg Y1DRpR{oGuO4*&oF07*qoM6N<$g5aoPI{*Lx literal 974 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR|m<|L=I=zvk>7)t+Yc zmiii31)u`m6`ep4y;YNSmIE2xnlt;=x@RiY*T@$(N+lKm6^w$>5EvdIP{z@82Iv#c zk{~}|o&bY?{}#t}bOM)QWZu2!L@Hn#{uIN1UzkXR;hKRY$;nTZoGyJw~ zW3azkn{joszFi%A@u{PelX$nCd)gAnq1t)Zky$$Ky;sf(@u+RL^qw6wn73r=Ezopr E0RIVHa{vGU diff --git a/src/main/resources/data/betterend/loot_tables/chests/chorus_forest.json b/src/main/resources/data/betterend/loot_tables/chests/chorus_forest.json new file mode 100644 index 000000000..c135faf3f --- /dev/null +++ b/src/main/resources/data/betterend/loot_tables/chests/chorus_forest.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:chest", + "pools": [] +} diff --git a/src/main/resources/data/betterend/loot_tables/chests/foggy_mushroomland.json b/src/main/resources/data/betterend/loot_tables/chests/foggy_mushroomland.json new file mode 100644 index 000000000..c135faf3f --- /dev/null +++ b/src/main/resources/data/betterend/loot_tables/chests/foggy_mushroomland.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:chest", + "pools": [] +} diff --git a/src/main/resources/data/betterend/loot_tables/chests/lantern_woods.json b/src/main/resources/data/betterend/loot_tables/chests/lantern_woods.json new file mode 100644 index 000000000..c135faf3f --- /dev/null +++ b/src/main/resources/data/betterend/loot_tables/chests/lantern_woods.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:chest", + "pools": [] +} diff --git a/src/main/resources/data/betterend/loot_tables/chests/shadow_forest.json b/src/main/resources/data/betterend/loot_tables/chests/shadow_forest.json new file mode 100644 index 000000000..c135faf3f --- /dev/null +++ b/src/main/resources/data/betterend/loot_tables/chests/shadow_forest.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:chest", + "pools": [] +} diff --git a/src/main/resources/data/betterend/loot_tables/chests/umbrella_jungle.json b/src/main/resources/data/betterend/loot_tables/chests/umbrella_jungle.json new file mode 100644 index 000000000..c135faf3f --- /dev/null +++ b/src/main/resources/data/betterend/loot_tables/chests/umbrella_jungle.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:chest", + "pools": [] +} From 5bd0fc4f4c00eb2de439e9a6a31198ca54612772 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 30 Dec 2021 06:33:53 +0300 Subject: [PATCH 93/93] Removed debug string --- .../java/ru/betterend/world/features/BuildingListFeature.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ru/betterend/world/features/BuildingListFeature.java b/src/main/java/ru/betterend/world/features/BuildingListFeature.java index 8490e4f56..949f7060c 100644 --- a/src/main/java/ru/betterend/world/features/BuildingListFeature.java +++ b/src/main/java/ru/betterend/world/features/BuildingListFeature.java @@ -49,7 +49,6 @@ public StructureTemplate.StructureBlockInfo processBlock(LevelReader levelReader ); chestEntity.setLootTable(LootTableUtil.getTable(biome), random.nextLong()); chestEntity.setChanged(); - System.out.println("Set loot at " + chestPos); } return structureBlockInfo2; }