Compare commits
10 Commits
BOP-1.16.4
...
BOP-1.8-3.
Author | SHA1 | Date |
---|---|---|
Adubbz | 3711ae5821 | |
Adubbz | 5385daa4b9 | |
Adubbz | 616174acb0 | |
Adubbz | b17bdcf438 | |
Adubbz | 52dad1328a | |
Adubbz | 34ca387bba | |
gxy17886 | 04ff2179cc | |
Adubbz | 866d75be0d | |
Adubbz | d21577b1b8 | |
Adubbz | 91de3df26c |
|
@ -1,27 +0,0 @@
|
|||
---
|
||||
name: 1.16.3 Standalone Bug
|
||||
about: For bugs that occur with Biomes O' Plenty for 1.16.3. We do not support older versions!
|
||||
title: ''
|
||||
labels: bug-minor
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Bug Report
|
||||
|
||||
[ Lines between [ ] (square brackets) should be removed before posting. ]</br>
|
||||
|
||||
### What's the issue you encountered?
|
||||
|
||||
[ Describe the issue in detail and what you were doing beforehand. ]</br>
|
||||
|
||||
### How can the issue be reproduced?
|
||||
|
||||
[ Include a detailed step by step process for recreating your issue with only Biomes O' Plenty installed. ]</br>
|
||||
|
||||
### Logs
|
||||
|
||||
[ Please include any relevant logs here. This can be done by dragging and dropping your log files into the issue. ]</br>
|
||||
|
||||
### Mod Version
|
||||
[ Please put the version of the mod you were using here. ]</br>
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
name: 1.16.3 Standalone Crash
|
||||
about: For crashes that occur with Biomes O' Plenty for 1.16.3. We do not support older versions!
|
||||
title: ''
|
||||
labels: crash
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Bug Report
|
||||
|
||||
[ Lines between [ ] (square brackets) should be removed before posting. ]</br>
|
||||
|
||||
### How can the crash be reproduced?
|
||||
|
||||
[ Include a detailed step by step process for recreating your crash with only Biomes O' Plenty installed. ]</br>
|
||||
|
||||
### Crash Report and Logs
|
||||
|
||||
[ Please include your crash report and logs here. This can be done by dragging and dropping your log files and crash report files into the issue. ]</br>
|
||||
|
||||
### Mod Version
|
||||
[ Please put the version of the mod you were using here. ]</br>
|
|
@ -1,20 +0,0 @@
|
|||
---
|
||||
name: 1.16.3 Feature Request
|
||||
about: Feature requests for Biomes O' Plenty for 1.16.3. We do not support older versions!
|
||||
title: ''
|
||||
labels: feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Feature Request
|
||||
|
||||
[ Lines between [ ] (square brackets) should be removed before posting. ]</br>
|
||||
|
||||
### What feature are you suggesting?
|
||||
|
||||
[ Provide an overview of the feature being suggested. ]</br>
|
||||
|
||||
### Why should it be added?
|
||||
|
||||
[ Describe the benefits of implementing this feature. ]</br>
|
|
@ -1,5 +0,0 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Glitchfiend Discord
|
||||
url: https://discord.gg/GyyzU6T
|
||||
about: Please ask general questions here instead of opening issues for them.
|
|
@ -1,28 +1,11 @@
|
|||
/build/
|
||||
/bin/
|
||||
/out/
|
||||
/Mixin/
|
||||
/repo/
|
||||
/run/
|
||||
/logs/
|
||||
.idea/*
|
||||
/.gradle/
|
||||
/.settings/
|
||||
/.classpath
|
||||
/.project
|
||||
|
||||
# OS generated files
|
||||
*.DS_Store
|
||||
|
||||
# IntelliJ project files
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
*.launch
|
||||
mappings/.gradle/
|
||||
#mappings/mcp/
|
||||
mappings/build/
|
||||
mappings/*.csv
|
||||
mappings/.project
|
||||
mappings/last_updated.json
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
@Library('forge-shared-library')_
|
||||
|
||||
pipeline {
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
}
|
||||
agent {
|
||||
docker {
|
||||
image 'gradle:jdk8'
|
||||
args '-v forgegc:/home/gradle/.gradle/'
|
||||
}
|
||||
}
|
||||
environment {
|
||||
GRADLE_ARGS = '--no-daemon --console=plain' // No daemon for now as FG3 kinda derps. //'-Dorg.gradle.daemon.idletimeout=5000'
|
||||
JENKINS_HEAD = 'https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png'
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('fetch') {
|
||||
steps {
|
||||
checkout scm
|
||||
}
|
||||
}
|
||||
stage('setup') {
|
||||
steps {
|
||||
withGradle {
|
||||
sh './gradlew ${GRADLE_ARGS} --refresh-dependencies'
|
||||
}
|
||||
script {
|
||||
env.MYVERSION = sh(returnStdout: true, script: './gradlew :properties -q | grep "^version:" | awk \'{print $2}\'').trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('changelog') {
|
||||
when {
|
||||
not {
|
||||
changeRequest()
|
||||
}
|
||||
}
|
||||
steps {
|
||||
writeChangelog(currentBuild, "build/BiomesOPlenty-${env.MYVERSION}-changelog.txt")
|
||||
}
|
||||
}
|
||||
stage('publish') {
|
||||
when {
|
||||
not {
|
||||
changeRequest()
|
||||
}
|
||||
}
|
||||
environment {
|
||||
CURSE_API_KEY = credentials('curse-api-key')
|
||||
}
|
||||
steps {
|
||||
withGradle {
|
||||
sh './gradlew ${GRADLE_ARGS} :uploadArchives curseforge -PcurseApiKey=${CURSE_API_KEY}'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
README.md
17
README.md
|
@ -1,17 +0,0 @@
|
|||
<p align="center"><img src="https://i.imgur.com/HQ2opH6.png"></p>
|
||||
|
||||
<p align="center"><img src="https://i.imgur.com/CYxKg5M.png"></p>
|
||||
|
||||
<p align="center">https://discord.gg/GyyzU6T</p>
|
||||
|
||||
**Biomes O' Plenty** is a **Minecraft mod** that adds **over 50 new biomes** to the Overworld, Nether, and End. From Lavender Fields to Redwood Forests and many more, all of our biomes are decorated with a variety of **new trees, flowers, and plants!**
|
||||
|
||||
-----------------
|
||||
|
||||
**Note:** To use the mod on a **server**, you must set the **level-type** setting in your server's config file to **biomesoplenty**
|
||||
|
||||
-----------------
|
||||
|
||||
[<img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png">](http://creativecommons.org/licenses/by-nc-nd/4.0/deed.en_US)
|
||||
|
||||
Biomes O' Plenty is licensed under a [Creative Commons Attribution-NonCommercial-NoDerivs 4.0 Unported License](http://creativecommons.org/licenses/by-nc-nd/4.0/deed.en_US).
|
188
build.gradle
188
build.gradle
|
@ -1,71 +1,90 @@
|
|||
buildscript {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
maven { url = 'https://files.minecraftforge.net/maven' }
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
maven {
|
||||
name = "forge"
|
||||
url = "http://files.minecraftforge.net/maven"
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
|
||||
classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "com.matthewprenger.cursegradle" version "1.4.0"
|
||||
id "com.matthewprenger.cursegradle" version "1.0.5"
|
||||
}
|
||||
|
||||
apply plugin: 'net.minecraftforge.gradle'
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'idea'
|
||||
apply plugin: 'net.minecraftforge.gradle.forge'
|
||||
apply plugin: 'maven'
|
||||
|
||||
repositories { mavenLocal() }
|
||||
// define the properties file
|
||||
ext.configFile = file "build.properties"
|
||||
|
||||
configFile.withReader {
|
||||
// read config. it shall from now on be referenced as simply config or as project.config
|
||||
def prop = new Properties()
|
||||
prop.load(it)
|
||||
project.ext.config = new ConfigSlurper().parse prop
|
||||
}
|
||||
|
||||
group = "com.github.glitchfiend.biomesoplenty"
|
||||
version = config.mod_version
|
||||
archivesBaseName = "BiomesOPlenty"
|
||||
|
||||
def getGitHash = {
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine 'git', 'rev-parse', '--short', 'HEAD'
|
||||
standardOutput = stdout
|
||||
}
|
||||
return stdout.toString().trim()
|
||||
}
|
||||
|
||||
version = "${minecraft_version}-${mod_version}.${System.getenv().BUILD_NUMBER}"
|
||||
|
||||
minecraft {
|
||||
mappings channel: 'official', version: minecraft_version
|
||||
|
||||
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||
|
||||
runs {
|
||||
client = {
|
||||
workingDirectory = project.file("run").canonicalPath
|
||||
source sourceSets.main
|
||||
}
|
||||
server = {
|
||||
workingDirectory = project.file("run").canonicalPath
|
||||
source sourceSets.main
|
||||
}
|
||||
}
|
||||
version = config.minecraft_version + "-" + config.forge_version // grab latest forge
|
||||
useDepAts = true
|
||||
mappings = project.config.mappings_version
|
||||
}
|
||||
|
||||
processResources {
|
||||
from (sourceSets.main.resources.srcDirs) {
|
||||
include 'META-INF/mods.toml'
|
||||
expand 'version': project.version
|
||||
}
|
||||
// add some stuff to the version
|
||||
version = "${config.minecraft_version}-${config.mod_version}.${System.getenv().BUILD_NUMBER}"
|
||||
|
||||
def commonManifest = {
|
||||
attributes 'FMLAT': 'biomesoplenty_at.cfg'
|
||||
}
|
||||
|
||||
jar {
|
||||
manifest commonManifest
|
||||
classifier = 'universal'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
minecraft 'net.minecraftforge:forge:' + minecraft_version + '-' + forge_version
|
||||
processResources {
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include '**/*.info'
|
||||
include '**/*.properties'
|
||||
|
||||
// replaces
|
||||
expand ([
|
||||
'modid': project.archivesBaseName,
|
||||
'mod_version': project.config.mod_version,
|
||||
'minecraft_version': project.config.minecraft_version,
|
||||
'build_number': project.config.build_number
|
||||
])
|
||||
}
|
||||
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude '**/*.info'
|
||||
exclude '**/*.properties'
|
||||
}
|
||||
}
|
||||
|
||||
import net.minecraftforge.gradle.tasks.JenkinsChangelog
|
||||
import net.minecraftforge.gradle.common.Constants
|
||||
|
||||
task changelog(type: JenkinsChangelog) {
|
||||
def buildNumber = "${System.getenv().BUILD_NUMBER}"
|
||||
|
||||
serverRoot = 'http://ci.jenkins.minecraftforge.net/'
|
||||
jobName = 'BiomesOPlenty'
|
||||
authName = 'console_script';
|
||||
authPassword = 'dc6d48ca20a474beeac280a9a16a926e';
|
||||
targetBuild = buildNumber.toString();
|
||||
output = 'build/libs/' + project.getName() + '-' + project.version + '-changelog.txt';
|
||||
}
|
||||
|
||||
tasks.build.dependsOn('changelog')
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
from sourceSets.main.allJava
|
||||
|
@ -78,64 +97,63 @@ task sourcesJar(type: Jar) {
|
|||
|
||||
task deobfJar(type: Jar) {
|
||||
from sourceSets.main.output
|
||||
|
||||
manifest commonManifest
|
||||
classifier = 'deobf'
|
||||
}
|
||||
|
||||
task apiJar(type: Jar) {
|
||||
from(sourceSets.main.allJava) {
|
||||
include 'biomesoplenty/api/**'
|
||||
}
|
||||
from (sourceSets.main.output) {
|
||||
include 'LICENSE.txt'
|
||||
include 'biomesoplenty/api/**'
|
||||
}
|
||||
task listOutputs << {
|
||||
//This is needed by the Groovy Postbuild to append labels for each build used in the changelog.
|
||||
println "Output files:"
|
||||
println "--------------------"
|
||||
def list = []
|
||||
|
||||
classifier = 'api'
|
||||
}
|
||||
|
||||
def changelog_file = rootProject.file("build/BiomesOPlenty-${version}-changelog.txt")
|
||||
|
||||
curseforge {
|
||||
if (project.hasProperty('curseApiKey')) {
|
||||
apiKey = project.getProperty('curseApiKey')
|
||||
project {
|
||||
id = '220318'
|
||||
|
||||
if (changelog_file.exists()) {
|
||||
changelog = changelog_file
|
||||
}
|
||||
|
||||
releaseType = 'beta'
|
||||
|
||||
mainArtifact(jar) {
|
||||
displayName = "Biomes O' Plenty ${version}"
|
||||
}
|
||||
addArtifact sourcesJar
|
||||
addArtifact deobfJar
|
||||
addArtifact apiJar
|
||||
def dir = new File("build/libs/")
|
||||
|
||||
if (dir.exists()) {
|
||||
dir.eachFileRecurse (FileType.FILES) { file ->
|
||||
//Add each file to the list
|
||||
list << file
|
||||
}
|
||||
|
||||
//Print the names of all of the output files
|
||||
list.each {
|
||||
println it.getName()
|
||||
}
|
||||
}
|
||||
println "--------------------"
|
||||
}
|
||||
|
||||
tasks.build.finalizedBy('listOutputs')
|
||||
|
||||
artifacts {
|
||||
if (changelog_file.exists()) {
|
||||
archives changelog_file
|
||||
}
|
||||
archives jar
|
||||
archives changelog.output
|
||||
archives sourcesJar
|
||||
archives deobfJar
|
||||
archives apiJar
|
||||
}
|
||||
|
||||
curseforge {
|
||||
apiKey = "$System.env.curse_api_key"
|
||||
project {
|
||||
id = '220318'
|
||||
changelog = file('build/libs/' + project.getName() + '-' + project.version + '-changelog.txt');
|
||||
releaseType = 'beta'
|
||||
}
|
||||
}
|
||||
|
||||
import groovy.io.FileType
|
||||
|
||||
uploadArchives {
|
||||
repositories {
|
||||
mavenDeployer {
|
||||
if (project.hasProperty('forgeMavenPassword')) {
|
||||
repository(url: "https://files.minecraftforge.net/maven/manage/upload") {
|
||||
if (project.hasProperty('forgeMavenPassword'))
|
||||
{
|
||||
repository(url: "http://files.minecraftforge.net/maven/manage/upload") {
|
||||
authentication(userName: project.getProperty('forgeMavenUsername'), password: project.getProperty('forgeMavenPassword'))
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
// local repo folder. Might wanna juset use gradle install if you wanans end it to maven-local
|
||||
repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath())
|
||||
}
|
||||
|
@ -175,11 +193,21 @@ uploadArchives {
|
|||
name 'Adubbz'
|
||||
roles { role 'developer' }
|
||||
}
|
||||
developer {
|
||||
id 'Amnet'
|
||||
name 'Amnet'
|
||||
roles { role 'developer' }
|
||||
}
|
||||
developer {
|
||||
id 'Forstride'
|
||||
name 'Forstride'
|
||||
roles { role 'developer' }
|
||||
}
|
||||
developer {
|
||||
id 'ted80'
|
||||
name 'ted80'
|
||||
roles { role 'developer' }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
minecraft_version=1.8
|
||||
forge_version=11.14.4.1577
|
||||
mod_version=3.0.0
|
||||
curse_project_id=220318
|
||||
curse_release_type=alpha
|
||||
mappings_version=snapshot_nodoc_20150214
|
|
@ -1,12 +0,0 @@
|
|||
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
|
||||
# This is required to provide enough memory for the Minecraft decompilation process.
|
||||
org.gradle.jvmargs=-Xmx3G
|
||||
org.gradle.daemon=false
|
||||
|
||||
mod_version=13.1.0
|
||||
|
||||
minecraft_version=1.16.5
|
||||
minecraft_version_toml=16
|
||||
forge_version=36.1.0
|
||||
forge_version_toml=36
|
||||
forge_group=net.minecraftforge
|
Binary file not shown.
|
@ -1,5 +1,6 @@
|
|||
#Tue Dec 15 20:33:12 AEDT 2015
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-bin.zip
|
||||
|
|
|
@ -6,6 +6,47 @@
|
|||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
||||
if $cygwin ; then
|
||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
fi
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
|
@ -20,49 +61,9 @@ while [ -h "$PRG" ] ; do
|
|||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
cd "`dirname \"$PRG\"`/" >&-
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
cd "$SAVED" >&-
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
@ -89,7 +90,7 @@ location of your Java installation."
|
|||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
|
@ -113,7 +114,6 @@ fi
|
|||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
|
@ -154,19 +154,11 @@ if $cygwin ; then
|
|||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
||||
|
|
|
@ -1,90 +1,90 @@
|
|||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
|
|
|
@ -0,0 +1,345 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import net.minecraft.block.BlockSand;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EnumCreatureType;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraft.world.chunk.ChunkPrimer;
|
||||
import biomesoplenty.api.biome.generation.GenerationManager;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.IGenerator;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.util.config.BOPConfig.IConfigObj;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.TerrainSettings;
|
||||
|
||||
public class BOPBiome extends BiomeGenBase implements IExtendedBiome
|
||||
{
|
||||
private GenerationManager generationManager = new GenerationManager();
|
||||
private Map<BOPClimates, Integer> weightMap = new HashMap<BOPClimates, Integer>();
|
||||
|
||||
// defaults
|
||||
public int skyColor = -1; // -1 indicates the default skyColor by temperature will be used
|
||||
public boolean hasBiomeEssence = true;
|
||||
public IBlockState seaFloorBlock = Blocks.dirt.getDefaultState();
|
||||
|
||||
public TerrainSettings terrainSettings = new TerrainSettings();
|
||||
public boolean noNeighborTerrainInfuence = false;
|
||||
public int avgDirtDepth = 3;
|
||||
|
||||
public BOPBiome()
|
||||
{
|
||||
super(-1, false);
|
||||
|
||||
this.terrainSettings.setDefaults();
|
||||
|
||||
this.theBiomeDecorator.treesPerChunk = -999;
|
||||
this.theBiomeDecorator.flowersPerChunk = -999;
|
||||
this.theBiomeDecorator.grassPerChunk = -999;
|
||||
this.theBiomeDecorator.sandPerChunk = -999;
|
||||
this.theBiomeDecorator.sandPerChunk2 = -999;
|
||||
this.theBiomeDecorator.clayPerChunk = -999;
|
||||
this.theBiomeDecorator.generateLakes = false;
|
||||
}
|
||||
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void configure(IConfigObj conf)
|
||||
{
|
||||
|
||||
// Allow name to be overridden
|
||||
this.biomeName = conf.getString("biomeName",this.biomeName);
|
||||
|
||||
// Allow basic properties to be overridden
|
||||
this.topBlock = conf.getBlockState("topBlock", this.topBlock);
|
||||
this.fillerBlock = conf.getBlockState("fillerBlock", this.fillerBlock);
|
||||
this.seaFloorBlock = conf.getBlockState("seaFloorBlock", this.seaFloorBlock);
|
||||
|
||||
this.minHeight = conf.getFloat("rootHeight", this.minHeight);
|
||||
this.maxHeight = conf.getFloat("variation", this.maxHeight);
|
||||
this.temperature = conf.getFloat("temperature", this.temperature);
|
||||
this.rainfall = conf.getFloat("rainfall", this.rainfall);
|
||||
this.color = conf.getInt("color",this.color);
|
||||
this.waterColorMultiplier = conf.getInt("waterColorMultiplier", this.waterColorMultiplier);
|
||||
this.enableRain = conf.getBool("enableRain", this.enableRain);
|
||||
this.enableSnow = conf.getBool("enableSnow", this.enableSnow);
|
||||
this.skyColor = conf.getInt("skyColor", this.skyColor);
|
||||
this.hasBiomeEssence = conf.getBool("hasBiomeEssence", this.hasBiomeEssence);
|
||||
|
||||
// Allow weights to be overridden
|
||||
IConfigObj confWeights = conf.getObject("weights");
|
||||
if (confWeights != null)
|
||||
{
|
||||
for (BOPClimates climate : BOPClimates.values())
|
||||
{
|
||||
Integer weight = confWeights.getInt(climate.name().toLowerCase(), null);
|
||||
if (weight == null) {continue;}
|
||||
if (weight.intValue() < 1)
|
||||
{
|
||||
this.weightMap.remove(climate);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.weightMap.put(climate, weight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Allow generators to be configured
|
||||
IConfigObj confGenerators = conf.getObject("generators");
|
||||
if (confGenerators != null)
|
||||
{
|
||||
for (String name : confGenerators.getKeys())
|
||||
{
|
||||
this.generationManager.configureWith(name, confGenerators.getObject(name));
|
||||
}
|
||||
}
|
||||
|
||||
// Allow spawnable entites to be configured
|
||||
ArrayList<IConfigObj> confEntities = conf.getObjectArray("entities");
|
||||
if (confEntities != null)
|
||||
{
|
||||
for (IConfigObj confEntity : confEntities)
|
||||
{
|
||||
String entityName = confEntity.getString("name");
|
||||
EnumCreatureType creatureType = confEntity.getEnum("creatureType", EnumCreatureType.class);
|
||||
if (entityName == null || creatureType == null) {continue;}
|
||||
|
||||
// Look for an entity class matching this name
|
||||
// case insensitive, dot used as mod delimiter, no spaces or underscores
|
||||
// eg 'villager', 'Zombie', 'SQUID', 'enderdragon', 'biomesoplenty.wasp' all ok
|
||||
Class <? extends Entity > entityClazz = null;
|
||||
for (Object entry : EntityList.stringToClassMapping.entrySet())
|
||||
{
|
||||
String entryEntityName = (String)((Entry)entry).getKey();
|
||||
if (entryEntityName.equalsIgnoreCase(entityName))
|
||||
{
|
||||
entityClazz = (Class <? extends Entity >)((Entry)entry).getValue();
|
||||
}
|
||||
}
|
||||
if (entityClazz == null)
|
||||
{
|
||||
confEntity.addMessage("No entity registered called " + entityName);
|
||||
continue;
|
||||
}
|
||||
if (!creatureType.getCreatureClass().isAssignableFrom(entityClazz))
|
||||
{
|
||||
confEntity.addMessage("Entity " + entityName + " is not of type " + creatureType);
|
||||
continue;
|
||||
}
|
||||
|
||||
List<SpawnListEntry> spawns = this.getSpawnableList(creatureType);
|
||||
Integer weight = confEntity.getInt("weight");
|
||||
if (weight != null && weight < 1)
|
||||
{
|
||||
// weight was set to zero (or negative) so find and remove this spawn
|
||||
Iterator<SpawnListEntry> spawnIterator = spawns.iterator();
|
||||
while (spawnIterator.hasNext())
|
||||
{
|
||||
SpawnListEntry entry = spawnIterator.next();
|
||||
if (entry.entityClass == entityClazz)
|
||||
{
|
||||
spawnIterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// weight was positive, or omitted, so update an existing spawn or add a new spawn
|
||||
boolean foundIt = false;
|
||||
for (SpawnListEntry entry : spawns)
|
||||
{
|
||||
if (entry.entityClass == entityClazz)
|
||||
{
|
||||
// the entry already exists - adjust the params
|
||||
entry.itemWeight = confEntity.getInt("weight", entry.itemWeight);
|
||||
entry.minGroupCount = confEntity.getInt("minGroupCount", entry.minGroupCount);
|
||||
entry.maxGroupCount = confEntity.getInt("maxGroupCount", entry.maxGroupCount);
|
||||
foundIt = true;
|
||||
}
|
||||
}
|
||||
if (!foundIt)
|
||||
{
|
||||
// the entry does not exist - add it
|
||||
SpawnListEntry entry = new SpawnListEntry(entityClazz, confEntity.getInt("weight", 10), confEntity.getInt("minGroupCount", 4), confEntity.getInt("maxGroupCount", 4));
|
||||
spawns.add(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BiomeOwner getBiomeOwner()
|
||||
{
|
||||
return BiomeOwner.BIOMESOPLENTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addGenerator(String name, GeneratorStage stage, IGenerator generator)
|
||||
{
|
||||
this.generationManager.addGenerator(name, stage, generator);
|
||||
}
|
||||
|
||||
public void removeGenerator(String name)
|
||||
{
|
||||
this.generationManager.removeGenerator(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenerationManager getGenerationManager()
|
||||
{
|
||||
return this.generationManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<BOPClimates, Integer> getWeightMap()
|
||||
{
|
||||
return this.weightMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWeight(BOPClimates climate, int weight)
|
||||
{
|
||||
this.weightMap.put(climate, weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearWeights()
|
||||
{
|
||||
this.weightMap.clear();
|
||||
}
|
||||
|
||||
// whether or not a biome essence item corresponding to this biome should be able to drop from biome blocks
|
||||
public boolean hasBiomeEssence()
|
||||
{
|
||||
return this.hasBiomeEssence;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSkyColorByTemp(float temperature)
|
||||
{
|
||||
return (this.skyColor == -1) ? super.getSkyColorByTemp(temperature) : this.skyColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeGenBase setTemperatureRainfall(float temp, float rain)
|
||||
{
|
||||
this.temperature = temp;
|
||||
this.rainfall = rain;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void genTerrainBlocks(World world, Random rand, ChunkPrimer primer, int x, int z, double stoneNoiseVal)
|
||||
{
|
||||
|
||||
IBlockState topBlock = this.topBlock;
|
||||
IBlockState fillerBlock = this.fillerBlock;
|
||||
IBlockState seaFloorBlock = this.seaFloorBlock;
|
||||
|
||||
boolean hitFloorYet = false;
|
||||
int topBlocksToFill = 0;
|
||||
int dirtBlocksToFill = 0;
|
||||
int seaFloorBlocksToFill = 0;
|
||||
int dirtDepth = Math.max(0, (int)(stoneNoiseVal / 3.0D + this.avgDirtDepth + rand.nextDouble() * 0.25D));
|
||||
int seaFloorDepth = 1 + rand.nextInt(2);
|
||||
|
||||
int localX = x & 15;
|
||||
int localZ = z & 15;
|
||||
|
||||
// start at the top and move downwards
|
||||
for (int y = 255; y >= 0; --y)
|
||||
{
|
||||
|
||||
IBlockState state = primer.getBlockState(localZ, y, localX);
|
||||
|
||||
// bedrock at the bottom
|
||||
if (y <= rand.nextInt(5))
|
||||
{
|
||||
primer.setBlockState(localZ, y, localX, Blocks.bedrock.getDefaultState());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (state.getBlock().getMaterial() == Material.air)
|
||||
{
|
||||
// topBlocks and dirtBlocks can occur after any pocket of air
|
||||
topBlocksToFill = (topBlock == null ? 0 : 1);
|
||||
dirtBlocksToFill = dirtDepth;
|
||||
continue;
|
||||
}
|
||||
else if (!hitFloorYet && state.getBlock().getMaterial() == Material.water)
|
||||
{
|
||||
// seaFloorBlocks can occur after surface water
|
||||
seaFloorBlocksToFill = seaFloorDepth;
|
||||
}
|
||||
|
||||
if (state.getBlock() == Blocks.stone)
|
||||
{
|
||||
hitFloorYet = true;
|
||||
if (topBlocksToFill > 0)
|
||||
{
|
||||
if (y >= 62)
|
||||
{
|
||||
primer.setBlockState(localZ, y, localX, topBlock);
|
||||
}
|
||||
else if (y >= 56 - dirtDepth)
|
||||
{
|
||||
primer.setBlockState(localZ, y, localX, fillerBlock);
|
||||
}
|
||||
else
|
||||
{
|
||||
primer.setBlockState(localZ, y, localX, Blocks.gravel.getDefaultState());
|
||||
dirtBlocksToFill = 0;
|
||||
}
|
||||
topBlocksToFill--;
|
||||
}
|
||||
else if (seaFloorBlocksToFill > 0)
|
||||
{
|
||||
primer.setBlockState(localZ, y, localX, seaFloorBlock);
|
||||
--seaFloorBlocksToFill;
|
||||
}
|
||||
else if (dirtBlocksToFill > 0)
|
||||
{
|
||||
primer.setBlockState(localZ, y, localX, fillerBlock);
|
||||
--dirtBlocksToFill;
|
||||
|
||||
// add sandstone after a patch of sand
|
||||
if (dirtBlocksToFill == 0 && fillerBlock.getBlock() == Blocks.sand)
|
||||
{
|
||||
dirtBlocksToFill = rand.nextInt(4) + Math.max(0, y - 63);
|
||||
fillerBlock = fillerBlock.getValue(BlockSand.VARIANT) == BlockSand.EnumType.RED_SAND ? Blocks.red_sandstone.getDefaultState() : Blocks.sandstone.getDefaultState();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,104 +1,65 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome;
|
||||
|
||||
import biomesoplenty.core.BiomesOPlenty;
|
||||
import net.minecraft.util.RegistryKey;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import com.google.common.base.Optional;
|
||||
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
|
||||
public class BOPBiomes
|
||||
{
|
||||
public static RegistryKey<Biome> alps = register("alps");
|
||||
public static RegistryKey<Biome> alps_foothills = register("alps_foothills");
|
||||
public static RegistryKey<Biome> bamboo_blossom_grove = register("bamboo_blossom_grove");
|
||||
public static RegistryKey<Biome> bayou = register("bayou");
|
||||
public static RegistryKey<Biome> bayou_mangrove = register("bayou_mangrove");
|
||||
public static RegistryKey<Biome> burnt_forest = register("burnt_forest");
|
||||
public static RegistryKey<Biome> cherry_blossom_grove = register("cherry_blossom_grove");
|
||||
public static RegistryKey<Biome> cold_desert = register("cold_desert");
|
||||
public static RegistryKey<Biome> coniferous_forest = register("coniferous_forest");
|
||||
public static RegistryKey<Biome> coniferous_lakes = register("coniferous_lakes");
|
||||
public static RegistryKey<Biome> dead_forest = register("dead_forest");
|
||||
public static RegistryKey<Biome> deep_bayou = register("deep_bayou");
|
||||
public static RegistryKey<Biome> dense_marsh = register("dense_marsh");
|
||||
public static RegistryKey<Biome> dense_woodland = register("dense_woodland");
|
||||
public static RegistryKey<Biome> dryland = register("dryland");
|
||||
public static RegistryKey<Biome> dry_boneyard = register("dry_boneyard");
|
||||
public static RegistryKey<Biome> fir_clearing = register("fir_clearing");
|
||||
public static RegistryKey<Biome> flower_meadow = register("flower_meadow");
|
||||
public static RegistryKey<Biome> fungal_field = register("fungal_field");
|
||||
public static RegistryKey<Biome> fungal_jungle = register("fungal_jungle");
|
||||
public static RegistryKey<Biome> golden_prairie = register("golden_prairie");
|
||||
public static RegistryKey<Biome> grassland = register("grassland");
|
||||
public static RegistryKey<Biome> grassland_clover_patch = register("grassland_clover_patch");
|
||||
public static RegistryKey<Biome> gravel_beach = register("gravel_beach");
|
||||
public static RegistryKey<Biome> grove = register("grove");
|
||||
public static RegistryKey<Biome> grove_clearing = register("grove_clearing");
|
||||
public static RegistryKey<Biome> grove_lakes = register("grove_lakes");
|
||||
public static RegistryKey<Biome> highland = register("highland");
|
||||
public static RegistryKey<Biome> highland_crag = register("highland_crag");
|
||||
public static RegistryKey<Biome> highland_moor = register("highland_moor");
|
||||
public static RegistryKey<Biome> jade_cliffs = register("jade_cliffs");
|
||||
public static RegistryKey<Biome> lavender_field = register("lavender_field");
|
||||
public static RegistryKey<Biome> lavender_forest = register("lavender_forest");
|
||||
public static RegistryKey<Biome> lush_desert = register("lush_desert");
|
||||
public static RegistryKey<Biome> lush_savanna = register("lush_savanna");
|
||||
public static RegistryKey<Biome> marsh = register("marsh");
|
||||
public static RegistryKey<Biome> meadow = register("meadow");
|
||||
public static RegistryKey<Biome> meadow_forest = register("meadow_forest");
|
||||
public static RegistryKey<Biome> muskeg = register("muskeg");
|
||||
public static RegistryKey<Biome> mystic_grove = register("mystic_grove");
|
||||
public static RegistryKey<Biome> mystic_plains = register("mystic_plains");
|
||||
public static RegistryKey<Biome> ominous_woods = register("ominous_woods");
|
||||
public static RegistryKey<Biome> ominous_mire = register("ominous_mire");
|
||||
public static RegistryKey<Biome> orchard = register("orchard");
|
||||
public static RegistryKey<Biome> origin_valley = register("origin_valley");
|
||||
public static RegistryKey<Biome> prairie = register("prairie");
|
||||
public static RegistryKey<Biome> rainbow_hills = register("rainbow_hills");
|
||||
public static RegistryKey<Biome> rainforest = register("rainforest");
|
||||
public static RegistryKey<Biome> rainforest_cliffs = register("rainforest_cliffs");
|
||||
public static RegistryKey<Biome> rainforest_floodplain = register("rainforest_floodplain");
|
||||
public static RegistryKey<Biome> redwood_forest = register("redwood_forest");
|
||||
public static RegistryKey<Biome> redwood_forest_edge = register("redwood_forest_edge");
|
||||
public static RegistryKey<Biome> redwood_hills = register("redwood_hills");
|
||||
public static RegistryKey<Biome> scrubland = register("scrubland");
|
||||
public static RegistryKey<Biome> seasonal_forest = register("seasonal_forest");
|
||||
public static RegistryKey<Biome> seasonal_orchard = register("seasonal_orchard");
|
||||
public static RegistryKey<Biome> seasonal_pumpkin_patch = register("seasonal_pumpkin_patch");
|
||||
public static RegistryKey<Biome> shroomy_wetland = register("shroomy_wetland");
|
||||
public static RegistryKey<Biome> shrubland = register("shrubland");
|
||||
public static RegistryKey<Biome> shrubland_hills = register("shrubland_hills");
|
||||
public static RegistryKey<Biome> snowy_coniferous_forest = register("snowy_coniferous_forest");
|
||||
public static RegistryKey<Biome> snowy_fir_clearing = register("snowy_fir_clearing");
|
||||
public static RegistryKey<Biome> snowy_maple_forest = register("snowy_maple_forest");
|
||||
public static RegistryKey<Biome> tall_dead_forest = register("tall_dead_forest");
|
||||
public static RegistryKey<Biome> tropic_beach = register("tropic_beach");
|
||||
public static RegistryKey<Biome> tropics = register("tropics");
|
||||
public static RegistryKey<Biome> tundra = register("tundra");
|
||||
public static RegistryKey<Biome> tundra_basin = register("tundra_basin");
|
||||
public static RegistryKey<Biome> tundra_bog = register("tundra_bog");
|
||||
public static RegistryKey<Biome> volcanic_plains = register("volcanic_plains");
|
||||
public static RegistryKey<Biome> volcano = register("volcano");
|
||||
public static RegistryKey<Biome> wasteland = register("wasteland");
|
||||
public static RegistryKey<Biome> wetland = register("wetland");
|
||||
public static RegistryKey<Biome> wetland_forest = register("wetland_forest");
|
||||
public static RegistryKey<Biome> wooded_scrubland = register("wooded_scrubland");
|
||||
public static RegistryKey<Biome> woodland = register("woodland");
|
||||
// normal biomes which have weights
|
||||
public static Optional<BiomeGenBase> alps = Optional.absent();
|
||||
public static Optional<BiomeGenBase> arctic = Optional.absent();
|
||||
public static Optional<BiomeGenBase> bamboo_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> bayou = Optional.absent();
|
||||
public static Optional<BiomeGenBase> bog = Optional.absent();
|
||||
public static Optional<BiomeGenBase> boreal_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> brushland = Optional.absent();
|
||||
public static Optional<BiomeGenBase> canyon = Optional.absent();
|
||||
public static Optional<BiomeGenBase> chaparral = Optional.absent();
|
||||
public static Optional<BiomeGenBase> cherry_blossom_grove = Optional.absent();
|
||||
public static Optional<BiomeGenBase> cold_desert = Optional.absent();
|
||||
public static Optional<BiomeGenBase> coniferous_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> crag = Optional.absent();
|
||||
public static Optional<BiomeGenBase> dead_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> dead_swamp = Optional.absent();
|
||||
public static Optional<BiomeGenBase> deciduous_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> eucalyptus_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> fen = Optional.absent();
|
||||
public static Optional<BiomeGenBase> dense_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> flower_field = Optional.absent();
|
||||
public static Optional<BiomeGenBase> frost_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> frozen_desert = Optional.absent();
|
||||
public static Optional<BiomeGenBase> fungi_forest = Optional.absent();
|
||||
public static Optional<BiomeGenBase> garden = Optional.absent();
|
||||
public static Optional<BiomeGenBase> grassland = Optional.absent();
|
||||
public static Optional<BiomeGenBase> grove = Optional.absent();
|
||||
public static Optional<BiomeGenBase> heathland = Optional.absent();
|
||||
public static Optional<BiomeGenBase> highland = Optional.absent();
|
||||
public static Optional<BiomeGenBase> jade_cliffs = Optional.absent();
|
||||
public static Optional<BiomeGenBase> lavender_fields = Optional.absent();
|
||||
public static Optional<BiomeGenBase> marsh = Optional.absent();
|
||||
public static Optional<BiomeGenBase> moor = Optional.absent();
|
||||
public static Optional<BiomeGenBase> mountain = Optional.absent();
|
||||
public static Optional<BiomeGenBase> origin_valley = Optional.absent();
|
||||
public static Optional<BiomeGenBase> outback = Optional.absent();
|
||||
public static Optional<BiomeGenBase> shrubland = Optional.absent();
|
||||
public static Optional<BiomeGenBase> steppe = Optional.absent();
|
||||
public static Optional<BiomeGenBase> thicket = Optional.absent();
|
||||
public static Optional<BiomeGenBase> tundra = Optional.absent();
|
||||
public static Optional<BiomeGenBase> woodland = Optional.absent();
|
||||
public static Optional<BiomeGenBase> xeric_shrubland = Optional.absent();
|
||||
|
||||
// edge-biomes, sub-biomes and mutated-biomes
|
||||
public static Optional<BiomeGenBase> glacier = Optional.absent();
|
||||
public static Optional<BiomeGenBase> mountain_foothills = Optional.absent();
|
||||
public static Optional<BiomeGenBase> canyon_ravine = Optional.absent();
|
||||
|
||||
public static RegistryKey<Biome> crystalline_chasm = register("crystalline_chasm");
|
||||
public static RegistryKey<Biome> undergrowth = register("undergrowth");
|
||||
public static RegistryKey<Biome> visceral_heap = register("visceral_heap");
|
||||
public static RegistryKey<Biome> withered_abyss = register("withered_abyss");
|
||||
|
||||
private static RegistryKey<Biome> register(String name)
|
||||
{
|
||||
return RegistryKey.create(Registry.BIOME_REGISTRY, new ResourceLocation(BiomesOPlenty.MOD_ID, name));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome;
|
||||
|
||||
public enum BiomeOwner
|
||||
{
|
||||
BIOMESOPLENTY, OTHER;
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import biomesoplenty.api.biome.generation.GenerationManager;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.IGenerator;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
|
||||
public interface IExtendedBiome
|
||||
{
|
||||
public BiomeOwner getBiomeOwner();
|
||||
public void addGenerator(String name, GeneratorStage stage, IGenerator generator);
|
||||
public GenerationManager getGenerationManager();
|
||||
public Map<BOPClimates, Integer> getWeightMap();
|
||||
public void clearWeights();
|
||||
public void addWeight(BOPClimates climate, int weight);
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome.generation;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.gen.feature.WorldGenerator;
|
||||
|
||||
public abstract class BOPGeneratorBase extends WorldGenerator implements IGenerator
|
||||
{
|
||||
|
||||
private final String identifier;
|
||||
private String name;
|
||||
private GeneratorStage stage;
|
||||
protected float amountPerChunk;
|
||||
|
||||
protected BOPGeneratorBase(float amountPerChunk)
|
||||
{
|
||||
this.identifier = GeneratorRegistry.getIdentifier((Class<? extends IGenerator>)this.getClass());
|
||||
|
||||
if (this.identifier == null)
|
||||
{
|
||||
throw new RuntimeException("The identifier for " + this.getClass().getCanonicalName() + " cannot be null!");
|
||||
}
|
||||
|
||||
this.amountPerChunk = amountPerChunk;
|
||||
}
|
||||
|
||||
|
||||
protected static abstract class InnerBuilder<T extends InnerBuilder<T, G>, G extends BOPGeneratorBase>
|
||||
{
|
||||
protected T self() {return (T)this;}
|
||||
protected float amountPerChunk;
|
||||
public T amountPerChunk(float amountPerChunk) {this.amountPerChunk = amountPerChunk; return this.self();}
|
||||
public abstract G create();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStage(GeneratorStage stage)
|
||||
{
|
||||
this.stage = stage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneratorStage getStage()
|
||||
{
|
||||
return this.stage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getIdentifier()
|
||||
{
|
||||
return this.identifier;
|
||||
}
|
||||
|
||||
public abstract BlockPos getScatterY(World world, Random random, int x, int z);
|
||||
|
||||
public int getAmountToScatter(Random random)
|
||||
{
|
||||
int amount = MathHelper.floor_float(this.amountPerChunk);
|
||||
float remainder = this.amountPerChunk - amount;
|
||||
if (random.nextFloat() < remainder) {amount++;}
|
||||
return amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scatter(World world, Random random, BlockPos pos)
|
||||
{
|
||||
int amount = this.getAmountToScatter(random);
|
||||
for (int i = 0; i < amount; i++)
|
||||
{
|
||||
int x = pos.getX() + random.nextInt(16) + 8;
|
||||
int z = pos.getZ() + random.nextInt(16) + 8;
|
||||
generate(world, random, this.getScatterY(world, random, x, z));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome.generation;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import biomesoplenty.common.util.config.BOPConfig.IConfigObj;
|
||||
|
||||
import com.google.common.collect.ImmutableCollection;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class GenerationManager
|
||||
{
|
||||
private Map<String, IGenerator> generators = new HashMap<String, IGenerator>();
|
||||
|
||||
public void addGenerator(String name, GeneratorStage stage, IGenerator generator)
|
||||
{
|
||||
if (this.generators.containsKey(name))
|
||||
{
|
||||
throw new RuntimeException("A generator with name " + name + " already exists!");
|
||||
}
|
||||
generator.setName(name);
|
||||
generator.setStage(stage);
|
||||
this.generators.put(name, generator);
|
||||
}
|
||||
|
||||
public ImmutableCollection<IGenerator> getGeneratorsForStage(GeneratorStage stage)
|
||||
{
|
||||
ArrayList<IGenerator> out = new ArrayList<IGenerator>();
|
||||
for (IGenerator generator : this.generators.values())
|
||||
{
|
||||
if (generator.getStage() == stage)
|
||||
{
|
||||
out.add(generator);
|
||||
}
|
||||
}
|
||||
return ImmutableList.<IGenerator>copyOf(out);
|
||||
}
|
||||
|
||||
public void removeGenerator(String name)
|
||||
{
|
||||
this.generators.remove(name);
|
||||
}
|
||||
|
||||
public IGenerator getGenerator(String name)
|
||||
{
|
||||
return this.generators.get(name);
|
||||
}
|
||||
|
||||
public void configureWith(String name, IConfigObj conf)
|
||||
{
|
||||
if (this.generators.containsKey(name))
|
||||
{
|
||||
if (conf.getBool("enable", true))
|
||||
{
|
||||
// configure the existing generator
|
||||
this.generators.get(name).configure(conf);
|
||||
}
|
||||
else
|
||||
{
|
||||
// remove this generator
|
||||
this.generators.remove(name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// there was previously no generator of this name - attempt to add it
|
||||
IGenerator generator = GeneratorRegistry.createGenerator(conf);
|
||||
if (generator != null)
|
||||
{
|
||||
this.generators.put(name, generator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome.generation;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import biomesoplenty.common.util.config.BOPConfig.IConfigObj;
|
||||
|
||||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.HashBiMap;
|
||||
|
||||
public class GeneratorRegistry
|
||||
{
|
||||
private static BiMap<String, Class<? extends IGenerator>> generatorClasses = HashBiMap.create();
|
||||
private static Map<String, IGenerator.IGeneratorBuilder> generatorBuilders = new HashMap<String, IGenerator.IGeneratorBuilder>();
|
||||
|
||||
public static <T extends IGenerator> void registerGenerator(String identifier, Class<T> generatorClass, IGenerator.IGeneratorBuilder<T> builder)
|
||||
{
|
||||
generatorClasses.put(identifier, generatorClass);
|
||||
generatorBuilders.put(identifier, builder);
|
||||
}
|
||||
|
||||
public static String getIdentifier(Class<? extends IGenerator> generatorClass)
|
||||
{
|
||||
return generatorClasses.inverse().get(generatorClass);
|
||||
}
|
||||
|
||||
public static Class<? extends IGenerator> getGeneratorClass(String identifier)
|
||||
{
|
||||
return generatorClasses.get(identifier);
|
||||
}
|
||||
|
||||
public static IGenerator.IGeneratorBuilder getGeneratorBuilder(String identifier)
|
||||
{
|
||||
return generatorBuilders.get(identifier);
|
||||
}
|
||||
|
||||
public static boolean generatorExists(String identifier)
|
||||
{
|
||||
return generatorClasses.containsValue(identifier);
|
||||
}
|
||||
|
||||
public static IGenerator createGenerator(IConfigObj conf)
|
||||
{
|
||||
GeneratorStage stage = conf.getEnum("stage", GeneratorStage.class);
|
||||
String identifier = conf.getString("type");
|
||||
if (stage == null || identifier == null) {return null;}
|
||||
|
||||
IGenerator.IGeneratorBuilder builder = getGeneratorBuilder(identifier);
|
||||
if (builder == null)
|
||||
{
|
||||
conf.addMessage("No generator is registered with type name " + identifier);
|
||||
return null;
|
||||
}
|
||||
IGenerator generator = builder.create();
|
||||
generator.setStage(stage);
|
||||
generator.configure(conf);
|
||||
return generator;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome.generation;
|
||||
|
||||
import net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
public enum GeneratorStage
|
||||
{
|
||||
@SerializedName("pre")
|
||||
PRE(null),
|
||||
@SerializedName("big_shroom")
|
||||
BIG_SHROOM(Decorate.EventType.BIG_SHROOM),
|
||||
@SerializedName("cactus")
|
||||
CACTUS(Decorate.EventType.CACTUS),
|
||||
@SerializedName("clay")
|
||||
CLAY(Decorate.EventType.CLAY),
|
||||
@SerializedName("dead_bush")
|
||||
DEAD_BUSH(Decorate.EventType.DEAD_BUSH),
|
||||
@SerializedName("lilypad")
|
||||
LILYPAD(Decorate.EventType.LILYPAD),
|
||||
@SerializedName("flowers")
|
||||
FLOWERS(Decorate.EventType.FLOWERS),
|
||||
@SerializedName("grass")
|
||||
GRASS(Decorate.EventType.GRASS),
|
||||
@SerializedName("lake_water")
|
||||
LAKE_WATER(Decorate.EventType.LAKE_WATER),
|
||||
@SerializedName("lake_lava")
|
||||
LAKE_LAVA(Decorate.EventType.LAKE_LAVA),
|
||||
@SerializedName("pumpkin")
|
||||
PUMPKIN(Decorate.EventType.PUMPKIN),
|
||||
@SerializedName("reed")
|
||||
REED(Decorate.EventType.REED),
|
||||
@SerializedName("sand")
|
||||
SAND(Decorate.EventType.SAND),
|
||||
@SerializedName("sand_pass_2")
|
||||
SAND_PASS2(Decorate.EventType.SAND_PASS2),
|
||||
@SerializedName("shroom")
|
||||
SHROOM(Decorate.EventType.SHROOM),
|
||||
@SerializedName("tree")
|
||||
TREE(Decorate.EventType.TREE),
|
||||
@SerializedName("post")
|
||||
POST(null),
|
||||
@SerializedName("parent")
|
||||
PARENT(null);
|
||||
|
||||
private Decorate.EventType decorateType;
|
||||
|
||||
private GeneratorStage(Decorate.EventType decorateType)
|
||||
{
|
||||
this.decorateType = decorateType;
|
||||
}
|
||||
|
||||
public Decorate.EventType getDecorateType()
|
||||
{
|
||||
return this.decorateType;
|
||||
}
|
||||
|
||||
public static GeneratorStage mapDecorateType(Decorate.EventType decorateType)
|
||||
{
|
||||
//Somewhat of a hack, requires the ordering of our enum to be the s
|
||||
return decorateType != Decorate.EventType.CUSTOM ? GeneratorStage.values()[decorateType.ordinal() + 1] : null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,163 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome.generation;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import biomesoplenty.common.util.config.BOPConfig.IConfigObj;
|
||||
|
||||
public class GeneratorWeighted extends BOPGeneratorBase
|
||||
{
|
||||
|
||||
public static class Builder implements IGeneratorBuilder<GeneratorWeighted>
|
||||
{
|
||||
protected float amountPerChunk = 1.0F;
|
||||
|
||||
public Builder amountPerChunk(float a) {this.amountPerChunk = a; return this;}
|
||||
|
||||
@Override
|
||||
public GeneratorWeighted create()
|
||||
{
|
||||
return new GeneratorWeighted(this.amountPerChunk);
|
||||
}
|
||||
}
|
||||
|
||||
private HashMap<String, IGenerator> generators = new HashMap<String, IGenerator>();
|
||||
private HashMap<IGenerator, Integer> weights = new HashMap<IGenerator, Integer>();
|
||||
|
||||
public GeneratorWeighted()
|
||||
{
|
||||
// default
|
||||
this(1);
|
||||
}
|
||||
|
||||
public GeneratorWeighted(float amountPerChunk)
|
||||
{
|
||||
super(amountPerChunk);
|
||||
}
|
||||
|
||||
public void add(String name, int weight, IGenerator entry)
|
||||
{
|
||||
if (this.generators.containsKey(name))
|
||||
{
|
||||
throw new RuntimeException("A generator with name " + name + " already exists!");
|
||||
}
|
||||
if (weight < 1)
|
||||
{
|
||||
throw new IllegalArgumentException("Generator weight must be positive");
|
||||
}
|
||||
entry.setStage(GeneratorStage.PARENT);
|
||||
this.generators.put(name, entry);
|
||||
this.weights.put(entry, weight);
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
this.generators.clear();
|
||||
this.weights.clear();
|
||||
}
|
||||
|
||||
public IGenerator getGenerator(String name)
|
||||
{
|
||||
return this.generators.get(name);
|
||||
}
|
||||
|
||||
public void removeGenerator(String name)
|
||||
{
|
||||
IGenerator generator = this.generators.get(name);
|
||||
if (generator != null)
|
||||
{
|
||||
this.generators.remove(name);
|
||||
this.weights.remove(generator);
|
||||
}
|
||||
}
|
||||
|
||||
public IGenerator getRandomGenerator(Random random)
|
||||
{
|
||||
if (this.weights.isEmpty())
|
||||
{
|
||||
throw new RuntimeException("GeneratorWeighted has no child generators");
|
||||
}
|
||||
int totalWeight = 0;
|
||||
for (int weight : this.weights.values()) {totalWeight += weight;}
|
||||
int j = random.nextInt(totalWeight);
|
||||
for (Entry<IGenerator, Integer> entry : this.weights.entrySet())
|
||||
{
|
||||
j -= entry.getValue();
|
||||
if (j < 0) {return entry.getKey();}
|
||||
}
|
||||
throw new RuntimeException("Shouldn't ever get here");
|
||||
}
|
||||
|
||||
// never used - the scatter method is overriden
|
||||
@Override
|
||||
public BlockPos getScatterY(World world, Random random, int x, int z) {return null;}
|
||||
|
||||
@Override
|
||||
public void scatter(World world, Random random, BlockPos pos)
|
||||
{
|
||||
int amount = this.getAmountToScatter(random);
|
||||
for (int i = 0; i < amount; i++)
|
||||
{
|
||||
this.getRandomGenerator(random).scatter(world, random, pos);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean generate(World world, Random random, BlockPos pos)
|
||||
{
|
||||
return this.getRandomGenerator(random).generate(world, random, pos);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void configure(IConfigObj conf)
|
||||
{
|
||||
this.amountPerChunk = conf.getFloat("amountPerChunk", this.amountPerChunk);
|
||||
IConfigObj confGenerators = conf.getObject("generators");
|
||||
if (confGenerators != null)
|
||||
{
|
||||
for (String name : confGenerators.getKeys())
|
||||
{
|
||||
if (this.generators.containsKey(name))
|
||||
{
|
||||
IGenerator generator = this.getGenerator(name);
|
||||
Integer weight = conf.getInt("weight", this.weights.get(generator));
|
||||
if (weight.intValue() < 1)
|
||||
{
|
||||
// remove this generator if the weight is zero (or negative)
|
||||
this.removeGenerator(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
// adjust weight
|
||||
this.weights.put(generator, weight);
|
||||
// configure the existing generator
|
||||
generator.configure(conf);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// there was previously no generator of this name - attempt to add it
|
||||
Integer weight = conf.getInt("weight", null);
|
||||
IGenerator generator = GeneratorRegistry.createGenerator(conf);
|
||||
if (weight != null && generator != null)
|
||||
{
|
||||
this.add(name, weight, generator);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.biome.generation;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import biomesoplenty.common.util.config.BOPConfig.IConfigObj;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public interface IGenerator
|
||||
{
|
||||
public void scatter(World world, Random random, BlockPos pos);
|
||||
public boolean generate(World world, Random random, BlockPos pos);
|
||||
|
||||
public void setStage(GeneratorStage stage);
|
||||
public void setName(String name);
|
||||
|
||||
/**A unique name use to classify the purpose of a generator. For example, emeralds and ruby use the
|
||||
* same generator (and thus, have the same identifier) but have differing names.
|
||||
*/
|
||||
public String getName();
|
||||
/**The identifier for this generator should be consistent across all instances of the same type*/
|
||||
public String getIdentifier();
|
||||
public GeneratorStage getStage();
|
||||
|
||||
public static interface IGeneratorBuilder<T extends IGenerator>
|
||||
{
|
||||
public T create();
|
||||
}
|
||||
|
||||
public void configure(IConfigObj conf);
|
||||
}
|
|
@ -1,346 +1,148 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.block;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
|
||||
public class BOPBlocks
|
||||
{
|
||||
public static Block white_sand;
|
||||
public static Block white_sandstone;
|
||||
public static Block cut_white_sandstone;
|
||||
public static Block cut_white_sandstone_slab;
|
||||
public static Block chiseled_white_sandstone;
|
||||
public static Block smooth_white_sandstone;
|
||||
public static Block smooth_white_sandstone_slab;
|
||||
public static Block smooth_white_sandstone_stairs;
|
||||
public static Block white_sandstone_slab;
|
||||
public static Block white_sandstone_stairs;
|
||||
public static Block white_sandstone_wall;
|
||||
public static Block bamboo_thatching;
|
||||
public static Block ash_block;
|
||||
public static Block bamboo;
|
||||
public static Block bone_segment;
|
||||
public static Block coral;
|
||||
public static Block seaweed;
|
||||
public static Block gem_block;
|
||||
public static Block gem_ore;
|
||||
public static Block hive;
|
||||
public static Block mushroom;
|
||||
public static Block stone;
|
||||
public static Block biome_block;
|
||||
|
||||
public static Block flower_0;
|
||||
public static Block flower_1;
|
||||
public static Block log_0;
|
||||
public static Block log_1;
|
||||
public static Block log_2;
|
||||
public static Block log_3;
|
||||
public static Block leaves_0;
|
||||
public static Block leaves_1;
|
||||
public static Block leaves_2;
|
||||
public static Block leaves_3;
|
||||
public static Block leaves_4;
|
||||
public static Block leaves_5;
|
||||
public static Block sapling_0;
|
||||
public static Block sapling_1;
|
||||
public static Block sapling_2;
|
||||
// TODO fruit tree leaves and saplings
|
||||
public static Block planks_0;
|
||||
public static Block wood_slab_0;
|
||||
public static Block wood_slab_1;
|
||||
public static Block double_wood_slab_0;
|
||||
public static Block double_wood_slab_1;
|
||||
public static Block sacred_oak_stairs;
|
||||
public static Block cherry_stairs;
|
||||
public static Block dark_stairs;
|
||||
public static Block fir_stairs;
|
||||
public static Block ethereal_stairs;
|
||||
public static Block magic_stairs;
|
||||
public static Block mangrove_stairs;
|
||||
public static Block palm_stairs;
|
||||
public static Block redwood_stairs;
|
||||
public static Block willow_stairs;
|
||||
public static Block pine_stairs;
|
||||
public static Block hellbark_stairs;
|
||||
public static Block jacaranda_stairs;
|
||||
public static Block mahogany_stairs;
|
||||
public static Block sacred_oak_fence;
|
||||
public static Block cherry_fence;
|
||||
public static Block dark_fence;
|
||||
public static Block fir_fence;
|
||||
public static Block ethereal_fence;
|
||||
public static Block magic_fence;
|
||||
public static Block mangrove_fence;
|
||||
public static Block palm_fence;
|
||||
public static Block redwood_fence;
|
||||
public static Block willow_fence;
|
||||
public static Block pine_fence;
|
||||
public static Block hellbark_fence;
|
||||
public static Block jacaranda_fence;
|
||||
public static Block mahogany_fence;
|
||||
public static Block sacred_oak_fence_gate;
|
||||
public static Block cherry_fence_gate;
|
||||
public static Block dark_fence_gate;
|
||||
public static Block fir_fence_gate;
|
||||
public static Block ethereal_fence_gate;
|
||||
public static Block magic_fence_gate;
|
||||
public static Block mangrove_fence_gate;
|
||||
public static Block palm_fence_gate;
|
||||
public static Block redwood_fence_gate;
|
||||
public static Block willow_fence_gate;
|
||||
public static Block pine_fence_gate;
|
||||
public static Block hellbark_fence_gate;
|
||||
public static Block jacaranda_fence_gate;
|
||||
public static Block mahogany_fence_gate;
|
||||
public static Block sacred_oak_door;
|
||||
public static Block cherry_door;
|
||||
public static Block dark_door;
|
||||
public static Block fir_door;
|
||||
public static Block ethereal_door;
|
||||
public static Block magic_door;
|
||||
public static Block mangrove_door;
|
||||
public static Block palm_door;
|
||||
public static Block redwood_door;
|
||||
public static Block willow_door;
|
||||
public static Block pine_door;
|
||||
public static Block hellbark_door;
|
||||
public static Block jacaranda_door;
|
||||
public static Block mahogany_door;
|
||||
|
||||
public static Block orange_sand;
|
||||
public static Block orange_sandstone;
|
||||
public static Block cut_orange_sandstone;
|
||||
public static Block cut_orange_sandstone_slab;
|
||||
public static Block chiseled_orange_sandstone;
|
||||
public static Block smooth_orange_sandstone;
|
||||
public static Block smooth_orange_sandstone_slab;
|
||||
public static Block smooth_orange_sandstone_stairs;
|
||||
public static Block orange_sandstone_slab;
|
||||
public static Block orange_sandstone_stairs;
|
||||
public static Block orange_sandstone_wall;
|
||||
|
||||
public static Block black_sand;
|
||||
public static Block black_sandstone;
|
||||
public static Block cut_black_sandstone;
|
||||
public static Block cut_black_sandstone_slab;
|
||||
public static Block chiseled_black_sandstone;
|
||||
public static Block smooth_black_sandstone;
|
||||
public static Block smooth_black_sandstone_slab;
|
||||
public static Block smooth_black_sandstone_stairs;
|
||||
public static Block black_sandstone_slab;
|
||||
public static Block black_sandstone_stairs;
|
||||
public static Block black_sandstone_wall;
|
||||
|
||||
public static Block mud;
|
||||
public static Block mud_bricks;
|
||||
public static Block mud_brick_slab;
|
||||
public static Block mud_brick_stairs;
|
||||
public static Block mud_brick_wall;
|
||||
|
||||
public static Block origin_grass_block;
|
||||
public static Block dried_salt;
|
||||
public static Block sand;
|
||||
public static Block turnip_block;
|
||||
public static Block flesh;
|
||||
public static Block nether_crystal_block;
|
||||
public static Block nether_crystal;
|
||||
|
||||
public static Block toadstool_block;
|
||||
public static Block glowshroom_block;
|
||||
public static Block grass;
|
||||
public static Block waterlily;
|
||||
public static Block dirt;
|
||||
public static Block stone_formations;
|
||||
public static Block fruit_block;
|
||||
public static Block ash_stone;
|
||||
public static Block hard_sand;
|
||||
public static Block hard_dirt;
|
||||
public static Block hard_ice;
|
||||
public static Block dried_dirt;
|
||||
public static Block crag_rock;
|
||||
public static Block mud_brick_block;
|
||||
public static Block crystal;
|
||||
public static Block other_slab;
|
||||
public static Block double_other_slab;
|
||||
|
||||
public static Block origin_sapling;
|
||||
public static Block origin_leaves;
|
||||
public static Block flowering_oak_sapling;
|
||||
public static Block flowering_oak_leaves;
|
||||
public static Block rainbow_birch_sapling;
|
||||
public static Block rainbow_birch_leaves;
|
||||
public static Block yellow_autumn_sapling;
|
||||
public static Block yellow_autumn_leaves;
|
||||
public static Block orange_autumn_sapling;
|
||||
public static Block orange_autumn_leaves;
|
||||
public static Block maple_sapling;
|
||||
public static Block maple_leaves;
|
||||
public static Block mud_brick_stairs;
|
||||
|
||||
public static Block fir_sapling;
|
||||
public static Block fir_leaves;
|
||||
public static Block fir_log;
|
||||
public static Block stripped_fir_log;
|
||||
public static Block fir_wood;
|
||||
public static Block stripped_fir_wood;
|
||||
public static Block fir_planks;
|
||||
public static Block fir_slab;
|
||||
public static Block fir_stairs;
|
||||
public static Block fir_fence;
|
||||
public static Block fir_fence_gate;
|
||||
public static Block fir_door;
|
||||
public static Block fir_trapdoor;
|
||||
public static Block fir_pressure_plate;
|
||||
public static Block fir_button;
|
||||
public static Block fir_sign;
|
||||
public static Block fir_wall_sign;
|
||||
public static Block flower_vine;
|
||||
public static Block ivy;
|
||||
public static Block moss;
|
||||
public static Block tree_moss;
|
||||
public static Block wisteria;
|
||||
|
||||
public static Block redwood_sapling;
|
||||
public static Block redwood_leaves;
|
||||
public static Block redwood_log;
|
||||
public static Block stripped_redwood_log;
|
||||
public static Block redwood_wood;
|
||||
public static Block stripped_redwood_wood;
|
||||
public static Block redwood_planks;
|
||||
public static Block redwood_slab;
|
||||
public static Block redwood_stairs;
|
||||
public static Block redwood_fence;
|
||||
public static Block redwood_fence_gate;
|
||||
public static Block redwood_door;
|
||||
public static Block redwood_trapdoor;
|
||||
public static Block redwood_pressure_plate;
|
||||
public static Block redwood_button;
|
||||
public static Block redwood_sign;
|
||||
public static Block redwood_wall_sign;
|
||||
public static Block plant_0;
|
||||
public static Block plant_1;
|
||||
public static Block double_plant;
|
||||
|
||||
public static Block white_cherry_sapling;
|
||||
public static Block white_cherry_leaves;
|
||||
public static Block pink_cherry_sapling;
|
||||
public static Block pink_cherry_leaves;
|
||||
public static Block cherry_log;
|
||||
public static Block stripped_cherry_log;
|
||||
public static Block cherry_wood;
|
||||
public static Block stripped_cherry_wood;
|
||||
public static Block cherry_planks;
|
||||
public static Block cherry_slab;
|
||||
public static Block cherry_stairs;
|
||||
public static Block cherry_fence;
|
||||
public static Block cherry_fence_gate;
|
||||
public static Block cherry_door;
|
||||
public static Block cherry_trapdoor;
|
||||
public static Block cherry_pressure_plate;
|
||||
public static Block cherry_button;
|
||||
public static Block cherry_sign;
|
||||
public static Block cherry_wall_sign;
|
||||
public static Block honey_block;
|
||||
|
||||
public static Block mahogany_sapling;
|
||||
public static Block mahogany_leaves;
|
||||
public static Block mahogany_log;
|
||||
public static Block stripped_mahogany_log;
|
||||
public static Block mahogany_wood;
|
||||
public static Block stripped_mahogany_wood;
|
||||
public static Block mahogany_planks;
|
||||
public static Block mahogany_slab;
|
||||
public static Block mahogany_stairs;
|
||||
public static Block mahogany_fence;
|
||||
public static Block mahogany_fence_gate;
|
||||
public static Block mahogany_door;
|
||||
public static Block mahogany_trapdoor;
|
||||
public static Block mahogany_pressure_plate;
|
||||
public static Block mahogany_button;
|
||||
public static Block mahogany_sign;
|
||||
public static Block mahogany_wall_sign;
|
||||
|
||||
public static Block jacaranda_sapling;
|
||||
public static Block jacaranda_leaves;
|
||||
public static Block jacaranda_log;
|
||||
public static Block stripped_jacaranda_log;
|
||||
public static Block jacaranda_wood;
|
||||
public static Block stripped_jacaranda_wood;
|
||||
public static Block jacaranda_planks;
|
||||
public static Block jacaranda_slab;
|
||||
public static Block jacaranda_stairs;
|
||||
public static Block jacaranda_fence;
|
||||
public static Block jacaranda_fence_gate;
|
||||
public static Block jacaranda_door;
|
||||
public static Block jacaranda_trapdoor;
|
||||
public static Block jacaranda_pressure_plate;
|
||||
public static Block jacaranda_button;
|
||||
public static Block jacaranda_sign;
|
||||
public static Block jacaranda_wall_sign;
|
||||
|
||||
public static Block palm_sapling;
|
||||
public static Block palm_leaves;
|
||||
public static Block palm_log;
|
||||
public static Block stripped_palm_log;
|
||||
public static Block palm_wood;
|
||||
public static Block stripped_palm_wood;
|
||||
public static Block palm_planks;
|
||||
public static Block palm_slab;
|
||||
public static Block palm_stairs;
|
||||
public static Block palm_fence;
|
||||
public static Block palm_fence_gate;
|
||||
public static Block palm_door;
|
||||
public static Block palm_trapdoor;
|
||||
public static Block palm_pressure_plate;
|
||||
public static Block palm_button;
|
||||
public static Block palm_sign;
|
||||
public static Block palm_wall_sign;
|
||||
|
||||
public static Block willow_sapling;
|
||||
public static Block willow_leaves;
|
||||
public static Block willow_log;
|
||||
public static Block stripped_willow_log;
|
||||
public static Block willow_wood;
|
||||
public static Block stripped_willow_wood;
|
||||
public static Block willow_planks;
|
||||
public static Block willow_slab;
|
||||
public static Block willow_stairs;
|
||||
public static Block willow_fence;
|
||||
public static Block willow_fence_gate;
|
||||
public static Block willow_door;
|
||||
public static Block willow_trapdoor;
|
||||
public static Block willow_pressure_plate;
|
||||
public static Block willow_button;
|
||||
public static Block willow_sign;
|
||||
public static Block willow_wall_sign;
|
||||
|
||||
public static Block dead_sapling;
|
||||
public static Block dead_leaves;
|
||||
public static Block dead_log;
|
||||
public static Block stripped_dead_log;
|
||||
public static Block dead_wood;
|
||||
public static Block stripped_dead_wood;
|
||||
public static Block dead_planks;
|
||||
public static Block dead_slab;
|
||||
public static Block dead_stairs;
|
||||
public static Block dead_fence;
|
||||
public static Block dead_fence_gate;
|
||||
public static Block dead_door;
|
||||
public static Block dead_trapdoor;
|
||||
public static Block dead_pressure_plate;
|
||||
public static Block dead_button;
|
||||
public static Block dead_sign;
|
||||
public static Block dead_wall_sign;
|
||||
|
||||
public static Block magic_sapling;
|
||||
public static Block magic_leaves;
|
||||
public static Block magic_log;
|
||||
public static Block stripped_magic_log;
|
||||
public static Block magic_wood;
|
||||
public static Block stripped_magic_wood;
|
||||
public static Block magic_planks;
|
||||
public static Block magic_slab;
|
||||
public static Block magic_stairs;
|
||||
public static Block magic_fence;
|
||||
public static Block magic_fence_gate;
|
||||
public static Block magic_door;
|
||||
public static Block magic_trapdoor;
|
||||
public static Block magic_pressure_plate;
|
||||
public static Block magic_button;
|
||||
public static Block magic_sign;
|
||||
public static Block magic_wall_sign;
|
||||
|
||||
public static Block umbran_sapling;
|
||||
public static Block umbran_leaves;
|
||||
public static Block umbran_log;
|
||||
public static Block stripped_umbran_log;
|
||||
public static Block umbran_wood;
|
||||
public static Block stripped_umbran_wood;
|
||||
public static Block umbran_planks;
|
||||
public static Block umbran_slab;
|
||||
public static Block umbran_stairs;
|
||||
public static Block umbran_fence;
|
||||
public static Block umbran_fence_gate;
|
||||
public static Block umbran_door;
|
||||
public static Block umbran_trapdoor;
|
||||
public static Block umbran_pressure_plate;
|
||||
public static Block umbran_button;
|
||||
public static Block umbran_sign;
|
||||
public static Block umbran_wall_sign;
|
||||
|
||||
public static Block hellbark_sapling;
|
||||
public static Block hellbark_leaves;
|
||||
public static Block hellbark_log;
|
||||
public static Block stripped_hellbark_log;
|
||||
public static Block hellbark_wood;
|
||||
public static Block stripped_hellbark_wood;
|
||||
public static Block hellbark_planks;
|
||||
public static Block hellbark_slab;
|
||||
public static Block hellbark_stairs;
|
||||
public static Block hellbark_fence;
|
||||
public static Block hellbark_fence_gate;
|
||||
public static Block hellbark_door;
|
||||
public static Block hellbark_trapdoor;
|
||||
public static Block hellbark_pressure_plate;
|
||||
public static Block hellbark_button;
|
||||
public static Block hellbark_sign;
|
||||
public static Block hellbark_wall_sign;
|
||||
|
||||
public static Block rose;
|
||||
public static Block violet;
|
||||
public static Block lavender;
|
||||
public static Block wildflower;
|
||||
public static Block orange_cosmos;
|
||||
public static Block pink_daffodil;
|
||||
public static Block pink_hibiscus;
|
||||
public static Block glowflower;
|
||||
public static Block wilted_lily;
|
||||
public static Block burning_blossom;
|
||||
|
||||
public static Block blue_hydrangea;
|
||||
public static Block goldenrod;
|
||||
|
||||
public static Block willow_vine;
|
||||
public static Block spanish_moss;
|
||||
public static Block spanish_moss_plant;
|
||||
|
||||
public static Block sprout;
|
||||
public static Block bush;
|
||||
public static Block clover;
|
||||
public static Block huge_clover_petal;
|
||||
public static Block dune_grass;
|
||||
public static Block desert_grass;
|
||||
public static Block dead_grass;
|
||||
public static Block cattail;
|
||||
public static Block barley;
|
||||
public static Block reed;
|
||||
public static Block watergrass;
|
||||
public static Block mangrove_root;
|
||||
public static Block dead_branch;
|
||||
public static Block bramble;
|
||||
|
||||
public static Block toadstool;
|
||||
public static Block glowshroom;
|
||||
|
||||
public static Block potted_origin_sapling;
|
||||
public static Block potted_flowering_oak_sapling;
|
||||
public static Block potted_rainbow_birch_sapling;
|
||||
public static Block potted_yellow_autumn_sapling;
|
||||
public static Block potted_orange_autumn_sapling;
|
||||
public static Block potted_maple_sapling;
|
||||
public static Block potted_fir_sapling;
|
||||
public static Block potted_redwood_sapling;
|
||||
public static Block potted_white_cherry_sapling;
|
||||
public static Block potted_pink_cherry_sapling;
|
||||
public static Block potted_mahogany_sapling;
|
||||
public static Block potted_jacaranda_sapling;
|
||||
public static Block potted_palm_sapling;
|
||||
public static Block potted_willow_sapling;
|
||||
public static Block potted_dead_sapling;
|
||||
public static Block potted_magic_sapling;
|
||||
public static Block potted_umbran_sapling;
|
||||
public static Block potted_hellbark_sapling;
|
||||
public static Block potted_rose;
|
||||
public static Block potted_violet;
|
||||
public static Block potted_lavender;
|
||||
public static Block potted_wildflower;
|
||||
public static Block potted_orange_cosmos;
|
||||
public static Block potted_pink_daffodil;
|
||||
public static Block potted_pink_hibiscus;
|
||||
public static Block potted_glowflower;
|
||||
public static Block potted_wilted_lily;
|
||||
public static Block potted_burning_blossom;
|
||||
public static Block potted_sprout;
|
||||
public static Block potted_clover;
|
||||
public static Block potted_toadstool;
|
||||
public static Block potted_glowshroom;
|
||||
public static Block honey;
|
||||
public static Fluid honey_fluid;
|
||||
public static Block blood;
|
||||
public static Fluid blood_fluid;
|
||||
public static Block poison;
|
||||
public static Fluid poison_fluid;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.block;
|
||||
|
||||
import biomesoplenty.common.util.block.BlockQuery.IBlockPosQuery;
|
||||
|
||||
public class BlockQueries
|
||||
{
|
||||
|
||||
public static IBlockPosQuery anything;
|
||||
public static IBlockPosQuery nothing;
|
||||
public static IBlockPosQuery hasWater;
|
||||
public static IBlockPosQuery airAbove;
|
||||
public static IBlockPosQuery breakable;
|
||||
public static IBlockPosQuery airOrLeaves;
|
||||
public static IBlockPosQuery surfaceBlocks;
|
||||
public static IBlockPosQuery groundBlocks;
|
||||
|
||||
public static IBlockPosQuery fertile;
|
||||
public static IBlockPosQuery fertileOrNetherrack;
|
||||
public static IBlockPosQuery sustainsCave;
|
||||
public static IBlockPosQuery sustainsNether;
|
||||
public static IBlockPosQuery endish;
|
||||
public static IBlockPosQuery hellish;
|
||||
public static IBlockPosQuery litFertile;
|
||||
public static IBlockPosQuery litBeach;
|
||||
public static IBlockPosQuery litFertileWaterside;
|
||||
public static IBlockPosQuery litSand;
|
||||
public static IBlockPosQuery litDry;
|
||||
public static IBlockPosQuery litFertileOrDry;
|
||||
public static IBlockPosQuery spectralMoss;
|
||||
public static IBlockPosQuery fertileSeaBed;
|
||||
public static IBlockPosQuery underwater;
|
||||
public static IBlockPosQuery suitableForReed;
|
||||
public static IBlockPosQuery rootsCanDigThrough;
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.block;
|
||||
|
||||
import net.minecraft.block.properties.IProperty;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
|
||||
public interface IBOPBlock {
|
||||
|
||||
public Class<? extends ItemBlock> getItemClass();
|
||||
public int getItemRenderColor(IBlockState state, int tintIndex);
|
||||
public IProperty[] getPresetProperties();
|
||||
public IProperty[] getNonRenderingProperties();
|
||||
public String getStateName(IBlockState state);
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.block;
|
||||
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraftforge.common.EnumPlantType;
|
||||
|
||||
public interface ISustainsPlantType
|
||||
{
|
||||
public boolean canSustainPlantType(IBlockAccess world, BlockPos pos, EnumPlantType plantType);
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.api.entity;
|
||||
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.item.BoatEntity;
|
||||
|
||||
public class BOPEntities
|
||||
{
|
||||
public static EntityType<? extends BoatEntity> boat_bop;
|
||||
}
|
|
@ -1,211 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.api.enums;
|
||||
|
||||
import biomesoplenty.api.biome.BOPBiomes;
|
||||
import biomesoplenty.common.util.biome.BiomeUtil;
|
||||
import biomesoplenty.init.ModBiomes;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import net.minecraft.util.RegistryKey;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.Biomes;
|
||||
import net.minecraft.world.gen.INoiseRandom;
|
||||
import net.minecraftforge.common.BiomeManager;
|
||||
import net.minecraftforge.common.BiomeManager.BiomeType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public enum BOPClimates
|
||||
{
|
||||
ICE_CAP (BiomeType.ICY),
|
||||
TUNDRA (BiomeType.ICY),
|
||||
WET_BOREAL (BiomeType.COOL),
|
||||
DRY_BOREAL (BiomeType.COOL),
|
||||
WET_TEMPERATE (BiomeType.COOL),
|
||||
DRY_TEMPERATE (BiomeType.WARM),
|
||||
COOL_TEMPERATE (BiomeType.COOL),
|
||||
WARM_TEMPERATE (BiomeType.WARM),
|
||||
SUBTROPICAL (BiomeType.WARM),
|
||||
TROPICAL (BiomeType.DESERT),
|
||||
MEDITERRANEAN (BiomeType.WARM),
|
||||
SAVANNA (BiomeType.DESERT),
|
||||
HOT_DESERT (BiomeType.DESERT),
|
||||
WASTELAND (null),
|
||||
NETHER (null);
|
||||
|
||||
public final BiomeType biomeType;
|
||||
private int totalBiomesWeight;
|
||||
private int totalIslandBiomesWeight;
|
||||
|
||||
private ArrayList<WeightedBiomeEntry> landBiomes = Lists.newArrayList();
|
||||
private ArrayList<WeightedBiomeEntry> islandBiomes = Lists.newArrayList();
|
||||
|
||||
BOPClimates(BiomeType biomeType)
|
||||
{
|
||||
this.biomeType = biomeType;
|
||||
}
|
||||
|
||||
public BOPClimates addBiome(int weight, RegistryKey<Biome> biome)
|
||||
{
|
||||
return this.addBiome(new WeightedBiomeEntry(weight, biome));
|
||||
}
|
||||
|
||||
public BOPClimates addBiome(WeightedBiomeEntry biomeEntry)
|
||||
{
|
||||
this.totalBiomesWeight += biomeEntry.weight;
|
||||
this.landBiomes.add(biomeEntry);
|
||||
return this;
|
||||
}
|
||||
|
||||
public BOPClimates addIslandBiome(int weight, RegistryKey<Biome> biome)
|
||||
{
|
||||
return this.addIslandBiome(new WeightedBiomeEntry(weight, biome));
|
||||
}
|
||||
|
||||
public BOPClimates addIslandBiome(WeightedBiomeEntry biomeEntry)
|
||||
{
|
||||
this.totalIslandBiomesWeight += biomeEntry.weight;
|
||||
this.islandBiomes.add(biomeEntry);
|
||||
return this;
|
||||
}
|
||||
|
||||
public RegistryKey<Biome> getRandomBiome(INoiseRandom context, RegistryKey<Biome> fallback)
|
||||
{
|
||||
if (this.totalBiomesWeight == 0)
|
||||
return fallback;
|
||||
|
||||
int weight = context.nextRandom(this.totalBiomesWeight);
|
||||
Iterator<WeightedBiomeEntry> iterator = this.landBiomes.iterator();
|
||||
WeightedBiomeEntry item;
|
||||
do
|
||||
{
|
||||
item = iterator.next();
|
||||
weight -= item.weight;
|
||||
}
|
||||
while (weight >= 0);
|
||||
return item.biome;
|
||||
}
|
||||
|
||||
public RegistryKey<Biome> getRandomIslandBiome(INoiseRandom context, RegistryKey<Biome> fallback)
|
||||
{
|
||||
if (this.totalIslandBiomesWeight == 0)
|
||||
return fallback;
|
||||
|
||||
int weight = context.nextRandom(this.totalIslandBiomesWeight);
|
||||
Iterator<WeightedBiomeEntry> iterator = this.islandBiomes.iterator();
|
||||
WeightedBiomeEntry item;
|
||||
do
|
||||
{
|
||||
item = iterator.next();
|
||||
weight -= item.weight;
|
||||
}
|
||||
while (weight >= 0);
|
||||
return item.biome;
|
||||
}
|
||||
|
||||
public RegistryKey<Biome> getRandomOceanBiome(INoiseRandom context, boolean deep)
|
||||
{
|
||||
return (deep ? Biomes.DEEP_OCEAN : Biomes.OCEAN);
|
||||
}
|
||||
|
||||
public ImmutableList<WeightedBiomeEntry> getLandBiomes()
|
||||
{
|
||||
return this.landBiomes.isEmpty() ? ImmutableList.of(this.getDefaultWeightedBiomeEntry()) : ImmutableList.copyOf(this.landBiomes);
|
||||
}
|
||||
|
||||
public ImmutableList<WeightedBiomeEntry> getIslandBiomes()
|
||||
{
|
||||
return this.islandBiomes.isEmpty() ? ImmutableList.of(this.getDefaultWeightedBiomeEntry()) : ImmutableList.copyOf(this.islandBiomes);
|
||||
}
|
||||
|
||||
private WeightedBiomeEntry getDefaultWeightedBiomeEntry()
|
||||
{
|
||||
return new WeightedBiomeEntry(100, Biomes.OCEAN);
|
||||
}
|
||||
|
||||
private static BOPClimates[] values = BOPClimates.values();
|
||||
|
||||
public static BOPClimates lookup(int i) {return values[i];}
|
||||
|
||||
// map temperature and rainfall to climates
|
||||
// temperature values from 0 (cold) to 8 (hot) and rainfall values from 0 (wet) to 11 (dry), index is (temperatureValue * 12) + rainfallValue
|
||||
// we will contrive to make any combination equally likely, so the overall rarity of each climate is in proportion to the number of times it appears in the array
|
||||
private static final BOPClimates[] climateMapping = new BOPClimates[]
|
||||
{
|
||||
TUNDRA, TUNDRA, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, ICE_CAP, TUNDRA, TUNDRA,
|
||||
WET_BOREAL, WET_BOREAL, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, TUNDRA, DRY_BOREAL, DRY_BOREAL,
|
||||
WET_BOREAL, WET_BOREAL, WET_BOREAL, WET_BOREAL, WET_BOREAL, WET_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL, DRY_BOREAL,
|
||||
WET_TEMPERATE, WET_TEMPERATE, WET_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE,
|
||||
WET_TEMPERATE, WET_TEMPERATE, WET_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, COOL_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE, DRY_TEMPERATE,
|
||||
SUBTROPICAL, SUBTROPICAL, WET_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, DRY_TEMPERATE, SAVANNA, SAVANNA,
|
||||
SUBTROPICAL, SUBTROPICAL, SUBTROPICAL, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, WARM_TEMPERATE, SAVANNA, SAVANNA, SAVANNA,
|
||||
TROPICAL, TROPICAL, SUBTROPICAL, SUBTROPICAL, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, SAVANNA, SAVANNA, HOT_DESERT, HOT_DESERT,
|
||||
TROPICAL, TROPICAL, SUBTROPICAL, SUBTROPICAL, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, MEDITERRANEAN, SAVANNA, SAVANNA, HOT_DESERT, HOT_DESERT
|
||||
};
|
||||
|
||||
public static int[] getClimateMappingInts()
|
||||
{
|
||||
// 9 temperature values, 12 rainfall values, 12 * 9 = 108
|
||||
int[] out = new int[108];
|
||||
for (int i = 0; i < 108; i++)
|
||||
{
|
||||
out[i] = climateMapping[i].ordinal();
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
public static ImmutableSet<RegistryKey<Biome>> getOverworldBiomes()
|
||||
{
|
||||
Set<RegistryKey<Biome>> set = Sets.newHashSet();
|
||||
|
||||
for (BOPClimates climate : BOPClimates.values())
|
||||
{
|
||||
if (climate == BOPClimates.NETHER)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
set.addAll(climate.getLandBiomes().stream().map(weightedBiomeEntry -> weightedBiomeEntry.biome).collect(Collectors.toSet()));
|
||||
set.addAll(climate.getIslandBiomes().stream().map(weightedBiomeEntry -> weightedBiomeEntry.biome).collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
ModBiomes.subBiomes.values().forEach(weightedSubBiome -> set.add(weightedSubBiome.biome));
|
||||
return ImmutableSet.copyOf(set);
|
||||
}
|
||||
|
||||
public static class WeightedBiomeEntry
|
||||
{
|
||||
public final int weight;
|
||||
public final RegistryKey<Biome> biome;
|
||||
|
||||
public WeightedBiomeEntry(int weight, RegistryKey<Biome> biome)
|
||||
{
|
||||
this.weight = weight;
|
||||
this.biome = biome;
|
||||
}
|
||||
}
|
||||
|
||||
// for debugging purposes
|
||||
public static void printWeights()
|
||||
{
|
||||
for (BOPClimates climate : BOPClimates.values())
|
||||
{
|
||||
for (WeightedBiomeEntry entry : climate.landBiomes)
|
||||
{
|
||||
System.out.println(climate.name()+" "+entry.biome.location()+" "+entry.weight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.item;
|
||||
|
||||
import net.minecraft.item.Item.ToolMaterial;
|
||||
import net.minecraft.item.ItemArmor.ArmorMaterial;
|
||||
|
||||
public class BOPItemHelper
|
||||
{
|
||||
public static ArmorMaterial wading_boots_material;
|
||||
public static ArmorMaterial flippers_material;
|
||||
public static ArmorMaterial plain_flower_band_material;
|
||||
public static ArmorMaterial lush_flower_band_material;
|
||||
public static ArmorMaterial exotic_flower_band_material;
|
||||
public static ArmorMaterial dull_flower_band_material;
|
||||
|
||||
public static ArmorMaterial mud_armor_material;
|
||||
public static ArmorMaterial amethyst_armor_material;
|
||||
public static ToolMaterial mud_tool_material;
|
||||
public static ToolMaterial amethyst_tool_material;
|
||||
}
|
|
@ -1,32 +1,124 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.item;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
|
||||
public class BOPItems
|
||||
public class BOPItems
|
||||
{
|
||||
public static Item bop_icon;
|
||||
|
||||
public static Item mud_ball;
|
||||
|
||||
public static Item berries;
|
||||
public static Item shroompowder;
|
||||
public static Item wildcarrots;
|
||||
public static Item peach;
|
||||
public static Item saladfruit;
|
||||
public static Item saladveggie;
|
||||
public static Item saladshroom;
|
||||
public static Item earth;
|
||||
public static Item persimmon;
|
||||
public static Item filled_honeycomb;
|
||||
public static Item ambrosia;
|
||||
public static Item turnip;
|
||||
public static Item pear;
|
||||
public static Item ricebowl;
|
||||
|
||||
public static Item fleshchunk;
|
||||
public static Item mudball;
|
||||
public static Item turnip_seeds;
|
||||
public static Item crystal_shard;
|
||||
public static Item honeycomb;
|
||||
public static Item gem;
|
||||
public static Item ash;
|
||||
public static Item mud_brick;
|
||||
|
||||
public static Item fir_boat;
|
||||
public static Item redwood_boat;
|
||||
public static Item cherry_boat;
|
||||
public static Item mahogany_boat;
|
||||
public static Item jacaranda_boat;
|
||||
public static Item palm_boat;
|
||||
public static Item willow_boat;
|
||||
public static Item dead_boat;
|
||||
public static Item magic_boat;
|
||||
public static Item umbran_boat;
|
||||
public static Item hellbark_boat;
|
||||
|
||||
public static Item music_disc_wanderer;
|
||||
}
|
||||
public static Item blue_dye;
|
||||
public static Item brown_dye;
|
||||
public static Item green_dye;
|
||||
public static Item white_dye;
|
||||
public static Item black_dye;
|
||||
public static Item ghastly_soul;
|
||||
public static Item pixie_dust;
|
||||
public static Item ichor;
|
||||
public static Item pinecone;
|
||||
public static Item other_slab;
|
||||
|
||||
public static Item dart;
|
||||
public static Item dart_blower;
|
||||
|
||||
public static Item sacred_oak_door;
|
||||
public static Item cherry_door;
|
||||
public static Item dark_door;
|
||||
public static Item fir_door;
|
||||
public static Item ethereal_door;
|
||||
public static Item magic_door;
|
||||
public static Item mangrove_door;
|
||||
public static Item palm_door;
|
||||
public static Item redwood_door;
|
||||
public static Item willow_door;
|
||||
public static Item pine_door;
|
||||
public static Item hellbark_door;
|
||||
public static Item jacaranda_door;
|
||||
public static Item mahogany_door;
|
||||
|
||||
public static Item wood_slab_0;
|
||||
public static Item wood_slab_1;
|
||||
|
||||
public static Item wading_boots;
|
||||
public static Item flippers;
|
||||
public static Item plain_flower_band;
|
||||
public static Item lush_flower_band;
|
||||
public static Item exotic_flower_band;
|
||||
public static Item dull_flower_band;
|
||||
|
||||
public static Item mud_helmet;
|
||||
public static Item mud_chestplate;
|
||||
public static Item mud_leggings;
|
||||
public static Item mud_boots;
|
||||
public static Item amethyst_helmet;
|
||||
public static Item amethyst_chestplate;
|
||||
public static Item amethyst_leggings;
|
||||
public static Item amethyst_boots;
|
||||
|
||||
public static Item mud_axe;
|
||||
public static Item mud_hoe;
|
||||
public static Item mud_pickaxe;
|
||||
public static Item mud_shovel;
|
||||
public static Item mud_sword;
|
||||
public static Item amethyst_axe;
|
||||
public static Item amethyst_hoe;
|
||||
public static Item amethyst_pickaxe;
|
||||
public static Item amethyst_shovel;
|
||||
public static Item amethyst_sword;
|
||||
|
||||
public static Item mud_scythe;
|
||||
public static Item wood_scythe;
|
||||
public static Item stone_scythe;
|
||||
public static Item iron_scythe;
|
||||
public static Item gold_scythe;
|
||||
public static Item diamond_scythe;
|
||||
public static Item amethyst_scythe;
|
||||
|
||||
public static Item biome_finder;
|
||||
public static Item biome_essence;
|
||||
public static Item enderporter;
|
||||
public static Item jar_empty;
|
||||
public static Item jar_filled;
|
||||
public static Item honey_bucket;
|
||||
public static Item blood_bucket;
|
||||
public static Item poison_bucket;
|
||||
|
||||
public static Item record_wanderer;
|
||||
public static Item record_corruption;
|
||||
|
||||
public static Item spawn_egg;
|
||||
|
||||
// TODO: public static Item ancientStaff;
|
||||
// TODO: public static Item bop_bucket;
|
||||
|
||||
|
||||
}
|
|
@ -1,13 +1,6 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.api.particle;
|
||||
|
||||
public enum BOPParticleTypes
|
||||
{
|
||||
MUD
|
||||
}
|
||||
PIXIETRAIL, DANDELION, MUD, PLAYER_TRAIL;
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.api.potion;
|
||||
|
||||
import net.minecraft.potion.Potion;
|
||||
|
||||
public class BOPPotions
|
||||
{
|
||||
|
||||
public static Potion paralysis;
|
||||
public static Potion possession;
|
||||
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.api.sound;
|
||||
|
||||
import net.minecraft.util.SoundEvent;
|
||||
|
||||
public class BOPSounds
|
||||
{
|
||||
public static SoundEvent music_disc_wanderer;
|
||||
}
|
|
@ -1,141 +0,0 @@
|
|||
/**Copied from Twilight Forest and modified with permission**/
|
||||
|
||||
package biomesoplenty.client;
|
||||
|
||||
import biomesoplenty.core.BiomesOPlenty;
|
||||
import com.google.common.base.Joiner;
|
||||
import net.minecraft.resources.ResourcePack;
|
||||
import net.minecraft.resources.ResourcePackFileNotFoundException;
|
||||
import net.minecraft.resources.ResourcePackType;
|
||||
import net.minecraft.resources.data.IMetadataSectionSerializer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public class BOPClassicPack extends ResourcePack
|
||||
{
|
||||
private final ModFile modFile;
|
||||
private static final String subDir = "classic/";
|
||||
|
||||
public BOPClassicPack(ModFile modFile)
|
||||
{
|
||||
super(modFile.getFilePath().toFile());
|
||||
this.modFile = modFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getNamespaces(ResourcePackType type)
|
||||
{
|
||||
try
|
||||
{
|
||||
Path root = modFile.getLocator().findPath(modFile, subDir + type.getDirectory()).toAbsolutePath();
|
||||
return Files.walk(root,1).map(path -> root.relativize(path.toAbsolutePath())).filter(path -> path.getNameCount() > 0).map(p->p.toString().replaceAll("/$","")).filter(s -> !s.isEmpty()).collect(Collectors.toSet());
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
BiomesOPlenty.logger.error("BOPClassicPack failed to collect resource namespaces!", t);
|
||||
return Collections.emptySet();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected InputStream getResource(String location) throws IOException
|
||||
{
|
||||
final Path path = modFile.getLocator().findPath(modFile, subDir + location);
|
||||
|
||||
if (!Files.exists(path))
|
||||
{
|
||||
BiomesOPlenty.logger.error("File does not exist!");
|
||||
throw new ResourcePackFileNotFoundException(path.toFile(), location);
|
||||
}
|
||||
|
||||
return Files.newInputStream(path, StandardOpenOption.READ);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean hasResource(String resourcePath)
|
||||
{
|
||||
return Files.exists(modFile.getLocator().findPath(modFile, subDir + resourcePath));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ResourceLocation> getResources(ResourcePackType type, String namespaceIn, String pathIn, int maxDepthIn, Predicate<String> filterIn)
|
||||
{
|
||||
try
|
||||
{
|
||||
Path root = modFile.getLocator().findPath(modFile, subDir + type.getDirectory()).toAbsolutePath();
|
||||
Path inputPath = root.getFileSystem().getPath(pathIn);
|
||||
|
||||
return Files.walk(root).map(path -> root.relativize(path.toAbsolutePath())).filter(path -> path.getNameCount() > 1 && path.getNameCount() - 1 <= maxDepthIn).filter(path -> !path.toString().endsWith(".mcmeta")).filter(path -> path.subpath(1, path.getNameCount()).startsWith(inputPath)).filter(path -> filterIn.test(path.getFileName().toString())).map(path -> new ResourceLocation(path.getName(0).toString(), Joiner.on('/').join(path.subpath(1, Math.min(maxDepthIn, path.getNameCount()))))).collect(Collectors.toList());
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() { }
|
||||
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return "BOP Programmer Art";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public <T> T getMetadataSection(IMetadataSectionSerializer<T> serializer) throws IOException
|
||||
{
|
||||
InputStream inputStream = getResource("pack.mcmeta");
|
||||
Throwable throwable = null;
|
||||
T resourceMetaData;
|
||||
|
||||
try
|
||||
{
|
||||
resourceMetaData = getMetadataFromStream(serializer, inputStream);
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
throwable = t;
|
||||
throw t;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (inputStream != null)
|
||||
{
|
||||
if (throwable != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
inputStream.close();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
throwable.addSuppressed(t);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
inputStream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return resourceMetaData;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,561 @@
|
|||
package biomesoplenty.client.gui;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiCreateWorld;
|
||||
import net.minecraft.client.gui.GuiListButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiSlider;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.BOPWorldSettings.BiomeSize;
|
||||
import biomesoplenty.common.world.BOPWorldSettings.LandMassScheme;
|
||||
import biomesoplenty.common.world.BOPWorldSettings.RainfallVariationScheme;
|
||||
import biomesoplenty.common.world.BOPWorldSettings.TemperatureVariationScheme;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.primitives.Floats;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiBOPConfigureWorld extends GuiScreen implements GuiSlider.FormatHelper, GuiBOPPageList.GuiResponder
|
||||
{
|
||||
private GuiCreateWorld parentScreen;
|
||||
|
||||
protected String screenTitle = "Customize World Settings";
|
||||
protected String pageInfo = "Page 1 of 3";
|
||||
protected String page0Title = "Basic Settings";
|
||||
protected String[] pageNames;
|
||||
|
||||
private GuiBOPPageManager pageManager;
|
||||
|
||||
//Navigation buttons, required on all pages
|
||||
private GuiButton doneButton;
|
||||
private GuiButton defaultsButton;
|
||||
private GuiButton prevButton;
|
||||
private GuiButton nextButton;
|
||||
private GuiButton yesButton;
|
||||
private GuiButton noButton;
|
||||
|
||||
private int modalAction = 0;
|
||||
private boolean field_175340_C = false;
|
||||
private Predicate validFloatPredicate = new Predicate()
|
||||
{
|
||||
public boolean tryParseValidFloat(String p_178956_1_)
|
||||
{
|
||||
Float f = Floats.tryParse(p_178956_1_);
|
||||
return p_178956_1_.length() == 0 || f != null && Floats.isFinite(f.floatValue()) && f.floatValue() >= 0.0F;
|
||||
}
|
||||
@Override
|
||||
public boolean apply(Object p_apply_1_)
|
||||
{
|
||||
return this.tryParseValidFloat((String)p_apply_1_);
|
||||
}
|
||||
};
|
||||
|
||||
private BOPWorldSettings settings;
|
||||
|
||||
|
||||
public GuiBOPConfigureWorld(GuiScreen parentScreen, String settingsStringIn)
|
||||
{
|
||||
this.parentScreen = (GuiCreateWorld)parentScreen;
|
||||
|
||||
if (settingsStringIn.isEmpty())
|
||||
{
|
||||
this.settings = new BOPWorldSettings();
|
||||
} else {
|
||||
this.settings = new BOPWorldSettings(settingsStringIn);
|
||||
}
|
||||
}
|
||||
|
||||
private static enum Actions
|
||||
{
|
||||
PREVIOUS (301),
|
||||
NEXT (302),
|
||||
DEFAULTS (303),
|
||||
DONE (304),
|
||||
YES (305),
|
||||
NO (306);
|
||||
|
||||
private int id;
|
||||
|
||||
private Actions(int id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
public int getId()
|
||||
{
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public static Actions fromId(int id)
|
||||
{
|
||||
for (Actions action : Actions.values())
|
||||
{
|
||||
if (action.id == id)
|
||||
{
|
||||
return action;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui()
|
||||
{
|
||||
this.screenTitle = I18n.format("options.customizeTitle", new Object[0]);
|
||||
|
||||
this.buttonList.clear();
|
||||
this.buttonList.add(this.prevButton = new GuiButton(Actions.PREVIOUS.getId(), 20, 5, 80, 20, I18n.format("createWorld.customize.custom.prev", new Object[0])));
|
||||
this.buttonList.add(this.nextButton = new GuiButton(Actions.NEXT.getId(), this.width - 100, 5, 80, 20, I18n.format("createWorld.customize.custom.next", new Object[0])));
|
||||
this.buttonList.add(this.defaultsButton = new GuiButton(Actions.DEFAULTS.getId(), this.width / 2 - 187, this.height - 27, 90, 20, I18n.format("createWorld.customize.custom.defaults", new Object[0])));
|
||||
this.buttonList.add(this.doneButton = new GuiButton(Actions.DONE.getId(), this.width / 2 + 98, this.height - 27, 90, 20, I18n.format("gui.done", new Object[0])));
|
||||
|
||||
this.yesButton = new GuiButton(Actions.YES.getId(), this.width / 2 - 55, 160, 50, 20, I18n.format("gui.yes", new Object[0]));
|
||||
this.yesButton.visible = false;
|
||||
this.buttonList.add(this.yesButton);
|
||||
|
||||
this.noButton = new GuiButton(Actions.NO.getId(), this.width / 2 + 5, 160, 50, 20, I18n.format("gui.no", new Object[0]));
|
||||
this.noButton.visible = false;
|
||||
this.buttonList.add(this.noButton);
|
||||
|
||||
this.setupPages();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMouseInput() throws IOException
|
||||
{
|
||||
super.handleMouseInput();
|
||||
this.pageManager.getActivePage().handleMouseInput();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException
|
||||
{
|
||||
super.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
|
||||
if (this.modalAction == 0 && !this.field_175340_C)
|
||||
{
|
||||
this.pageManager.getActivePage().mouseClicked(mouseX, mouseY, mouseButton);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseReleased(int mouseX, int mouseY, int state)
|
||||
{
|
||||
super.mouseReleased(mouseX, mouseY, state);
|
||||
|
||||
if (this.field_175340_C)
|
||||
{
|
||||
this.field_175340_C = false;
|
||||
}
|
||||
else if (this.modalAction == 0)
|
||||
{
|
||||
this.pageManager.getActivePage().mouseReleased(mouseX, mouseY, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static enum GuiEntries
|
||||
{
|
||||
TEMP_SCHEME (101),
|
||||
GENERATE_BOP_GEMS (102),
|
||||
AMPLITUDE (104),
|
||||
BIOME_SIZE (105),
|
||||
LAND_SCHEME (106),
|
||||
RAIN_SCHEME (107);
|
||||
|
||||
private int id;
|
||||
|
||||
private GuiEntries(int id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
public int getId()
|
||||
{
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public static GuiEntries fromId(int id)
|
||||
{
|
||||
for (GuiEntries entry : GuiEntries.values())
|
||||
{
|
||||
if (entry.id == id)
|
||||
{
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void setupPages()
|
||||
{
|
||||
this.pageNames = new String[3];
|
||||
|
||||
this.pageNames[0] = "World";
|
||||
GuiBOPPageList.GuiFieldEntry[] page0Fields = new GuiBOPPageList.GuiFieldEntry[] {
|
||||
new GuiBOPPageList.GuiEnumButtonEntry<BiomeSize>(GuiEntries.BIOME_SIZE.getId(), "Biome Size: %s", true, this.settings.biomeSize),
|
||||
new GuiBOPPageList.GuiEnumButtonEntry<LandMassScheme>(GuiEntries.LAND_SCHEME.getId(), "Land Mass: %s", true, this.settings.landScheme),
|
||||
new GuiBOPPageList.GuiEnumButtonEntry<TemperatureVariationScheme>(GuiEntries.TEMP_SCHEME.getId(), "Temperature: %s", true, this.settings.tempScheme),
|
||||
new GuiBOPPageList.GuiEnumButtonEntry<RainfallVariationScheme>(GuiEntries.RAIN_SCHEME.getId(), "Rainfall: %s", true, this.settings.rainScheme),
|
||||
new GuiBOPPageList.GuiSlideEntry(GuiEntries.AMPLITUDE.getId(), "Amplitude", true, this, 0.2F, 3.0F, this.settings.amplitude)
|
||||
};
|
||||
|
||||
this.pageNames[1] = "Biomes";
|
||||
GuiBOPPageList.GuiFieldEntry[] page1Fields = new GuiBOPPageList.GuiFieldEntry[] {
|
||||
|
||||
};
|
||||
|
||||
this.pageNames[2] = "Features";
|
||||
GuiBOPPageList.GuiFieldEntry[] page2Fields = new GuiBOPPageList.GuiFieldEntry[] {
|
||||
new GuiBOPPageList.GuiButtonEntry(GuiEntries.GENERATE_BOP_GEMS.getId(), "Generate BOP gems", true, this.settings.generateBopGems)
|
||||
};
|
||||
|
||||
this.pageManager = new GuiBOPPageManager(createTableForFields(page0Fields, page1Fields, page2Fields));
|
||||
this.pageManager.setup();
|
||||
|
||||
this.showNewPage();
|
||||
}
|
||||
|
||||
private GuiBOPPageTable[] createTableForFields(GuiBOPPageList.GuiFieldEntry[]... fieldGroup)
|
||||
{
|
||||
GuiBOPPageTable[] output = new GuiBOPPageTable[fieldGroup.length];
|
||||
|
||||
for (int i = 0; i < fieldGroup.length; i++)
|
||||
{
|
||||
GuiBOPPageList.GuiFieldEntry[] fields = fieldGroup[i];
|
||||
output[i] = new GuiBOPPageTable(this.width, this.height, 32, this.height - 32, 25, i, this, fields);
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
public String serialize()
|
||||
{
|
||||
return this.settings.toString().replace("\n", "");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String func_175318_a(int p_175318_1_, String p_175318_2_, float p_175318_3_)
|
||||
{
|
||||
return p_175318_2_ + ": " + this.stringFormatFloat(p_175318_1_, p_175318_3_);
|
||||
}
|
||||
|
||||
private String stringFormatFloat(int fieldId, float value)
|
||||
{
|
||||
GuiEntries entry = GuiEntries.fromId(fieldId);
|
||||
if (entry == null) {return "";}
|
||||
|
||||
switch (entry)
|
||||
{
|
||||
case AMPLITUDE:
|
||||
return String.format("%5.3f", new Object[] {Float.valueOf(value)});
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void handleEnumSelection(int fieldId, int ordinal)
|
||||
{
|
||||
GuiEntries entry = GuiEntries.fromId(fieldId);
|
||||
if (entry == null) {return;}
|
||||
|
||||
switch (entry)
|
||||
{
|
||||
case LAND_SCHEME:
|
||||
LandMassScheme[] land_values = LandMassScheme.values();
|
||||
this.settings.landScheme = land_values[ordinal % land_values.length];
|
||||
break;
|
||||
case TEMP_SCHEME:
|
||||
TemperatureVariationScheme[] temp_values = TemperatureVariationScheme.values();
|
||||
this.settings.tempScheme = temp_values[ordinal % temp_values.length];
|
||||
break;
|
||||
case RAIN_SCHEME:
|
||||
RainfallVariationScheme[] rain_values = RainfallVariationScheme.values();
|
||||
this.settings.rainScheme = rain_values[ordinal % rain_values.length];
|
||||
break;
|
||||
case BIOME_SIZE:
|
||||
BiomeSize[] size_values = BiomeSize.values();
|
||||
this.settings.biomeSize = size_values[ordinal % size_values.length];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
System.out.println("settings currently: "+this.settings.toJson());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleBooleanSelection(int fieldId, boolean value)
|
||||
{
|
||||
GuiEntries entry = GuiEntries.fromId(fieldId);
|
||||
if (entry == null) {return;}
|
||||
|
||||
switch (entry)
|
||||
{
|
||||
case GENERATE_BOP_GEMS:
|
||||
this.settings.generateBopGems = value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
System.out.println("settings currently: "+this.settings.toJson());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleFloatSelection(int fieldId, float value)
|
||||
{
|
||||
GuiEntries entry = GuiEntries.fromId(fieldId);
|
||||
if (entry == null) {return;}
|
||||
|
||||
switch (entry)
|
||||
{
|
||||
case AMPLITUDE:
|
||||
this.settings.amplitude = value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
System.out.println("settings currently: "+this.settings.toJson());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleStringSelection(int fieldId, String value)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleIntSelection(int fieldId, int value)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
// These 3 are the original functions required by GuiPageButtonList.GuiResponder - just pass off to the better named functions
|
||||
@Override
|
||||
public void func_175319_a(int fieldId, String value) {this.handleStringSelection(fieldId, value);}
|
||||
@Override
|
||||
public void func_175320_a(int fieldId, float value) {this.handleFloatSelection(fieldId, value);}
|
||||
@Override
|
||||
public void func_175321_a(int fieldId, boolean value) {this.handleBooleanSelection(fieldId, value);}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) throws IOException
|
||||
{
|
||||
if (button.enabled)
|
||||
{
|
||||
Actions action = Actions.fromId(button.id);
|
||||
if (action == null) {return;}
|
||||
switch (action)
|
||||
{
|
||||
case DONE:
|
||||
this.parentScreen.chunkProviderSettingsJson = this.settings.toJson();
|
||||
System.out.println("settings sent to world screen "+this.parentScreen.chunkProviderSettingsJson);
|
||||
this.mc.displayGuiScreen(this.parentScreen);
|
||||
break;
|
||||
|
||||
case PREVIOUS:
|
||||
this.pageManager.gotToPrevPage(); // prev page
|
||||
this.showNewPage();
|
||||
break;
|
||||
|
||||
case NEXT:
|
||||
this.pageManager.goToNextPage(); // next page
|
||||
this.showNewPage();
|
||||
break;
|
||||
|
||||
case DEFAULTS:
|
||||
this.confirmSetDefaults(button.id);
|
||||
break;
|
||||
|
||||
case YES:
|
||||
this.handleModalClose();
|
||||
break;
|
||||
|
||||
case NO:
|
||||
this.modalAction = 0;
|
||||
this.handleModalClose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void doSetDefaults()
|
||||
{
|
||||
this.settings.setDefault();
|
||||
this.setupPages();
|
||||
}
|
||||
|
||||
private void confirmSetDefaults(int actionId)
|
||||
{
|
||||
this.modalAction = actionId;
|
||||
this.showModal(true);
|
||||
}
|
||||
|
||||
private void handleModalClose() throws IOException
|
||||
{
|
||||
Actions action = Actions.fromId(this.modalAction);
|
||||
if (action != null) {
|
||||
switch (action)
|
||||
{
|
||||
case DONE:
|
||||
this.actionPerformed((GuiListButton)this.pageManager.getActivePage().getGui(300));
|
||||
break;
|
||||
case DEFAULTS:
|
||||
this.doSetDefaults();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.modalAction = 0;
|
||||
this.field_175340_C = true;
|
||||
this.showModal(false);
|
||||
}
|
||||
|
||||
private void showModal(boolean flag)
|
||||
{
|
||||
this.yesButton.visible = flag;
|
||||
this.noButton.visible = flag;
|
||||
this.doneButton.enabled = !flag;
|
||||
this.prevButton.enabled = !flag;
|
||||
this.nextButton.enabled = !flag;
|
||||
this.defaultsButton.enabled = !flag;
|
||||
}
|
||||
|
||||
private void showNewPage()
|
||||
{
|
||||
this.prevButton.enabled = this.pageManager.getActivePage().pageNumber != 0;
|
||||
this.nextButton.enabled = this.pageManager.getActivePage().pageNumber != this.pageManager.getNumPages() - 1;
|
||||
this.pageInfo = I18n.format("book.pageIndicator", new Object[] {Integer.valueOf(this.pageManager.getActivePage().pageNumber + 1), Integer.valueOf(this.pageManager.getNumPages())});
|
||||
this.page0Title = this.pageNames[this.pageManager.getActivePage().pageNumber];
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void keyTyped(char typedChar, int keyCode) throws IOException
|
||||
{
|
||||
super.keyTyped(typedChar, keyCode);
|
||||
|
||||
if (this.modalAction == 0)
|
||||
{
|
||||
switch (keyCode)
|
||||
{
|
||||
case 200:
|
||||
this.func_175327_a(1.0F);
|
||||
break;
|
||||
case 208:
|
||||
this.func_175327_a(-1.0F);
|
||||
break;
|
||||
default:
|
||||
this.pageManager.getActivePage().keyTyped(typedChar, keyCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void func_175327_a(float p_175327_1_)
|
||||
{
|
||||
Gui gui = this.pageManager.getActivePage().getFocusedGuiElement();
|
||||
|
||||
if (gui instanceof GuiTextField)
|
||||
{
|
||||
float f1 = p_175327_1_;
|
||||
|
||||
if (GuiScreen.isShiftKeyDown())
|
||||
{
|
||||
f1 = p_175327_1_ * 0.1F;
|
||||
|
||||
if (GuiScreen.isCtrlKeyDown())
|
||||
{
|
||||
f1 *= 0.1F;
|
||||
}
|
||||
}
|
||||
else if (GuiScreen.isCtrlKeyDown())
|
||||
{
|
||||
f1 = p_175327_1_ * 10.0F;
|
||||
|
||||
if (GuiScreen.isAltKeyDown())
|
||||
{
|
||||
f1 *= 10.0F;
|
||||
}
|
||||
}
|
||||
|
||||
GuiTextField guitextfield = (GuiTextField)gui;
|
||||
Float f2 = Floats.tryParse(guitextfield.getText());
|
||||
|
||||
if (f2 != null)
|
||||
{
|
||||
f2 = Float.valueOf(f2.floatValue() + f1);
|
||||
int i = guitextfield.getId();
|
||||
String s = this.stringFormatFloat(guitextfield.getId(), f2.floatValue());
|
||||
guitextfield.setText(s);
|
||||
this.func_175319_a(i, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int mouseX, int mouseY, float partialTicks)
|
||||
{
|
||||
this.drawDefaultBackground();
|
||||
this.pageManager.getActivePage().drawScreen(mouseX, mouseY, partialTicks);
|
||||
this.drawCenteredString(this.fontRendererObj, this.screenTitle, this.width / 2, 2, 16777215);
|
||||
this.drawCenteredString(this.fontRendererObj, this.pageInfo, this.width / 2, 12, 16777215);
|
||||
this.drawCenteredString(this.fontRendererObj, this.page0Title, this.width / 2, 22, 16777215);
|
||||
super.drawScreen(mouseX, mouseY, partialTicks);
|
||||
|
||||
if (this.modalAction != 0)
|
||||
{
|
||||
drawRect(0, 0, this.width, this.height, Integer.MIN_VALUE);
|
||||
this.drawHorizontalLine(this.width / 2 - 91, this.width / 2 + 90, 99, -2039584);
|
||||
this.drawHorizontalLine(this.width / 2 - 91, this.width / 2 + 90, 185, -6250336);
|
||||
this.drawVerticalLine(this.width / 2 - 91, 99, 185, -2039584);
|
||||
this.drawVerticalLine(this.width / 2 + 90, 99, 185, -6250336);
|
||||
GlStateManager.disableLighting();
|
||||
GlStateManager.disableFog();
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
|
||||
this.mc.getTextureManager().bindTexture(optionsBackground);
|
||||
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
worldrenderer.startDrawingQuads();
|
||||
worldrenderer.setColorOpaque_I(4210752);
|
||||
worldrenderer.addVertexWithUV((double)(this.width / 2 - 90), 185.0D, 0.0D, 0.0D, 2.65625D);
|
||||
worldrenderer.addVertexWithUV((double)(this.width / 2 + 90), 185.0D, 0.0D, 5.625D, 2.65625D);
|
||||
worldrenderer.addVertexWithUV((double)(this.width / 2 + 90), 100.0D, 0.0D, 5.625D, 0.0D);
|
||||
worldrenderer.addVertexWithUV((double)(this.width / 2 - 90), 100.0D, 0.0D, 0.0D, 0.0D);
|
||||
tessellator.draw();
|
||||
this.drawCenteredString(this.fontRendererObj, I18n.format("createWorld.customize.custom.confirmTitle", new Object[0]), this.width / 2, 105, 16777215);
|
||||
this.drawCenteredString(this.fontRendererObj, I18n.format("createWorld.customize.custom.confirm1", new Object[0]), this.width / 2, 125, 16777215);
|
||||
this.drawCenteredString(this.fontRendererObj, I18n.format("createWorld.customize.custom.confirm2", new Object[0]), this.width / 2, 135, 16777215);
|
||||
this.yesButton.drawButton(this.mc, mouseX, mouseY);
|
||||
this.noButton.drawButton(this.mc, mouseX, mouseY);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.gui;
|
||||
|
||||
public class GuiBOPPageBiomes //extends GuiBOPPageDelegate
|
||||
{
|
||||
//Subclass implementing GuiListExtended.IGuiListEntry
|
||||
//Icon, label
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.gui;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiSlot;
|
||||
|
||||
public abstract class GuiBOPPageDelegate extends GuiSlot
|
||||
{
|
||||
public final int pageNumber;
|
||||
|
||||
public GuiBOPPageDelegate(int width, int height, int top, int bottom, int slotHeight, int pageNumber)
|
||||
{
|
||||
super(Minecraft.getMinecraft(), width, height, top, bottom, slotHeight);
|
||||
|
||||
this.pageNumber = pageNumber;
|
||||
}
|
||||
|
||||
public abstract void setup();
|
||||
|
||||
|
||||
public abstract void setVisible(boolean isVisible);
|
||||
|
||||
public void mouseClicked(int mouseX, int mouseY, int mouseEvent) {}
|
||||
public void mouseReleased(int mouseX, int mouseY, int state) {}
|
||||
public void keyTyped(char typedChar, int keyCode) {}
|
||||
public Gui getFocusedGuiElement() { return null; }
|
||||
public Gui getGui(int fieldId) { return null; }
|
||||
}
|
|
@ -0,0 +1,381 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.gui;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiLabel;
|
||||
import net.minecraft.client.gui.GuiListExtended;
|
||||
import net.minecraft.client.gui.GuiPageButtonList;
|
||||
import net.minecraft.client.gui.GuiSlider;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
|
||||
public abstract class GuiBOPPageList extends GuiBOPPageDelegate
|
||||
{
|
||||
public GuiBOPPageList(int width, int height, int top, int bottom, int slotHeight, int pageNumber)
|
||||
{
|
||||
super(width, height, top, bottom, slotHeight, pageNumber);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) {}
|
||||
|
||||
@Override
|
||||
protected boolean isSelected(int slotIndex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawBackground() {}
|
||||
|
||||
@Override
|
||||
protected void drawSlot(int entryID, int p_180791_2_, int p_180791_3_, int p_180791_4_, int mouseXIn, int mouseYIn)
|
||||
{
|
||||
this.getListEntry(entryID).drawEntry(entryID, p_180791_2_, p_180791_3_, this.getListWidth(), p_180791_4_, mouseXIn, mouseYIn, this.getSlotIndexFromScreenCoords(mouseXIn, mouseYIn) == entryID);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void func_178040_a(int p_178040_1_, int p_178040_2_, int p_178040_3_)
|
||||
{
|
||||
this.getListEntry(p_178040_1_).setSelected(p_178040_1_, p_178040_2_, p_178040_3_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int mouseX, int mouseY, int mouseEvent)
|
||||
{
|
||||
if (this.isMouseYWithinSlotBounds(mouseY))
|
||||
{
|
||||
int l = this.getSlotIndexFromScreenCoords(mouseX, mouseY);
|
||||
|
||||
if (l >= 0)
|
||||
{
|
||||
int i1 = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
||||
int j1 = this.top + 4 - this.getAmountScrolled() + l * this.slotHeight + this.headerPadding;
|
||||
int k1 = mouseX - i1;
|
||||
int l1 = mouseY - j1;
|
||||
|
||||
if (this.getListEntry(l).mousePressed(l, mouseX, mouseY, mouseEvent, k1, l1))
|
||||
{
|
||||
this.setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(int mouseX, int mouseY, int state)
|
||||
{
|
||||
for (int l = 0; l < this.getSize(); ++l)
|
||||
{
|
||||
int i1 = this.left + this.width / 2 - this.getListWidth() / 2 + 2;
|
||||
int j1 = this.top + 4 - this.getAmountScrolled() + l * this.slotHeight + this.headerPadding;
|
||||
int k1 = mouseX - i1;
|
||||
int l1 = mouseY - j1;
|
||||
this.getListEntry(l).mouseReleased(l, mouseX, mouseY, state, k1, l1);
|
||||
}
|
||||
|
||||
this.setEnabled(true);
|
||||
}
|
||||
|
||||
public abstract GuiListExtended.IGuiListEntry getListEntry(int rowNum);
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class GuiSlideEntry extends GuiBOPPageList.GuiFieldEntry
|
||||
{
|
||||
private final GuiSlider.FormatHelper formatHelper;
|
||||
private final float min;
|
||||
private final float max;
|
||||
private final float value;
|
||||
|
||||
public GuiSlideEntry(int fieldId, String labelText, boolean isVisible, GuiSlider.FormatHelper formatHelper, float min, float max, float value)
|
||||
{
|
||||
super(fieldId, labelText, isVisible);
|
||||
this.formatHelper = formatHelper;
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public GuiSlider.FormatHelper getFormatHelper()
|
||||
{
|
||||
return this.formatHelper;
|
||||
}
|
||||
|
||||
public float getMin()
|
||||
{
|
||||
return this.min;
|
||||
}
|
||||
|
||||
public float getMax()
|
||||
{
|
||||
return this.max;
|
||||
}
|
||||
|
||||
public float getValue()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public interface GuiResponder extends GuiPageButtonList.GuiResponder
|
||||
{
|
||||
void handleEnumSelection(int fieldId, int ordinal);
|
||||
|
||||
void handleBooleanSelection(int fieldId, boolean value);
|
||||
|
||||
void handleFloatSelection(int fieldId, float value);
|
||||
|
||||
void handleStringSelection(int fieldId, String value);
|
||||
|
||||
void handleIntSelection(int fieldId, int value);
|
||||
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class GuiFieldEntry
|
||||
{
|
||||
private final int fieldID;
|
||||
private final String labelText;
|
||||
private final boolean isVisible;
|
||||
|
||||
public GuiFieldEntry(int fieldId, String labelText, boolean isVisible)
|
||||
{
|
||||
this.fieldID = fieldId;
|
||||
this.labelText = labelText;
|
||||
this.isVisible = isVisible;
|
||||
}
|
||||
|
||||
public int getFieldId()
|
||||
{
|
||||
return this.fieldID;
|
||||
}
|
||||
|
||||
public String getLabelText()
|
||||
{
|
||||
return this.labelText;
|
||||
}
|
||||
|
||||
public boolean isVisible()
|
||||
{
|
||||
return this.isVisible;
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class GuiLabelEntry extends GuiFieldEntry
|
||||
{
|
||||
public GuiLabelEntry(int fieldId, String labelText, boolean isVisible)
|
||||
{
|
||||
super(fieldId, labelText, isVisible);
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class GuiRowEntry implements GuiListExtended.IGuiListEntry
|
||||
{
|
||||
private final Minecraft minecraft = Minecraft.getMinecraft();
|
||||
private final Gui guiLeft;
|
||||
private final Gui guiRight;
|
||||
Gui focusedGui;
|
||||
|
||||
public GuiRowEntry(Gui guiLeft, Gui guiRight)
|
||||
{
|
||||
this.guiLeft = guiLeft;
|
||||
this.guiRight = guiRight;
|
||||
}
|
||||
|
||||
public Gui getGuiLeft()
|
||||
{
|
||||
return this.guiLeft;
|
||||
}
|
||||
|
||||
public Gui getGuiRight()
|
||||
{
|
||||
return this.guiRight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isVisible)
|
||||
{
|
||||
this.drawGui(this.guiLeft, y, mouseX, mouseY, false);
|
||||
this.drawGui(this.guiRight, y, mouseX, mouseY, false);
|
||||
}
|
||||
|
||||
private void drawGui(Gui gui, int y, int mouseX, int mouseY, boolean isVisible)
|
||||
{
|
||||
if (gui != null)
|
||||
{
|
||||
if (gui instanceof GuiButton)
|
||||
{
|
||||
this.drawGuiButton((GuiButton)gui, y, mouseX, mouseY, isVisible);
|
||||
}
|
||||
else if (gui instanceof GuiTextField)
|
||||
{
|
||||
this.drawGuiTextField((GuiTextField)gui, y, isVisible);
|
||||
}
|
||||
else if (gui instanceof GuiLabel)
|
||||
{
|
||||
this.drawGuiLabel((GuiLabel)gui, y, mouseX, mouseY, isVisible);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void drawGuiButton(GuiButton guiButton, int y, int mouseX, int mouseY, boolean isVisible)
|
||||
{
|
||||
guiButton.yPosition = y;
|
||||
|
||||
if (!isVisible)
|
||||
{
|
||||
guiButton.drawButton(this.minecraft, mouseX, mouseY);
|
||||
}
|
||||
}
|
||||
|
||||
private void drawGuiTextField(GuiTextField guiTextField, int y, boolean isVisible)
|
||||
{
|
||||
guiTextField.yPosition = y;
|
||||
|
||||
if (!isVisible)
|
||||
{
|
||||
guiTextField.drawTextBox();
|
||||
}
|
||||
}
|
||||
|
||||
private void drawGuiLabel(GuiLabel guiLabel, int y, int mouseX, int mouseY, boolean isVisible)
|
||||
{
|
||||
guiLabel.field_146174_h = y;
|
||||
|
||||
if (!isVisible)
|
||||
{
|
||||
guiLabel.drawLabel(this.minecraft, mouseX, mouseY);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelected(int p_178011_1_, int p_178011_2_, int p_178011_3_)
|
||||
{
|
||||
this.drawGui(this.guiLeft, p_178011_3_, 0, 0, true);
|
||||
this.drawGui(this.guiRight, p_178011_3_, 0, 0, true);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean mousePressed(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY)
|
||||
{
|
||||
return this.doMousePressed(this.guiLeft, x, y, mouseEvent) || this.doMousePressed(this.guiRight, x, y, mouseEvent);
|
||||
}
|
||||
|
||||
private boolean doMousePressed(Gui gui, int x, int y, int mouseEvent)
|
||||
{
|
||||
if (gui == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (gui instanceof GuiButton)
|
||||
{
|
||||
if (((GuiButton)gui).mousePressed(this.minecraft, x, y))
|
||||
{
|
||||
this.focusedGui = gui;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (gui instanceof GuiTextField)
|
||||
{
|
||||
((GuiTextField)gui).mouseClicked(x, y, mouseEvent);
|
||||
|
||||
if (((GuiTextField)gui).isFocused())
|
||||
{
|
||||
this.focusedGui = gui;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY)
|
||||
{
|
||||
this.doMouseReleased(this.guiLeft, x, y);
|
||||
this.doMouseReleased(this.guiRight, x, y);
|
||||
}
|
||||
|
||||
public void doMouseReleased(Gui gui, int x, int y)
|
||||
{
|
||||
if (gui != null && (gui instanceof GuiButton))
|
||||
{
|
||||
((GuiButton)gui).mouseReleased(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class GuiEnumButtonEntry<T extends Enum> extends GuiFieldEntry
|
||||
{
|
||||
private final T value;
|
||||
|
||||
public GuiEnumButtonEntry(int fieldId, String textLabel, boolean isVisible, T value)
|
||||
{
|
||||
super(fieldId, textLabel, isVisible);
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public T getValue()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class GuiButtonEntry extends GuiFieldEntry
|
||||
{
|
||||
private final boolean value;
|
||||
|
||||
public GuiButtonEntry(int fieldId, String textLabel, boolean isVisible, boolean value)
|
||||
{
|
||||
super(fieldId, textLabel, isVisible);
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public boolean getValue()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class EditBoxEntry extends GuiFieldEntry
|
||||
{
|
||||
private final Predicate validator;
|
||||
|
||||
public EditBoxEntry(int fieldId, String labelText, boolean isVisible, Predicate validator)
|
||||
{
|
||||
super(fieldId, labelText, isVisible);
|
||||
this.validator = (Predicate)Objects.firstNonNull(validator, Predicates.alwaysTrue());
|
||||
}
|
||||
|
||||
public Predicate getValidator()
|
||||
{
|
||||
return this.validator;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package biomesoplenty.client.gui;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiBOPPageManager
|
||||
{
|
||||
private GuiBOPPageDelegate[] pages;
|
||||
private GuiBOPPageDelegate activePage;
|
||||
|
||||
public GuiBOPPageManager(GuiBOPPageDelegate ... pages)
|
||||
{
|
||||
this.pages = pages;
|
||||
this.activePage = pages[0];
|
||||
}
|
||||
|
||||
public void setup()
|
||||
{
|
||||
for (GuiBOPPageDelegate page : pages)
|
||||
{
|
||||
page.setup();
|
||||
}
|
||||
}
|
||||
|
||||
public GuiBOPPageDelegate getActivePage()
|
||||
{
|
||||
return this.activePage;
|
||||
}
|
||||
|
||||
public int getNumPages()
|
||||
{
|
||||
return this.pages.length;
|
||||
}
|
||||
|
||||
public void gotToPrevPage()
|
||||
{
|
||||
if (this.activePage.pageNumber > 0)
|
||||
{
|
||||
int newPageNumber = this.activePage.pageNumber - 1;
|
||||
GuiBOPPageDelegate newPage = this.pages[newPageNumber];
|
||||
|
||||
this.activePage.setVisible(false);
|
||||
newPage.setVisible(true);
|
||||
this.activePage = newPage;
|
||||
}
|
||||
}
|
||||
|
||||
public void goToNextPage()
|
||||
{
|
||||
if (this.activePage.pageNumber < this.pages.length - 1)
|
||||
{
|
||||
int newPageNumber = this.activePage.pageNumber + 1;
|
||||
GuiBOPPageDelegate newPage = this.pages[newPageNumber];
|
||||
|
||||
this.activePage.setVisible(false);
|
||||
newPage.setVisible(true);
|
||||
this.activePage = newPage;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,370 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.gui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.lwjgl.input.Mouse;
|
||||
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiLabel;
|
||||
import net.minecraft.client.gui.GuiListButton;
|
||||
import net.minecraft.client.gui.GuiListExtended;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiSlider;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
|
||||
public class GuiBOPPageTable extends GuiBOPPageList
|
||||
{
|
||||
private final List<GuiBOPPageList.GuiRowEntry> allRows = new ArrayList<GuiBOPPageList.GuiRowEntry>();
|
||||
private final Map<Integer, Gui> fieldIdToGuiMap = new HashMap<Integer, Gui>();
|
||||
private final List<GuiTextField> allTextFieldGuis = new ArrayList<GuiTextField>();
|
||||
private final GuiBOPPageList.GuiFieldEntry[] fields;
|
||||
private GuiBOPPageList.GuiResponder responder;
|
||||
private Gui focusedGui;
|
||||
|
||||
public GuiBOPPageTable(int width, int height, int top, int bottom, int slotHeight, int pageNumber, GuiBOPPageList.GuiResponder responder, GuiBOPPageList.GuiFieldEntry... fields)
|
||||
{
|
||||
super(width, height, top, bottom, slotHeight, pageNumber);
|
||||
|
||||
this.responder = responder;
|
||||
this.fields = fields;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible(boolean isVisible)
|
||||
{
|
||||
if (isVisible)
|
||||
{
|
||||
for (GuiBOPPageList.GuiFieldEntry field : this.fields)
|
||||
{
|
||||
if (field != null)
|
||||
{
|
||||
Gui gui = this.fieldIdToGuiMap.get(field.getFieldId());
|
||||
this.setVisible(gui, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (GuiBOPPageList.GuiFieldEntry field : this.fields)
|
||||
{
|
||||
if (field != null)
|
||||
{
|
||||
Gui gui = this.fieldIdToGuiMap.get(field.getFieldId());
|
||||
this.setVisible(gui, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setVisible(Gui gui, boolean isVisible)
|
||||
{
|
||||
if (gui instanceof GuiButton)
|
||||
{
|
||||
((GuiButton)gui).visible = isVisible;
|
||||
}
|
||||
else if (gui instanceof GuiTextField)
|
||||
{
|
||||
((GuiTextField)gui).setVisible(isVisible);
|
||||
}
|
||||
else if (gui instanceof GuiLabel)
|
||||
{
|
||||
((GuiLabel)gui).visible = isVisible;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setup()
|
||||
{
|
||||
// go through the fields in twos (so they go in 2 columns)
|
||||
for (int k = 0; k < fields.length; k += 2)
|
||||
{
|
||||
GuiBOPPageList.GuiFieldEntry fieldLeft = fields[k];
|
||||
GuiBOPPageList.GuiFieldEntry fieldRight = k < fields.length - 1 ? fields[k + 1] : null;
|
||||
|
||||
Gui guiLeft = this.createGui(fieldLeft, 0, fieldRight == null);
|
||||
Gui guiRight = this.createGui(fieldRight, 160, fieldLeft == null);
|
||||
|
||||
GuiBOPPageList.GuiRowEntry row = new GuiBOPPageList.GuiRowEntry(guiLeft, guiRight);
|
||||
this.allRows.add(row);
|
||||
|
||||
if (fieldLeft != null && guiLeft != null)
|
||||
{
|
||||
this.fieldIdToGuiMap.put(fieldLeft.getFieldId(), guiLeft);
|
||||
|
||||
if (guiLeft instanceof GuiTextField)
|
||||
{
|
||||
this.allTextFieldGuis.add((GuiTextField)guiLeft);
|
||||
}
|
||||
}
|
||||
|
||||
if (fieldRight != null && guiRight != null)
|
||||
{
|
||||
this.fieldIdToGuiMap.put(fieldRight.getFieldId(), guiRight);
|
||||
|
||||
if (guiRight instanceof GuiTextField)
|
||||
{
|
||||
this.allTextFieldGuis.add((GuiTextField)guiRight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.resetRows();
|
||||
}
|
||||
|
||||
private void resetRows()
|
||||
{
|
||||
this.allRows.clear();
|
||||
|
||||
for (int i = 0; i < this.fields.length; i += 2)
|
||||
{
|
||||
GuiBOPPageList.GuiFieldEntry guilistentryLeft = this.fields[i];
|
||||
GuiBOPPageList.GuiFieldEntry guilistentryRight = i < this.fields.length - 1 ? this.fields[i + 1] : null;
|
||||
Gui guiLeft = (Gui)this.fieldIdToGuiMap.get(guilistentryLeft.getFieldId());
|
||||
Gui guiRight = guilistentryRight != null ? (Gui)this.fieldIdToGuiMap.get(guilistentryRight.getFieldId()) : null;
|
||||
GuiBOPPageList.GuiRowEntry guientry = new GuiBOPPageList.GuiRowEntry(guiLeft, guiRight);
|
||||
this.allRows.add(guientry);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Gui getFocusedGuiElement()
|
||||
{
|
||||
return this.focusedGui;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Gui getGui(int fieldId)
|
||||
{
|
||||
return (Gui)this.fieldIdToGuiMap.get(fieldId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private Gui createGui(GuiBOPPageList.GuiFieldEntry field, int xOffset, boolean hasNoNeighbor)
|
||||
{
|
||||
if (field instanceof GuiBOPPageList.GuiSlideEntry)
|
||||
{
|
||||
return (Gui)this.createSlider(this.width / 2 - 155 + xOffset, 0, (GuiBOPPageList.GuiSlideEntry)field);
|
||||
}
|
||||
else if (field instanceof GuiBOPPageList.GuiButtonEntry)
|
||||
{
|
||||
return (Gui)this.createListButton(this.width / 2 - 155 + xOffset, 0, (GuiBOPPageList.GuiButtonEntry)field);
|
||||
}
|
||||
else if (field instanceof GuiBOPPageList.EditBoxEntry)
|
||||
{
|
||||
return (Gui)this.createTextField(this.width / 2 - 155 + xOffset, 0, (GuiBOPPageList.EditBoxEntry)field);
|
||||
}
|
||||
else if (field instanceof GuiBOPPageList.GuiLabelEntry)
|
||||
{
|
||||
return (Gui)this.createLabel(this.width / 2 - 155 + xOffset, 0, (GuiBOPPageList.GuiLabelEntry)field, hasNoNeighbor);
|
||||
}
|
||||
else if (field instanceof GuiBOPPageList.GuiEnumButtonEntry)
|
||||
{
|
||||
return (Gui)this.createEnumButton(this.width / 2 - 155 + xOffset, 0, (GuiBOPPageList.GuiEnumButtonEntry)field);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
//Mouse clicked
|
||||
|
||||
private GuiSlider createSlider(int xPosition, int yPosition, GuiBOPPageList.GuiSlideEntry field)
|
||||
{
|
||||
GuiSlider guislider = new GuiSlider(this.responder, field.getFieldId(), xPosition, yPosition, field.getLabelText(), field.getMin(), field.getMax(), field.getValue(), field.getFormatHelper());
|
||||
guislider.visible = field.isVisible();
|
||||
return guislider;
|
||||
}
|
||||
|
||||
private GuiListButton createListButton(int xPosition, int yPosition, GuiBOPPageList.GuiButtonEntry field)
|
||||
{
|
||||
GuiListButton guilistbutton = new GuiListButton(this.responder, field.getFieldId(), xPosition, yPosition, field.getLabelText(), field.getValue());
|
||||
guilistbutton.visible = field.isVisible();
|
||||
return guilistbutton;
|
||||
}
|
||||
|
||||
private GuiEnumButton createEnumButton(int xPosition, int yPosition, GuiBOPPageList.GuiEnumButtonEntry field)
|
||||
{
|
||||
GuiEnumButton guienumbutton = new GuiEnumButton(this.responder, field.getFieldId(), xPosition, yPosition, field.getLabelText(), field.getValue());
|
||||
guienumbutton.visible = field.isVisible();
|
||||
return guienumbutton;
|
||||
}
|
||||
|
||||
private GuiTextField createTextField(int xPosition, int yPosition, GuiBOPPageList.EditBoxEntry field)
|
||||
{
|
||||
GuiTextField guitextfield = new GuiTextField(field.getFieldId(), this.mc.fontRendererObj, xPosition, yPosition, 150, 20);
|
||||
guitextfield.setText(field.getLabelText());
|
||||
guitextfield.func_175207_a(this.responder); // setResponder
|
||||
guitextfield.setVisible(field.isVisible());
|
||||
guitextfield.func_175205_a(field.getValidator()); // setValidator
|
||||
return guitextfield;
|
||||
}
|
||||
|
||||
private GuiLabel createLabel(int xPosition, int yPosition, GuiBOPPageList.GuiLabelEntry field, boolean hasNoNeighbor)
|
||||
{
|
||||
GuiLabel guilabel;
|
||||
|
||||
if (hasNoNeighbor)
|
||||
{
|
||||
guilabel = new GuiLabel(this.mc.fontRendererObj, field.getFieldId(), xPosition, yPosition, this.width - xPosition * 2, 20, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
guilabel = new GuiLabel(this.mc.fontRendererObj, field.getFieldId(), xPosition, yPosition, 150, 20, -1);
|
||||
}
|
||||
|
||||
guilabel.visible = field.isVisible();
|
||||
guilabel.func_175202_a(field.getLabelText()); // setText
|
||||
guilabel.setCentered();
|
||||
return guilabel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(char typedChar, int keyCode)
|
||||
{
|
||||
if (this.focusedGui instanceof GuiTextField)
|
||||
{
|
||||
GuiTextField guitextfield = (GuiTextField)this.focusedGui;
|
||||
int j;
|
||||
|
||||
//Check if aren't we are pasting text
|
||||
if (!GuiScreen.isKeyComboCtrlV(keyCode))
|
||||
{
|
||||
if (keyCode == 15) //Tab is pressed
|
||||
{
|
||||
guitextfield.setFocused(false);
|
||||
int focusedGuiIndex = this.allTextFieldGuis.indexOf(this.focusedGui);
|
||||
|
||||
if (GuiScreen.isShiftKeyDown())
|
||||
{
|
||||
if (focusedGuiIndex == 0) //Jump back to the end of the list when at the start
|
||||
{
|
||||
focusedGuiIndex = this.allTextFieldGuis.size() - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
--focusedGuiIndex; //Cycle backwards through the text fields
|
||||
}
|
||||
}
|
||||
else if (focusedGuiIndex == this.allTextFieldGuis.size() - 1) //Jump back to the start of the list when at the end
|
||||
{
|
||||
focusedGuiIndex = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
++focusedGuiIndex; //Cycle forwards through the text fields
|
||||
}
|
||||
|
||||
this.focusedGui = (Gui)this.allTextFieldGuis.get(focusedGuiIndex);
|
||||
guitextfield = (GuiTextField)this.focusedGui;
|
||||
guitextfield.setFocused(true);
|
||||
int k1 = guitextfield.yPosition + this.slotHeight;
|
||||
j = guitextfield.yPosition;
|
||||
|
||||
if (k1 > this.bottom)
|
||||
{
|
||||
this.amountScrolled += (float)(k1 - this.bottom);
|
||||
}
|
||||
else if (j < this.top)
|
||||
{
|
||||
this.amountScrolled = (float)j;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
guitextfield.textboxKeyTyped(typedChar, keyCode);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
String s = GuiScreen.getClipboardString();
|
||||
String[] astring = s.split(";");
|
||||
j = this.allTextFieldGuis.indexOf(this.focusedGui);
|
||||
int k = j;
|
||||
String[] astring1 = astring;
|
||||
int l = astring.length;
|
||||
|
||||
for (int i1 = 0; i1 < l; ++i1)
|
||||
{
|
||||
String s1 = astring1[i1];
|
||||
((GuiTextField)this.allTextFieldGuis.get(k)).setText(s1);
|
||||
|
||||
if (k == this.allTextFieldGuis.size() - 1)
|
||||
{
|
||||
k = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
++k;
|
||||
}
|
||||
|
||||
if (k == j)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public GuiBOPPageList.GuiRowEntry getRow(int rowNum)
|
||||
{
|
||||
return (GuiBOPPageList.GuiRowEntry)this.allRows.get(rowNum);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize()
|
||||
{
|
||||
return this.allRows.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getListWidth()
|
||||
{
|
||||
return 400;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getScrollBarX()
|
||||
{
|
||||
return super.getScrollBarX() + 32;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuiListExtended.IGuiListEntry getListEntry(int rowNum)
|
||||
{
|
||||
return this.getRow(rowNum);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int mouseX, int mouseY, int mouseButton)
|
||||
{
|
||||
super.mouseClicked(mouseX, mouseY, Mouse.getEventButton());
|
||||
int l = this.getSlotIndexFromScreenCoords(mouseX, mouseY);
|
||||
|
||||
if (l >= 0)
|
||||
{
|
||||
GuiBOPPageTable.GuiRowEntry row = this.getRow(l);
|
||||
|
||||
if (this.focusedGui != row.focusedGui && this.focusedGui != null && this.focusedGui instanceof GuiTextField)
|
||||
{
|
||||
((GuiTextField)this.focusedGui).setFocused(false);
|
||||
}
|
||||
|
||||
this.focusedGui = row.focusedGui;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package biomesoplenty.client.gui;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiEnumButton<T extends Enum> extends GuiButton
|
||||
{
|
||||
private T value;
|
||||
private String localizationStr;
|
||||
private final GuiBOPPageList.GuiResponder guiResponder;
|
||||
|
||||
public GuiEnumButton(GuiBOPPageList.GuiResponder responder, int fieldId, int x, int y, String localizationStr, T initialValue)
|
||||
{
|
||||
super(fieldId, x, y, 150, 20, "");
|
||||
this.localizationStr = localizationStr;
|
||||
this.value = initialValue;
|
||||
this.displayString = this.buildDisplayString();
|
||||
this.guiResponder = responder;
|
||||
}
|
||||
|
||||
private String buildDisplayString()
|
||||
{
|
||||
return I18n.format(this.localizationStr, new Object[] {this.value.toString()});
|
||||
}
|
||||
|
||||
public void setValue(T value)
|
||||
{
|
||||
this.value = value;
|
||||
this.displayString = this.buildDisplayString();
|
||||
this.guiResponder.handleEnumSelection(this.id, value.ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mousePressed(Minecraft mc, int mouseX, int mouseY)
|
||||
{
|
||||
if (super.mousePressed(mc, mouseX, mouseY))
|
||||
{
|
||||
Object[] values = this.value.getClass().getEnumConstants();
|
||||
int len = values.length;
|
||||
this.value = (T)(values[(this.value.ordinal() + 1) % len]);
|
||||
this.displayString = this.buildDisplayString();
|
||||
this.guiResponder.handleEnumSelection(this.id, this.value.ordinal());
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
package biomesoplenty.client.handler;
|
||||
|
||||
import biomesoplenty.init.ModBiomes;
|
||||
import biomesoplenty.init.ModConfig;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screen.*;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.client.event.GuiOpenEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE)
|
||||
public class GuiEventHandler
|
||||
{
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@SubscribeEvent
|
||||
public static void onGuiOpened(GuiOpenEvent event)
|
||||
{
|
||||
Screen gui = event.getGui();
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
Screen prevScreen = mc.screen;
|
||||
|
||||
// Default to the bop worldtype
|
||||
if (ModConfig.ClientConfig.useWorldType.get() && gui instanceof CreateWorldScreen && prevScreen instanceof WorldSelectionScreen)
|
||||
{
|
||||
WorldOptionsScreen optionsScreen = ((CreateWorldScreen)gui).worldGenSettingsComponent;
|
||||
optionsScreen.preset = Optional.of(findBopBiomeGeneratorTypeScreen());
|
||||
optionsScreen.settings = optionsScreen.preset.get().create(optionsScreen.registryHolder, optionsScreen.settings.seed(), optionsScreen.settings.generateFeatures(), optionsScreen.settings.generateBonusChest());
|
||||
}
|
||||
}
|
||||
|
||||
private static BiomeGeneratorTypeScreens findBopBiomeGeneratorTypeScreen()
|
||||
{
|
||||
for (BiomeGeneratorTypeScreens screen : BiomeGeneratorTypeScreens.PRESETS)
|
||||
{
|
||||
// Skip screens that don't use a TranslationTextComponent because definitely they're not ours
|
||||
if (!(screen.description instanceof TranslationTextComponent))
|
||||
continue;
|
||||
|
||||
TranslationTextComponent desc = (TranslationTextComponent)screen.description;
|
||||
|
||||
if (desc.getKey().equals("generator.minecraft.biomesoplenty"))
|
||||
{
|
||||
return screen;
|
||||
}
|
||||
}
|
||||
|
||||
throw new RuntimeException("Failed to locate biomesoplenty biome generator type screen!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.handler;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import biomesoplenty.client.model.ModelBiomeFinder;
|
||||
import biomesoplenty.client.texture.TextureAnimationFrame;
|
||||
import biomesoplenty.client.util.TextureUtils;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.resources.model.IBakedModel;
|
||||
import net.minecraft.client.resources.model.ModelResourceLocation;
|
||||
import net.minecraft.util.IRegistry;
|
||||
import net.minecraftforge.client.event.ModelBakeEvent;
|
||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
public class ModelBakeHandler
|
||||
{
|
||||
public static final ModelResourceLocation BIOME_FINDER = new ModelResourceLocation("biomesoplenty:biome_finder", "inventory");
|
||||
|
||||
public static List<String> fluidsToTextureStitch = new ArrayList<String>();
|
||||
|
||||
private TextureAnimationFrame[] biomeFinderFrames;
|
||||
|
||||
@SubscribeEvent
|
||||
public void onTextureStitch(TextureStitchEvent.Pre event)
|
||||
{
|
||||
TextureMap map = event.map;
|
||||
biomeFinderFrames = TextureUtils.splitAnimatedTexture(map, "biomesoplenty:items/biome_finder", 12);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onTextureStitch(TextureStitchEvent.Post event)
|
||||
{
|
||||
TextureMap map = event.map;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onModelBake(ModelBakeEvent event)
|
||||
{
|
||||
IRegistry modelRegistry = event.modelRegistry;
|
||||
IBakedModel biomeFinderModel = (IBakedModel)modelRegistry.getObject(BIOME_FINDER);
|
||||
|
||||
modelRegistry.putObject(BIOME_FINDER, new ModelBiomeFinder(biomeFinderModel, biomeFinderFrames));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.model;
|
||||
|
||||
import biomesoplenty.client.util.ModelUtils;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.client.resources.model.IBakedModel;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.client.model.IFlexibleBakedModel;
|
||||
import net.minecraftforge.client.model.ISmartItemModel;
|
||||
|
||||
public class ModelBiomeFinder extends IFlexibleBakedModel.Wrapper implements ISmartItemModel
|
||||
{
|
||||
|
||||
private IBakedModel[] frames;
|
||||
private IBakedModel defaultModel;
|
||||
|
||||
public ModelBiomeFinder(IBakedModel defaultModel, TextureAtlasSprite[] frameTextures)
|
||||
{
|
||||
super(defaultModel, DefaultVertexFormats.ITEM);
|
||||
this.defaultModel = defaultModel;
|
||||
this.frames = ModelUtils.generateModelsForTextures(defaultModel, frameTextures);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getTexture()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBakedModel handleItemState(ItemStack stack)
|
||||
{
|
||||
EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
|
||||
if (player == null) {return this.defaultModel;}
|
||||
|
||||
NBTTagCompound nbt = stack.getTagCompound();
|
||||
if (nbt != null && nbt.hasKey("biomeIDToFind"))
|
||||
{
|
||||
if (nbt.hasKey("searchStarted"))
|
||||
{
|
||||
// searching for biome, but not yet found indicate searching by flashing
|
||||
return this.getFlashingFrame(player);
|
||||
}
|
||||
else if (nbt.getBoolean("found"))
|
||||
{
|
||||
// if the biome has been found, point at it
|
||||
int posX = nbt.getInteger("posX");
|
||||
int posZ = nbt.getInteger("posZ");
|
||||
return getFrameForPositionRelativeToPlayer(player, posX, posZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
// the search has not yet been started, show all sectors lit
|
||||
return this.frames[9];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// if we've got here, the biome finder has not been bound to a biome yet - show no sectors lit
|
||||
return this.frames[8];
|
||||
}
|
||||
}
|
||||
|
||||
public IBakedModel getFlashingFrame(EntityPlayerSP player)
|
||||
{
|
||||
return (player.getRNG().nextInt(2) == 0 ? this.frames[10] : this.frames[11]);
|
||||
}
|
||||
|
||||
public IBakedModel getFrameForPositionRelativeToPlayer(EntityPlayer player, int biomePosX, int biomePosZ)
|
||||
{
|
||||
double xDiff = (double)biomePosX - player.posX;
|
||||
double zDiff = (double)biomePosZ - player.posZ;
|
||||
// angle (in degrees) of direction from player to biome (relative to player rotation)
|
||||
double angleDiff = (Math.atan2(zDiff, xDiff) * 180.0D / Math.PI) + 270.0D - player.rotationYaw;
|
||||
// there are 8 sectors on the biome finder, so 45 degrees each (offset by 22.5 to center the angle in the middle of the sector)
|
||||
int sector = (int)Math.floor((angleDiff + 22.5D) / 45.0D);
|
||||
return this.frames[((sector % 8) + 8) % 8];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.particle;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import biomesoplenty.core.ClientProxy;
|
||||
import net.minecraft.client.particle.EntityFX;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||
|
||||
public class EntityDandelionFX extends EntityFX
|
||||
{
|
||||
|
||||
public EntityDandelionFX(World world, double xCoordIn, double yCoordIn, double zCoordIn, float par14)
|
||||
{
|
||||
this(world, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D, par14);
|
||||
}
|
||||
|
||||
public EntityDandelionFX(World world, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, float par14)
|
||||
{
|
||||
super(world, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn);
|
||||
|
||||
// dandelion texture is at position 0,0
|
||||
this.particleTextureIndexX = 0;
|
||||
this.particleTextureIndexY = 0;
|
||||
|
||||
this.motionX *= 0.20000000149011612D;
|
||||
this.motionY *= 0.10000000149011612D;
|
||||
this.motionZ *= 0.20000000149011612D;
|
||||
this.particleScale *= 0.25F;
|
||||
this.particleScale *= par14;
|
||||
this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D));
|
||||
this.particleMaxAge = (int)((float)this.particleMaxAge * par14);
|
||||
this.setAlphaF(1.0F);
|
||||
this.noClip = false;
|
||||
|
||||
this.setSize(0.01F, 0.01F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFXLayer()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(WorldRenderer renderer, Entity entity, float partialTicks, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY)
|
||||
{
|
||||
|
||||
// EffectRenderer will by default bind the vanilla particles texture, override with our own
|
||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(ClientProxy.particleTexturesLocation);
|
||||
|
||||
GlStateManager.depthMask(false);
|
||||
// TODO what's this?
|
||||
GL11.glEnable(3042);
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(770, 1);
|
||||
|
||||
super.renderParticle(renderer, entity, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
|
||||
GL11.glDisable(3042);
|
||||
GlStateManager.disableBlend();
|
||||
GlStateManager.depthMask(true);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate()
|
||||
{
|
||||
prevPosX = posX;
|
||||
prevPosY = posY;
|
||||
prevPosZ = posZ;
|
||||
|
||||
if (particleAge++ >= particleMaxAge)
|
||||
{
|
||||
this.setDead();
|
||||
}
|
||||
|
||||
motionY += 0.004D;
|
||||
|
||||
this.moveEntity(motionX, motionY, motionZ);
|
||||
|
||||
if (posY == prevPosY)
|
||||
{
|
||||
motionX *= 1.1D;
|
||||
motionZ *= 1.1D;
|
||||
}
|
||||
motionX *= 0.9599999785423279D;
|
||||
motionY *= 0.9599999785423279D;
|
||||
motionZ *= 0.9599999785423279D;
|
||||
|
||||
if (onGround)
|
||||
{
|
||||
motionX *= 0.699999988079071D;
|
||||
motionZ *= 0.699999988079071D;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.particle;
|
||||
|
||||
import biomesoplenty.core.ClientProxy;
|
||||
import net.minecraft.client.particle.EntityFX;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||
|
||||
public class EntityPixieTrailFX extends EntityFX
|
||||
{
|
||||
|
||||
public EntityPixieTrailFX(World world, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn)
|
||||
{
|
||||
this(world, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, 1.0F);
|
||||
}
|
||||
|
||||
public EntityPixieTrailFX(World world, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, float par14)
|
||||
{
|
||||
super(world, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D);
|
||||
|
||||
// pixie trail texture is row from position 0,1 to position 8,1
|
||||
this.particleTextureIndexX = 7;
|
||||
this.particleTextureIndexY = 1;
|
||||
|
||||
this.motionX *= 0.10000000149011612D;
|
||||
this.motionY *= 0.10000000149011612D;
|
||||
this.motionZ *= 0.10000000149011612D;
|
||||
this.motionX += xSpeedIn;
|
||||
this.motionY += ySpeedIn;
|
||||
this.motionZ += zSpeedIn;
|
||||
this.particleScale *= 0.75F;
|
||||
this.particleScale *= par14;
|
||||
this.particleMaxAge = (int)((8.0D / (Math.random() * 0.8D + 0.2D)) * 8);
|
||||
this.particleMaxAge = (int)((float)this.particleMaxAge * par14);
|
||||
this.particleAge = (particleMaxAge / 2) + (int)((particleMaxAge / 2) * world.rand.nextInt(7));
|
||||
this.particleAlpha = 1.0F;
|
||||
this.noClip = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFXLayer()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(WorldRenderer renderer, Entity entity, float partialTicks, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY)
|
||||
{
|
||||
|
||||
// EffectRenderer will by default bind the vanilla particles texture, override with our own
|
||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(ClientProxy.particleTexturesLocation);
|
||||
|
||||
float scaleMultiplier = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F;
|
||||
scaleMultiplier = MathHelper.clamp_float(scaleMultiplier, 0.0F, 1.0F);
|
||||
this.particleScale = this.particleScale * scaleMultiplier;
|
||||
|
||||
GlStateManager.depthMask(false);
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(770, 1);
|
||||
|
||||
super.renderParticle(renderer, entity, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
|
||||
GlStateManager.disableBlend();
|
||||
GlStateManager.depthMask(true);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate()
|
||||
{
|
||||
prevPosX = posX;
|
||||
prevPosY = posY;
|
||||
prevPosZ = posZ;
|
||||
|
||||
if (particleAge++ >= particleMaxAge)
|
||||
{
|
||||
this.setDead();
|
||||
}
|
||||
|
||||
this.particleTextureIndexX = 7 - particleAge * 8 / particleMaxAge;
|
||||
this.moveEntity(motionX, motionY, motionZ);
|
||||
|
||||
if (posY == prevPosY)
|
||||
{
|
||||
motionX *= 1.1D;
|
||||
motionZ *= 1.1D;
|
||||
}
|
||||
|
||||
motionX *= 0.9599999785423279D;
|
||||
motionY *= 0.9599999785423279D;
|
||||
motionZ *= 0.9599999785423279D;
|
||||
|
||||
if (onGround)
|
||||
{
|
||||
motionX *= 0.699999988079071D;
|
||||
motionZ *= 0.699999988079071D;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.particle;
|
||||
|
||||
import net.minecraft.client.particle.EntityFX;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||
|
||||
public class EntityTrailFX extends EntityFX
|
||||
{
|
||||
private ResourceLocation trailResource;
|
||||
/**The index of the flower to be spawned, values are 0-3*/
|
||||
private int particleIndex;
|
||||
private double startY;
|
||||
|
||||
public EntityTrailFX(World world, double x, double y, double z, String trailName)
|
||||
{
|
||||
super(world, x, y, z);
|
||||
|
||||
this.trailResource = new ResourceLocation("biomesoplenty:textures/particles/" + trailName + ".png");
|
||||
this.motionX = this.motionY = this.motionZ = 0.0D; //Trail particles should not move
|
||||
this.particleMaxAge = 550;
|
||||
this.particleIndex = this.rand.nextInt(4); //Choose a random index on creation
|
||||
this.startY = y; //Where y coordinate where this particle has started (before it moves downwards with time)
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(WorldRenderer renderer, Entity entity, float partialTicks, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY)
|
||||
{
|
||||
// EffectRenderer will by default bind the vanilla particles texture, override with our own
|
||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(this.trailResource);
|
||||
|
||||
//The overall maxU and maxV of the particle sheet is 1.0 (representing 16px)
|
||||
float minU = (particleIndex % 2) * 0.5F; //Particles on the left side are 0, right are 0.5
|
||||
float maxU = minU + 0.5F; //Each flower is 8px wide (half of the overall sheet)
|
||||
|
||||
float minV = (particleIndex / 2) * 0.5F; //Uses integer rounding errors (0 and 1 = 0, 2 and 3 = 1)
|
||||
float maxV = minV + 0.5F; //Each flower is 8px high (half of the overall sheet)
|
||||
|
||||
//Vanilla particle rendering
|
||||
float alpha = 1.0F - Math.min(1.0F, 2.0F * this.particleAge / this.particleMaxAge);
|
||||
float width = 0.15F;
|
||||
float x = (float)(prevPosX + (posX - prevPosX) - interpPosX);
|
||||
float y = (float)(prevPosY + (posY - prevPosY) - interpPosY);
|
||||
float z = (float)(prevPosZ + (posZ - prevPosZ) - interpPosZ);
|
||||
|
||||
renderer.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, alpha);
|
||||
renderer.addVertexWithUV(x - width, y, z + width, minU, maxV);
|
||||
renderer.addVertexWithUV(x + width, y, z + width, minU, minV);
|
||||
renderer.addVertexWithUV(x + width, y, z - width, maxU, minV);
|
||||
renderer.addVertexWithUV(x - width, y, z - width, maxU, maxV);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFXLayer()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate()
|
||||
{
|
||||
super.onUpdate();
|
||||
|
||||
this.posY = this.startY - 0.01 * ((float)this.particleAge / (float)this.particleMaxAge);
|
||||
this.prevPosY = this.posY;
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
package biomesoplenty.client.renderer;
|
||||
|
||||
import biomesoplenty.common.entity.item.BoatEntityBOP;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererManager;
|
||||
import net.minecraft.client.renderer.entity.model.BoatModel;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.vector.Quaternion;
|
||||
import net.minecraft.util.math.vector.Vector3f;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
import static biomesoplenty.core.BiomesOPlenty.MOD_ID;
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public class BoatRendererBOP extends EntityRenderer<BoatEntityBOP> {
|
||||
protected final BoatModel model = new BoatModel();
|
||||
|
||||
public BoatRendererBOP(EntityRendererManager renderer) {
|
||||
super(renderer);
|
||||
this.shadowRadius = 0.8f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(BoatEntityBOP entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer renderTypeBuffer, int light) {
|
||||
matrixStack.pushPose();
|
||||
matrixStack.translate(0d, 0.375d, 0d);
|
||||
matrixStack.mulPose(Vector3f.YP.rotationDegrees(180f - entityYaw));
|
||||
float f = (float) entity.getHurtTime() - partialTicks;
|
||||
float f1 = entity.getDamage() - partialTicks;
|
||||
if (f1 < 0f) {
|
||||
f1 = 0f;
|
||||
}
|
||||
if (f > 0f) {
|
||||
matrixStack.mulPose(Vector3f.XP.rotationDegrees(MathHelper.sin(f) * f * f1 / 10f * (float) entity.getHurtDir()));
|
||||
}
|
||||
float f2 = entity.getBubbleAngle(partialTicks);
|
||||
if (!MathHelper.equal(f2, 0f)) {
|
||||
matrixStack.mulPose(new Quaternion(new Vector3f(1f, 0f, 1f), entity.getBubbleAngle(partialTicks), true));
|
||||
}
|
||||
matrixStack.scale(-1f, -1f, 1f);
|
||||
matrixStack.mulPose(Vector3f.YP.rotationDegrees(90.0F));
|
||||
this.model.setupAnim(entity, partialTicks, 0f, -0.1f, 0f, 0f);
|
||||
IVertexBuilder ivertexbuilder = renderTypeBuffer.getBuffer(this.model.renderType(this.getTextureLocation(entity)));
|
||||
this.model.renderToBuffer(matrixStack, ivertexbuilder, light, OverlayTexture.NO_OVERLAY, 1f, 1f, 1f, 1f);
|
||||
if (!entity.isUnderWater()) {
|
||||
IVertexBuilder ivertexbuilder1 = renderTypeBuffer.getBuffer(RenderType.waterMask());
|
||||
this.model.waterPatch().render(matrixStack, ivertexbuilder1, light, OverlayTexture.NO_OVERLAY);
|
||||
}
|
||||
matrixStack.popPose();
|
||||
super.render(entity, entityYaw, partialTicks, matrixStack, renderTypeBuffer, light);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureLocation(BoatEntityBOP entity) {
|
||||
return BOAT_TEXTURE_LOCATIONS[entity.getModel().ordinal()];
|
||||
}
|
||||
|
||||
private static final ResourceLocation[] BOAT_TEXTURE_LOCATIONS = new ResourceLocation[] {
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/fir.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/redwood.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/cherry.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/mahogany.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/jacaranda.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/palm.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/willow.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/dead.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/magic.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/umbran.png"),
|
||||
new ResourceLocation(MOD_ID, "textures/entity/boat/hellbark.png")
|
||||
};
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.texture;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
|
||||
import biomesoplenty.client.util.TextureUtils;
|
||||
import biomesoplenty.core.BiomesOPlenty;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.texture.TextureUtil;
|
||||
import net.minecraft.client.resources.IResource;
|
||||
import net.minecraft.client.resources.IResourceManager;
|
||||
import net.minecraft.client.resources.data.AnimationMetadataSection;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class TextureAnimationFrame extends TextureAtlasSprite
|
||||
{
|
||||
private String animationName;
|
||||
private int frame;
|
||||
|
||||
public TextureAnimationFrame(String iconName, String animationName, int frame)
|
||||
{
|
||||
super(iconName);
|
||||
|
||||
this.animationName = animationName;
|
||||
this.frame = frame;
|
||||
}
|
||||
|
||||
//TODO: This still currently classifies as an animation, it should be turned into a proper static texture
|
||||
@Override
|
||||
public void updateAnimation() {}
|
||||
|
||||
@Override
|
||||
public int[][] getFrameTextureData(int index)
|
||||
{
|
||||
return super.getFrameTextureData(this.frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomLoader(IResourceManager manager, net.minecraft.util.ResourceLocation location)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean load(IResourceManager manager, ResourceLocation location)
|
||||
{
|
||||
location = new ResourceLocation(animationName);
|
||||
ResourceLocation fullLocation = TextureUtils.completeResourceLocation(location, 0);
|
||||
int mipmapLevels = Minecraft.getMinecraft().gameSettings.mipmapLevels;
|
||||
|
||||
try
|
||||
{
|
||||
IResource iresource = manager.getResource(fullLocation);
|
||||
BufferedImage[] image = new BufferedImage[1 + mipmapLevels];
|
||||
AnimationMetadataSection animation = (AnimationMetadataSection) iresource.getMetadata("animation");
|
||||
|
||||
if (animation != null)
|
||||
{
|
||||
image[0] = TextureUtil.readBufferedImage(iresource.getInputStream());
|
||||
|
||||
int cachedFrameCount = this.frameCounter;
|
||||
this.loadSprite(image, animation);
|
||||
this.frameCounter = cachedFrameCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
BiomesOPlenty.logger.error("Resource " + location + " isn't animated");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.resources.model.IBakedModel;
|
||||
import net.minecraft.client.resources.model.SimpleBakedModel;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class ModelUtils
|
||||
{
|
||||
public static IBakedModel[] generateModelsForTextures(IBakedModel model, TextureAtlasSprite[] textures)
|
||||
{
|
||||
IBakedModel[] output = new IBakedModel[textures.length];
|
||||
|
||||
for (int i = 0; i < output.length; i++)
|
||||
{
|
||||
TextureAtlasSprite texture = textures[i];
|
||||
SimpleBakedModel.Builder builder = new SimpleBakedModel.Builder(model, texture);
|
||||
|
||||
builder.setTexture(texture);
|
||||
output[i] = builder.makeBakedModel();
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
public static List createFaceLists()
|
||||
{
|
||||
List list = new ArrayList(EnumFacing.values().length);
|
||||
|
||||
for (int i = 0; i < EnumFacing.values().length; i++)
|
||||
{
|
||||
list.add(i, Lists.newLinkedList());
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.client.util;
|
||||
|
||||
import biomesoplenty.client.texture.TextureAnimationFrame;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class TextureUtils
|
||||
{
|
||||
public static final String TEXTURES_BASE_PATH = "textures";
|
||||
|
||||
//TODO: Remove frameCount argument
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static TextureAnimationFrame[] splitAnimatedTexture(TextureMap textureMap, String iconName, int frameCount)
|
||||
{
|
||||
TextureAnimationFrame[] output = new TextureAnimationFrame[frameCount];
|
||||
|
||||
for (int i = 0; i < frameCount; i++)
|
||||
{
|
||||
String textureLocation = iconName + "_static_" + i;
|
||||
TextureAnimationFrame frameTexture = new TextureAnimationFrame(textureLocation, iconName, i);
|
||||
|
||||
output[i] = frameTexture;
|
||||
textureMap.setTextureEntry(textureLocation, frameTexture);
|
||||
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
public static ResourceLocation completeResourceLocation(ResourceLocation location, int mode)
|
||||
{
|
||||
return mode == 0 ? new ResourceLocation(location.getResourceDomain(), String.format("%s/%s%s", new Object[] {TEXTURES_BASE_PATH, location.getResourcePath(), ".png"})) : new ResourceLocation(location.getResourceDomain(), String.format("%s/mipmaps/%s.%d%s", new Object[] {TEXTURES_BASE_PATH, location.getResourcePath(), Integer.valueOf(mode), ".png"}));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.asm;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
||||
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions;
|
||||
|
||||
import biomesoplenty.common.asm.transformers.BOPAccessTransformer;
|
||||
|
||||
@TransformerExclusions("biomesoplenty.common.asm")
|
||||
public class BOPLoadingPlugin implements IFMLLoadingPlugin
|
||||
{
|
||||
@Override
|
||||
public String[] getASMTransformerClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModContainerClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSetupClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectData(Map<String, Object> data)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTransformerClass()
|
||||
{
|
||||
return BOPAccessTransformer.class.getName();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.asm.transformers;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.minecraftforge.fml.common.asm.transformers.AccessTransformer;
|
||||
|
||||
public class BOPAccessTransformer extends AccessTransformer
|
||||
{
|
||||
public BOPAccessTransformer() throws IOException
|
||||
{
|
||||
super("biomesoplenty_at.cfg");
|
||||
}
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public class BiomeConfigData
|
||||
{
|
||||
@SerializedName("standard_weights")
|
||||
public TreeMap<String, WeightedBiomeEntry> standardBiomeWeights = Maps.newTreeMap();
|
||||
|
||||
@SerializedName("technical_biome_toggles")
|
||||
public TreeMap<String, ToggleableBiomeEntry> technicalBiomeEntries = Maps.newTreeMap();
|
||||
|
||||
@SerializedName("sub_biome_weights")
|
||||
public TreeMap<String, SubBiomeEntry> subBiomeEntries = Maps.newTreeMap();
|
||||
|
||||
@SerializedName("island_biome_toggles")
|
||||
public TreeMap<String, ToggleableBiomeEntry> islandBiomeEntries = Maps.newTreeMap();
|
||||
|
||||
@SerializedName("vanilla_biome_weights")
|
||||
public TreeMap<String, WeightedBiomeEntry> vanillaBiomeEntries = Maps.newTreeMap();
|
||||
|
||||
public static class WeightedBiomeEntry
|
||||
{
|
||||
public int weight;
|
||||
|
||||
public WeightedBiomeEntry(int weight)
|
||||
{
|
||||
this.weight = weight;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ToggleableBiomeEntry
|
||||
{
|
||||
public boolean enabled;
|
||||
|
||||
public ToggleableBiomeEntry(boolean enabled)
|
||||
{
|
||||
this.enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
public static class SubBiomeEntry
|
||||
{
|
||||
public int weight;
|
||||
public float rarity;
|
||||
|
||||
public SubBiomeEntry(int weight, float rarity)
|
||||
{
|
||||
this.weight = weight;
|
||||
this.rarity = rarity;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,90 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2020, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.util.biome.BiomeUtil;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import net.minecraft.util.RegistryKey;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.Biomes;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
public class BiomeMetadata
|
||||
{
|
||||
private final ImmutableMap<BOPClimates, Integer> weightMap;
|
||||
|
||||
@Nullable
|
||||
private final RegistryKey<Biome> beachBiome;
|
||||
|
||||
@Nullable
|
||||
private final RegistryKey<Biome> riverBiome;
|
||||
|
||||
@Nullable
|
||||
private final BiFunction<Double, Double, Integer> foliageColorFunction;
|
||||
|
||||
@Nullable
|
||||
private final BiFunction<Double, Double, Integer> grassColorFunction;
|
||||
|
||||
@Nullable
|
||||
private final BiFunction<Double, Double, Integer> waterColorFunction;
|
||||
|
||||
protected BiomeMetadata(Map<BOPClimates, Integer> weights, @Nullable RegistryKey<Biome> beachBiome, @Nullable RegistryKey<Biome> riverBiome, BiFunction<Double, Double, Integer> foliageColorFunction, BiFunction<Double, Double, Integer> grassColorFunction, BiFunction<Double, Double, Integer> waterColorFunction)
|
||||
{
|
||||
this.weightMap = ImmutableMap.copyOf(weights);
|
||||
this.beachBiome = beachBiome;
|
||||
this.riverBiome = riverBiome;
|
||||
this.foliageColorFunction = foliageColorFunction;
|
||||
this.grassColorFunction = grassColorFunction;
|
||||
this.waterColorFunction = waterColorFunction;
|
||||
}
|
||||
|
||||
public Map<BOPClimates, Integer> getWeightMap()
|
||||
{
|
||||
return this.weightMap;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RegistryKey<Biome> getBeachBiome()
|
||||
{
|
||||
return this.beachBiome;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RegistryKey<Biome> getRiverBiome()
|
||||
{
|
||||
return this.riverBiome;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BiFunction<Double, Double, Integer> getFoliageColorFunction()
|
||||
{
|
||||
return this.foliageColorFunction;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BiFunction<Double, Double, Integer> getGrassColorFunction()
|
||||
{
|
||||
return this.grassColorFunction;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BiFunction<Double, Double, Integer> getWaterColorFunction()
|
||||
{
|
||||
return this.waterColorFunction;
|
||||
}
|
||||
|
||||
public boolean hasWeights()
|
||||
{
|
||||
return !this.weightMap.isEmpty() && !this.weightMap.entrySet().stream().allMatch((entry) -> entry.getValue().equals(0));
|
||||
}
|
||||
}
|
|
@ -1,680 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome;
|
||||
|
||||
import biomesoplenty.api.biome.BOPBiomes;
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.util.biome.BiomeUtil;
|
||||
import biomesoplenty.common.util.config.JsonUtil;
|
||||
import biomesoplenty.core.BiomesOPlenty;
|
||||
import biomesoplenty.init.ModBiomes;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import net.minecraft.util.RegistryKey;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraftforge.fml.loading.FMLPaths;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class BiomeRegistry
|
||||
{
|
||||
private static final String CONFIG_FILE_NAME = "biomes.json";
|
||||
|
||||
private static Map<RegistrationType, List<DeferredRegistration>> deferrances = Maps.newHashMap();
|
||||
|
||||
public static void deferStandardRegistration(BiomeTemplate biome, String name)
|
||||
{
|
||||
defer(RegistrationType.STANDARD_BIOME, new StandardBiomeRegistrationData(biome, name));
|
||||
}
|
||||
|
||||
public static void deferTechnicalBiomeRegistration(BiomeTemplate biome, String name)
|
||||
{
|
||||
defer(RegistrationType.TECHNICAL_BIOME, new ToggleableStandardBiomeRegistrationData(biome, name, true));
|
||||
}
|
||||
|
||||
public static void deferSubBiomeRegistration(RegistryKey<Biome> parent, RegistryKey<Biome> child, int weight, float rarity)
|
||||
{
|
||||
// Don't register sub biome if the parent or child don't exist
|
||||
if (!BiomeUtil.exists(parent) || !BiomeUtil.exists(child)) {
|
||||
return;
|
||||
}
|
||||
|
||||
defer(RegistrationType.SUB_BIOME, new SubBiomeRegistrationData(parent, child, weight, rarity));
|
||||
}
|
||||
|
||||
public static void deferIslandBiomeRegistration(RegistryKey<Biome> key, BOPClimates climate, int weight)
|
||||
{
|
||||
if (!BiomeUtil.exists(key))
|
||||
return;
|
||||
|
||||
defer(RegistrationType.ISLAND_BIOME, new SingleClimateRegistrationData(key, climate, weight));
|
||||
}
|
||||
|
||||
public static void deferVanillaBiomeRegistration(RegistryKey<Biome> key, BOPClimates climate, int weight)
|
||||
{
|
||||
if (!BiomeUtil.exists(key))
|
||||
return;
|
||||
|
||||
defer(RegistrationType.VANILLA_BIOME, new SingleClimateRegistrationData(key, climate, weight));
|
||||
}
|
||||
|
||||
public static void configureStandardBiomes()
|
||||
{
|
||||
List<DeferredRegistration> standardRegistrations = deferrances.get(RegistrationType.STANDARD_BIOME);
|
||||
TreeMap<String, BiomeConfigData.WeightedBiomeEntry> defaultEntries = Maps.newTreeMap();
|
||||
Map<String, StandardBiomeRegistrationData> regDataMap = Maps.newHashMap();
|
||||
|
||||
for (DeferredRegistration<StandardBiomeRegistrationData> registration : standardRegistrations)
|
||||
{
|
||||
StandardBiomeRegistrationData regData = registration.regData;
|
||||
|
||||
// Ignore biomes which don't have any weights set by default
|
||||
if (regData.getMetadata().hasWeights())
|
||||
{
|
||||
String biomeName = new ResourceLocation(BiomesOPlenty.MOD_ID, regData.getName()).toString();
|
||||
Pair<BOPClimates, Integer> primaryWeight = regData.getPrimaryWeight();
|
||||
defaultEntries.put(biomeName, new BiomeConfigData.WeightedBiomeEntry(primaryWeight.getValue()));
|
||||
regDataMap.put(biomeName, registration.regData);
|
||||
}
|
||||
}
|
||||
|
||||
BiomeConfigData defaultConfigData = new BiomeConfigData();
|
||||
defaultConfigData.standardBiomeWeights = defaultEntries;
|
||||
BiomeConfigData configData = getConfigData(defaultConfigData);
|
||||
|
||||
TreeMap<String, BiomeConfigData.WeightedBiomeEntry> revisedStandardBiomeWeights = Maps.newTreeMap(defaultEntries);
|
||||
|
||||
// Merge the config file with the default values
|
||||
for (Map.Entry<String, BiomeConfigData.WeightedBiomeEntry> biomeEntry : configData.standardBiomeWeights.entrySet())
|
||||
{
|
||||
if (revisedStandardBiomeWeights.containsKey(biomeEntry.getKey()))
|
||||
{
|
||||
revisedStandardBiomeWeights.put(biomeEntry.getKey(), biomeEntry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
// Write back to the config file
|
||||
configData.standardBiomeWeights = revisedStandardBiomeWeights;
|
||||
JsonUtil.writeFile(getConfigFile(), configData);
|
||||
|
||||
for (Map.Entry<String, BiomeConfigData.WeightedBiomeEntry> biomeEntry : configData.standardBiomeWeights.entrySet())
|
||||
{
|
||||
String name = biomeEntry.getKey();
|
||||
BiomeConfigData.WeightedBiomeEntry weight = biomeEntry.getValue();
|
||||
|
||||
// Replace the default weight map for this biome with those from the config file
|
||||
if (regDataMap.containsKey(name))
|
||||
{
|
||||
StandardBiomeRegistrationData registrationData = regDataMap.get(name);
|
||||
registrationData.setPrimaryWeight(weight.weight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void configureTechnicalBiomes()
|
||||
{
|
||||
List<DeferredRegistration> biomeRegistrations = deferrances.get(RegistrationType.TECHNICAL_BIOME);
|
||||
TreeMap<String, BiomeConfigData.ToggleableBiomeEntry> defaultBiomeEntries = Maps.newTreeMap();
|
||||
|
||||
for (DeferredRegistration<ToggleableStandardBiomeRegistrationData> registration : biomeRegistrations)
|
||||
{
|
||||
ToggleableStandardBiomeRegistrationData regData = registration.regData;
|
||||
String biomeName = new ResourceLocation(BiomesOPlenty.MOD_ID, regData.getName()).toString();
|
||||
defaultBiomeEntries.put(biomeName, new BiomeConfigData.ToggleableBiomeEntry(true));
|
||||
}
|
||||
|
||||
BiomeConfigData defaultConfigData = new BiomeConfigData();
|
||||
defaultConfigData.technicalBiomeEntries = defaultBiomeEntries;
|
||||
BiomeConfigData configData = getConfigData(defaultConfigData);
|
||||
|
||||
TreeMap<String, BiomeConfigData.ToggleableBiomeEntry> revisedBiomeEntries = Maps.newTreeMap(defaultBiomeEntries);
|
||||
|
||||
// Merge the config file with the default values
|
||||
for (Map.Entry<String, BiomeConfigData.ToggleableBiomeEntry> biomeEntry : configData.technicalBiomeEntries.entrySet())
|
||||
{
|
||||
if (revisedBiomeEntries.containsKey(biomeEntry.getKey()))
|
||||
{
|
||||
revisedBiomeEntries.put(biomeEntry.getKey(), biomeEntry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
// Write back to the config file
|
||||
configData.technicalBiomeEntries = revisedBiomeEntries;
|
||||
JsonUtil.writeFile(getConfigFile(), configData);
|
||||
|
||||
for (DeferredRegistration<ToggleableStandardBiomeRegistrationData> registration : biomeRegistrations)
|
||||
{
|
||||
ToggleableStandardBiomeRegistrationData regData = registration.regData;
|
||||
String biomeName = new ResourceLocation(BiomesOPlenty.MOD_ID, regData.getName()).toString();
|
||||
|
||||
if (revisedBiomeEntries.containsKey(biomeName))
|
||||
{
|
||||
BiomeConfigData.ToggleableBiomeEntry entry = revisedBiomeEntries.get(biomeName);
|
||||
|
||||
if (!entry.enabled)
|
||||
{
|
||||
registration.regData.setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void configureSubBiomes()
|
||||
{
|
||||
List<DeferredRegistration> subBiomeRegistrations = deferrances.get(RegistrationType.SUB_BIOME);
|
||||
TreeMap<String, BiomeConfigData.SubBiomeEntry> defaultSubBiomeEntries = Maps.newTreeMap();
|
||||
Map<String, SubBiomeRegistrationData> regDataMap = Maps.newHashMap();
|
||||
|
||||
for (DeferredRegistration<SubBiomeRegistrationData> registration : subBiomeRegistrations)
|
||||
{
|
||||
SubBiomeRegistrationData regData = registration.regData;
|
||||
String biomeName = registration.regData.getChild().location().toString();
|
||||
defaultSubBiomeEntries.put(biomeName, new BiomeConfigData.SubBiomeEntry(regData.getWeight(), regData.getRarity()));
|
||||
regDataMap.put(biomeName, registration.regData);
|
||||
}
|
||||
|
||||
BiomeConfigData defaultConfigData = new BiomeConfigData();
|
||||
defaultConfigData.subBiomeEntries = defaultSubBiomeEntries;
|
||||
BiomeConfigData configData = getConfigData(defaultConfigData);
|
||||
|
||||
TreeMap<String, BiomeConfigData.SubBiomeEntry> revisedSubBiomeEntries = Maps.newTreeMap(defaultSubBiomeEntries);
|
||||
|
||||
// Merge the config file with the default values
|
||||
for (Map.Entry<String, BiomeConfigData.SubBiomeEntry> biomeEntry : configData.subBiomeEntries.entrySet())
|
||||
{
|
||||
if (revisedSubBiomeEntries.containsKey(biomeEntry.getKey()))
|
||||
{
|
||||
revisedSubBiomeEntries.put(biomeEntry.getKey(), biomeEntry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
// Write back to the config file
|
||||
configData.subBiomeEntries = revisedSubBiomeEntries;
|
||||
JsonUtil.writeFile(getConfigFile(), configData);
|
||||
|
||||
for (Map.Entry<String, BiomeConfigData.SubBiomeEntry> biomeEntry : configData.subBiomeEntries.entrySet())
|
||||
{
|
||||
String name = biomeEntry.getKey();
|
||||
BiomeConfigData.SubBiomeEntry subBiomeEntry = biomeEntry.getValue();
|
||||
|
||||
// Replace the default values for this biome with those from the config file
|
||||
if (regDataMap.containsKey(name))
|
||||
{
|
||||
SubBiomeRegistrationData registrationData = regDataMap.get(name);
|
||||
registrationData.setWeight(subBiomeEntry.weight);
|
||||
registrationData.setRarity(subBiomeEntry.rarity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void configureIslandBiomes()
|
||||
{
|
||||
List<DeferredRegistration> biomeRegistrations = deferrances.get(RegistrationType.ISLAND_BIOME);
|
||||
TreeMap<String, BiomeConfigData.ToggleableBiomeEntry> defaultBiomeEntries = Maps.newTreeMap();
|
||||
|
||||
for (DeferredRegistration<SingleClimateRegistrationData> registration : biomeRegistrations)
|
||||
{
|
||||
SingleClimateRegistrationData regData = registration.regData;
|
||||
String biomeName = regData.getBiome().location().toString();
|
||||
defaultBiomeEntries.put(biomeName, new BiomeConfigData.ToggleableBiomeEntry(true));
|
||||
}
|
||||
|
||||
BiomeConfigData defaultConfigData = new BiomeConfigData();
|
||||
defaultConfigData.islandBiomeEntries = defaultBiomeEntries;
|
||||
BiomeConfigData configData = getConfigData(defaultConfigData);
|
||||
|
||||
TreeMap<String, BiomeConfigData.ToggleableBiomeEntry> revisedBiomeEntries = Maps.newTreeMap(defaultBiomeEntries);
|
||||
|
||||
// Merge the config file with the default values
|
||||
for (Map.Entry<String, BiomeConfigData.ToggleableBiomeEntry> biomeEntry : configData.islandBiomeEntries.entrySet())
|
||||
{
|
||||
if (revisedBiomeEntries.containsKey(biomeEntry.getKey()))
|
||||
{
|
||||
revisedBiomeEntries.put(biomeEntry.getKey(), biomeEntry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
// Write back to the config file
|
||||
configData.islandBiomeEntries = revisedBiomeEntries;
|
||||
JsonUtil.writeFile(getConfigFile(), configData);
|
||||
|
||||
for (DeferredRegistration<SingleClimateRegistrationData> registration : biomeRegistrations)
|
||||
{
|
||||
SingleClimateRegistrationData regData = registration.regData;
|
||||
String biomeName = regData.getBiome().location().toString();
|
||||
|
||||
if (revisedBiomeEntries.containsKey(biomeName))
|
||||
{
|
||||
BiomeConfigData.ToggleableBiomeEntry entry = revisedBiomeEntries.get(biomeName);
|
||||
|
||||
if (!entry.enabled)
|
||||
{
|
||||
registration.regData.setWeight(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void configureVanillaBiomes()
|
||||
{
|
||||
List<DeferredRegistration> biomeRegistrations = deferrances.get(RegistrationType.VANILLA_BIOME);
|
||||
TreeMap<String, BiomeConfigData.WeightedBiomeEntry> defaultBiomeEntries = Maps.newTreeMap();
|
||||
Map<String, SingleClimateRegistrationData> regDataMap = Maps.newHashMap();
|
||||
|
||||
for (DeferredRegistration<SingleClimateRegistrationData> registration : biomeRegistrations)
|
||||
{
|
||||
SingleClimateRegistrationData regData = registration.regData;
|
||||
String biomeName = registration.regData.getBiome().location().toString();
|
||||
defaultBiomeEntries.put(biomeName, new BiomeConfigData.WeightedBiomeEntry(regData.getWeight()));
|
||||
regDataMap.put(biomeName, registration.regData);
|
||||
}
|
||||
|
||||
BiomeConfigData defaultConfigData = new BiomeConfigData();
|
||||
defaultConfigData.vanillaBiomeEntries = defaultBiomeEntries;
|
||||
BiomeConfigData configData = getConfigData(defaultConfigData);
|
||||
|
||||
TreeMap<String, BiomeConfigData.WeightedBiomeEntry> revisedBiomeEntries = Maps.newTreeMap(defaultBiomeEntries);
|
||||
|
||||
// Merge the config file with the default values
|
||||
for (Map.Entry<String, BiomeConfigData.WeightedBiomeEntry> biomeEntry : configData.vanillaBiomeEntries.entrySet())
|
||||
{
|
||||
if (revisedBiomeEntries.containsKey(biomeEntry.getKey()))
|
||||
{
|
||||
revisedBiomeEntries.put(biomeEntry.getKey(), biomeEntry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
// Write back to the config file
|
||||
configData.vanillaBiomeEntries = revisedBiomeEntries;
|
||||
JsonUtil.writeFile(getConfigFile(), configData);
|
||||
|
||||
for (Map.Entry<String, BiomeConfigData.WeightedBiomeEntry> biomeEntry : configData.vanillaBiomeEntries.entrySet())
|
||||
{
|
||||
String name = biomeEntry.getKey();
|
||||
BiomeConfigData.WeightedBiomeEntry islandBiomeEntry = biomeEntry.getValue();
|
||||
|
||||
// Replace the default values for this biome with those from the config file
|
||||
if (regDataMap.containsKey(name))
|
||||
{
|
||||
SingleClimateRegistrationData registrationData = regDataMap.get(name);
|
||||
registrationData.setWeight(islandBiomeEntry.weight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static File getConfigDirFile()
|
||||
{
|
||||
Path configPath = FMLPaths.CONFIGDIR.get();
|
||||
Path bopConfigPath = Paths.get(configPath.toAbsolutePath().toString(), "biomesoplenty");
|
||||
return bopConfigPath.toFile();
|
||||
}
|
||||
|
||||
private static File getConfigFile()
|
||||
{
|
||||
return new File(getConfigDirFile(), CONFIG_FILE_NAME);
|
||||
}
|
||||
|
||||
private static BiomeConfigData getConfigData(BiomeConfigData defaultConfigData)
|
||||
{
|
||||
BiomeConfigData configData = JsonUtil.getOrCreateConfigFile(getConfigDirFile(), CONFIG_FILE_NAME, defaultConfigData, new TypeToken<BiomeConfigData>(){}.getType());
|
||||
return configData;
|
||||
}
|
||||
|
||||
private static <T extends IRegistrationData> void defer(RegistrationType type, T data)
|
||||
{
|
||||
if (!deferrances.containsKey(type))
|
||||
deferrances.put(type, Lists.newArrayList());
|
||||
|
||||
List<DeferredRegistration> list = deferrances.get(type);
|
||||
list.add(new DeferredRegistration(type.regFunc, data));
|
||||
}
|
||||
|
||||
public static void finalizeRegistrations(RegistrationType type)
|
||||
{
|
||||
if (!deferrances.containsKey(type))
|
||||
return;
|
||||
|
||||
if (type == RegistrationType.SUB_BIOME)
|
||||
{
|
||||
Set<RegistryKey<Biome>> children = Sets.newHashSet();
|
||||
deferrances.get(RegistrationType.SUB_BIOME).forEach((reg) -> {
|
||||
RegistryKey<Biome> biome = ((SubBiomeRegistrationData)reg.regData).getChild();
|
||||
if (children.contains(biome))
|
||||
{
|
||||
throw new RuntimeException(String.format("Sub biome %s cannot be added to multiple parents", biome.location().toString()));
|
||||
}
|
||||
children.add(biome);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
for (DeferredRegistration reg : deferrances.get(type))
|
||||
{
|
||||
reg.register();
|
||||
}
|
||||
}
|
||||
|
||||
public enum RegistrationType
|
||||
{
|
||||
STANDARD_BIOME((StandardBiomeRegistrationData data) -> {
|
||||
Biome biome = data.getBiome();
|
||||
BiomeMetadata metadata = data.getMetadata();
|
||||
String name = data.getName();
|
||||
|
||||
// Don't register biomes with their weight set to 0, that normally have weights that are non-zero
|
||||
if (!metadata.getWeightMap().isEmpty() && (data.weightMap.isEmpty() || data.weightMap.entrySet().stream().allMatch((entry) -> entry.getValue().equals(0))))
|
||||
{
|
||||
BiomesOPlenty.logger.debug("Weights absent for " + data.getName() + ", disabling...");
|
||||
return;
|
||||
}
|
||||
|
||||
biome.setRegistryName(new ResourceLocation(BiomesOPlenty.MOD_ID, name));
|
||||
ForgeRegistries.BIOMES.register(biome);
|
||||
|
||||
for (Map.Entry<BOPClimates, Integer> entry : data.getWeights().entrySet())
|
||||
{
|
||||
if (entry != null && entry.getValue() > 0)
|
||||
{
|
||||
BOPClimates climate = entry.getKey();
|
||||
int weight = entry.getValue();
|
||||
BiomesOPlenty.logger.debug(String.format("%s weight set to %d for climate %s", name, weight, climate.name()));
|
||||
climate.addBiome(weight, BiomeUtil.createKey(data.getBiome()));
|
||||
}
|
||||
}
|
||||
|
||||
if (data.getMetadata() != null)
|
||||
{
|
||||
ModBiomes.biomeMetadata.put(BiomeUtil.createKey(data.getBiome()), data.getMetadata());
|
||||
}
|
||||
}),
|
||||
TECHNICAL_BIOME((ToggleableStandardBiomeRegistrationData data) -> {
|
||||
Biome biome = data.getBiome();
|
||||
String name = data.getName();
|
||||
|
||||
if (!data.getEnabled())
|
||||
{
|
||||
BiomesOPlenty.logger.debug("Technical biome " + data.getName() + " is disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
biome.setRegistryName(new ResourceLocation(BiomesOPlenty.MOD_ID, name));
|
||||
ForgeRegistries.BIOMES.register(biome);
|
||||
|
||||
if (data.getMetadata() != null)
|
||||
{
|
||||
ModBiomes.biomeMetadata.put(BiomeUtil.createKey(data.getBiome()), data.getMetadata());
|
||||
}
|
||||
}),
|
||||
SUB_BIOME((SubBiomeRegistrationData data) -> {
|
||||
if (data.getWeight() == 0)
|
||||
{
|
||||
BiomesOPlenty.logger.debug("Weights absent for sub biome" + data.getChild().location().toString() + ", disabling...");
|
||||
return;
|
||||
}
|
||||
|
||||
String childName = data.getChild().location().toString();
|
||||
BiomesOPlenty.logger.debug(String.format("Sub biome %s weight set to %d", childName, data.getWeight()));
|
||||
ModBiomes.subBiomes.put(BiomeUtil.getBiomeId(data.getParent()), new ModBiomes.WeightedSubBiome(data.getChild(), data.getRarity(), data.getWeight()));
|
||||
}),
|
||||
ISLAND_BIOME((SingleClimateRegistrationData data) -> {
|
||||
if (data.getWeight() == 0)
|
||||
{
|
||||
BiomesOPlenty.logger.debug("Weights absent for island biome" + data.getBiome().location().toString() + ", disabling...");
|
||||
return;
|
||||
}
|
||||
|
||||
String biomeName = data.getBiome().location().toString();
|
||||
BiomesOPlenty.logger.debug(String.format("Island biome %s weight set to %d for climate %s", biomeName, data.getWeight(), data.getClimate().name()));
|
||||
ModBiomes.islandBiomeIds.add(BiomeUtil.getBiomeId(data.getBiome()));
|
||||
data.getClimate().addIslandBiome(data.getWeight(), data.getBiome());
|
||||
}),
|
||||
VANILLA_BIOME((SingleClimateRegistrationData data) -> {
|
||||
if (data.getWeight() == 0)
|
||||
{
|
||||
BiomesOPlenty.logger.debug("Weights absent for vanilla biome" + data.getBiome().location().toString() + ", disabling...");
|
||||
return;
|
||||
}
|
||||
|
||||
data.getClimate().addBiome(data.getWeight(), data.getBiome());
|
||||
});
|
||||
|
||||
public final Consumer<? extends IRegistrationData> regFunc;
|
||||
|
||||
RegistrationType(Consumer<? extends IRegistrationData> regFunc)
|
||||
{
|
||||
this.regFunc = regFunc;
|
||||
}
|
||||
}
|
||||
|
||||
private interface IRegistrationData
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private static abstract class TemplateRegistrationData implements IRegistrationData
|
||||
{
|
||||
private final Biome biome;
|
||||
private final BiomeMetadata metadata;
|
||||
|
||||
public TemplateRegistrationData(BiomeTemplate template)
|
||||
{
|
||||
this.biome = template.build();
|
||||
this.metadata = template.buildMetadata();
|
||||
}
|
||||
|
||||
public TemplateRegistrationData(Biome biome)
|
||||
{
|
||||
this.biome = biome;
|
||||
this.metadata = null;
|
||||
}
|
||||
|
||||
public Biome getBiome()
|
||||
{
|
||||
return this.biome;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BiomeMetadata getMetadata()
|
||||
{
|
||||
return this.metadata;
|
||||
}
|
||||
}
|
||||
|
||||
private static class StandardBiomeRegistrationData extends TemplateRegistrationData
|
||||
{
|
||||
private final String name;
|
||||
private Map<BOPClimates, Integer> weightMap;
|
||||
|
||||
public StandardBiomeRegistrationData(BiomeTemplate biome, String name)
|
||||
{
|
||||
super(biome);
|
||||
this.name = name;
|
||||
this.weightMap = Maps.newHashMap(this.getMetadata().getWeightMap());
|
||||
this.ensureSingleWeight();
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public ImmutableMap<BOPClimates, Integer> getWeights()
|
||||
{
|
||||
return ImmutableMap.copyOf(this.weightMap);
|
||||
}
|
||||
|
||||
public int getWeight(BOPClimates climate)
|
||||
{
|
||||
return this.weightMap.get(climate);
|
||||
}
|
||||
|
||||
public void setWeight(BOPClimates climate, int weight)
|
||||
{
|
||||
this.weightMap.put(climate, weight);
|
||||
this.ensureSingleWeight();
|
||||
}
|
||||
|
||||
public Pair<BOPClimates, Integer> getPrimaryWeight()
|
||||
{
|
||||
List<Pair<BOPClimates, Integer>> pairs = Lists.newArrayList();
|
||||
this.weightMap.entrySet().forEach((entry) -> pairs.add(Pair.of(entry.getKey(), entry.getValue())));
|
||||
return pairs.get(0);
|
||||
}
|
||||
|
||||
public void setPrimaryWeight(int value)
|
||||
{
|
||||
BOPClimates climate = this.getPrimaryWeight().getKey();
|
||||
this.setWeight(climate, value);
|
||||
}
|
||||
|
||||
// This limitation is enforced for config file simplicity, and because we don't need it at this time
|
||||
private void ensureSingleWeight()
|
||||
{
|
||||
if (this.weightMap.size() > 1)
|
||||
{
|
||||
throw new RuntimeException(String.format("%s cannot be assigned to multiple climates!\n%s", new ResourceLocation(BiomesOPlenty.MOD_ID, name).toString(), this.weightMap));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class SubBiomeRegistrationData implements IRegistrationData
|
||||
{
|
||||
private final RegistryKey<Biome> parent;
|
||||
private final RegistryKey<Biome> child;
|
||||
private int weight;
|
||||
private float rarity;
|
||||
|
||||
public SubBiomeRegistrationData(RegistryKey<Biome> parent, RegistryKey<Biome> child, int weight, float rarity)
|
||||
{
|
||||
this.parent = parent;
|
||||
this.child = child;
|
||||
this.weight = weight;
|
||||
this.rarity = rarity;
|
||||
}
|
||||
|
||||
public RegistryKey<Biome> getParent()
|
||||
{
|
||||
return this.parent;
|
||||
}
|
||||
|
||||
public RegistryKey<Biome> getChild()
|
||||
{
|
||||
return this.child;
|
||||
}
|
||||
|
||||
public int getWeight()
|
||||
{
|
||||
return this.weight;
|
||||
}
|
||||
|
||||
public void setWeight(int weight)
|
||||
{
|
||||
this.weight = weight;
|
||||
}
|
||||
|
||||
public float getRarity()
|
||||
{
|
||||
return this.rarity;
|
||||
}
|
||||
|
||||
public void setRarity(float rarity)
|
||||
{
|
||||
this.rarity = rarity;
|
||||
}
|
||||
}
|
||||
|
||||
private static class SingleClimateRegistrationData implements IRegistrationData
|
||||
{
|
||||
private final BOPClimates climate;
|
||||
private final RegistryKey<Biome> biome;
|
||||
private int weight;
|
||||
|
||||
public SingleClimateRegistrationData(RegistryKey<Biome> biome, BOPClimates climate, int weight)
|
||||
{
|
||||
this.biome = biome;
|
||||
this.climate = climate;
|
||||
this.weight = weight;
|
||||
}
|
||||
|
||||
public RegistryKey<Biome> getBiome()
|
||||
{
|
||||
return this.biome;
|
||||
}
|
||||
|
||||
public BOPClimates getClimate()
|
||||
{
|
||||
return this.climate;
|
||||
}
|
||||
|
||||
public int getWeight()
|
||||
{
|
||||
return this.weight;
|
||||
}
|
||||
|
||||
public void setWeight(int weight)
|
||||
{
|
||||
this.weight = weight;
|
||||
}
|
||||
}
|
||||
|
||||
private static class ToggleableStandardBiomeRegistrationData extends TemplateRegistrationData
|
||||
{
|
||||
private final String name;
|
||||
private boolean enabled;
|
||||
|
||||
public ToggleableStandardBiomeRegistrationData(BiomeTemplate biome, String name, boolean enabled)
|
||||
{
|
||||
super(biome);
|
||||
this.name = name;
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public boolean getEnabled()
|
||||
{
|
||||
return this.enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled)
|
||||
{
|
||||
this.enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DeferredRegistration<T extends IRegistrationData>
|
||||
{
|
||||
private final Consumer<T> regFunc;
|
||||
private final T regData;
|
||||
|
||||
public DeferredRegistration(Consumer<T> regFunc, T regData)
|
||||
{
|
||||
this.regFunc = regFunc;
|
||||
this.regData = regData;
|
||||
}
|
||||
|
||||
public void register()
|
||||
{
|
||||
this.regFunc.accept(this.regData);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import net.minecraft.util.RegistryKey;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.BiomeGenerationSettings;
|
||||
import net.minecraft.world.biome.Biomes;
|
||||
import net.minecraft.world.biome.MobSpawnInfo;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
public class BiomeTemplate
|
||||
{
|
||||
private Map<BOPClimates, Integer> weightMap = new HashMap<BOPClimates, Integer>();
|
||||
private RegistryKey<Biome> beachBiome = Biomes.BEACH;
|
||||
private RegistryKey<Biome> riverBiome = Biomes.RIVER;
|
||||
private BiFunction<Double, Double, Integer> foliageColorFunction;
|
||||
private BiFunction<Double, Double, Integer> grassColorFunction;
|
||||
private BiFunction<Double, Double, Integer> waterColorFunction;
|
||||
|
||||
protected void configureBiome(Biome.Builder builder) {}
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder) {}
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder) {}
|
||||
|
||||
protected void configureDefaultMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
builder.setPlayerCanSpawn();
|
||||
}
|
||||
|
||||
public final Biome build()
|
||||
{
|
||||
Biome.Builder biomeBuilder = new Biome.Builder();
|
||||
|
||||
// Configure the biome generation
|
||||
BiomeGenerationSettings.Builder biomeGenBuilder = new BiomeGenerationSettings.Builder();
|
||||
this.configureGeneration(biomeGenBuilder);
|
||||
biomeBuilder.generationSettings(biomeGenBuilder.build());
|
||||
|
||||
// Configure mob spawning
|
||||
MobSpawnInfo.Builder mobSpawnBuilder = new MobSpawnInfo.Builder();
|
||||
this.configureDefaultMobSpawns(mobSpawnBuilder);
|
||||
this.configureMobSpawns(mobSpawnBuilder);
|
||||
biomeBuilder.mobSpawnSettings(mobSpawnBuilder.build());
|
||||
|
||||
// Configure and build the biome
|
||||
this.configureBiome(biomeBuilder);
|
||||
return biomeBuilder.build();
|
||||
}
|
||||
|
||||
public final BiomeMetadata buildMetadata()
|
||||
{
|
||||
return new BiomeMetadata(this.weightMap, this.beachBiome, this.riverBiome, this.foliageColorFunction, this.grassColorFunction, this.waterColorFunction);
|
||||
}
|
||||
|
||||
public void addWeight(BOPClimates climate, int weight)
|
||||
{
|
||||
this.weightMap.put(climate, weight);
|
||||
}
|
||||
|
||||
public void setBeachBiome(RegistryKey<Biome> biome)
|
||||
{
|
||||
this.beachBiome = biome;
|
||||
}
|
||||
|
||||
public void setRiverBiome(RegistryKey<Biome> biome)
|
||||
{
|
||||
this.riverBiome = biome;
|
||||
}
|
||||
|
||||
public void setFoliageColorFunction(BiFunction<Double, Double, Integer> func)
|
||||
{
|
||||
this.foliageColorFunction = func;
|
||||
}
|
||||
|
||||
public void setGrassColorFunction(BiFunction<Double, Double, Integer> func)
|
||||
{
|
||||
this.grassColorFunction = func;
|
||||
}
|
||||
|
||||
public void setWaterColorFunction(BiFunction<Double, Double, Integer> func)
|
||||
{
|
||||
this.waterColorFunction = func;
|
||||
}
|
||||
|
||||
public static int calculateSkyColor(float temperature)
|
||||
{
|
||||
float lvt_1_1_ = temperature / 3.0F;
|
||||
lvt_1_1_ = MathHelper.clamp(lvt_1_1_, -1.0F, 1.0F);
|
||||
return MathHelper.hsvToRgb(0.62222224F - lvt_1_1_ * 0.05F, 0.5F + lvt_1_1_ * 0.1F, 1.0F);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import biomesoplenty.api.biome.BiomeOwner;
|
||||
import biomesoplenty.api.biome.IExtendedBiome;
|
||||
import biomesoplenty.api.biome.generation.GenerationManager;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.IGenerator;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
|
||||
public class ExtendedBiomeRegistry
|
||||
{
|
||||
private static Map<BiomeGenBase, BiomeExtension> externalExtensions = new HashMap();
|
||||
|
||||
public static boolean isRegistered(BiomeGenBase biome)
|
||||
{
|
||||
return biome.biomeID != -1;
|
||||
}
|
||||
|
||||
public static BiomeExtension createExtension(BiomeGenBase biome)
|
||||
{
|
||||
return externalExtensions.put(biome, new BiomeExtension(biome));
|
||||
}
|
||||
|
||||
public static IExtendedBiome getExtension(BiomeGenBase biome)
|
||||
{
|
||||
if (biome instanceof IExtendedBiome)
|
||||
{
|
||||
return (IExtendedBiome)biome;
|
||||
}
|
||||
else if (externalExtensions.containsKey(biome))
|
||||
{
|
||||
return externalExtensions.get(biome);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class BiomeExtension implements IExtendedBiome
|
||||
{
|
||||
public final BiomeGenBase biome;
|
||||
private GenerationManager generationManager = new GenerationManager();
|
||||
private Map<BOPClimates, Integer> weightMap = new HashMap<BOPClimates, Integer>();
|
||||
|
||||
private BiomeExtension(BiomeGenBase biome)
|
||||
{
|
||||
this.biome = biome;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeOwner getBiomeOwner()
|
||||
{
|
||||
return BiomeOwner.OTHER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addGenerator(String name, GeneratorStage stage, IGenerator generator)
|
||||
{
|
||||
this.generationManager.addGenerator(name, stage, generator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenerationManager getGenerationManager()
|
||||
{
|
||||
return this.generationManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<BOPClimates, Integer> getWeightMap()
|
||||
{
|
||||
return this.weightMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWeight(BOPClimates climate, int weight)
|
||||
{
|
||||
this.weightMap.put(climate, weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearWeights()
|
||||
{
|
||||
this.weightMap.clear();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome;
|
||||
|
||||
import net.minecraft.world.biome.MobSpawnInfo;
|
||||
|
||||
public class NetherBiomeTemplate extends BiomeTemplate
|
||||
{
|
||||
protected void configureDefaultMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
package biomesoplenty.common.biome.nether;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.biome.NetherBiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import net.minecraft.client.audio.BackgroundMusicTracks;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.particles.ParticleTypes;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.carver.ConfiguredCarvers;
|
||||
import net.minecraft.world.gen.feature.Features;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilders;
|
||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
|
||||
|
||||
public class CrystallineChasmBiome extends NetherBiomeTemplate
|
||||
{
|
||||
public CrystallineChasmBiome()
|
||||
{
|
||||
this.addWeight(BOPClimates.NETHER, 5);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.NONE).biomeCategory(Biome.Category.NETHER).depth(0.1F).scale(0.2F).temperature(2.0F).downfall(0.0F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x59002C).skyColor(calculateSkyColor(2.0F)).ambientParticle(new ParticleEffectAmbience(ParticleTypes.INSTANT_EFFECT, 0.001785F)).ambientLoopSound(SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP).ambientMoodSound(new MoodSoundAmbience(SoundEvents.AMBIENT_BASALT_DELTAS_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new SoundAdditionsAmbience(SoundEvents.AMBIENT_BASALT_DELTAS_ADDITIONS, 0.0111D)).backgroundMusic(BackgroundMusicTracks.createGameMusic(SoundEvents.MUSIC_BIOME_NETHER_WASTES)).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(ConfiguredSurfaceBuilders.NETHER);
|
||||
|
||||
//Terrain
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_NETHER);
|
||||
builder.addStructureStart(StructureFeatures.NETHER_BRIDGE);
|
||||
builder.addStructureStart(StructureFeatures.BASTION_REMNANT);
|
||||
builder.addCarver(GenerationStage.Carving.AIR, ConfiguredCarvers.NETHER_CAVE);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_OPEN);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_FIRE);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_SOUL_FIRE);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.GLOWSTONE_EXTRA);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.GLOWSTONE);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.BROWN_MUSHROOM_NETHER);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.RED_MUSHROOM_NETHER);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.ORE_MAGMA);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_CLOSED);
|
||||
|
||||
//Decoration
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.LARGE_CRYSTAL);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.SMALL_CRYSTAL);
|
||||
|
||||
DefaultBiomeFeatures.addNetherDefaultOres(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
//Entities
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.STRIDER, 60, 1, 2));
|
||||
}
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
package biomesoplenty.common.biome.nether;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.biome.NetherBiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import net.minecraft.client.audio.BackgroundMusicTracks;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.particles.ParticleTypes;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.carver.ConfiguredCarvers;
|
||||
import net.minecraft.world.gen.feature.Features;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilders;
|
||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
|
||||
|
||||
public class UndergrowthBiome extends NetherBiomeTemplate
|
||||
{
|
||||
public UndergrowthBiome()
|
||||
{
|
||||
this.addWeight(BOPClimates.NETHER, 10);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.NONE).biomeCategory(Biome.Category.NETHER).depth(0.1F).scale(0.2F).temperature(2.0F).downfall(0.0F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x1C2109).skyColor(calculateSkyColor(2.0F)).ambientParticle(new ParticleEffectAmbience(ParticleTypes.MYCELIUM, 0.00714F)).ambientLoopSound(SoundEvents.AMBIENT_WARPED_FOREST_LOOP).ambientMoodSound(new MoodSoundAmbience(SoundEvents.AMBIENT_CRIMSON_FOREST_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new SoundAdditionsAmbience(SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS, 0.0111D)).backgroundMusic(BackgroundMusicTracks.createGameMusic(SoundEvents.MUSIC_BIOME_NETHER_WASTES)).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(ConfiguredSurfaceBuilders.NETHER);
|
||||
|
||||
//Terrain
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_NETHER);
|
||||
builder.addStructureStart(StructureFeatures.NETHER_BRIDGE);
|
||||
builder.addStructureStart(StructureFeatures.BASTION_REMNANT);
|
||||
builder.addCarver(GenerationStage.Carving.AIR, ConfiguredCarvers.NETHER_CAVE);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_OPEN);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_FIRE);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.PATCH_SOUL_FIRE);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.GLOWSTONE_EXTRA);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.GLOWSTONE);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.BROWN_MUSHROOM_NETHER);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.RED_MUSHROOM_NETHER);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.ORE_MAGMA);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_CLOSED);
|
||||
|
||||
//Vegetation
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.UNDERGROWTH_TREES);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.NETHER_BRAMBLE);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.UNDERGROWTH_FLOWERS);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.SPROUTS_UNDERGROWTH);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.DEAD_GRASS_45);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.NETHER_VINES);
|
||||
|
||||
DefaultBiomeFeatures.addNetherDefaultOres(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
//Entities
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.GHAST, 50, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.MAGMA_CUBE, 2, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.HOGLIN, 9, 3, 4));
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.STRIDER, 60, 1, 2));
|
||||
}
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
package biomesoplenty.common.biome.nether;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.biome.NetherBiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPConfiguredSurfaceBuilders;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPSurfaceBuilders;
|
||||
import net.minecraft.client.audio.BackgroundMusicTracks;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.particles.ParticleTypes;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.carver.ConfiguredCarvers;
|
||||
import net.minecraft.world.gen.feature.Features;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
|
||||
|
||||
public class VisceralHeapBiome extends NetherBiomeTemplate
|
||||
{
|
||||
public VisceralHeapBiome()
|
||||
{
|
||||
this.addWeight(BOPClimates.NETHER, 7);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.NONE).biomeCategory(Biome.Category.NETHER).depth(0.1F).scale(0.2F).temperature(2.0F).downfall(0.0F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x601F18).skyColor(calculateSkyColor(2.0F)).ambientParticle(new ParticleEffectAmbience(ParticleTypes.FALLING_LAVA, 0.001785F)).ambientLoopSound(SoundEvents.AMBIENT_NETHER_WASTES_LOOP).ambientMoodSound(new MoodSoundAmbience(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new SoundAdditionsAmbience(SoundEvents.AMBIENT_CRIMSON_FOREST_ADDITIONS, 0.0111D)).backgroundMusic(BackgroundMusicTracks.createGameMusic(SoundEvents.MUSIC_BIOME_CRIMSON_FOREST)).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(BOPConfiguredSurfaceBuilders.VISCERAL_HEAP);
|
||||
|
||||
//Terrain
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_NETHER);
|
||||
builder.addStructureStart(StructureFeatures.NETHER_BRIDGE);
|
||||
builder.addStructureStart(StructureFeatures.BASTION_REMNANT);
|
||||
builder.addCarver(GenerationStage.Carving.AIR, ConfiguredCarvers.NETHER_CAVE);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_OPEN);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.ORE_MAGMA);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Features.SPRING_CLOSED);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.FLESH_TENDON);
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.BONE_SPINE);
|
||||
|
||||
DefaultBiomeFeatures.addNetherDefaultOres(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
//Entities
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.GHAST, 50, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIFIED_PIGLIN, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.STRIDER, 60, 1, 2));
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package biomesoplenty.common.biome.nether;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.biome.NetherBiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPConfiguredSurfaceBuilders;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPSurfaceBuilders;
|
||||
import net.minecraft.client.audio.BackgroundMusicTracks;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.particles.ParticleTypes;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.carver.ConfiguredCarvers;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
|
||||
public class WitheredAbyssBiome extends NetherBiomeTemplate
|
||||
{
|
||||
public WitheredAbyssBiome()
|
||||
{
|
||||
this.addWeight(BOPClimates.NETHER, 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.NONE).biomeCategory(Biome.Category.NETHER).depth(0.1F).scale(0.2F).temperature(2.0F).downfall(0.0F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x09060F).skyColor(calculateSkyColor(2.0F)).ambientParticle(new ParticleEffectAmbience(ParticleTypes.SMOKE, 0.00357F)).ambientLoopSound(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_LOOP).ambientMoodSound(new MoodSoundAmbience(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_MOOD, 6000, 8, 2.0D)).backgroundMusic(BackgroundMusicTracks.createGameMusic(SoundEvents.MUSIC_BIOME_BASALT_DELTAS)).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(BOPConfiguredSurfaceBuilders.WITHERED_ABYSS);
|
||||
|
||||
//Terrain
|
||||
builder.addStructureStart(StructureFeatures.NETHER_BRIDGE);
|
||||
builder.addStructureStart(StructureFeatures.BASTION_REMNANT);
|
||||
builder.addCarver(GenerationStage.Carving.AIR, ConfiguredCarvers.NETHER_CAVE);
|
||||
|
||||
//Decoration
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, BOPConfiguredFeatures.OBSIDIAN_SPLATTER);
|
||||
|
||||
DefaultBiomeFeatures.addNetherDefaultOres(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
//Entities
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 1, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.WITHER_SKELETON, 1, 1, 1));
|
||||
}
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.biome.BiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPConfiguredSurfaceBuilders;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPSurfaceBuilders;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
|
||||
public class AlpsBiome extends BiomeTemplate
|
||||
{
|
||||
public AlpsBiome()
|
||||
{
|
||||
this.addWeight(BOPClimates.ICE_CAP, 5);
|
||||
this.setBeachBiome(null);
|
||||
this.setRiverBiome(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.SNOW).biomeCategory(Biome.Category.ICY).depth(7.5F).scale(0.2F).temperature(-0.25F).downfall(0.3F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(12638463).skyColor(calculateSkyColor(-0.25F)).ambientMoodSound(MoodSoundAmbience.LEGACY_CAVE_SETTINGS).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(BOPConfiguredSurfaceBuilders.DEEP_SNOW);
|
||||
|
||||
// Structures
|
||||
DefaultBiomeFeatures.addDefaultOverworldLandStructures(builder);
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_MOUNTAIN);
|
||||
|
||||
// Underground
|
||||
DefaultBiomeFeatures.addDefaultCarvers(builder);
|
||||
DefaultBiomeFeatures.addDefaultMonsterRoom(builder);
|
||||
DefaultBiomeFeatures.addDefaultUndergroundVariety(builder);
|
||||
DefaultBiomeFeatures.addDefaultOres(builder);
|
||||
DefaultBiomeFeatures.addDefaultSoftDisks(builder);
|
||||
|
||||
// Other Features
|
||||
DefaultBiomeFeatures.addDefaultSprings(builder);
|
||||
DefaultBiomeFeatures.addExtraEmeralds(builder);
|
||||
DefaultBiomeFeatures.addInfestedStone(builder);
|
||||
DefaultBiomeFeatures.addSurfaceFreezing(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
// Entities
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.LLAMA, 5, 4, 6));
|
||||
builder.addSpawn(EntityClassification.AMBIENT, new MobSpawnInfo.Spawners(EntityType.BAT, 10, 8, 8));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SKELETON, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SLIME, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 10, 1, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.STRAY, 80, 4, 4));
|
||||
}
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import biomesoplenty.common.biome.BiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPConfiguredSurfaceBuilders;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
|
||||
|
||||
public class AlpsFoothillsBiome extends BiomeTemplate
|
||||
{
|
||||
public AlpsFoothillsBiome()
|
||||
{
|
||||
this.setBeachBiome(null);
|
||||
this.setRiverBiome(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.SNOW).biomeCategory(Biome.Category.ICY).depth(3.0F).scale(0.3F).temperature(-0.25F).downfall(0.3F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(12638463).skyColor(calculateSkyColor(-0.25F)).ambientMoodSound(MoodSoundAmbience.LEGACY_CAVE_SETTINGS).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(BOPConfiguredSurfaceBuilders.ALPS_FOOTHILLS);
|
||||
|
||||
// Structures
|
||||
DefaultBiomeFeatures.addDefaultOverworldLandStructures(builder);
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_MOUNTAIN);
|
||||
|
||||
// Underground
|
||||
DefaultBiomeFeatures.addDefaultCarvers(builder);
|
||||
DefaultBiomeFeatures.addDefaultMonsterRoom(builder);
|
||||
DefaultBiomeFeatures.addDefaultUndergroundVariety(builder);
|
||||
DefaultBiomeFeatures.addDefaultOres(builder);
|
||||
DefaultBiomeFeatures.addDefaultSoftDisks(builder);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Vegetation
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.ALPS_FOOTHILLS_TREES);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Other Features
|
||||
DefaultBiomeFeatures.addDefaultSprings(builder);
|
||||
DefaultBiomeFeatures.addExtraEmeralds(builder);
|
||||
DefaultBiomeFeatures.addInfestedStone(builder);
|
||||
DefaultBiomeFeatures.addSurfaceFreezing(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
// Entities
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.LLAMA, 5, 4, 6));
|
||||
builder.addSpawn(EntityClassification.AMBIENT, new MobSpawnInfo.Spawners(EntityType.BAT, 10, 8, 8));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SPIDER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE, 95, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE_VILLAGER, 5, 1, 1));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SKELETON, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.CREEPER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SLIME, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 10, 1, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.WITCH, 5, 1, 1));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.STRAY, 80, 4, 4));
|
||||
}
|
||||
}
|
|
@ -1,95 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.biome.BiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.feature.Features;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilders;
|
||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
|
||||
|
||||
public class BambooBlossomGroveBiome extends BiomeTemplate
|
||||
{
|
||||
public BambooBlossomGroveBiome()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.RAIN).biomeCategory(Biome.Category.FOREST).depth(0.05F).scale(0.05F).temperature(0.6F).downfall(0.9F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(12638463).skyColor(calculateSkyColor(0.6F)).grassColorOverride(0x85CE71).foliageColorOverride(0x63BF66).ambientMoodSound(MoodSoundAmbience.LEGACY_CAVE_SETTINGS).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(ConfiguredSurfaceBuilders.GRASS);
|
||||
|
||||
// Structures
|
||||
DefaultBiomeFeatures.addDefaultOverworldLandStructures(builder);
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_STANDARD);
|
||||
|
||||
// Underground
|
||||
DefaultBiomeFeatures.addDefaultCarvers(builder);
|
||||
DefaultBiomeFeatures.addDefaultLakes(builder);
|
||||
DefaultBiomeFeatures.addDefaultMonsterRoom(builder);
|
||||
DefaultBiomeFeatures.addDefaultUndergroundVariety(builder);
|
||||
DefaultBiomeFeatures.addDefaultOres(builder);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Vegetation
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.BAMBOO_BLOSSOM_GROVE_TREES);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.CHERRY_BLOSSOM_GROVE_FLOWERS);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.CLOVER_3);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.LILAC_2);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.LILY_PAD_5);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.SHORT_BAMBOO_5);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.STANDARD_GRASS_12);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.BROWN_MUSHROOM_NORMAL);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.PATCH_SUGAR_CANE);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.RED_MUSHROOM_NORMAL);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.SEAGRASS_COLD);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Other Features
|
||||
DefaultBiomeFeatures.addDefaultSprings(builder);
|
||||
DefaultBiomeFeatures.addSurfaceFreezing(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
// Entities
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.SHEEP, 12, 4, 4));
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.PIG, 10, 4, 4));
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.CHICKEN, 10, 4, 4));
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.COW, 8, 4, 4));
|
||||
builder.addSpawn(EntityClassification.CREATURE, new MobSpawnInfo.Spawners(EntityType.PANDA, 80, 1, 2));
|
||||
builder.addSpawn(EntityClassification.AMBIENT, new MobSpawnInfo.Spawners(EntityType.BAT, 10, 8, 8));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SPIDER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE, 95, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE_VILLAGER, 5, 1, 1));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SKELETON, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.CREEPER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SLIME, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 10, 1, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.WITCH, 5, 1, 1));
|
||||
}
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import biomesoplenty.api.biome.BOPBiomes;
|
||||
import biomesoplenty.api.enums.BOPClimates;
|
||||
import biomesoplenty.common.biome.BiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.feature.*;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
|
||||
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilders;
|
||||
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
|
||||
|
||||
public class BayouBiome extends BiomeTemplate
|
||||
{
|
||||
public BayouBiome()
|
||||
{
|
||||
this.addWeight(BOPClimates.SUBTROPICAL, 10);
|
||||
this.setBeachBiome(BOPBiomes.bayou_mangrove);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.RAIN).biomeCategory(Biome.Category.SWAMP).depth(-0.3F).scale(0.0F).temperature(0.95F).downfall(0.9F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(0x62AF84).waterFogColor(0x0C211C).fogColor(12638463).skyColor(calculateSkyColor(0.95F)).grassColorOverride(0x6FAA50).foliageColorOverride(0x8BDB67).ambientMoodSound(MoodSoundAmbience.LEGACY_CAVE_SETTINGS).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(ConfiguredSurfaceBuilders.GRASS);
|
||||
|
||||
// Structures
|
||||
DefaultBiomeFeatures.addDefaultOverworldLandStructures(builder);
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_SWAMP);
|
||||
|
||||
// Underground
|
||||
DefaultBiomeFeatures.addDefaultCarvers(builder);
|
||||
DefaultBiomeFeatures.addDefaultLakes(builder);
|
||||
DefaultBiomeFeatures.addDefaultMonsterRoom(builder);
|
||||
DefaultBiomeFeatures.addDefaultUndergroundVariety(builder);
|
||||
DefaultBiomeFeatures.addDefaultOres(builder);
|
||||
DefaultBiomeFeatures.addSwampClayDisk(builder);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, BOPConfiguredFeatures.MUD_DISK);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Vegetation
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.BAYOU_TREES);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.CATTAIL_6);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.FERN_GRASS_8);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.LARGE_FERN_7);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.LILY_PAD_10);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.TALL_GRASS_6);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.BROWN_MUSHROOM_NORMAL);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.PATCH_SUGAR_CANE);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.RED_MUSHROOM_NORMAL);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.SEAGRASS_SWAMP);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Other Features
|
||||
DefaultBiomeFeatures.addDefaultSprings(builder);
|
||||
DefaultBiomeFeatures.addSurfaceFreezing(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
// Entities
|
||||
builder.addSpawn(EntityClassification.AMBIENT, new MobSpawnInfo.Spawners(EntityType.BAT, 10, 8, 8));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SPIDER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE, 95, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE_VILLAGER, 5, 1, 1));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SKELETON, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.CREEPER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SLIME, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 10, 1, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.WITCH, 5, 1, 1));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SLIME, 1, 1, 1));
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014-2019, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import biomesoplenty.common.biome.BiomeTemplate;
|
||||
import biomesoplenty.common.world.gen.feature.BOPConfiguredFeatures;
|
||||
import biomesoplenty.common.world.gen.surfacebuilders.BOPConfiguredSurfaceBuilders;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.world.biome.*;
|
||||
import net.minecraft.world.gen.GenerationStage;
|
||||
import net.minecraft.world.gen.feature.Features;
|
||||
import net.minecraft.world.gen.feature.structure.StructureFeatures;
|
||||
|
||||
public class BayouMangroveBiome extends BiomeTemplate
|
||||
{
|
||||
public BayouMangroveBiome()
|
||||
{
|
||||
this.setBeachBiome(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureBiome(Biome.Builder builder)
|
||||
{
|
||||
builder.precipitation(Biome.RainType.RAIN).biomeCategory(Biome.Category.SWAMP).depth(-0.175F).scale(-0.075F).temperature(0.95F).downfall(0.9F);
|
||||
|
||||
builder.specialEffects((new BiomeAmbience.Builder()).waterColor(0x62AF84).waterFogColor(0x0C211C).fogColor(12638463).skyColor(calculateSkyColor(0.95F)).grassColorOverride(0x6FAA50).foliageColorOverride(0x8BDB67).ambientMoodSound(MoodSoundAmbience.LEGACY_CAVE_SETTINGS).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureGeneration(BiomeGenerationSettings.Builder builder)
|
||||
{
|
||||
builder.surfaceBuilder(BOPConfiguredSurfaceBuilders.MANGROVE);
|
||||
|
||||
// Structures
|
||||
DefaultBiomeFeatures.addDefaultOverworldLandStructures(builder);
|
||||
builder.addStructureStart(StructureFeatures.RUINED_PORTAL_SWAMP);
|
||||
|
||||
// Underground
|
||||
DefaultBiomeFeatures.addDefaultCarvers(builder);
|
||||
DefaultBiomeFeatures.addDefaultLakes(builder);
|
||||
|
||||
builder.addFeature(GenerationStage.Decoration.LAKES, BOPConfiguredFeatures.WATER_LAKE_COMMON);
|
||||
|
||||
DefaultBiomeFeatures.addDefaultMonsterRoom(builder);
|
||||
DefaultBiomeFeatures.addDefaultUndergroundVariety(builder);
|
||||
DefaultBiomeFeatures.addDefaultOres(builder);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Vegetation
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.MANGROVE_ROOTS);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.SPROUTS_75);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, BOPConfiguredFeatures.STANDARD_GRASS_12);
|
||||
builder.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.SEAGRASS_RIVER);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// Other Features
|
||||
DefaultBiomeFeatures.addDefaultSprings(builder);
|
||||
DefaultBiomeFeatures.addSurfaceFreezing(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMobSpawns(MobSpawnInfo.Builder builder)
|
||||
{
|
||||
// Entities
|
||||
builder.addSpawn(EntityClassification.WATER_AMBIENT, new MobSpawnInfo.Spawners(EntityType.COD, 10, 3, 6));
|
||||
builder.addSpawn(EntityClassification.WATER_AMBIENT, new MobSpawnInfo.Spawners(EntityType.TROPICAL_FISH, 5, 8, 8));
|
||||
builder.addSpawn(EntityClassification.WATER_CREATURE, new MobSpawnInfo.Spawners(EntityType.SQUID, 5, 4, 4));
|
||||
builder.addSpawn(EntityClassification.AMBIENT, new MobSpawnInfo.Spawners(EntityType.BAT, 10, 8, 8));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SPIDER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE, 95, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ZOMBIE_VILLAGER, 5, 1, 1));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SKELETON, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.CREEPER, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.SLIME, 100, 4, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 10, 1, 4));
|
||||
builder.addSpawn(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.WITCH, 5, 1, 1));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
|
||||
public class BiomeGenAlps extends BOPBiome
|
||||
{
|
||||
private static final Height biomeHeight = new Height(8.0F, 0.025F);
|
||||
|
||||
public BiomeGenAlps()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(198).heightVariation(12, 12).octaves(1, 1, 2, 2, 3, 3);
|
||||
|
||||
this.setHeight(biomeHeight);
|
||||
this.setColor(13421772);
|
||||
this.setEnableSnow();
|
||||
this.setTemperatureRainfall(0.0F, 0.5F);
|
||||
|
||||
this.addWeight(BOPClimates.BOREAL, 5);
|
||||
this.addWeight(BOPClimates.COLD_DESERT, 5);
|
||||
|
||||
this.topBlock = Blocks.snow.getDefaultState();
|
||||
this.fillerBlock = Blocks.snow.getDefaultState();
|
||||
|
||||
// gem
|
||||
this.addGenerator("emeralds", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(Blocks.emerald_ore.getDefaultState()).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("emeralds");}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
|
||||
public class BiomeGenArctic extends BOPBiome
|
||||
{
|
||||
public BiomeGenArctic()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(10, 6);
|
||||
|
||||
this.setColor(14540253);
|
||||
this.setEnableSnow();
|
||||
this.setTemperatureRainfall(0.05F, 0.5F);
|
||||
|
||||
this.addWeight(BOPClimates.ICE_CAP, 30);
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
|
||||
// gem
|
||||
this.addGenerator("tanzanite", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.TANZANITE).create());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("tanzanite");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 11176526;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 11903827;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,141 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.BlockDirt;
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.ChunkPrimer;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPPlant;
|
||||
import biomesoplenty.common.block.BlockBOPCoral;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.util.config.BOPConfig.IConfigObj;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBulbTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorTwigletTree;
|
||||
|
||||
public class BiomeGenBambooForest extends BOPBiome
|
||||
{
|
||||
|
||||
public IBlockState usualTopBlock;
|
||||
public IBlockState alternateTopBlock;
|
||||
|
||||
public BiomeGenBambooForest()
|
||||
{
|
||||
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(10, 30);
|
||||
|
||||
this.setColor(0xA3E053);
|
||||
this.setTemperatureRainfall(1.2F, 0.9F);
|
||||
this.waterColorMultiplier = 0x00ff66;
|
||||
|
||||
this.addWeight(BOPClimates.TROPICAL, 5);
|
||||
|
||||
this.topBlock = Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.PODZOL);
|
||||
this.usualTopBlock = this.topBlock;
|
||||
this.alternateTopBlock = Blocks.grass.getDefaultState();
|
||||
|
||||
// trees & logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(30);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("bamboo", 2, (new GeneratorBulbTree.Builder()).minHeight(6).maxHeight(18).log(BOPBlocks.bamboo.getDefaultState()).leaves(BOPTrees.BAMBOO).create());
|
||||
treeGenerator.add("bamboo_thin", 1, (new GeneratorTwigletTree.Builder()).minHeight(2).maxHeight(8).leafChance(0.3F).log(BOPBlocks.bamboo.getDefaultState()).leaves(BOPTrees.BAMBOO).create());
|
||||
treeGenerator.add("oak_bush", 1, (new GeneratorBush.Builder()).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(10);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 1, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("doublegrass", 2, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.GRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(3.0F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("ferns", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(4.0F).with(BlockTallGrass.EnumType.FERN).create());
|
||||
this.addGenerator("river_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(5.0F).generationAttempts(24).placeOn(BlockQueries.litFertileWaterside).with(BlockBOPPlant.paging.getVariantState(BOPPlants.RIVERCANE)).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("algae", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(4.0F).replace(Blocks.water).with(BOPBlocks.coral.getDefaultState().withProperty(BlockBOPCoral.VARIANT, BlockBOPCoral.CoralType.ALGAE)).scatterYMethod(ScatterYMethod.AT_GROUND).create());
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.BUSH).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("topaz", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.TOPAZ).create());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure(IConfigObj conf)
|
||||
{
|
||||
super.configure(conf);
|
||||
|
||||
this.usualTopBlock = this.topBlock;
|
||||
this.alternateTopBlock = conf.getBlockState("alternateTopBlock", this.alternateTopBlock);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("topaz");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void genTerrainBlocks(World world, Random rand, ChunkPrimer primer, int x, int z, double noise)
|
||||
{
|
||||
this.topBlock = (noise + rand.nextDouble() * 3.0D > 1.8D) ? this.alternateTopBlock : this.usualTopBlock;
|
||||
super.genTerrainBlocks(world, rand, primer, x, z, noise);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
double noise = field_180281_af.func_151601_a((double)pos.getX() * 0.0225D, (double)pos.getZ() * 0.0225D);
|
||||
return noise < -0.7D ? 0xD4DB55 : (noise < -0.3D ? 0xBBDD54 : 0xA3E053);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
double noise = field_180281_af.func_151601_a((double)pos.getX() * 0.0225D, (double)pos.getZ() * 0.0225D);
|
||||
return noise < -0.7D ? 0xD4DB55 : (noise < -0.3D ? 0xBBDD54 : 0xA3E053);
|
||||
}
|
||||
|
||||
// TODO: These 2 are copied from 1.7 - but are they used ever?
|
||||
public int getFogColour(BlockPos pos)
|
||||
{
|
||||
return 0xCCE874;
|
||||
}
|
||||
public float getFogDensity(BlockPos pos)
|
||||
{
|
||||
return 0.99F;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.entity.monster.EntitySlime;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPCoral;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPLilypad;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.enums.BOPWoods;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.util.block.BlockQuery;
|
||||
import biomesoplenty.common.util.block.BlockQuery.IBlockPosQuery;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorLogs;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplatter;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBayouTree;
|
||||
|
||||
public class BiomeGenBayou extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenBayou()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(63).heightVariation(5, 10).octaves(1, 1, 1, 1, 0, 0).sidewaysNoise(0.0F);
|
||||
|
||||
this.setColor(0x8BAF6B);
|
||||
this.setTemperatureRainfall(0.8F, 0.9F);
|
||||
this.waterColorMultiplier = 0xFFD932;
|
||||
this.skyColor = 0xACC4BC;
|
||||
this.seaFloorBlock = BOPBlocks.mud.getDefaultState();
|
||||
|
||||
this.addWeight(BOPClimates.HOT_SWAMP, 10);
|
||||
|
||||
this.spawnableWaterCreatureList.clear();
|
||||
this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 10, 1, 3));
|
||||
|
||||
// mud
|
||||
IBlockPosQuery emptyGrassOrDirt = BlockQuery.buildAnd().withAirAbove().states(this.topBlock, this.fillerBlock).create();
|
||||
this.addGenerator("mud", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(8).maxRadius(7).with(BOPBlocks.mud.getDefaultState()).create());
|
||||
this.addGenerator("mud_splatter", GeneratorStage.SAND, (new GeneratorSplatter.Builder()).amountPerChunk(4.0F).replace(emptyGrassOrDirt).with(BOPBlocks.mud.getDefaultState()).create());
|
||||
|
||||
// trees & logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(8);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("willow", 3, (new GeneratorBayouTree.Builder()).log(BOPWoods.WILLOW).leaves(BOPTrees.WILLOW).minHeight(6).maxHeight(12).minLeavesRadius(1).leavesGradient(2).create());
|
||||
treeGenerator.add("willow_large", 1, (new GeneratorBayouTree.Builder()).log(BOPWoods.WILLOW).leaves(BOPTrees.WILLOW).minHeight(10).maxHeight(18).minLeavesRadius(2).leavesGradient(3).create());
|
||||
this.addGenerator("dead_logs", GeneratorStage.TREE, (new GeneratorLogs.Builder()).amountPerChunk(1.5F).with(BOPWoods.DEAD).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(10.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("doublegrass", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.GRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("koru", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(BOPPlants.KORU).create());
|
||||
this.addGenerator("cattail", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(3.0F).with(BOPPlants.CATTAIL).create());
|
||||
this.addGenerator("double_cattail", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(3.0F).with(BlockBOPDoublePlant.DoublePlantType.TALL_CATTAIL).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(3.0F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("sugar_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(3.0F).generationAttempts(24).placeOn(BlockQueries.litFertileWaterside).with(Blocks.reeds.getDefaultState()).minHeight(1).maxHeight(3).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BlockBOPLilypad.LilypadType.DUCKWEED).create());
|
||||
this.addGenerator("lily", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(2.5F).with(Blocks.waterlily.getDefaultState()).create());
|
||||
this.addGenerator("medium_lily", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(2.0F).with(BlockBOPLilypad.LilypadType.MEDIUM).create());
|
||||
this.addGenerator("small_lily", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BlockBOPLilypad.LilypadType.SMALL).create());
|
||||
this.addGenerator("tiny_lily", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BlockBOPLilypad.LilypadType.TINY).create());
|
||||
this.addGenerator("algae", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(4.0F).replace(Blocks.water).with(BOPBlocks.coral.getDefaultState().withProperty(BlockBOPCoral.VARIANT, BlockBOPCoral.CoralType.ALGAE)).scatterYMethod(ScatterYMethod.AT_GROUND).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(4.0F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// shrooms
|
||||
this.addGenerator("red_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(Blocks.red_mushroom.getDefaultState()).create());
|
||||
this.addGenerator("brown_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(Blocks.brown_mushroom.getDefaultState()).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("malachite", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.MALACHITE).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("malachite");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x8BAF6B;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xB0E088;
|
||||
}
|
||||
|
||||
// TODO: These 2 are copied from 1.7 - but are they used ever?
|
||||
public int getFogColour(BlockPos pos)
|
||||
{
|
||||
return 0x90AF95;
|
||||
}
|
||||
public float getFogDensity(BlockPos pos)
|
||||
{
|
||||
return 0.99F;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.monster.EntitySlime;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPCoral;
|
||||
import biomesoplenty.common.block.BlockBOPDirt;
|
||||
import biomesoplenty.common.block.BlockBOPGrass;
|
||||
import biomesoplenty.common.block.BlockBOPLilypad;
|
||||
import biomesoplenty.common.block.BlockBOPMushroom;
|
||||
import biomesoplenty.common.block.BlockBOPPlant;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorLakes;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorTwigletTree;
|
||||
|
||||
public class BiomeGenBog extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenBog()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(6, 20);
|
||||
|
||||
this.setColor(0xD8935F);
|
||||
this.setTemperatureRainfall(0.5F, 0.9F);
|
||||
this.topBlock = BOPBlocks.grass.getDefaultState().withProperty(BlockBOPGrass.VARIANT, BlockBOPGrass.BOPGrassType.LOAMY);
|
||||
this.fillerBlock = BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.LOAMY);
|
||||
|
||||
this.addWeight(BOPClimates.COLD_SWAMP, 7);
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
this.spawnableWaterCreatureList.clear();
|
||||
this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 10, 1, 3));
|
||||
|
||||
// lakes
|
||||
this.addGenerator("lakes", GeneratorStage.SAND, (new GeneratorLakes.Builder()).amountPerChunk(2.5F).waterLakeForBiome(this).create());
|
||||
this.addGenerator("poison_lakes", GeneratorStage.SAND, (new GeneratorLakes.Builder()).amountPerChunk(0.5F).waterLakeForBiome(this).liquid(BOPBlocks.poison).frozenLiquid((IBlockState)null).create());
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(4).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// mud
|
||||
this.addGenerator("mud", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(3).maxRadius(7).with(BOPBlocks.mud.getDefaultState()).create());
|
||||
|
||||
// trees & logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(12);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("dark_oak_twiglet", 3, (new GeneratorTwigletTree.Builder()).log(BlockPlanks.EnumType.DARK_OAK).leaves(BlockPlanks.EnumType.DARK_OAK).minHeight(5).maxHeight(10).leafChance(0.3F, 0.9F).create());
|
||||
treeGenerator.add("birch_twiglet", 1, (new GeneratorTwigletTree.Builder()).log(BlockPlanks.EnumType.BIRCH).leaves(BlockPlanks.EnumType.BIRCH).minHeight(5).maxHeight(10).leafChance(0.3F, 0.9F).create());
|
||||
treeGenerator.add("bog_bush", 3, (new GeneratorFlora.Builder()).placeOn(this.topBlock).replace(Material.air).withNonDecayingLeaf(BlockPlanks.EnumType.OAK).generationAttempts(8).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(9.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("mediumgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("koru", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.KORU).create());
|
||||
this.addGenerator("river_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(1.0F).generationAttempts(24).placeOn(BlockQueries.litFertileWaterside).with(BlockBOPPlant.paging.getVariantState(BOPPlants.RIVERCANE)).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.6F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.8F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BlockBOPLilypad.LilypadType.DUCKWEED).generationAttempts(32).create());
|
||||
this.addGenerator("algae", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(8.0F).replace(Blocks.water).with(BOPBlocks.coral.getDefaultState().withProperty(BlockBOPCoral.VARIANT, BlockBOPCoral.CoralType.ALGAE)).generationAttempts(32).scatterYMethod(ScatterYMethod.AT_GROUND).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(3.0F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// shrooms
|
||||
this.addGenerator("blue_milk_caps", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.BLUE_MILK_CAP).create());
|
||||
this.addGenerator("brown_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(Blocks.brown_mushroom.getDefaultState()).create());
|
||||
this.addGenerator("red_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(Blocks.red_mushroom.getDefaultState()).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("malachite", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.MALACHITE).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("malachite");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xD8935F;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xDAE579;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.entity.passive.EntityWolf;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPLilypad;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorTaigaTree;
|
||||
|
||||
public class BiomeGenBorealForest extends BOPBiome
|
||||
{
|
||||
// TODO: this is very poorly named, boreal forests are cold, this is a mixed forest
|
||||
public BiomeGenBorealForest()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(70).heightVariation(15, 30);
|
||||
|
||||
this.setColor(0x9FB771);
|
||||
this.setTemperatureRainfall(0.5F, 0.6F);
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 10);
|
||||
|
||||
|
||||
this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 5, 4, 4));
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(6).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// trees & logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(20);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("small_oak", 2, (new GeneratorBasicTree.Builder()).create());
|
||||
treeGenerator.add("oak", 3, (new GeneratorBasicTree.Builder()).minHeight(8).maxHeight(12).create());
|
||||
treeGenerator.add("oak_bush", 3, (new GeneratorBush.Builder()).amountPerChunk(3).create());
|
||||
treeGenerator.add("yellow_autumn", 4, (new GeneratorBasicTree.Builder()).log(BlockPlanks.EnumType.BIRCH).leaves(BOPTrees.YELLOW_AUTUMN).minHeight(5).maxHeight(8).create());
|
||||
treeGenerator.add("spruce", 4, (new GeneratorTaigaTree.Builder()).minHeight(10).maxHeight(19).create()); // TODO: implement pine cones
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(10.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("fern", 4, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.FERN).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(0.5F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("rose", 2, (new GeneratorDoubleFlora.Builder().with(BlockDoublePlant.EnumPlantType.ROSE).create()));
|
||||
|
||||
// other plants
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
this.addGenerator("flax", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPDoublePlant.DoublePlantType.FLAX).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BlockBOPLilypad.LilypadType.DUCKWEED).generationAttempts(32).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(2.0F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x9FB771;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xC9CE65;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockFlower;
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.common.block.BlockBOPSand;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplotches;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorTwigletTree;
|
||||
|
||||
public class BiomeGenBrushland extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenBrushland()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(66).heightVariation(3, 20);
|
||||
|
||||
this.setColor(0xC9C17F);
|
||||
this.setTemperatureRainfall(1.2F, 0.1F);
|
||||
this.addWeight(BOPClimates.MEDITERANEAN, 10);
|
||||
|
||||
// quicksand
|
||||
this.addGenerator("quicksand_patches", GeneratorStage.SAND, (new GeneratorSplotches.Builder()).amountPerChunk(0.6F).splotchSize(16).with(BOPBlocks.sand.getDefaultState().withProperty(BlockBOPSand.VARIANT, BlockBOPSand.SandType.QUICKSAND)).splotchSize(20).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
|
||||
// trees & logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(2.4F);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("brush", 1, (new GeneratorBasicTree.Builder()).log(BlockPlanks.EnumType.JUNGLE).leaves(BlockPlanks.EnumType.OAK).minHeight(3).maxHeight(5).leafLayers(2).create());
|
||||
treeGenerator.add("brush_twiglet", 2, (new GeneratorTwigletTree.Builder()).minHeight(2).maxHeight(2).log(BlockPlanks.EnumType.JUNGLE).leaves(BlockPlanks.EnumType.OAK).create());
|
||||
treeGenerator.add("brush_bush", 1, (new GeneratorFlora.Builder()).placeOn(this.topBlock).replace(Material.air).withNonDecayingLeaf(BlockPlanks.EnumType.OAK).generationAttempts(8).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(0.6F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("allium", 2, (new GeneratorFlora.Builder().with(BlockFlower.EnumFlowerType.ALLIUM).create()));
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.4F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(2.0F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("thorns", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.THORN).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(3.0F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("ruby", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.RUBY).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("ruby");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xC9C17F;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xB2C67F;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.block.BlockQuery;
|
||||
import biomesoplenty.common.util.block.BlockQuery.IBlockPosQuery;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplatter;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorPineTree;
|
||||
|
||||
public class BiomeGenCanyon extends BOPBiome
|
||||
{
|
||||
|
||||
public static enum CanyonType {PLATEAU, RAVINE}
|
||||
|
||||
// TODO: placement of ravine is not ideal - out to be tied to the rivers layer somehow, instead of being a subbiome
|
||||
public BiomeGenCanyon(CanyonType type)
|
||||
{
|
||||
// terrain
|
||||
if (type == CanyonType.PLATEAU)
|
||||
{
|
||||
this.terrainSettings.avgHeight(140).heightVariation(10, 10);
|
||||
|
||||
this.addWeight(BOPClimates.MEDITERANEAN, 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.terrainSettings.avgHeight(63).heightVariation(9, 40);
|
||||
}
|
||||
|
||||
this.setColor(0xB49C70);
|
||||
this.setTemperatureRainfall(1.0F, 0.3F);
|
||||
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
|
||||
this.topBlock = BOPBlocks.hard_dirt.getDefaultState();
|
||||
this.fillerBlock = BOPBlocks.hard_dirt.getDefaultState();
|
||||
|
||||
// splatter top blocks
|
||||
IBlockPosQuery emptyHardDirt = BlockQuery.buildAnd().withAirAbove().states(this.topBlock).create();
|
||||
this.addGenerator("grass_splatter", GeneratorStage.SAND, (new GeneratorSplatter.Builder()).amountPerChunk(4.0F).generationAttempts(128).replace(emptyHardDirt).with(Blocks.grass.getDefaultState()).create());
|
||||
|
||||
// trees and logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(5);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("pine", 1, (new GeneratorPineTree.Builder()).minHeight(6).maxHeight(18).placeOn(emptyHardDirt).create());
|
||||
treeGenerator.add("brush", 2, (new GeneratorBush.Builder()).log(BlockPlanks.EnumType.ACACIA).leaves(BlockPlanks.EnumType.ACACIA).placeOn(emptyHardDirt).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(0.5F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("bromeliad", 2, (new GeneratorFlora.Builder().with(BOPFlowers.BROMELIAD).create()));
|
||||
|
||||
// water plants
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(2.0F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// grasses (note weighting must be quite high as the grasses will only grow on the splattered grass blocks)
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(12.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("ruby", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.RUBY).create());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("ruby");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xA9BA64;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xA9BA64;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.entity.passive.EntityHorse;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplotches;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
|
||||
public class BiomeGenChaparral extends BOPBiome
|
||||
{
|
||||
public BiomeGenChaparral()
|
||||
{
|
||||
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(70).heightVariation(10, 30).sidewaysNoise(0.1D).octaves(1, 4, 3, 1, 1, 0);
|
||||
|
||||
this.setColor(0xC0D85D);
|
||||
this.setTemperatureRainfall(0.8F, 0.6F);
|
||||
|
||||
this.addWeight(BOPClimates.WARM_TEMPERATE, 10);
|
||||
|
||||
this.spawnableCreatureList.clear(); // none of your regular farmyard critters here
|
||||
this.spawnableCreatureList.add(new SpawnListEntry(EntityHorse.class, 1, 2, 6));
|
||||
|
||||
// stone patches
|
||||
this.addGenerator("stone_patches", GeneratorStage.SAND, (new GeneratorSplotches.Builder()).amountPerChunk(2).splotchSize(15).replace(this.topBlock).with(Blocks.stone.getDefaultState()).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(0.5F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("rose", 8, (new GeneratorDoubleFlora.Builder()).amountPerChunk(1).with(BlockDoublePlant.EnumPlantType.ROSE).create());
|
||||
flowerGenerator.add("syringa", 4, (new GeneratorDoubleFlora.Builder()).amountPerChunk(1).with(BlockDoublePlant.EnumPlantType.SYRINGA).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
|
||||
// trees
|
||||
this.addGenerator("trees", GeneratorStage.TREE, (new GeneratorBush.Builder()).amountPerChunk(8).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("berry_bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.BERRYBUSH).create());
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("wild_carrots", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.WILDCARROT).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("peridot", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.PERIDOT).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("peridot");}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xC0D85D;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPLilypad;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.enums.BOPWoods;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorBlobs;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBigTree;
|
||||
|
||||
public class BiomeGenCherryBlossomGrove extends BOPBiome
|
||||
{
|
||||
public BiomeGenCherryBlossomGrove()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(63).heightVariation(5, 25).sidewaysNoise(0.8F);
|
||||
|
||||
this.setColor(0xF88F8F);
|
||||
this.setTemperatureRainfall(0.6F, 0.8F);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 3);
|
||||
|
||||
// boulders
|
||||
this.addGenerator("boulders", GeneratorStage.SAND, (new GeneratorBlobs.Builder()).amountPerChunk(0.5F).placeOn(Blocks.grass).with(Blocks.stone.getDefaultState()).minRadius(0.3F).maxRadius(1.2F).numBalls(1).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
this.addGenerator("big_boulders", GeneratorStage.SAND, (new GeneratorBlobs.Builder()).amountPerChunk(0.1F).placeOn(Blocks.grass).with(Blocks.stone.getDefaultState()).minRadius(0.3F).maxRadius(4.0F).numBalls(3).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(6.0F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("pink_daffodil", 4, (new GeneratorFlora.Builder().with(BOPFlowers.PINK_DAFFODIL).create()));
|
||||
flowerGenerator.add("white_anemone", 3, (new GeneratorFlora.Builder().with(BOPFlowers.WHITE_ANEMONE).create()));
|
||||
flowerGenerator.add("clover", 2, (new GeneratorFlora.Builder().with(BOPFlowers.CLOVER).create()));
|
||||
flowerGenerator.add("syringa", 2, (new GeneratorDoubleFlora.Builder().with(BlockDoublePlant.EnumPlantType.SYRINGA).create()));
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(3.0F);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("pink_cherry", 3, (new GeneratorBasicTree.Builder()).log(BOPWoods.CHERRY).leaves(BOPTrees.PINK_CHERRY).create());
|
||||
treeGenerator.add("white_cherry", 3, (new GeneratorBasicTree.Builder()).log(BOPWoods.CHERRY).leaves(BOPTrees.WHITE_CHERRY).create());
|
||||
treeGenerator.add("large_pink_cherry", 1, (new GeneratorBigTree.Builder()).log(BOPWoods.CHERRY).leaves(BOPTrees.PINK_CHERRY).create());
|
||||
treeGenerator.add("large_white_cherry", 1, (new GeneratorBigTree.Builder()).log(BOPWoods.CHERRY).leaves(BOPTrees.WHITE_CHERRY).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("flax", GeneratorStage.FLOWERS,(new GeneratorDoubleFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPDoublePlant.DoublePlantType.FLAX).generationAttempts(6).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("clover_patches", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(2.5F).with(BOPPlants.CLOVERPATCH).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BlockBOPLilypad.LilypadType.DUCKWEED).generationAttempts(32).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("topaz", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.TOPAZ).create());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("topaz");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xA3FFAA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xA3FFAA;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.util.block.BlockQuery.BlockQueryBlock;
|
||||
import biomesoplenty.common.util.block.BlockQuery.IBlockPosQuery;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorBlobs;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplotches;
|
||||
|
||||
public class BiomeGenColdDesert extends BOPBiome
|
||||
{
|
||||
|
||||
public static enum ColdDesertType {FROZEN, COLD;}
|
||||
|
||||
public BiomeGenColdDesert(ColdDesertType type)
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(70).heightVariation(10, 25).sidewaysNoise(0.7D);
|
||||
|
||||
this.topBlock = Blocks.gravel.getDefaultState();
|
||||
this.fillerBlock = Blocks.stone.getDefaultState();
|
||||
|
||||
this.enableRain = false;
|
||||
this.enableSnow = false;
|
||||
|
||||
if (type == ColdDesertType.FROZEN)
|
||||
{
|
||||
this.setTemperatureRainfall(0.0F, 0.0F);
|
||||
this.addWeight(BOPClimates.FROZEN_DESERT, 20);
|
||||
this.setColor(0xB3D7E3);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setTemperatureRainfall(0.2F, 0.0F);
|
||||
this.addWeight(BOPClimates.COLD_DESERT, 20);
|
||||
this.setColor(0xB3AF9B);
|
||||
}
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
|
||||
// gravel, stone and boulders
|
||||
IBlockPosQuery surface = new BlockQueryBlock(Blocks.stone, Blocks.gravel, BOPBlocks.hard_ice);
|
||||
if (type == ColdDesertType.FROZEN)
|
||||
{
|
||||
this.addGenerator("hard_ice_patches", GeneratorStage.SAND, (new GeneratorSplotches.Builder()).amountPerChunk(6).splotchSize(24).placeOn(surface).replace(surface).with(BOPBlocks.hard_ice.getDefaultState()).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
this.addGenerator("stone_patches", GeneratorStage.SAND, (new GeneratorSplotches.Builder()).amountPerChunk(3).splotchSize(16).placeOn(surface).replace(surface).with(Blocks.stone.getDefaultState()).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
}
|
||||
else
|
||||
{
|
||||
this.addGenerator("stone_patches", GeneratorStage.SAND, (new GeneratorSplotches.Builder()).amountPerChunk(6).splotchSize(24).placeOn(surface).replace(surface).with(Blocks.stone.getDefaultState()).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
}
|
||||
this.addGenerator("boulders", GeneratorStage.SAND_PASS2, (new GeneratorBlobs.Builder()).amountPerChunk(0.5F).placeOn(surface).with(Blocks.stone.getDefaultState()).minRadius(0.3F).maxRadius(3.2F).numBalls(4).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("tanzanite", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.TANZANITE).create());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("tanzanite");}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.entity.passive.EntityWolf;
|
||||
import net.minecraft.init.Blocks;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.common.block.BlockBOPDirt;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPGrass;
|
||||
import biomesoplenty.common.block.BlockBOPLilypad;
|
||||
import biomesoplenty.common.block.BlockBOPMushroom;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.enums.BOPWoods;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorTaigaTree;
|
||||
|
||||
public class BiomeGenConiferousForest extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenConiferousForest()
|
||||
{
|
||||
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(68).heightVariation(10, 20);
|
||||
|
||||
this.setColor(0x528F60);
|
||||
this.setTemperatureRainfall(0.5F, 0.5F);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 10);
|
||||
|
||||
this.topBlock = BOPBlocks.grass.getDefaultState().withProperty(BlockBOPGrass.VARIANT, BlockBOPGrass.BOPGrassType.LOAMY);
|
||||
this.fillerBlock = BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.LOAMY);
|
||||
|
||||
this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 8, 4, 4));
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(4).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// trees
|
||||
//
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(8.0F);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("fir", 5, (new GeneratorTaigaTree.Builder()).log(BOPWoods.FIR).leaves(BOPTrees.FIR).minHeight(5).maxHeight(28).create());
|
||||
treeGenerator.add("mega_fir", 3, (new GeneratorTaigaTree.Builder()).log(BOPWoods.FIR).leaves(BOPTrees.FIR).minHeight(20).maxHeight(40).trunkWidth(2).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.LEAFPILE).generationAttempts(64).create());
|
||||
this.addGenerator("flax", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPDoublePlant.DoublePlantType.FLAX).create());
|
||||
this.addGenerator("clover_patches", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.CLOVERPATCH).create());
|
||||
this.addGenerator("berry_bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.BERRYBUSH).create());
|
||||
this.addGenerator("poison_ivy", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.POISONIVY).create());
|
||||
|
||||
// shrooms
|
||||
this.addGenerator("toadstools", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.4F).with(BlockBOPMushroom.MushroomType.TOADSTOOL).create());
|
||||
this.addGenerator("blue_milk_caps", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BlockBOPMushroom.MushroomType.BLUE_MILK_CAP).create());
|
||||
this.addGenerator("brown_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(Blocks.brown_mushroom.getDefaultState()).create());
|
||||
this.addGenerator("red_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(Blocks.red_mushroom.getDefaultState()).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BlockBOPLilypad.LilypadType.DUCKWEED).generationAttempts(32).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(0.6F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("bluebells", 1, (new GeneratorFlora.Builder().with(BOPFlowers.BLUEBELLS)).generationAttempts(128).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(10.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).generationAttempts(128).create());
|
||||
grassGenerator.add("mediumgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).generationAttempts(128).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).generationAttempts(128).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).generationAttempts(128).create());
|
||||
grassGenerator.add("fern", 4, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.FERN).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
|
||||
public class BiomeGenCrag extends BOPBiome
|
||||
{
|
||||
public BiomeGenCrag()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(80).heightVariation(80, 200).minHeight(40).sidewaysNoise(0.7F);
|
||||
|
||||
this.setColor(5209457);
|
||||
this.setTemperatureRainfall(1.0F, 0.0F);
|
||||
|
||||
this.addWeight(BOPClimates.WET_TEMPERATE, 3);
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
this.spawnableWaterCreatureList.clear();
|
||||
|
||||
this.topBlock = BOPBlocks.crag_rock.getDefaultState();
|
||||
this.fillerBlock = BOPBlocks.crag_rock.getDefaultState();
|
||||
this.waterColorMultiplier = 944693;
|
||||
this.skyColor = 4944498;
|
||||
|
||||
// gem
|
||||
this.addGenerator("emeralds", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(Blocks.emerald_ore.getDefaultState()).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("emeralds");}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.enums.BOPWoods;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBigTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorTaigaTree;
|
||||
|
||||
public class BiomeGenDeadForest extends BOPBiome
|
||||
{
|
||||
public BiomeGenDeadForest()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(68).heightVariation(8, 25);
|
||||
|
||||
this.setColor(0xBCA165);
|
||||
this.setTemperatureRainfall(0.4F, 0.3F);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 5);
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(4).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(3);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("spruce", 3, (new GeneratorTaigaTree.Builder()).minHeight(6).maxHeight(16).create()); // TODO: implement pine cones
|
||||
treeGenerator.add("dying_tree", 5, (new GeneratorBigTree.Builder()).amountPerChunk(1.0F).minHeight(5).maxHeight(12).foliageHeight(2).leaves(BOPTrees.DEAD).create());
|
||||
treeGenerator.add("dead_tree", 5, (new GeneratorBigTree.Builder()).amountPerChunk(1.0F).minHeight(5).maxHeight(12).foliageHeight(0).foliageDensity(0.5D).log(BOPWoods.DEAD).leaves(Blocks.air.getDefaultState()).create());
|
||||
treeGenerator.add("persimmon_tree", 1, (new GeneratorBasicTree.Builder()).create()); // TODO: implement persimmon fruit
|
||||
|
||||
// other plants
|
||||
this.addGenerator("thorns", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(BOPPlants.THORN).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.8F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(3.0F).with(BOPPlants.DEADLEAFPILE).generationAttempts(64).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("dead_bushes", 1, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.DEAD_BUSH).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("tanzanite", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.TANZANITE).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("tanzanite");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xBCA165;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xBCA165;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPCoral;
|
||||
import biomesoplenty.common.block.BlockBOPDirt;
|
||||
import biomesoplenty.common.block.BlockBOPGrass;
|
||||
import biomesoplenty.common.block.BlockBOPPlant;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPWoods;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplotches;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBigTree;
|
||||
|
||||
public class BiomeGenDeadSwamp extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenDeadSwamp()
|
||||
{
|
||||
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(63).heightVariation(4, 4).octaves(2, 2, 1, 0, 1, 1).sidewaysNoise(0.5D);
|
||||
|
||||
this.setTemperatureRainfall(0.7F, 0.9F);
|
||||
this.setColor(0x8BAF48);
|
||||
this.waterColorMultiplier = 0xA2AD51;
|
||||
this.skyColor = 0x627268;
|
||||
this.topBlock = BOPBlocks.grass.getDefaultState().withProperty(BlockBOPGrass.VARIANT, BlockBOPGrass.BOPGrassType.LOAMY);
|
||||
this.fillerBlock = BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.LOAMY);
|
||||
|
||||
this.addWeight(BOPClimates.COLD_SWAMP, 5);
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
this.spawnableWaterCreatureList.clear();
|
||||
|
||||
// mud
|
||||
this.addGenerator("mud", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(8).maxRadius(7).with(BOPBlocks.mud.getDefaultState()).create());
|
||||
this.addGenerator("mud_patches", GeneratorStage.SAND_PASS2, (new GeneratorSplotches.Builder()).amountPerChunk(1).splotchSize(12).replace(this.topBlock).with(BOPBlocks.mud.getDefaultState()).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(1.0F);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("dead_tree", 1, (new GeneratorBigTree.Builder()).amountPerChunk(1.0F).minHeight(5).maxHeight(16).log(BOPWoods.DEAD).leaves(Blocks.air.getDefaultState()).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("koru", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.KORU).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("river_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(0.3F).generationAttempts(24).placeOn(BlockQueries.litFertileWaterside).with(BlockBOPPlant.paging.getVariantState(BOPPlants.RIVERCANE)).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
this.addGenerator("algae", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).replace(Blocks.water).with(BOPBlocks.coral.getDefaultState().withProperty(BlockBOPCoral.VARIANT, BlockBOPCoral.CoralType.ALGAE)).generationAttempts(32).scatterYMethod(ScatterYMethod.AT_GROUND).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(10.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("mediumgrass", 4, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("doublegrass", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.GRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("malachite", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.MALACHITE).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("malachite");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x66704C;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x66704C;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* TODO
|
||||
@Override
|
||||
public int getFogColour(int x, int y, int z)
|
||||
{
|
||||
return 9219993;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getFogDensity(int x, int y, int z)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return 0.6F;
|
||||
}
|
||||
*/
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPLilypad;
|
||||
import biomesoplenty.common.block.BlockBOPMushroom;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBulbTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
|
||||
public class BiomeGenDeciduousForest extends BOPBiome
|
||||
{
|
||||
public BiomeGenDeciduousForest()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64);
|
||||
|
||||
this.setColor(0xC1B749);
|
||||
this.setTemperatureRainfall(0.6F, 0.8F);
|
||||
this.addWeight(BOPClimates.WARM_TEMPERATE, 10);
|
||||
|
||||
// trees & logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(18);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("birch_bush", 2, (new GeneratorBush.Builder()).log(BlockPlanks.EnumType.BIRCH).leaves(BlockPlanks.EnumType.BIRCH).create());
|
||||
treeGenerator.add("oak_bush", 3, (new GeneratorBush.Builder()).create());
|
||||
treeGenerator.add("tall_oak", 6, (new GeneratorBulbTree.Builder()).minHeight(10).maxHeight(15).vine(null).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(10.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("fern", 4, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.FERN).create());
|
||||
|
||||
// shrooms
|
||||
this.addGenerator("toadstools", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.TOADSTOOL).create());
|
||||
this.addGenerator("blue_milk_caps", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.4F).with(BlockBOPMushroom.MushroomType.BLUE_MILK_CAP).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.8F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("berry_bushes", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.BERRYBUSH).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BOPPlants.LEAFPILE).generationAttempts(64).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
this.addGenerator("flax", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.1F).with(BlockBOPDoublePlant.DoublePlantType.FLAX).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BlockBOPLilypad.LilypadType.DUCKWEED).generationAttempts(32).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
double noise = field_180281_af.func_151601_a((double)pos.getX() * 0.0225D, (double)pos.getZ() * 0.0225D);
|
||||
return noise < -0.1D ? 0xC1B749 : 0xAD8E41;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
double noise = field_180281_af.func_151601_a((double)pos.getX() * 0.0225D, (double)pos.getZ() * 0.0225D);
|
||||
return noise < -0.1D ? 0xC4C93A : 0xAFA248;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.config.BOPConfig.IConfigObj;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBigTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
import net.minecraft.block.BlockDirt;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.ChunkPrimer;
|
||||
|
||||
public class BiomeGenDenseForest extends BOPBiome
|
||||
{
|
||||
|
||||
public IBlockState usualTopBlock;
|
||||
public IBlockState alternateTopBlock;
|
||||
|
||||
public BiomeGenDenseForest()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(4, 12);
|
||||
|
||||
this.setColor(8246897);
|
||||
this.setTemperatureRainfall(0.7F, 0.7F);
|
||||
|
||||
this.addWeight(BOPClimates.WARM_TEMPERATE, 7);
|
||||
|
||||
this.topBlock = Blocks.grass.getDefaultState();
|
||||
this.fillerBlock = Blocks.dirt.getDefaultState();
|
||||
this.usualTopBlock = this.topBlock;
|
||||
this.alternateTopBlock = Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.COARSE_DIRT);
|
||||
|
||||
// other plants
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("berry_bushes", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.BERRYBUSH).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(1.5F).with(BOPPlants.LEAFPILE).generationAttempts(64).create());
|
||||
this.addGenerator("huge_trees", GeneratorStage.TREE, (new GeneratorBigTree.Builder()).amountPerChunk(1.0F).minHeight(15).maxHeight(25).create());
|
||||
this.addGenerator("leaves_clusters", GeneratorStage.POST, (new GeneratorBush.Builder()).amountPerChunk(0.7F).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("fern", 1, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.FERN).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
}
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure(IConfigObj conf)
|
||||
{
|
||||
super.configure(conf);
|
||||
|
||||
this.usualTopBlock = this.topBlock;
|
||||
this.alternateTopBlock = conf.getBlockState("alternateTopBlock", this.alternateTopBlock);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void genTerrainBlocks(World world, Random rand, ChunkPrimer primer, int x, int z, double noise)
|
||||
{
|
||||
this.topBlock = (noise > 1.75D) ? this.alternateTopBlock : this.usualTopBlock;
|
||||
super.genTerrainBlocks(world, rand, primer, x, z, noise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 8246897;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 10022742;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,198 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.block.BlockFlower.EnumFlowerType;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPCoral;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPLilypad;
|
||||
import biomesoplenty.common.block.BlockBOPMushroom;
|
||||
import biomesoplenty.common.block.BlockBOPPlant;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorBigMushroom;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorMixedLily;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
|
||||
|
||||
// This class is not intended to be used in the game
|
||||
// It just contains one of every common generator, so it can be used as a template when creating new biomes - just delete lines you don't want and adjust weightings
|
||||
public class BiomeGenDummyTemplate extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenDummyTemplate()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(6, 21).octaves(1, 1, 1, 1, 1, 1);
|
||||
|
||||
this.setColor(0xFFFFFF);
|
||||
this.skyColor = 0xFFFFFF;
|
||||
this.setEnableSnow();
|
||||
this.setTemperatureRainfall(0.5F, 0.5F);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 10);
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(4).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// mud
|
||||
this.addGenerator("mud", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(3).maxRadius(7).with(BOPBlocks.mud.getDefaultState()).create());
|
||||
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(9);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
// TODO: standard trees here? Is there such a thing as standard trees?
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("deadgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DEADGRASS).create());
|
||||
grassGenerator.add("desertgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DESERTGRASS).create());
|
||||
grassGenerator.add("dunegrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DUNEGRASS).create());
|
||||
grassGenerator.add("shortgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.SHORTGRASS).create());
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("tallgrass", 1, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("ferns", 1, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.FERN).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("doublegrass", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.GRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("berry_bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.BERRYBUSH).create());
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("cattails", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.CATTAIL).create());
|
||||
this.addGenerator("clover_patches", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.CLOVERPATCH).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
this.addGenerator("desert_sprouts", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.DESERTSPROUTS).create());
|
||||
this.addGenerator("koru", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.KORU).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("poison_ivy", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.POISONIVY).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("spectral_ferns", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.SPECTRALFERN).create());
|
||||
this.addGenerator("sprouts", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.SPROUT).create());
|
||||
this.addGenerator("thorns", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.THORN).create());
|
||||
this.addGenerator("tiny_cacti", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.TINYCACTUS).create());
|
||||
this.addGenerator("wild_carrots", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.WILDCARROT).create());
|
||||
this.addGenerator("wild_rice", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.WILDRICE).create());
|
||||
this.addGenerator("witherwart", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.WITHERWART).create());
|
||||
this.addGenerator("dead_bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BlockTallGrass.EnumType.DEAD_BUSH).create());
|
||||
this.addGenerator("eyebulbs", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.5F).with(BlockBOPDoublePlant.DoublePlantType.EYEBULB).create());
|
||||
this.addGenerator("flax", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.5F).with(BlockBOPDoublePlant.DoublePlantType.FLAX).create());
|
||||
this.addGenerator("tall_cattails", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.5F).with(BlockBOPDoublePlant.DoublePlantType.TALL_CATTAIL).create());
|
||||
this.addGenerator("tall_ferns", GeneratorStage.FLOWERS, (new GeneratorDoubleFlora.Builder()).amountPerChunk(0.5F).with(BlockDoublePlant.EnumPlantType.FERN).create());
|
||||
this.addGenerator("river_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(0.5F).placeOn(BlockQueries.litFertileWaterside).with(BlockBOPPlant.paging.getVariantState(BOPPlants.RIVERCANE)).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("sugar_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(0.5F).placeOn(BlockQueries.litFertileWaterside).with(Blocks.reeds.getDefaultState()).minHeight(1).maxHeight(3).create());
|
||||
// TODO root
|
||||
|
||||
// water plants
|
||||
this.addGenerator("duckweed", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BlockBOPLilypad.LilypadType.DUCKWEED).create());
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
this.addGenerator("mixed_lily", GeneratorStage.LILYPAD, (new GeneratorMixedLily.Builder()).amountPerChunk(0.5F).create());
|
||||
this.addGenerator("algae", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).replace(Blocks.water).with(BOPBlocks.coral.getDefaultState().withProperty(BlockBOPCoral.VARIANT, BlockBOPCoral.CoralType.ALGAE)).scatterYMethod(ScatterYMethod.AT_GROUND).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(1.0F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("alliums", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.ALLIUM).create()));
|
||||
flowerGenerator.add("blue_orchids", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.BLUE_ORCHID).create()));
|
||||
flowerGenerator.add("dandelions", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.DANDELION).create()));
|
||||
flowerGenerator.add("houstonias", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.HOUSTONIA).create()));
|
||||
flowerGenerator.add("orange_tulips", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.ORANGE_TULIP).create()));
|
||||
flowerGenerator.add("oxeye_daisies", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.OXEYE_DAISY).create()));
|
||||
flowerGenerator.add("pink_tulips", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.PINK_TULIP).create()));
|
||||
flowerGenerator.add("poppies", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.POPPY).create()));
|
||||
flowerGenerator.add("red_tulips", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.RED_TULIP).create()));
|
||||
flowerGenerator.add("white_tulips", 1, (new GeneratorFlora.Builder().with(EnumFlowerType.WHITE_TULIP).create()));
|
||||
flowerGenerator.add("blue_hydrangeas", 1, (new GeneratorFlora.Builder().with(BOPFlowers.BLUE_HYDRANGEA).create()));
|
||||
flowerGenerator.add("bluebells", 1, (new GeneratorFlora.Builder().with(BOPFlowers.BLUEBELLS).create()));
|
||||
flowerGenerator.add("bromeliads", 1, (new GeneratorFlora.Builder().with(BOPFlowers.BROMELIAD).create()));
|
||||
flowerGenerator.add("burning_blossoms", 1, (new GeneratorFlora.Builder().with(BOPFlowers.BURNING_BLOSSOM).create()));
|
||||
flowerGenerator.add("clover", 1, (new GeneratorFlora.Builder().with(BOPFlowers.CLOVER).create()));
|
||||
flowerGenerator.add("dandelions", 1, (new GeneratorFlora.Builder().with(BOPFlowers.DANDELION).create()));
|
||||
flowerGenerator.add("deathblooms", 1, (new GeneratorFlora.Builder().with(BOPFlowers.DEATHBLOOM).create()));
|
||||
flowerGenerator.add("enterlotuses", 1, (new GeneratorFlora.Builder().with(BOPFlowers.ENDERLOTUS).create()));
|
||||
flowerGenerator.add("glowflowers", 1, (new GeneratorFlora.Builder().with(BOPFlowers.GLOWFLOWER).create()));
|
||||
flowerGenerator.add("goldenrods", 1, (new GeneratorFlora.Builder().with(BOPFlowers.GOLDENROD).create()));
|
||||
flowerGenerator.add("icy_irises", 1, (new GeneratorFlora.Builder().with(BOPFlowers.ICY_IRIS).create()));
|
||||
flowerGenerator.add("lavender", 1, (new GeneratorFlora.Builder().with(BOPFlowers.LAVENDER).create()));
|
||||
flowerGenerator.add("lilies_of_the_valley", 1, (new GeneratorFlora.Builder().with(BOPFlowers.LILY_OF_THE_VALLEY).create()));
|
||||
flowerGenerator.add("miners_delights", 1, (new GeneratorFlora.Builder().with(BOPFlowers.MINERS_DELIGHT).create()));
|
||||
flowerGenerator.add("orange_cosmoses", 1, (new GeneratorFlora.Builder().with(BOPFlowers.ORANGE_COSMOS).create()));
|
||||
flowerGenerator.add("pink_daffodils", 1, (new GeneratorFlora.Builder().with(BOPFlowers.PINK_DAFFODIL).create()));
|
||||
flowerGenerator.add("pink_hibiscuses", 1, (new GeneratorFlora.Builder().with(BOPFlowers.PINK_HIBISCUS).create()));
|
||||
flowerGenerator.add("roses", 1, (new GeneratorFlora.Builder().with(BOPFlowers.ROSE).create()));
|
||||
flowerGenerator.add("swampflowers", 1, (new GeneratorFlora.Builder().with(BOPFlowers.SWAMPFLOWER).create()));
|
||||
flowerGenerator.add("violets", 1, (new GeneratorFlora.Builder().with(BOPFlowers.VIOLET).create()));
|
||||
flowerGenerator.add("white_anemones", 1, (new GeneratorFlora.Builder().with(BOPFlowers.WHITE_ANEMONE).create()));
|
||||
flowerGenerator.add("wildflowers", 1, (new GeneratorFlora.Builder().with(BOPFlowers.WILDFLOWER).create()));
|
||||
flowerGenerator.add("paeonias", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.PAEONIA).create());
|
||||
flowerGenerator.add("tall_roses", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.ROSE).create());
|
||||
flowerGenerator.add("sunflowers", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.SUNFLOWER).create());
|
||||
flowerGenerator.add("syringas", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.SYRINGA).create());
|
||||
|
||||
// shrooms
|
||||
this.addGenerator("brown_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(Blocks.brown_mushroom.getDefaultState()).create());
|
||||
this.addGenerator("red_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(Blocks.red_mushroom.getDefaultState()).create());
|
||||
this.addGenerator("blue_milk_caps", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.BLUE_MILK_CAP).create());
|
||||
this.addGenerator("flat_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.FLAT_MUSHROOM).create());
|
||||
this.addGenerator("glowshrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.GLOWSHROOM).create());
|
||||
this.addGenerator("portobellos", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.PORTOBELLO).create());
|
||||
this.addGenerator("shadow_shrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.SHADOW_SHROOM).create());
|
||||
this.addGenerator("toadstools", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.TOADSTOOL).create());
|
||||
|
||||
// big mushrooms
|
||||
GeneratorWeighted mushroomGenerator = new GeneratorWeighted(0.5F);
|
||||
this.addGenerator("big_mushrooms", GeneratorStage.BIG_SHROOM, mushroomGenerator);
|
||||
mushroomGenerator.add("brown_mushroom", 1, (new GeneratorBigMushroom.Builder()).mushroomType(GeneratorBigMushroom.BigMushroomType.BROWN).create());
|
||||
mushroomGenerator.add("red_mushroom", 1, (new GeneratorBigMushroom.Builder()).mushroomType(GeneratorBigMushroom.BigMushroomType.RED).create());
|
||||
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xFFFFFF;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xFFFFFF;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorMixedLily;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBulbTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
|
||||
public class BiomeGenEucalyptusForest extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenEucalyptusForest()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(10, 20);
|
||||
|
||||
this.setColor(0x9DCC70);
|
||||
this.setTemperatureRainfall(0.9F, 0.1F);
|
||||
|
||||
this.addWeight(BOPClimates.SAVANNA, 7);
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(5);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("eucalyptus_bush", 1, (new GeneratorBush.Builder()).log(BlockPlanks.EnumType.BIRCH).leaves(BlockPlanks.EnumType.BIRCH).create());
|
||||
treeGenerator.add("tall_eucalyptus", 4, (new GeneratorBulbTree.Builder()).minHeight(10).maxHeight(25).log(BlockPlanks.EnumType.BIRCH).leaves(BlockPlanks.EnumType.BIRCH).vine(null).create());
|
||||
// TODO: Add Eucalyptus wood as a new wood type - the bark is quite special
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(1.4F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("shortgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.SHORTGRASS).create());
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("fern", 4, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.FERN).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("sprouts", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.SPROUT).create());
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.SHRUB).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("mixed_lily", GeneratorStage.LILYPAD, (new GeneratorMixedLily.Builder()).amountPerChunk(0.8F).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("topaz", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.TOPAZ).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("topaz");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x9DCC70;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x71CE52;
|
||||
}
|
||||
|
||||
/*
|
||||
public int getFogColour(int x, int y, int z)
|
||||
{
|
||||
return 14805212;
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
|
@ -0,0 +1,145 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockFlower;
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPCoral;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPMushroom;
|
||||
import biomesoplenty.common.block.BlockBOPPlant;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.enums.BOPWoods;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorMixedLily;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBigTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorTaigaTree;
|
||||
|
||||
public class BiomeGenFen extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenFen()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(8, 15);
|
||||
|
||||
this.setColor(0xBAC481);
|
||||
this.setTemperatureRainfall(0.4F, 0.4F);
|
||||
|
||||
this.addWeight(BOPClimates.WET_TEMPERATE, 10);
|
||||
|
||||
// TODO: this.theBiomeDecorator.bopFeatures.waterSpringsPerChunk = 99;
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(4).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// mud
|
||||
this.addGenerator("mud", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(3).maxRadius(7).with(BOPBlocks.mud.getDefaultState()).create());
|
||||
|
||||
// trees and logs
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(9);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("dark_oak_taiga", 5, (new GeneratorTaigaTree.Builder()).log(BlockPlanks.EnumType.DARK_OAK).maxHeight(14).leaves(BlockPlanks.EnumType.DARK_OAK).create());
|
||||
treeGenerator.add("dying", 10, (new GeneratorTaigaTree.Builder()).log(BlockPlanks.EnumType.DARK_OAK).maxHeight(14).leaves(BOPTrees.DEAD).create());
|
||||
treeGenerator.add("dead", 1, (new GeneratorBigTree.Builder()).log(BOPWoods.DEAD).leaves(Blocks.air.getDefaultState()).maxHeight(14).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.5F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("shortgrass", 4, (new GeneratorGrass.Builder()).with(BOPPlants.SHORTGRASS).create());
|
||||
grassGenerator.add("mediumgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("doublegrass", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.GRASS).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(0.5F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("poppy", 1, (new GeneratorFlora.Builder()).with(BlockFlower.EnumFlowerType.POPPY).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("cattails", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.CATTAIL).create());
|
||||
this.addGenerator("double_cattails", GeneratorStage.FLOWERS,(new GeneratorDoubleFlora.Builder()).amountPerChunk(0.1F).with(BlockBOPDoublePlant.DoublePlantType.TALL_CATTAIL).create());
|
||||
this.addGenerator("river_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(1.0F).generationAttempts(24).placeOn(BlockQueries.litFertileWaterside).with(BlockBOPPlant.paging.getVariantState(BOPPlants.RIVERCANE)).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("koru", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.KORU).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.7F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.DEADLEAFPILE).generationAttempts(64).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
this.addGenerator("mixed_lily", GeneratorStage.LILYPAD, (new GeneratorMixedLily.Builder()).amountPerChunk(2.0F).generationAttempts(96).create());
|
||||
this.addGenerator("algae", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(3.0F).replace(Blocks.water).with(BOPBlocks.coral.getDefaultState().withProperty(BlockBOPCoral.VARIANT, BlockBOPCoral.CoralType.ALGAE)).generationAttempts(32).scatterYMethod(ScatterYMethod.AT_GROUND).create());
|
||||
|
||||
// shrooms
|
||||
this.addGenerator("toadstools", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BlockBOPMushroom.MushroomType.TOADSTOOL).create());
|
||||
this.addGenerator("portobellos", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BlockBOPMushroom.MushroomType.PORTOBELLO).create());
|
||||
this.addGenerator("brown_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.4F).with(Blocks.brown_mushroom.getDefaultState()).create());
|
||||
this.addGenerator("red_mushrooms", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.4F).with(Blocks.red_mushroom.getDefaultState()).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xBAC481;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xCEB979;
|
||||
}
|
||||
|
||||
/* TODO
|
||||
@Override
|
||||
public int getFogColour(int x, int y, int z)
|
||||
{
|
||||
return 12638463;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getFogDensity(int x, int y, int z)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return 0.8F;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockFlower.EnumFlowerType;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
|
||||
public class BiomeGenFlowerField extends BOPBiome
|
||||
{
|
||||
public BiomeGenFlowerField()
|
||||
{
|
||||
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(4, 12);
|
||||
|
||||
this.setColor(4044093);
|
||||
this.setTemperatureRainfall(0.6F, 0.7F);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 3);
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(99);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("pink_tulip", 2, (new GeneratorFlora.Builder().with(EnumFlowerType.PINK_TULIP).create()));
|
||||
flowerGenerator.add("white_tulip", 5, (new GeneratorFlora.Builder().with(EnumFlowerType.WHITE_TULIP).create()));
|
||||
flowerGenerator.add("orange_tulip", 7, (new GeneratorFlora.Builder().with(EnumFlowerType.ORANGE_TULIP).create()));
|
||||
flowerGenerator.add("red_tulip", 10, (new GeneratorFlora.Builder().with(EnumFlowerType.RED_TULIP).create()));
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(0.2F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("peridot", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.PERIDOT).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("peridot");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 7390273;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 7390273;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||
|
||||
|
||||
public class BiomeGenFrostForest extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenFrostForest()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(66).heightVariation(6, 21);
|
||||
|
||||
this.setColor(0xABD6BC);
|
||||
this.skyColor = 0xCEE0EA;
|
||||
this.setEnableSnow();
|
||||
this.setTemperatureRainfall(0.0F, 0.5F);
|
||||
|
||||
this.addWeight(BOPClimates.TUNDRA, 10);
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(3);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("oak", 1, (new GeneratorBasicTree.Builder()).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.4F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(0.3F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("icy_irises", 1, (new GeneratorFlora.Builder().with(BOPFlowers.ICY_IRIS).create()));
|
||||
flowerGenerator.add("violets", 1, (new GeneratorFlora.Builder().with(BOPFlowers.VIOLET).create()));
|
||||
|
||||
// gem
|
||||
this.addGenerator("tanzanite", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.TANZANITE).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("tanzanite");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xABD6BC;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xABD6BC;
|
||||
}
|
||||
|
||||
/* TODO
|
||||
@Override
|
||||
public int getFogColour(int x, int y, int z)
|
||||
{
|
||||
return 12239814;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getFogDensity(int x, int y, int z)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return 0.6F;
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.entity.passive.EntityMooshroom;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPMushroom;
|
||||
import biomesoplenty.common.block.BlockBOPPlant;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorBigMushroom;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorMixedLily;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplotches;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorMegaJungleTree;
|
||||
|
||||
|
||||
public class BiomeGenFungiForest extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenFungiForest()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(66).heightVariation(10, 28);
|
||||
|
||||
this.setColor(0xF0F970);
|
||||
this.skyColor = 0x73C69E;
|
||||
this.waterColorMultiplier = 0x00FF2E;
|
||||
this.setTemperatureRainfall(0.5F, 0.5F);
|
||||
|
||||
this.addWeight(BOPClimates.WARM_TEMPERATE, 3);
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
this.spawnableWaterCreatureList.clear();
|
||||
this.spawnableCreatureList.add(new SpawnListEntry(EntityMooshroom.class, 3, 4, 8));
|
||||
|
||||
// mycelium
|
||||
this.addGenerator("mycelium", GeneratorStage.SAND, (new GeneratorSplotches.Builder()).replace(Blocks.grass).with(Blocks.mycelium.getDefaultState()).scatterYMethod(ScatterYMethod.AT_GROUND).splotchSize(32).create());
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(12);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("mega_oak", 1, (new GeneratorMegaJungleTree.Builder()).log(BlockPlanks.EnumType.OAK).leaves(BlockPlanks.EnumType.OAK).vine(BOPBlocks.ivy.getDefaultState()).create());
|
||||
treeGenerator.add("oak_bush", 1, (new GeneratorBush.Builder()).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(5.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("ferns", 4, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.FERN).create());
|
||||
grassGenerator.add("shortgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.SHORTGRASS).create());
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("sprouts", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.4F).with(BOPPlants.SPROUT).create());
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.7F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("river_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(0.4F).placeOn(BlockQueries.litFertileWaterside).with(BlockBOPPlant.paging.getVariantState(BOPPlants.RIVERCANE)).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("clover_patches", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(2.0F).with(BOPPlants.CLOVERPATCH).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("mixed_lily", GeneratorStage.LILYPAD, (new GeneratorMixedLily.Builder()).amountPerChunk(1.2F).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(1.0F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("swampflowers", 1, (new GeneratorFlora.Builder().with(BOPFlowers.SWAMPFLOWER).create()));
|
||||
|
||||
// shrooms
|
||||
GeneratorWeighted mushroomGenerator = new GeneratorWeighted(4.0F);
|
||||
this.addGenerator("mushrooms", GeneratorStage.SHROOM, mushroomGenerator);
|
||||
mushroomGenerator.add("brown_mushrooms", 4, (new GeneratorFlora.Builder()).with(Blocks.brown_mushroom.getDefaultState()).create());
|
||||
mushroomGenerator.add("red_mushrooms", 4, (new GeneratorFlora.Builder()).with(Blocks.red_mushroom.getDefaultState()).create());
|
||||
mushroomGenerator.add("blue_milk_caps", 2, (new GeneratorFlora.Builder()).with(BlockBOPMushroom.MushroomType.BLUE_MILK_CAP).create());
|
||||
mushroomGenerator.add("flat_mushrooms", 2, (new GeneratorFlora.Builder()).with(BlockBOPMushroom.MushroomType.FLAT_MUSHROOM).create());
|
||||
mushroomGenerator.add("glowshrooms", 1, (new GeneratorFlora.Builder()).with(BlockBOPMushroom.MushroomType.GLOWSHROOM).create());
|
||||
mushroomGenerator.add("portobellos", 6, (new GeneratorFlora.Builder()).with(BlockBOPMushroom.MushroomType.PORTOBELLO).create());
|
||||
mushroomGenerator.add("toadstools", 4, (new GeneratorFlora.Builder()).with(BlockBOPMushroom.MushroomType.TOADSTOOL).create());
|
||||
|
||||
// big mushrooms
|
||||
GeneratorWeighted bigMushroomGenerator = new GeneratorWeighted(6);
|
||||
this.addGenerator("big_mushrooms", GeneratorStage.BIG_SHROOM, bigMushroomGenerator);
|
||||
bigMushroomGenerator.add("brown_mushroom", 1, (new GeneratorBigMushroom.Builder()).mushroomType(GeneratorBigMushroom.BigMushroomType.BROWN).create());
|
||||
bigMushroomGenerator.add("red_mushroom", 1, (new GeneratorBigMushroom.Builder()).mushroomType(GeneratorBigMushroom.BigMushroomType.RED).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x57ED64;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x57ED64;
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
public float getFogDensity(int x, int y, int z)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return 0.6F;
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockFlower.EnumFlowerType;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import biomesoplenty.common.block.BlockBOPGrass;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorBigFlower;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorSplatter;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
|
||||
public class BiomeGenGarden extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenGarden()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(66).heightVariation(6, 14).octaves(0, 0, 1, 1, 2, 2);
|
||||
|
||||
this.setColor(0x74D374);
|
||||
this.setTemperatureRainfall(0.7F, 0.8F);
|
||||
this.topBlock = BOPBlocks.grass.getDefaultState().withProperty(BlockBOPGrass.VARIANT, BlockBOPGrass.BOPGrassType.DAISY);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 3);
|
||||
|
||||
this.spawnableCreatureList.clear();
|
||||
// TODO: implement rosester? this.spawnableCreatureList.add(new SpawnListEntry(EntityRosester.class, 10, 4, 4));
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(2);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("red_big_flowers", 1, (new GeneratorBigFlower.Builder()).flowerType(GeneratorBigFlower.BigFlowerType.RED).create());
|
||||
treeGenerator.add("yellow_big_flowers", 1, (new GeneratorBigFlower.Builder()).flowerType(GeneratorBigFlower.BigFlowerType.YELLOW).create());
|
||||
treeGenerator.add("oak_bush", 3, (new GeneratorBush.Builder()).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(6.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 4, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("shortgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.SHORTGRASS).create());
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("dampgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("doublegrass", 3, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.GRASS).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("sprouts", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(BOPPlants.SPROUT).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.2F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("melons", GeneratorStage.FLOWERS, (new GeneratorSplatter.Builder()).amountPerChunk(0.05F).placeOn(this.topBlock).with(Blocks.melon_block.getDefaultState()).generationAttempts(8).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(3.0F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("poppies", 5, (new GeneratorFlora.Builder().with(EnumFlowerType.POPPY).create()));
|
||||
flowerGenerator.add("white_anemones", 6, (new GeneratorFlora.Builder().with(BOPFlowers.WHITE_ANEMONE).create()));
|
||||
flowerGenerator.add("blue_hydrangeas", 3, (new GeneratorFlora.Builder().with(BOPFlowers.BLUE_HYDRANGEA).create()));
|
||||
flowerGenerator.add("sunflowers", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.SUNFLOWER).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("peridot", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.PERIDOT).create());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("peridot");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x74D374;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x66E266;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
|
||||
public class BiomeGenGlacier extends BiomeGenArctic
|
||||
{
|
||||
public BiomeGenGlacier()
|
||||
{
|
||||
super();
|
||||
|
||||
// clear weights - this biome shouldn't spawn except as arctic sub-biome
|
||||
clearWeights();
|
||||
|
||||
// terrain - higher than arctic
|
||||
this.terrainSettings.avgHeight(88).heightVariation(6, 6).octaves(1, 1, 3, 1, 1, 0);
|
||||
this.avgDirtDepth = 16;
|
||||
|
||||
this.setColor(0xB0BBD9);
|
||||
|
||||
this.topBlock = BOPBlocks.hard_ice.getDefaultState();
|
||||
this.fillerBlock = BOPBlocks.hard_ice.getDefaultState();
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.block.BlockFlower.EnumFlowerType;
|
||||
import net.minecraft.entity.passive.EntityHorse;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.api.block.BlockQueries;
|
||||
import biomesoplenty.common.block.BlockBOPDoublePlant;
|
||||
import biomesoplenty.common.block.BlockBOPMushroom;
|
||||
import biomesoplenty.common.block.BlockBOPPlant;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorColumns;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorLakes;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
|
||||
public class BiomeGenGrassland extends BOPBiome {
|
||||
|
||||
public BiomeGenGrassland() {
|
||||
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(6, 25).octaves(0, 1, 2, 2, 1, 0).sidewaysNoise(0.1D);
|
||||
|
||||
this.setColor(0x7FDB7D);
|
||||
this.setTemperatureRainfall(0.6F, 0.7F);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 7);
|
||||
this.addWeight(BOPClimates.DRY_TEMPERATE, 7);
|
||||
|
||||
this.spawnableCreatureList.add(new SpawnListEntry(EntityHorse.class, 5, 2, 6));
|
||||
|
||||
// lakes
|
||||
this.addGenerator("lakes", GeneratorStage.SAND, (new GeneratorLakes.Builder()).amountPerChunk(0.2F).waterLakeForBiome(this).create());
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(4).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("river_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(1.0F).generationAttempts(24).placeOn(BlockQueries.litFertileWaterside).with(BlockBOPPlant.paging.getVariantState(BOPPlants.RIVERCANE)).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("sugar_cane", GeneratorStage.FLOWERS,(new GeneratorColumns.Builder()).amountPerChunk(4.0F).generationAttempts(24).placeOn(BlockQueries.litFertileWaterside).with(Blocks.reeds.getDefaultState()).minHeight(1).maxHeight(3).create());
|
||||
this.addGenerator("flax", GeneratorStage.FLOWERS,(new GeneratorDoubleFlora.Builder()).amountPerChunk(0.1F).with(BlockBOPDoublePlant.DoublePlantType.FLAX).generationAttempts(6).create());
|
||||
|
||||
// water plants
|
||||
this.addGenerator("water_reeds", GeneratorStage.LILYPAD,(new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(BOPPlants.REED).generationAttempts(32).create());
|
||||
|
||||
// flowers
|
||||
this.addGenerator("flowers", GeneratorStage.FLOWERS, (new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(EnumFlowerType.ALLIUM).create());
|
||||
|
||||
// shrooms
|
||||
this.addGenerator("portobellos", GeneratorStage.SHROOM,(new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(BlockBOPMushroom.MushroomType.PORTOBELLO).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(0.6F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("shortgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.SHORTGRASS).create());
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 4, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("peridot", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.PERIDOT).create());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("peridot");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x7FDB7D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0x7FDB7D;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorProfileTree;
|
||||
|
||||
public class BiomeGenGrove extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenGrove()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(66).heightVariation(8, 20).octaves(0, 1, 2, 2, 1, 0).sidewaysNoise(0.1D);
|
||||
|
||||
this.setColor(0x517F51);
|
||||
this.setTemperatureRainfall(0.7F, 0.8F);
|
||||
|
||||
this.addWeight(BOPClimates.WET_TEMPERATE, 10);
|
||||
|
||||
// other plants
|
||||
this.addGenerator("sprouts", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.SPROUT).create());
|
||||
this.addGenerator("berry_bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.BERRYBUSH).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.3F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("clover_patches", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(3.0F).with(BOPPlants.CLOVERPATCH).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.LEAFPILE).create());
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(3);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("dark_poplar", 1, (new GeneratorProfileTree.Builder()).minHeight(6).maxHeight(14).log(BlockPlanks.EnumType.DARK_OAK).leaves(BlockPlanks.EnumType.DARK_OAK).profile(GeneratorProfileTree.TreeProfile.POPLAR).create());
|
||||
treeGenerator.add("poplar", 1, (new GeneratorProfileTree.Builder()).minHeight(8).maxHeight(18).log(BlockPlanks.EnumType.BIRCH).leaves(BlockPlanks.EnumType.BIRCH).profile(GeneratorProfileTree.TreeProfile.POPLAR).create());
|
||||
treeGenerator.add("bush", 1, (new GeneratorBush.Builder()).create());
|
||||
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(5.0F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("clover", 4, (new GeneratorFlora.Builder().with(BOPFlowers.CLOVER).create()));
|
||||
flowerGenerator.add("white_anemones", 2, (new GeneratorFlora.Builder().with(BOPFlowers.WHITE_ANEMONE).create()));
|
||||
flowerGenerator.add("paeonias", 1, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.PAEONIA).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("mediumgrass", 2, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 1, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("amber", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.AMBER).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("amber");}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
double noise = field_180281_af.func_151601_a((double)pos.getX() * 0.0225D, (double)pos.getZ() * 0.0225D);
|
||||
return noise < -0.1D ? 0x517F51 : 0x609E58;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
double noise = field_180281_af.func_151601_a((double)pos.getX() * 0.0225D, (double)pos.getZ() * 0.0225D);
|
||||
return noise < -0.1D ? 0x619961 : 0x75B569;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,108 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockFlower;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.entity.passive.EntityHorse;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPFlowers;
|
||||
import biomesoplenty.common.enums.BOPGems;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.enums.BOPTrees;
|
||||
import biomesoplenty.common.enums.BOPWoods;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
import biomesoplenty.common.world.feature.GeneratorWaterside;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBasicTree;
|
||||
import biomesoplenty.common.world.feature.tree.GeneratorBush;
|
||||
|
||||
public class BiomeGenHeathland extends BOPBiome
|
||||
{
|
||||
public BiomeGenHeathland()
|
||||
{
|
||||
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(64).heightVariation(6, 21);
|
||||
|
||||
this.setColor(0xCEC577);
|
||||
this.setTemperatureRainfall(0.8F, 0.2F);
|
||||
|
||||
this.addWeight(BOPClimates.WARM_TEMPERATE, 10);
|
||||
|
||||
this.spawnableCreatureList.clear(); // none of your regular farmyard critters here
|
||||
// TODO: why is there SO many horses?
|
||||
this.spawnableCreatureList.add(new SpawnListEntry(EntityHorse.class, 1, 2, 6));
|
||||
|
||||
// gravel
|
||||
this.addGenerator("gravel", GeneratorStage.SAND_PASS2, (new GeneratorWaterside.Builder()).amountPerChunk(4).maxRadius(7).with(Blocks.gravel.getDefaultState()).create());
|
||||
|
||||
// flowers
|
||||
GeneratorWeighted flowerGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("flowers", GeneratorStage.GRASS, flowerGenerator);
|
||||
flowerGenerator.add("wildflower", 4, (new GeneratorFlora.Builder()).with(BOPFlowers.WILDFLOWER).create());
|
||||
flowerGenerator.add("poppy", 3, (new GeneratorFlora.Builder()).with(BlockFlower.EnumFlowerType.POPPY).create());
|
||||
flowerGenerator.add("syringa", 2, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.SYRINGA).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(2.0F);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("tallgrass", 2, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("mediumgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.MEDIUMGRASS).create());
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
|
||||
// trees
|
||||
GeneratorWeighted treeGenerator = new GeneratorWeighted(3);
|
||||
this.addGenerator("trees", GeneratorStage.TREE, treeGenerator);
|
||||
treeGenerator.add("jacaranda_bush", 1, (new GeneratorBush.Builder()).log(BOPWoods.JACARANDA).leaves(BOPTrees.JACARANDA).create());
|
||||
treeGenerator.add("oak_bush", 1, (new GeneratorBush.Builder()).create());
|
||||
treeGenerator.add("oak", 1, (new GeneratorBasicTree.Builder()).create());
|
||||
|
||||
// other plants
|
||||
this.addGenerator("berry_bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.BERRYBUSH).create());
|
||||
this.addGenerator("bushes", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.2F).with(BOPPlants.BUSH).create());
|
||||
this.addGenerator("shrubs", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.SHRUB).create());
|
||||
this.addGenerator("leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(1.0F).with(BOPPlants.LEAFPILE).create());
|
||||
this.addGenerator("dead_leaf_piles", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.5F).with(BOPPlants.DEADLEAFPILE).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("peridot", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(BOPGems.PERIDOT).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("peridot");}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getGrassColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xCEC577;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFoliageColorAtPos(BlockPos pos)
|
||||
{
|
||||
return 0xAEC681;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2015, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.biome.overworld;
|
||||
|
||||
import net.minecraft.block.BlockDoublePlant;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.init.Blocks;
|
||||
import biomesoplenty.api.biome.BOPBiome;
|
||||
import biomesoplenty.api.biome.generation.GeneratorStage;
|
||||
import biomesoplenty.api.biome.generation.GeneratorWeighted;
|
||||
import biomesoplenty.common.enums.BOPClimates;
|
||||
import biomesoplenty.common.enums.BOPPlants;
|
||||
import biomesoplenty.common.util.biome.GeneratorUtils.ScatterYMethod;
|
||||
import biomesoplenty.common.world.BOPWorldSettings;
|
||||
import biomesoplenty.common.world.feature.GeneratorBlobs;
|
||||
import biomesoplenty.common.world.feature.GeneratorDoubleFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorFlora;
|
||||
import biomesoplenty.common.world.feature.GeneratorGrass;
|
||||
import biomesoplenty.common.world.feature.GeneratorOreSingle;
|
||||
|
||||
public class BiomeGenHighland extends BOPBiome
|
||||
{
|
||||
|
||||
public BiomeGenHighland()
|
||||
{
|
||||
// terrain
|
||||
this.terrainSettings.avgHeight(120).heightVariation(25, 25);
|
||||
|
||||
this.setColor(0x7CAD66);
|
||||
this.setTemperatureRainfall(0.5F, 0.8F);
|
||||
|
||||
this.addWeight(BOPClimates.COOL_TEMPERATE, 7);
|
||||
|
||||
// other plants
|
||||
this.addGenerator("wild_carrots", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(0.1F).with(BOPPlants.WILDCARROT).create());
|
||||
|
||||
// boulders
|
||||
this.addGenerator("boulders", GeneratorStage.SAND, (new GeneratorBlobs.Builder()).amountPerChunk(0.5F).placeOn(Blocks.grass).with(Blocks.cobblestone.getDefaultState()).minRadius(0.3F).maxRadius(1.2F).numBalls(1).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
this.addGenerator("big_boulders", GeneratorStage.SAND, (new GeneratorBlobs.Builder()).amountPerChunk(0.1F).placeOn(Blocks.grass).with(Blocks.cobblestone.getDefaultState()).minRadius(0.3F).maxRadius(4.0F).numBalls(3).scatterYMethod(ScatterYMethod.AT_SURFACE).create());
|
||||
|
||||
// grasses
|
||||
GeneratorWeighted grassGenerator = new GeneratorWeighted(10);
|
||||
this.addGenerator("grass", GeneratorStage.GRASS, grassGenerator);
|
||||
grassGenerator.add("wheatgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.WHEATGRASS).create());
|
||||
grassGenerator.add("dampgrass", 1, (new GeneratorGrass.Builder()).with(BOPPlants.DAMPGRASS).create());
|
||||
grassGenerator.add("tallgrass", 1, (new GeneratorGrass.Builder()).with(BlockTallGrass.EnumType.GRASS).create());
|
||||
grassGenerator.add("doublegrass", 4, (new GeneratorDoubleFlora.Builder()).with(BlockDoublePlant.EnumPlantType.GRASS).create());
|
||||
|
||||
// gem
|
||||
this.addGenerator("peridot", GeneratorStage.SAND, (new GeneratorOreSingle.Builder()).amountPerChunk(12).with(Blocks.emerald_ore.getDefaultState()).create());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applySettings(BOPWorldSettings settings)
|
||||
{
|
||||
if (!settings.generateBopGems) {this.removeGenerator("peridot");}
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue