Compare commits

..
7 Commits
Author SHA1 Message Date
mezz ac653d46c1 Fix #326 decorative leaves should not pollinate 2014-11-15 04:15:20 -08:00
mezz 63d9935d01 Minor code cleanup 2014-11-15 04:15:14 -08:00
mezz ba695b977d Fix #325 Centrifuge dupe bug 2014-11-15 04:13:46 -08:00
CovertJaguar 6b1dfb1596 Set submodules 2014-11-15 04:12:44 -08:00
CovertJaguar fff02be71d Bump version to 3.2 2014-11-08 21:40:45 -08:00
CovertJaguar 0e5b9e4957 Merge branch 'dev' into release_3.2
Conflicts:
	src/main/resources/assets/forestry/textures/blocks/storage/apatite.png
	src/main/resources/assets/forestry/textures/blocks/storage/bronze.png
	src/main/resources/assets/forestry/textures/blocks/storage/copper.png
	src/main/resources/assets/forestry/textures/blocks/storage/tin.png
2014-11-08 21:39:26 -08:00
MysteriousAges 3415030fbf Revert "Storage block textures - Apatite, Bronze, Copper, Tin."
This reverts commit c8fd93873a.
2014-10-24 20:18:30 -07:00
3455 changed files with 79273 additions and 124127 deletions

No files matched your search

+2 -6
View File
@@ -5,8 +5,6 @@
!/forestry_techne
!/gradle/wrapper
!/src
!/api
!/test
# files
!/.gitignore
@@ -14,11 +12,9 @@
!/CLA.txt
!/CONTRIBUTING.md
!/LICENSE.txt
!/license-header.txt
!/README.md
!/gradle.properties
!/application.properties
!/build.gradle
!/build.xml
!/gradlew
!/gradlew.bat
.DS_Store
!/gradlew.bat
+3
View File
@@ -1,3 +1,6 @@
[submodule "lang"]
path = lang
url = https://github.com/ForestryMC/Forestry-Localization.git
[submodule "api"]
path = api
url = https://github.com/ForestryMC/ForestryAPI.git
+3 -3
View File
@@ -1,6 +1,6 @@
Forestry
====================================
### What is it?
Forestry is a modification for the game Minecraft and known primarily for its farms and bees.
@@ -9,7 +9,7 @@ Forestry is a modification for the game Minecraft and known primarily for its fa
[Wiki](http://forestry.sengir.net/)
[Latest Builds for 1.10 / 1.10.2](http://jenkins.ic2.player.to/job/Forestry_5/)
[Latest Builds for 1.7.10](http://jenkins.ic2.player.to/job/Forestry_Dev/)
[IRC #forestry on esper.net](http://webchat.esper.net/?nick=ForestryGithub...&channels=forestry&prompt=1)
@@ -31,7 +31,7 @@ Beware of ugly code.
Bugfixes are generally welcome. If you want to contribute something which changes game mechanics, please talk to someone with commit privileges first. Nothing is more frustrating than putting a lot of work and effort into a new game mechanic and then having the PR rejected because it doesn’t fit gameplay-wise.
**If you submit a PR you must accept the [Contributor License Agreement](https://cla-assistant.io/ForestryMC/ForestryMC). There is no way around that, since otherwise changing the license later - even to something more permissive! - , becomes close to impossible.**
**If you submit a PR you must accept the [Contributor License Agreement](https://www.clahub.com/agreements/ForestryMC/ForestryMC). There is no way around that, since otherwise changing the license later - even to something more permissive! - , becomes close to impossible.**
### License & Copyright
Submodule
+1
Submodule api added at 4f7ca82190.
+6
View File
@@ -0,0 +1,6 @@
mcversion=1.7.10
forgeversion=10.13.0.1207
version_major=3
version_minor=2
version_patch=0
+251 -79
View File
@@ -1,20 +1,27 @@
buildscript {
repositories {
jcenter()
maven { url = "http://files.minecraftforge.net/maven" }
mavenCentral()
maven {
name = "forge"
url = "http://files.minecraftforge.net/maven"
}
maven {
name = "sonatype"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT'
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
// https://github.com/ajoberstar/gradle-git
classpath 'org.ajoberstar:gradle-git:0.8.0'
}
}
plugins {
id "com.matthewprenger.cursegradle" version "1.0.7"
id "se.bjurr.gitchangelog.git-changelog-gradle-plugin" version "1.32"
}
apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'forge'
apply plugin: 'maven'
loadProperties()
version = version_major + '.' + version_minor + '.' + version_patch + '.' + getBuildNumber()
if (project.hasProperty('buildQualifier')) {
version = project.version + '-' + project.buildQualifier
@@ -24,22 +31,31 @@ archivesBaseName = "forestry_" + mcversion
ext.dirDest = './build/dist'
ext.dirLang = "./lang"
ext.dirApi = "./api"
// java version
sourceCompatibility = 1.8
targetCompatibility = 1.8
ext.CraftGuideRepo = "https://github.com/Uristqwerty/CraftGuide.git"
ext.CraftGuideTmp = "build/tmp/CraftGuide"
minecraft {
version = mcversion + "-" + forgeversion
runDir = "run"
mappings = mcp_mappings
replace '@VERSION@', project.version
replace '@BUILD_NUMBER@', getBuildNumber()
}
sourceSets {
api {
java {
srcDir CraftGuideTmp + "/src"
include '**/CraftGuide/api/**'
}
}
main {
java {
srcDir project.dirApi
}
resources {
srcDir project.dirLang
}
@@ -47,28 +63,20 @@ sourceSets {
}
repositories {
maven {
url 'http://maven.epoxide.xyz'
}
maven {
url "http://dvs1.progwml6.com/files/maven"
}
maven {
name = "ic2"
url = "http://maven.ic2.player.to/"
}
}
dependencies {
deobfCompile "net.darkhax.tesla:Tesla:${tesla_version}"
deobfCompile "mezz.jei:jei_${mcversion}:${jei_version}:api"
runtime "mezz.jei:jei_${mcversion}:${jei_version}"
// deobfCompile "net.industrial-craft:industrialcraft-2:${ic2_version}:api"
configurations {
apis
compile.extendsFrom apis
}
configurations {
api
compile.extendsFrom api
dependencies {
compile 'net.industrial-craft:industrialcraft-2:2.2.575-experimental:api'
apis 'com.mod-buildcraft:buildcraft:6.1.5:dev'
}
processResources {
@@ -90,42 +98,218 @@ processResources {
exclude 'mcmod.info'
exclude '**/*.md'
}
// Move access transformers to META-INF
rename '(.+_at.cfg)', 'META-INF/$1'
}
// prevent java 8's strict doclint for javadocs from failing builds
allprojects {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
runClient {
if (project.hasProperty('mcUsername')) {
args "--username=" + project.mcUsername
}
if (project.hasProperty('mcPassword')) {
args "--password=" + project.mcPassword
}
}
debugClient {
if (project.hasProperty('mcUsername')) {
args "--username=" + project.mcUsername
}
if (project.hasProperty('mcPassword')) {
args "--password=" + project.mcPassword
}
}
task echoVersion << {
printNextVersion()
}
def saveVersion() {
ant.propertyfile(
file: "application.properties") {
entry( key:"version_major", type:"int", value: version_major)
entry( key:"version_minor", type:"int", value: version_minor)
entry( key:"version_patch", type:"int", value: version_patch)
}
project.version = version_major + '.' + version_minor + '.' + version_patch + '.' + getBuildNumber()
printNextVersion()
}
def printNextVersion() {
println '*************************************************************'
println 'The next build will be version: ' + project.version
println '*************************************************************'
}
task bumpMajor << {
project.version_major = Integer.parseInt(project.version_major) + 1
project.version_minor = "0"
project.version_patch = "0"
saveVersion()
}
task bumpMinor << {
project.version_minor = Integer.parseInt(project.version_minor) + 1
project.version_patch = "0"
saveVersion()
}
task bumpPatch << {
project.version_patch = Integer.parseInt(project.version_patch) + 1
saveVersion()
}
import org.ajoberstar.grgit.Grgit
task initCraftGuide << {
def localRepo = file(CraftGuideTmp)
if (localRepo.exists()) {
println 'Updating CraftGuide repo'
def grgit = Grgit.open(localRepo)
grgit.pull()
grgit.close()
} else {
println 'Cloning CraftGuide repo'
def grgit = Grgit.clone(dir: localRepo, uri: CraftGuideRepo)
grgit.close()
}
}
jar {
manifest {
attributes 'FMLAT': 'forestry_at.cfg'
destinationDir = file("build/tmp")
archiveName = "main.jar"
from {
configurations.apis.collect {
it.isDirectory() ? it : zipTree(it).matching {
include '**/api/**'
}
}
}
}
task sourcesJar(type: Jar) {
from zipTree('build/retromapping/retromappedReplacedMain.jar') // Not sure if this is how Abrar designed it, but grab the remapped src
classifier = 'sources'
task mainJarSigned ( type: Jar, dependsOn: 'reobf' ) {
from (zipTree(jar.getArchivePath())) {
exclude '**/api/**'
exclude '**/codechicken/**'
exclude '**/old/lang/**'
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
destinationDir = file("build/tmp")
archiveName = "signed.jar"
doLast {
if (project.hasProperty('signingKeystore')) {
ant.signjar(jar: getArchivePath(),
alias: signingAlias,
keystore: signingKeystore,
storepass: signingStorepass)
} else {
println 'Signing disabled, gradle.properties is missing.'
}
}
}
task apiJar(type: Jar) {
// TODO: when FG bug is fixed, remove allSource from the api jar.
// https://github.com/MinecraftForge/ForgeGradle/issues/369
// Gradle should be able to pull them from the -sources jar.
from sourceSets.main.allSource
from sourceSets.main.output
include 'forestry/api/**'
task mainJar ( type: Zip, dependsOn: mainJarSigned ) {
from (zipTree(mainJarSigned.getArchivePath())) {
include '**'
}
from (zipTree(jar.getArchivePath())) {
include '**'
exclude '**/codechicken/**'
exclude '**/old/lang/**'
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
destinationDir = file(dirDest)
includeEmptyDirs = false
extension = 'jar'
}
task devJarSigned ( type: Jar, dependsOn: 'classes' ) {
from(sourceSets.main.output) {
exclude '**/api/**'
exclude '**/codechicken/**'
exclude '**/old/lang/**'
}
destinationDir = file("build/tmp")
archiveName = "signed-dev.jar"
doLast {
if (project.hasProperty('signingKeystore')) {
ant.signjar(jar: getArchivePath(),
alias: signingAlias,
keystore: signingKeystore,
storepass: signingStorepass)
} else {
println 'Signing disabled, gradle.properties is missing.'
}
}
}
task devJar ( type: Zip, dependsOn: devJarSigned ) {
from (zipTree(devJarSigned.getArchivePath())) {
include '**'
}
from(sourceSets.main.allSource) {
include '**'
exclude '**/codechicken/**'
exclude '**/old/lang/**'
}
from(sourceSets.main.output) {
include '**'
exclude '**/codechicken/**'
exclude '**/old/lang/**'
}
from {
configurations.apis.collect {
it.isDirectory() ? it : zipTree(it).matching {
include '**/api/**'
}
}
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
destinationDir = file(dirDest)
extension = 'jar'
classifier = 'dev'
}
task apiJar(type: Jar, dependsOn: 'classes') {
from (dirApi) {
include '**'
}
from (sourceSets.main.output) {
include 'forestry/api/**'
}
destinationDir = file(dirDest)
extension = 'jar'
classifier = 'api'
}
task release(dependsOn: [apiJar, devJar, mainJar]) {
doLast {
println '*************************************************************'
println 'This build will be version: ' + project.version
println '*************************************************************'
}
}
afterEvaluate {
compileApiJava.dependsOn initCraftGuide
}
artifacts {
archives sourcesJar
archives apiJar
archives devJar
}
uploadArchives {
@@ -133,9 +317,29 @@ uploadArchives {
if (project.hasProperty('mavenDir')) {
mavenDeployer {
repository(url: "file://"+mavenDir)
addFilter('api') { artifact, file ->
file == apiJar.archivePath
}
addFilter('dev') { artifact, file ->
file == devJar.archivePath
}
}
} else {
println 'Archives upload disabled, mavenDir in gradle.properties is missing.'
println 'Archives upload disabled, gradle.properties is missing.'
}
}
}
def loadProperties() {
println('loading application.properties')
file("application.properties").withReader { reader ->
def userProps = new Properties()
userProps.load(reader)
for (Map.Entry property in userProps) {
project.ext[property.getKey()] = property.getValue()
}
}
}
@@ -144,35 +348,3 @@ def getBuildNumber() {
return "$System.env.BUILD_NUMBER" != "null" ? "$System.env.BUILD_NUMBER" : "0"
}
task makeChangelog(type: se.bjurr.gitchangelog.plugin.gradle.GitChangelogTask) {
filePath = "changelog.html"
untaggedName = "Current release ${project.version}"
fromCommit = "5a3850c2642e535656d090d1473054d5fa8d3331"
toRef = "HEAD"
templateContent = """
Alpha version, still buggy. Do not create a world you care about with this version, it can and will break things severely.<br/>
Please help the project by trying it out and <a href="https://github.com/ForestryMC/ForestryMC/issues">reporting issues here.</a><br/>
{{#tags}}
<h3>{{name}}</h3>
<ul>
{{#commits}}
<li>{{{message}}} - {{authorName}}</li>
{{/commits}}
</ul>
{{/tags}}
"""
}
curseforge {
apiKey = project.hasProperty('curseforge_apikey') ? project.curseforge_apikey : '0'
project {
id = '59751'
changelog = file('changelog.html')
changelogType = 'html'
releaseType = 'alpha'
}
}
afterEvaluate {
tasks.curseforge59751.dependsOn.add(makeChangelog)
}
-7
View File
@@ -1,7 +0,0 @@
Account;Email;Date;
samtrion;[email protected];2015-01-18
GenuineSounds;[email protected];2015-02-26
airbreather;[email protected];2015-04-10
ganymedes01;[email protected];2015-05-27
infinityraider;theoneandonlyraider@gmail;com;2015-10-03
girafistudios;[email protected];2016-06-02
Binary file not shown.
-11
View File
@@ -1,11 +0,0 @@
mcversion=1.11.2
forgeversion=13.20.0.2201
mcp_mappings=snapshot_20161220
tesla_version=1.11-1.3.0.51
jei_version=4.2.0.211
#ic2_version=2.6.76-ex110
version_major=5
version_minor=3
version_patch=0
Binary file not shown.
+2 -2
View File
@@ -1,6 +1,6 @@
#Mon Sep 14 12:28:28 PDT 2015
#Wed Jul 02 15:54:47 CDT 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
+1 -1
Submodule lang updated: d39f07201c...8ca6c91070.
-12
View File
@@ -1,12 +0,0 @@
/*
*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
*******************************************************************************
*/
-21
View File
@@ -1,21 +0,0 @@
## Inventory Tweaks Mod license (MIT)
Copyright (c) 2011-2013 Marwane Kalam-Alami
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-69
View File
@@ -1,69 +0,0 @@
/*
* Copyright (c) 2013 Andrew Crocker
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package invtweaks.api;
import java.util.Collection;
import java.util.List;
import java.util.Random;
@SuppressWarnings("unused")
public interface IItemTree {
void registerOre(String category, String name, String oreName, int order);
boolean matches(List<IItemTreeItem> items, String keyword);
boolean isKeywordValid(String keyword);
Collection<IItemTreeCategory> getAllCategories();
IItemTreeCategory getRootCategory();
void setRootCategory(IItemTreeCategory category);
IItemTreeCategory getCategory(String keyword);
boolean isItemUnknown(String id, int damage);
List<IItemTreeItem> getItems(String id, int damage);
List<IItemTreeItem> getItems(String name);
IItemTreeItem getRandomItem(Random r);
boolean containsItem(String name);
boolean containsCategory(String name);
IItemTreeCategory addCategory(String parentCategory, String newCategory) throws NullPointerException;
void addCategory(String parentCategory, IItemTreeCategory newCategory) throws NullPointerException;
IItemTreeItem addItem(String parentCategory, String name, String id, int damage, int order)
throws NullPointerException;
void addItem(String parentCategory, IItemTreeItem newItem) throws NullPointerException;
int getKeywordDepth(String keyword);
int getKeywordOrder(String keyword);
}
@@ -1,47 +0,0 @@
/*
* Copyright (c) 2013 Andrew Crocker
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package invtweaks.api;
import java.util.Collection;
import java.util.List;
@SuppressWarnings("unused")
public interface IItemTreeCategory {
boolean contains(IItemTreeItem item);
void addCategory(IItemTreeCategory category);
void addItem(IItemTreeItem item);
Collection<IItemTreeCategory> getSubCategories();
Collection<List<IItemTreeItem>> getItems();
String getName();
int getCategoryOrder();
int findCategoryOrder(String keyword);
int findKeywordDepth(String keyword);
}
@@ -1,34 +0,0 @@
/*
* Copyright (c) 2013 Andrew Crocker
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package invtweaks.api;
@SuppressWarnings("unused")
public interface IItemTreeItem extends Comparable<IItemTreeItem> {
String getName();
String getId();
int getDamage();
int getOrder();
}
@@ -1,30 +0,0 @@
/*
* Copyright (c) 2013 Andrew Crocker
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package invtweaks.api;
import java.util.EventListener;
@SuppressWarnings("unused")
public interface IItemTreeListener extends EventListener {
void onTreeLoaded(IItemTree tree);
}
@@ -1,75 +0,0 @@
/*
* Copyright (c) 2013 Andrew Crocker
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package invtweaks.api;
import invtweaks.api.container.ContainerSection;
import net.minecraft.item.ItemStack;
/**
* Interface to access functions exposed by Inventory Tweaks
* <p/>
* The main @Mod instance of the mod implements this interface, so a refernce to it can
* be obtained via @Instance("inventorytweaks") or methods in net.minecraftforge.fml.common.Loader
* <p/>
* All of these functions currently have no effect if called on a dedicated server.
*/
@SuppressWarnings("unused")
public interface InvTweaksAPI {
/**
* Add a listener for ItemTree load events
*/
void addOnLoadListener(IItemTreeListener listener);
/**
* Remove a listener for ItemTree load events
*
* @return true if the listener was previously added
*/
boolean removeOnLoadListener(IItemTreeListener listener);
/**
* Toggle sorting shortcut state.
*/
void setSortKeyEnabled(boolean enabled);
/**
* Toggle sorting shortcut supression.
* Unlike setSortKeyEnabled, this flag is automatically cleared when GUIs are closed.
*/
void setTextboxMode(boolean enabled);
/**
* Compare two items using the default (non-rule based) algorithm,
* sutable for an implementation of Comparator&lt;ItemStack&gt;.
*
* @param i
* @param j
* @return A value with a sign representing the relative order of the item stacks
*/
int compareItems(ItemStack i, ItemStack j);
/**
* Initiate a sort as if the player had clicked on a sorting button or pressed the sort key.
*/
void sort(ContainerSection section, SortingMethod method);
}
@@ -1,52 +0,0 @@
/*
* Copyright (c) 2013 Andrew Crocker
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package invtweaks.api;
@SuppressWarnings("unused")
public enum SortingMethod {
/**
* Standard 'r' sorting for generic inventories
*/
DEFAULT,
/**
* Sort method creating vertical columns of items.
* Used for chests only, requires container to have a valid row size for correct results.
*/
VERTICAL,
/**
* Sort method creating horizontal rows of items.
* Used for chests only, requires container to have a valid row size for correct results.
*/
HORIZONTAL,
/**
* Sort method for player inventory.
* Applies to extra player-specified sorting rules for the main inventory.
* Will always operate on main inventory.
*/
INVENTORY,
/**
* Attempts to even the number of items in each stack of the same type of item, without moving full stacks.
* Used in crafting grid sorting.
*/
EVEN_STACKS,
}
@@ -1,38 +0,0 @@
package invtweaks.api.container;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* A marker for containers that have a chest-like persistant storage component. Enables the Inventroy Tweaks sorting
* buttons for this container.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ChestContainer {
// Set to true if the Inventory Tweaks sorting buttons should be shown for this container.
boolean showButtons() default true;
// Size of a chest row
int rowSize() default 9;
// Uses 'large chest' mode for sorting buttons
// (Renders buttons vertically down the right side of the GUI)
boolean isLargeChest() default false;
// Annotation for method to get size of a chest row if it is not a fixed size for this container class
// Signature int func()
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface RowSizeCallback {
}
// Annotation for method to get size of a chest row if it is not a fixed size for this container class
// Signature int func()
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface IsLargeCallback {
}
}
@@ -1,89 +0,0 @@
/*
* Copyright (c) 2013 Andrew Crocker
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package invtweaks.api.container;
/**
* Names for specific parts of containers. For unknown container types (such as mod containers), only INVENTORY and
* CHEST sections are available.
*/
@SuppressWarnings("unused")
public enum ContainerSection {
/**
* The player's inventory
*/
INVENTORY,
/**
* The player's inventory (only the hotbar)
*/
INVENTORY_HOTBAR,
/**
* The player's inventory (all except the hotbar)
*/
INVENTORY_NOT_HOTBAR,
/**
* The chest or dispenser contents. Also used for unknown container contents.
*/
CHEST,
/**
* The crafting input
*/
CRAFTING_IN,
/**
* The crafting input, for containters that store it internally
*/
CRAFTING_IN_PERSISTENT,
/**
* The crafting output
*/
CRAFTING_OUT,
/**
* The armor slots
*/
ARMOR,
/**
* The furnace input
*/
FURNACE_IN,
/**
* The furnace output
*/
FURNACE_OUT,
/**
* The furnace fuel
*/
FURNACE_FUEL,
/**
* The enchantment table slot
*/
ENCHANTMENT,
/**
* The three bottles slots in brewing tables
* NOTE: Do not use without also using BREWING_INGREDIENT.
*/
BREWING_BOTTLES,
/**
* The top slot in brewing tables
* NOTE: Do not use without also using BREWING_BOTTLES.
*/
BREWING_INGREDIENT
}
@@ -1,16 +0,0 @@
package invtweaks.api.container;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* A marker for a method to call which returns the set of ContainerSections for this container.
* <p/>
* Signature of the method should be Map<ContainerSection, List<Slot>> func()
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ContainerSectionCallback {
}
@@ -1,15 +0,0 @@
package invtweaks.api.container;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Use this annotation to override inherited annotation properties and mark a Container as unsortable.
* This effect is inherited as well.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface IgnoreContainer {
}
@@ -1,20 +0,0 @@
package invtweaks.api.container;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* A marker for containers that need special treatment, such as crafting inputs or alternate player inventory positions,
* but do not have a chest-like component.
* <p/>
* Does not enable the Inventory Tweaks sorting buttons for this container.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface InventoryContainer {
// Set to true if the Inventory Tweaks options button should be shown for this container.
// (For instance, if you are replacing a vanilla container such as the player's inventory)
boolean showOptions() default true;
}
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014 ChickenBones
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,38 @@
package codechicken.nei;
public class VisiblityData
{
public boolean showUtilityButtons = true;
public boolean showStateButtons = true;
/**
* Item panel and associated buttons
*/
public boolean showItemPanel = true;
/**
* Item and search section
*/
public boolean showItemSection = true;
/**
* Dropdown and Item search field
*/
public boolean showSearchSection = true;
/**
* All widgets except options button
*/
public boolean showWidgets = true;
/**
* The entire NEI interface, aka hidden
*/
public boolean showNEI = true;
public boolean enableDeleteMode = true;
public void translateDependancies()
{
if(!showNEI)
showWidgets = false;
if(!showWidgets)
showItemSection = showUtilityButtons = showStateButtons = false;
if(!showItemSection)
showSearchSection = showItemPanel = false;
}
}
@@ -0,0 +1,49 @@
package codechicken.nei.api;
import codechicken.nei.VisiblityData;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import java.util.List;
/**
* If this is implemented on a gui, it will be automatically registered
*/
public interface INEIGuiHandler
{
public VisiblityData modifyVisiblity(GuiContainer gui, VisiblityData currentVisibility);
/**
* NEI will give the specified item to the InventoryRange returned if the player's inventory is full.
* return null for no range
*/
public Iterable<Integer> getItemSpawnSlots(GuiContainer gui, ItemStack item);
/**
* @return A list of TaggedInventoryAreas that will be used with the savestates.
*/
public List<TaggedInventoryArea> getInventoryAreas(GuiContainer gui);
/**
* Handles clicks while an itemstack has been dragged from the item panel. Use this to set configurable slots and the like.
* Changes made to the stackSize of the dragged stack will be kept
* @param gui The current gui instance
* @param mousex The x position of the mouse
* @param mousey The y position of the mouse
* @param draggedStack The stack being dragged from the item panel
* @param button The button presed
* @return True if the drag n drop was handled. False to resume processing through other routes. The held stack will be deleted if draggedStack.stackSize == 0
*/
public boolean handleDragNDrop(GuiContainer gui, int mousex, int mousey, ItemStack draggedStack, int button);
/**
* Used to prevent the item panel from drawing on top of other gui elements.
* This function will also be called with a 1x1 size rectangle on the mouse position for determining if the given coordinate should override item panel functions such as scrolling
* @param x The x coordinate of the rectangle bounding the slot
* @param y The y coordinate of the rectangle bounding the slot
* @param w The w coordinate of the rectangle bounding the slot
* @param h The h coordinate of the rectangle bounding the slot
* @return true if the item panel slot within the specified rectangle should not be rendered.
*/
public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h);
}
@@ -0,0 +1,48 @@
package codechicken.nei.api;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import java.util.HashSet;
public class TaggedInventoryArea
{
public HashSet<Integer> slots = new HashSet<Integer>();
public String tagName;
/**
* Only for player inventories.
*/
private IInventory inventory;
/**
* Other inventories
*/
private Container container;
public TaggedInventoryArea(InventoryPlayer invPlayer)
{
this("InventoryPlayer", 0, 39, null);
inventory = invPlayer;
}
public TaggedInventoryArea(String name, int first, int last, Container container)
{
this.container = container;
tagName = name;
for(int i = first; i <= last; i++)
slots.add(i);
}
public ItemStack getStackInSlot(int i)
{
if(inventory != null)
return inventory.getStackInSlot(i);
return container.getSlot(i).getStack();
}
public boolean isContainer()
{
return inventory == null;
}
}
+11
View File
@@ -0,0 +1,11 @@
package cofh.api;
public class CoFHAPIProps {
private CoFHAPIProps() {
}
public static final String VERSION = "1.7.10R1.0.1";
}
@@ -0,0 +1,158 @@
package cofh.api.energy;
import net.minecraft.nbt.NBTTagCompound;
/**
* Reference implementation of {@link IEnergyStorage}. Use/extend this or implement your own.
*
* @author King Lemming
*
*/
public class EnergyStorage implements IEnergyStorage {
protected int energy;
protected int capacity;
protected int maxReceive;
protected int maxExtract;
public EnergyStorage(int capacity) {
this(capacity, capacity, capacity);
}
public EnergyStorage(int capacity, int maxTransfer) {
this(capacity, maxTransfer, maxTransfer);
}
public EnergyStorage(int capacity, int maxReceive, int maxExtract) {
this.capacity = capacity;
this.maxReceive = maxReceive;
this.maxExtract = maxExtract;
}
public EnergyStorage readFromNBT(NBTTagCompound nbt) {
this.energy = nbt.getInteger("Energy");
if (energy > capacity) {
energy = capacity;
}
return this;
}
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
if (energy < 0) {
energy = 0;
}
nbt.setInteger("Energy", energy);
return nbt;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
if (energy > capacity) {
energy = capacity;
}
}
public void setMaxTransfer(int maxTransfer) {
setMaxReceive(maxTransfer);
setMaxExtract(maxTransfer);
}
public void setMaxReceive(int maxReceive) {
this.maxReceive = maxReceive;
}
public void setMaxExtract(int maxExtract) {
this.maxExtract = maxExtract;
}
public int getMaxReceive() {
return maxReceive;
}
public int getMaxExtract() {
return maxExtract;
}
/**
* This function is included to allow for server -&gt; client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers are
* guaranteed to have it.
*
* @param energy
*/
public void setEnergyStored(int energy) {
this.energy = energy;
if (this.energy > capacity) {
this.energy = capacity;
} else if (this.energy < 0) {
this.energy = 0;
}
}
/**
* This function is included to allow the containing tile to directly and efficiently modify the energy contained in the EnergyStorage. Do not rely on this
* externally, as not all IEnergyHandlers are guaranteed to have it.
*
* @param energy
*/
public void modifyEnergyStored(int energy) {
this.energy += energy;
if (this.energy > capacity) {
this.energy = capacity;
} else if (this.energy < 0) {
this.energy = 0;
}
}
/* IEnergyStorage */
@Override
public int receiveEnergy(int maxReceive, boolean simulate) {
int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));
if (!simulate) {
energy += energyReceived;
}
return energyReceived;
}
@Override
public int extractEnergy(int maxExtract, boolean simulate) {
int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract));
if (!simulate) {
energy -= energyExtracted;
}
return energyExtracted;
}
@Override
public int getEnergyStored() {
return energy;
}
@Override
public int getMaxEnergyStored() {
return capacity;
}
}
@@ -0,0 +1,21 @@
package cofh.api.energy;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not
* accept it; otherwise just use IEnergyHandler.
*
* Note that {@link IEnergyHandler} is an extension of this.
*
* @author King Lemming
*
*/
public interface IEnergyConnection {
/**
* Returns TRUE if the TileEntity can connect on a given side.
*/
boolean canConnectEnergy(ForgeDirection from);
}
@@ -0,0 +1,52 @@
package cofh.api.energy;
import net.minecraft.item.ItemStack;
/**
* Implement this interface on Item classes that support external manipulation of their internal energy storages.
*
* A reference implementation is provided {@link ItemEnergyContainer}.
*
* @author King Lemming
*
*/
public interface IEnergyContainerItem {
/**
* Adds energy to a container item. Returns the quantity of energy that was accepted. This should always return 0 if the item cannot be externally charged.
*
* @param container
* ItemStack to be charged.
* @param maxReceive
* Maximum amount of energy to be sent into the item.
* @param simulate
* If TRUE, the charge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) received by the item.
*/
int receiveEnergy(ItemStack container, int maxReceive, boolean simulate);
/**
* Removes energy from a container item. Returns the quantity of energy that was removed. This should always return 0 if the item cannot be externally
* discharged.
*
* @param container
* ItemStack to be discharged.
* @param maxExtract
* Maximum amount of energy to be extracted from the item.
* @param simulate
* If TRUE, the discharge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted from the item.
*/
int extractEnergy(ItemStack container, int maxExtract, boolean simulate);
/**
* Get the amount of energy currently stored in the container item.
*/
int getEnergyStored(ItemStack container);
/**
* Get the max amount of energy that can be stored in the container item.
*/
int getMaxEnergyStored(ItemStack container);
}
@@ -0,0 +1,51 @@
package cofh.api.energy;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
*
* A reference implementation is provided {@link TileEnergyHandler}.
*
* @author King Lemming
*
*/
public interface IEnergyHandler extends IEnergyConnection {
/**
* Add energy to an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler.
*
* @param from
* Orientation the energy is received from.
* @param maxReceive
* Maximum amount of energy to receive.
* @param simulate
* If TRUE, the charge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) received.
*/
int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate);
/**
* Remove energy from an IEnergyHandler, internal distribution is left entirely to the IEnergyHandler.
*
* @param from
* Orientation the energy is extracted from.
* @param maxExtract
* Maximum amount of energy to extract.
* @param simulate
* If TRUE, the extraction will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted.
*/
int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate);
/**
* Returns the amount of energy currently stored.
*/
int getEnergyStored(ForgeDirection from);
/**
* Returns the maximum amount of energy that can be stored.
*/
int getMaxEnergyStored(ForgeDirection from);
}
@@ -0,0 +1,45 @@
package cofh.api.energy;
/**
* An energy storage is the unit of interaction with Energy inventories.
*
* A reference implementation can be found at {@link EnergyStorage}.
*
* @author King Lemming
*
*/
public interface IEnergyStorage {
/**
* Adds energy to the storage. Returns quantity of energy that was accepted.
*
* @param maxReceive
* Maximum amount of energy to be inserted.
* @param simulate
* If TRUE, the insertion will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) accepted by the storage.
*/
int receiveEnergy(int maxReceive, boolean simulate);
/**
* Removes energy from the storage. Returns quantity of energy that was removed.
*
* @param maxExtract
* Maximum amount of energy to be extracted.
* @param simulate
* If TRUE, the extraction will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted from the storage.
*/
int extractEnergy(int maxExtract, boolean simulate);
/**
* Returns the amount of energy currently stored.
*/
int getEnergyStored();
/**
* Returns the maximum amount of energy that can be stored.
*/
int getMaxEnergyStored();
}
@@ -0,0 +1,110 @@
package cofh.api.energy;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
/**
* Reference implementation of {@link IEnergyContainerItem}. Use/extend this or implement your own.
*
* @author King Lemming
*
*/
public class ItemEnergyContainer extends Item implements IEnergyContainerItem {
protected int capacity;
protected int maxReceive;
protected int maxExtract;
public ItemEnergyContainer() {
}
public ItemEnergyContainer(int capacity) {
this(capacity, capacity, capacity);
}
public ItemEnergyContainer(int capacity, int maxTransfer) {
this(capacity, maxTransfer, maxTransfer);
}
public ItemEnergyContainer(int capacity, int maxReceive, int maxExtract) {
this.capacity = capacity;
this.maxReceive = maxReceive;
this.maxExtract = maxExtract;
}
public ItemEnergyContainer setCapacity(int capacity) {
this.capacity = capacity;
return this;
}
public void setMaxTransfer(int maxTransfer) {
setMaxReceive(maxTransfer);
setMaxExtract(maxTransfer);
}
public void setMaxReceive(int maxReceive) {
this.maxReceive = maxReceive;
}
public void setMaxExtract(int maxExtract) {
this.maxExtract = maxExtract;
}
/* IEnergyContainerItem */
@Override
public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) {
if (container.stackTagCompound == null) {
container.stackTagCompound = new NBTTagCompound();
}
int energy = container.stackTagCompound.getInteger("Energy");
int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));
if (!simulate) {
energy += energyReceived;
container.stackTagCompound.setInteger("Energy", energy);
}
return energyReceived;
}
@Override
public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) {
if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) {
return 0;
}
int energy = container.stackTagCompound.getInteger("Energy");
int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract));
if (!simulate) {
energy -= energyExtracted;
container.stackTagCompound.setInteger("Energy", energy);
}
return energyExtracted;
}
@Override
public int getEnergyStored(ItemStack container) {
if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) {
return 0;
}
return container.stackTagCompound.getInteger("Energy");
}
@Override
public int getMaxEnergyStored(ItemStack container) {
return capacity;
}
}
@@ -0,0 +1,62 @@
package cofh.api.energy;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own.
*
* @author King Lemming
*
*/
public class TileEnergyHandler extends TileEntity implements IEnergyHandler {
protected EnergyStorage storage = new EnergyStorage(32000);
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
storage.readFromNBT(nbt);
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
storage.writeToNBT(nbt);
}
/* IEnergyHandler */
@Override
public boolean canConnectEnergy(ForgeDirection from) {
return true;
}
@Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
return storage.receiveEnergy(maxReceive, simulate);
}
@Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
return storage.extractEnergy(maxExtract, simulate);
}
@Override
public int getEnergyStored(ForgeDirection from) {
return storage.getEnergyStored();
}
@Override
public int getMaxEnergyStored(ForgeDirection from) {
return storage.getMaxEnergyStored();
}
}
@@ -0,0 +1,10 @@
/**
* (C) 2014 Team CoFH / CoFH / Cult of the Full Hub
* http://www.teamcofh.com
*/
@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHAPI", provides = "CoFHAPI|energy")
package cofh.api.energy;
import cofh.api.CoFHAPIProps;
import cpw.mods.fml.common.API;
+9
View File
@@ -0,0 +1,9 @@
/**
* (C) 2014 Team CoFH / CoFH / Cult of the Full Hub
* http://www.teamcofh.com
*/
@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHLib", provides = "CoFHAPI")
package cofh.api;
import cpw.mods.fml.common.API;
+92 -94
View File
@@ -4,44 +4,43 @@
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
******************************************************************************/
package forestry;
import javax.annotation.Nullable;
import java.io.File;
import com.google.common.base.Preconditions;
import forestry.api.core.ForestryAPI;
import forestry.core.EventHandlerCore;
import forestry.core.climate.ClimateEventHandler;
import forestry.core.config.Config;
import forestry.core.config.Constants;
import forestry.core.config.GameMode;
import forestry.core.errors.EnumErrorCode;
import forestry.core.errors.ErrorStateRegistry;
import forestry.core.gui.GuiHandler;
import forestry.core.multiblock.MultiblockEventHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent;
import cpw.mods.fml.common.event.FMLMissingMappingsEvent;
import cpw.mods.fml.common.event.FMLMissingMappingsEvent.MissingMapping;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.GameRegistry.Type;
import forestry.api.fuels.EngineBronzeFuel;
import forestry.api.fuels.EngineCopperFuel;
import forestry.api.fuels.FermenterFuel;
import forestry.api.fuels.FuelManager;
import forestry.api.fuels.GeneratorFuel;
import forestry.api.fuels.MoistenerFuel;
import forestry.api.fuels.RainSubstrate;
import forestry.core.ForestryCore;
import forestry.core.config.Defaults;
import forestry.core.config.ForestryItem;
import forestry.core.config.Version;
import forestry.core.network.PacketHandler;
import forestry.core.proxy.Proxies;
import forestry.core.utils.MigrationHelper;
import forestry.core.worldgen.WorldGenerator;
import forestry.plugins.PluginManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLInterModComms;
import net.minecraftforge.fml.common.event.FMLInterModComms.IMCEvent;
import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import forestry.core.utils.FluidMap;
import forestry.core.utils.ItemStackMap;
import forestry.core.utils.StringUtil;
import java.io.File;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
/**
* Forestry Minecraft Mod
@@ -49,104 +48,103 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
* @author SirSengir
*/
@Mod(
modid = Constants.MOD_ID,
modid = Defaults.MOD,
name = "Forestry",
version = Constants.VERSION,
guiFactory = "forestry.core.config.ForestryGuiConfigFactory",
acceptedMinecraftVersions = "[1.11]",
dependencies = "required-after:forge@[13.19.1.2189,);"
+ "after:JEI@[4.1.1,);")
// + "after:" + PluginIC2.modId + ";")
version = Version.VERSION,
dependencies = "required-after:Forge@[10.13.0.1207,);"
+ "after:Buildcraft|Core;"
+ "after:ExtrabiomesXL;"
+ "after:BiomesOPlenty;"
+ "after:IC2")
//, certificateFingerprint = Version.FINGERPRINT)
public class Forestry {
@SuppressWarnings("NullableProblems")
@Mod.Instance(Constants.MOD_ID)
@Mod.Instance(Defaults.MOD)
public static Forestry instance;
@Nullable
private File configFolder;
public Forestry() {
ForestryAPI.instance = this;
ForestryAPI.forestryConstants = new Constants();
ForestryAPI.errorStateRegistry = new ErrorStateRegistry();
EnumErrorCode.init();
FluidRegistry.enableUniversalBucket();
}
@Nullable
private static PacketHandler packetHandler;
public static PacketHandler getPacketHandler() {
Preconditions.checkState(packetHandler != null);
return packetHandler;
FuelManager.fermenterFuel = new ItemStackMap<FermenterFuel>();
FuelManager.moistenerResource = new ItemStackMap<MoistenerFuel>();
FuelManager.rainSubstrate = new ItemStackMap<RainSubstrate>();
FuelManager.bronzeEngineFuel = new FluidMap<EngineBronzeFuel>();
FuelManager.copperEngineFuel = new ItemStackMap<EngineCopperFuel>();
FuelManager.generatorFuel = new FluidMap<GeneratorFuel>();
}
@SidedProxy(clientSide = "forestry.core.ForestryClient", serverSide = "forestry.core.ForestryCore")
public static ForestryCore core = new ForestryCore();
public static PacketHandler packetHandler;
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
packetHandler = new PacketHandler();
configFolder = new File(event.getModConfigurationDirectory(), "forestry");
// Register event handler
EventHandlerCore eventHandlerCore = new EventHandlerCore();
MinecraftForge.EVENT_BUS.register(eventHandlerCore);
MinecraftForge.EVENT_BUS.register(new MultiblockEventHandler());
MinecraftForge.EVENT_BUS.register(new ClimateEventHandler());
configFolder = new File(event.getModConfigurationDirectory(), Constants.MOD_ID);
Config.load();
PluginManager.runSetup(event);
String gameMode = Config.gameMode;
Preconditions.checkState(gameMode != null);
ForestryAPI.activeMode = new GameMode(gameMode);
PluginManager.runPreInit();
Proxies.render.registerModels();
core.preInit(event.getSourceFile(), this);
}
@EventHandler
public void init(FMLInitializationEvent event) {
// Register gui handler
NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler());
PluginManager.runInit();
Proxies.render.registerItemAndBlockColors();
core.init(this);
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
PluginManager.runPostInit();
// Register world generator
WorldGenerator worldGenerator = new WorldGenerator();
GameRegistry.registerWorldGenerator(worldGenerator, 0);
// Register tick handlers
Proxies.common.registerTickHandlers(worldGenerator);
// Handle IMC messages.
PluginManager.processIMCMessages(FMLInterModComms.fetchRuntimeMessages(ForestryAPI.instance));
core.postInit();
}
@EventHandler
public void serverStarting(FMLServerStartingEvent event) {
PluginManager.serverStarting(event.getServer());
core.serverStarting(event.getServer());
}
@Nullable
public File getConfigFolder() {
return configFolder;
}
/*@EventHandler
public void fingerprintWarning(FMLFingerprintViolationEvent event) {
Proxies.log.info("Fingerprint of the mod jar is invalid. The jar file was tampered with.");
FMLInterModComms.sendMessage("Railcraft", "securityViolation", "Fingerprint of jar file did not match.");
FMLInterModComms.sendMessage("Thaumcraft", "securityViolation", "Fingerprint of jar file did not match.");
FMLInterModComms.sendMessage("IC2", "securityViolation", "Fingerprint of jar file did not match.");
}*/
@EventHandler
public void processIMCMessages(IMCEvent event) {
PluginManager.processIMCMessages(event.getMessages());
core.processIMCMessages(event.getMessages());
}
@EventHandler
public void onMissingMappings(FMLMissingMappingsEvent event) {
MigrationHelper.onMissingMappings(event);
public void missingMapping(FMLMissingMappingsEvent event) {
for (MissingMapping mapping : event.get())
if (mapping.type == Type.BLOCK) {
Block block = GameRegistry.findBlock(Defaults.MOD, StringUtil.cleanTags(mapping.name));
if (block != null) {
mapping.remap(block);
Proxies.log.warning("Remapping block " + mapping.name + " to " + StringUtil.cleanBlockName(block));
}
} else {
Block block = GameRegistry.findBlock(Defaults.MOD, StringUtil.cleanTags(mapping.name));
if (block != null) {
mapping.remap(Item.getItemFromBlock(block));
Proxies.log.warning("Remapping item " + mapping.name + " to " + StringUtil.cleanBlockName(block));
} else if (mapping.name.equals("Forestry:builderBackpack")) {
mapping.remap(ForestryItem.builderBackpack.item());
Proxies.log.warning("Remapping item " + mapping.name + " to " + ForestryItem.builderBackpack.name());
} else if (mapping.name.equals("Forestry:builderBackpackT2")) {
mapping.remap(ForestryItem.builderBackpackT2.item());
Proxies.log.warning("Remapping item " + mapping.name + " to " + ForestryItem.builderBackpackT2.name());
} else if (mapping.name.equals("Forestry:adventurerBackpack")) {
mapping.remap(ForestryItem.adventurerBackpack.item());
Proxies.log.warning("Remapping item " + mapping.name + " to " + ForestryItem.adventurerBackpack.name());
} else if (mapping.name.equals("Forestry:adventurerBackpackT2")) {
mapping.remap(ForestryItem.adventurerBackpackT2.item());
Proxies.log.warning("Remapping item " + mapping.name + " to " + ForestryItem.adventurerBackpackT2.name());
} else if (mapping.name.equals("Forestry:shortMead")) {
mapping.remap(ForestryItem.beverage.item());
Proxies.log.warning("Remapping item " + mapping.name + " to " + ForestryItem.beverage.name());
}
}
}
}
-11
View File
@@ -1,11 +0,0 @@
License („MIT“)
Forestry API
Copyright (c) 2011 - 2014 SirSengir.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-26
View File
@@ -1,26 +0,0 @@
Forestry API
====================================
### What is it?
Forestry is a modification for the game Minecraft and known primarily for its farms and bees. This is the API for inter-mod operations.
### Homepage
[Wiki](http://forestry.sengir.net/)
[Forums](http://forestry.sengir.net/forum/)
[IRC #forestry on esper.net](http://webchat.esper.net/?nick=ForestryWiki...&channels=forestry&prompt=1)
### Notes
This is only the API. It is not intended to be used by itself, but rather for use either with Forestry itself or another mod which wants to use a functionality of Forestry.
Package versioning follows the rules laid out by http://semver.org/
Bugfixes are generally welcome. If you want to contribute something which changes game mechanics, please talk to someone with commit privileges first. Nothing is more frustrating than putting a lot of work and effort into a new game mechanic and then having the PR rejected because it doesn’t fit gameplay-wise.
### License & Copyright
Forestry API is (c) 2011 - 2014 SirSengir and licensed under MIT. See the LICENSE.txt for more information. Note that the core Forestry source is licensed differently! The Forestry API may also contain code contributed by CovertJaguar, Player, MysteriousAges, Binnie and others.
@@ -1,13 +0,0 @@
package forestry.api.apiculture;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
public class ApicultureCapabilities {
/**
* Capability for {@link IArmorApiarist}.
* The {@link Capability#getDefaultInstance()} will always protect the wearer with no side effects.
*/
@CapabilityInject(IArmorApiarist.class)
public static Capability<IArmorApiarist> ARMOR_APIARIST;
}
@@ -1,59 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.item.ItemStack;
/**
* Some miscellaneous lists and settings for bees.
*
* @author SirSengir
*/
public class BeeManager {
/**
* Common Village Bees
*/
public static List<IBeeGenome> commonVillageBees;
/**
* Uncommon Village Bees (20 % of spawns)
*/
public static List<IBeeGenome> uncommonVillageBees;
/**
* List of items that can induce swarming. Integer denotes x in 1000 chance.
*/
public static final Map<ItemStack, Integer> inducers = new HashMap<>();
/**
* Convenient access to AlleleManager.alleleRegistry.getSpeciesRoot("rootBees")
*/
public static IBeeRoot beeRoot;
/**
* Used to create new bees.
*/
public static IBeeFactory beeFactory;
/**
* Used to create new bee mutations.
*/
public static IBeeMutationFactory beeMutationFactory;
/**
* Used to get Forestry's jubilance implementations.
*/
public static IJubilanceFactory jubilanceFactory;
/**
* Used to check whether a player is wearing Apiarist Armor.
*/
public static IArmorApiaristHelper armorApiaristHelper;
}
@@ -1,31 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IIndividual;
/**
* Easily extendable default IBeeListener.
* By itself, this IBeeListener does nothing.
* BeeListeners should inherit from this class unless they need to listen for everything.
*/
public class DefaultBeeListener implements IBeeListener {
@Override
public void wearOutEquipment(int amount) {
}
@Override
public void onQueenDeath() {
}
@Override
public boolean onPollenRetrieved(IIndividual pollen) {
return false;
}
}
@@ -1,67 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import javax.annotation.Nullable;
/**
* Easily extendable default IBeeModifier.
* By itself, this IBeeModifier does nothing.
* BeeModifiers should inherit from this class unless they modify everything.
*/
public class DefaultBeeModifier implements IBeeModifier {
@Override
public float getTerritoryModifier(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
@Override
public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) {
return 1.0f;
}
@Override
public float getLifespanModifier(IBeeGenome genome, @Nullable IBeeGenome mate, float currentModifier) {
return 1.0f;
}
@Override
public float getProductionModifier(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
@Override
public float getFloweringModifier(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
@Override
public float getGeneticDecay(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
@Override
public boolean isSealed() {
return false;
}
@Override
public boolean isSelfLighted() {
return false;
}
@Override
public boolean isSunlightSimulated() {
return false;
}
@Override
public boolean isHellish() {
return false;
}
}
@@ -1,99 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.Locale;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleArea;
import forestry.api.genetics.IAlleleBoolean;
import forestry.api.genetics.IAlleleFloat;
import forestry.api.genetics.IAlleleFlowers;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.ISpeciesRoot;
/**
* Enum representing the order of chromosomes in a bee's genome and what they control.
*
* @author SirSengir
*/
public enum EnumBeeChromosome implements IChromosomeType {
/**
* Species of the bee. Alleles here must implement {@link IAlleleBeeSpecies}.
*/
SPECIES(IAlleleBeeSpecies.class),
/**
* (Production) Speed of the bee.
*/
SPEED(IAlleleFloat.class),
/**
* Lifespan of the bee.
*/
LIFESPAN(IAlleleInteger.class),
/**
* Fertility of the bee. Determines number of offspring.
*/
FERTILITY(IAlleleInteger.class),
/**
* Temperature difference to its native supported one the bee can tolerate.
*/
TEMPERATURE_TOLERANCE(IAlleleTolerance.class),
/**
* If true, a naturally diurnal bee can work during the night. If true, a naturally nocturnal bee can work during the day.
*/
NEVER_SLEEPS(IAlleleBoolean.class),
/**
* Humidity difference to its native supported one the bee can tolerate.
*/
HUMIDITY_TOLERANCE(IAlleleTolerance.class),
/**
* If true the bee can work during rain.
*/
TOLERATES_RAIN(IAlleleBoolean.class),
/**
* If true, the bee can work without a clear view of the sky.
*/
CAVE_DWELLING(IAlleleBoolean.class),
/**
* Contains the supported flower provider.
*/
FLOWER_PROVIDER(IAlleleFlowers.class),
/**
* Determines pollination speed.
*/
FLOWERING(IAlleleInteger.class),
/**
* Determines the size of the bee's territory.
*/
TERRITORY(IAlleleArea.class),
/**
* Determines the bee's effect.
*/
EFFECT(IAlleleBeeEffect.class);
private final Class<? extends IAllele> alleleClass;
EnumBeeChromosome(Class<? extends IAllele> alleleClass) {
this.alleleClass = alleleClass;
}
@Override
public Class<? extends IAllele> getAlleleClass() {
return alleleClass;
}
@Override
public String getName() {
return this.toString().toLowerCase(Locale.ENGLISH);
}
@Override
public ISpeciesRoot getSpeciesRoot() {
return BeeManager.beeRoot;
}
}
@@ -1,26 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.Locale;
import forestry.api.genetics.ISpeciesType;
public enum EnumBeeType implements ISpeciesType {
DRONE, PRINCESS, QUEEN, LARVAE;
public static final EnumBeeType[] VALUES = values();
private final String name;
EnumBeeType() {
this.name = this.toString().toLowerCase(Locale.ENGLISH);
}
public String getName() {
return name;
}
}
@@ -1,26 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IFlowerRegistry;
public class FlowerManager {
/**
* <blockquote><pre>e.g. FlowerManager.flowerRegister.registerPlantableFlower(new ItemStack(Blocks.RED_FLOWER), 1.0, FlowerManager.FlowerTypeVanilla, FlowerManager.FlowerTypeSnow);</pre></blockquote>
*/
public static IFlowerRegistry flowerRegistry;
public static final String FlowerTypeVanilla = "flowersVanilla";
public static final String FlowerTypeNether = "flowersNether";
public static final String FlowerTypeCacti = "flowersCacti";
public static final String FlowerTypeMushrooms = "flowersMushrooms";
public static final String FlowerTypeEnd = "flowersEnd";
public static final String FlowerTypeJungle = "flowersJungle";
public static final String FlowerTypeSnow = "flowersSnow";
public static final String FlowerTypeWheat = "flowersWheat";
public static final String FlowerTypeGourd = "flowersGourd";
}
@@ -1,33 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IEffectData;
public interface IAlleleBeeEffect extends IAlleleEffect {
/**
* Called by apiaries to cause an effect in the world. (server)
*
* @param genome Genome of the bee queen causing this effect
* @param storedData Object containing the stored effect data for the apiary/hive the bee is in.
* @param housing {@link IBeeHousing} the bee currently resides in.
* @return storedData, may have been manipulated.
*/
IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing);
/**
* Is called to produce visual bee effects. (client)
*
* @param genome Genome of the bee queen causing this effect
* @param storedData Object containing the stored effect data for the apiary/hive the bee is in.
* @param housing {@link IBeeHousing} the bee currently resides in.
* @return storedData, may have been manipulated.
*/
IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing);
}
@@ -1,53 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.Map;
import forestry.api.core.IModelManager;
import forestry.api.genetics.IAlleleSpecies;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IAlleleBeeSpecies extends IAlleleSpecies {
/**
* @return the IBeeRoot
*/
@Override
IBeeRoot getRoot();
/**
* @return true if this species is only active at night.
*/
boolean isNocturnal();
/**
* @return Map of possible products with the chance for drop each bee cycle. (0 - 1]
*/
Map<ItemStack, Float> getProductChances();
/**
* @return Map of possible specialities with the chance for drop each bee cycle. (0 - 1]
*/
Map<ItemStack, Float> getSpecialtyChances();
/**
* Only jubilant bees produce specialities.
*
* @return true if the bee is jubilant, false otherwise.
*/
boolean isJubilant(IBeeGenome genome, IBeeHousing housing);
@SideOnly(Side.CLIENT)
ModelResourceLocation getModel(EnumBeeType type);
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager);
}
@@ -1,49 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IAlleleSpeciesBuilder;
import net.minecraft.item.ItemStack;
public interface IAlleleBeeSpeciesBuilder extends IAlleleSpeciesBuilder {
@Override
IAlleleBeeSpecies build();
/**
* Add a product for this bee species.
* Chance is between 0 and 1.
*/
IAlleleBeeSpeciesBuilder addProduct(ItemStack product, Float chance);
/**
* Add a specialty product for this bee species.
* Bees only produce their specialty when they are Jubilant (see IJubilanceProvider)
* Chance is between 0 and 1.
*/
IAlleleBeeSpeciesBuilder addSpecialty(ItemStack specialty, Float chance);
/**
* Set the Jubilance Provider for this bee species.
* Bees only produce their specialty when they are Jubilant (see IJubilanceProvider)
*/
IAlleleBeeSpeciesBuilder setJubilanceProvider(IJubilanceProvider provider);
/**
* Make this species only active at night.
*/
IAlleleBeeSpeciesBuilder setNocturnal();
/**
* Use this if you have custom icons for bees.
*/
IAlleleBeeSpeciesBuilder setCustomBeeModelProvider(IBeeModelProvider beeIconProvider);
/**
* Use this if you have custom icon colours for bees (other than the default static primary + secondary colours).
*/
IAlleleBeeSpeciesBuilder setCustomBeeSpriteColourProvider(IBeeSpriteColourProvider beeIconColourProvider);
}
@@ -1,54 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IIndividual;
/**
* Can be used to garner information on bee breeding. See {@link forestry.api.genetics.ISpeciesRoot} for retrieval functions.
*
* @author SirSengir
*/
public interface IApiaristTracker extends IBreedingTracker {
/**
* Register the birth of a queen. Will mark species as discovered.
*
* @param queen Created queen.
*/
void registerQueen(IIndividual queen);
/**
* @return Amount of queens bred with this tracker.
*/
int getQueenCount();
/**
* Register the birth of a princess. Will mark species as discovered.
*
* @param princess Created princess.
*/
void registerPrincess(IIndividual princess);
/**
* @return Amount of princesses bred with this tracker.
*/
int getPrincessCount();
/**
* Register the birth of a drone. Will mark species as discovered.
*
* @param drone Created drone.
*/
void registerDrone(IIndividual drone);
/**
* @return Amount of drones bred with this tracker.
*/
int getDroneCount();
}
@@ -1,29 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import javax.annotation.Nullable;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
/**
* When implemented as a capability by armor items, protects the wearer from negative bee effects.
*
* @see ApicultureCapabilities#ARMOR_APIARIST
*/
public interface IArmorApiarist {
/**
* Called when the apiarist's armor acts as protection against an attack.
*
* @param entity Entity being attacked
* @param armor Armor item
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return Whether or not the armor should protect the player from that attack
*/
boolean protectEntity(EntityLivingBase entity, ItemStack armor, @Nullable String cause, boolean doProtect);
}
@@ -1,41 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
/**
* Helper class for checking whether an entity is wearing Apiarist Armor
*
* @author Vexatos
*/
public interface IArmorApiaristHelper {
/**
* Called when the apiarist's armor acts as protection against an attack.
*
* @param stack ItemStack to check
* @param entity Entity being attacked
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return Whether or not the item is valid Apiarist Armor and should protect the player from that attack
* @since Forestry 4.2
*/
boolean isArmorApiarist(ItemStack stack, EntityLivingBase entity, String cause, boolean doProtect);
/**
* Called when the apiarist's armor acts as protection against an attack.
*
* @param entity Entity being attacked
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return The number of valid Apiarist Armor pieces the player is wearing that are actually protecting.
* 4 means full protection, but it can go higher if they are holding items like the smoker.
* @since Forestry 4.2
*/
int wearsItems(EntityLivingBase entity, String cause, boolean doProtect);
}
@@ -1,92 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Set;
import forestry.api.core.IErrorState;
import forestry.api.genetics.IEffectData;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IIndividualLiving;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.world.biome.Biome;
/**
* Other implementations than Forestry's default one are not supported.
*
* @author SirSengir
*/
public interface IBee extends IIndividualLiving {
/**
* @return Bee's genetic information.
*/
@Override
IBeeGenome getGenome();
/**
* @return Genetic information of the bee's mate, null if unmated.
*/
@Nullable
@Override
IBeeGenome getMate();
/**
* @return true if the individual is originally of natural origin.
*/
boolean isNatural();
/**
* @return generation this individual is removed from the original individual.
*/
int getGeneration();
/**
* Set the natural flag on this bee.
*/
void setIsNatural(boolean flag);
IEffectData[] doEffect(IEffectData[] storedData, IBeeHousing housing);
IEffectData[] doFX(IEffectData[] storedData, IBeeHousing housing);
/**
* @return true if the bee may spawn offspring
*/
boolean canSpawn();
/**
* Determines whether the queen can work.
*
* @param housing the {@link IBeeHousing} the bee currently resides in.
* @return an empty set if the queen can work, a set of error states if the queen can not work
*/
Set<IErrorState> getCanWork(IBeeHousing housing);
List<Biome> getSuitableBiomes();
NonNullList<ItemStack> getProduceList();
NonNullList<ItemStack> getSpecialtyList();
NonNullList<ItemStack> produceStacks(IBeeHousing housing);
@Nullable
IBee spawnPrincess(IBeeHousing housing);
List<IBee> spawnDrones(IBeeHousing housing);
void plantFlowerRandom(IBeeHousing housing);
@Nullable
IIndividual retrievePollen(IBeeHousing housing);
boolean pollinateRandom(IBeeHousing housing, IIndividual pollen);
}
@@ -1,39 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IClassification;
public interface IBeeFactory {
/**
* Creates a new bee species.
* Automatically registered with AlleleManager.alleleRegistry.registerAllele()
* See IAlleleBeeSpeciesBuilder and IAlleleSpeciesBuilder for adding additional properties to the returned species.
*
* @param uid Unique Identifier for this species
* @param dominant Whether this species is genetically dominant (false means it is recessive)
* @param authority Authority for the binomial name, e.g. "Sengir" on species of base Forestry.
* @param unlocalizedName Unlocalized name for this species
* @param unlocalizedDescription Unlocalized description for this species
* @param branch Classification of this species
* @param binomial Binomial name of the species sans genus ("Apis"). "humboldti" will have the bee species flavour name be "Apis humboldti". Feel free to use fun names or null.
* @param primaryColor The outline color of this species
* @param secondaryColor The body color of this species
* @return a new bee species allele.
*/
IAlleleBeeSpeciesBuilder createSpecies(String uid, boolean dominant, String authority, String unlocalizedName, String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor);
/**
* Creates a new bee branch.
* Must be registered with AlleleManager.alleleRegistry.getClassification("family.apidae").addMemberGroup();
*
* @param uid Unique Identifier for this branch
* @param scientific approximates a "genus" in real life. Real life examples: "Micrapis", "Megapis"
* @return a new bee branch
*/
IClassification createBranch(String uid, String scientific);
}
@@ -1,50 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IFlowerProvider;
import forestry.api.genetics.IGenome;
import net.minecraft.util.math.Vec3i;
/**
* Only the default implementation is supported.
*
* @author SirSengir
*/
public interface IBeeGenome extends IGenome {
@Override
IAlleleBeeSpecies getPrimary();
@Override
IAlleleBeeSpecies getSecondary();
float getSpeed();
int getLifespan();
int getFertility();
EnumTolerance getToleranceTemp();
EnumTolerance getToleranceHumid();
boolean getNeverSleeps();
boolean getToleratesRain();
boolean getCaveDwelling();
IFlowerProvider getFlowerProvider();
int getFlowering();
Vec3i getTerritory();
IAlleleBeeEffect getEffect();
}
@@ -1,53 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import javax.annotation.Nullable;
import com.mojang.authlib.GameProfile;
import forestry.api.climate.IClimateProvider;
import forestry.api.core.IErrorLogicSource;
import forestry.api.core.ILocatable;
import forestry.api.genetics.IHousing;
import net.minecraft.util.math.Vec3d;
public interface IBeeHousing extends IHousing, IErrorLogicSource, IClimateProvider, ILocatable {
/**
* Used by {@link IBeeRoot#createBeeHousingModifier(IBeeHousing)}
* to combine bee modifiers from several sources that can change over time.
*
* @return IBeeModifiers from the housing, frames, etc.
*/
Iterable<IBeeModifier> getBeeModifiers();
/**
* Used by {@link IBeeRoot#createBeeHousingListener(IBeeHousing)}
* to combine bee listeners from several sources that can change over time.
*
* @return IBeeListeners from the housing, multiblock parts, etc.
*/
Iterable<IBeeListener> getBeeListeners();
IBeeHousingInventory getBeeInventory();
IBeekeepingLogic getBeekeepingLogic();
int getBlockLightValue();
boolean canBlockSeeTheSky();
boolean isRaining();
@Nullable
GameProfile getOwner();
/**
* @return exact coordinates where bee particle FX should spawn from
* @since Forestry 4.2
*/
Vec3d getBeeFXCoordinates();
}
@@ -1,28 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.item.ItemStack;
public interface IBeeHousingInventory {
ItemStack getQueen();
ItemStack getDrone();
void setQueen(ItemStack itemstack);
void setDrone(ItemStack itemstack);
/**
* Adds products to the housing's inventory.
*
* @param product ItemStack with the product to add.
* @param all if true, success requires that all products are added
* @return boolean indicating success or failure.
*/
boolean addProduct(ItemStack product, boolean all);
}
@@ -1,31 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IIndividual;
public interface IBeeListener {
/**
* Called when the bees wear out the housing's equipment.
*
* @param amount Integer indicating the amount worn out.
*/
void wearOutEquipment(int amount);
/**
* Called after the children have been spawned, and before the new princess is spawned.
*/
void onQueenDeath();
/**
* Called when the bees have retrieved some pollen.
*
* @return true if this bee listener handled the pollen.
*/
boolean onPollenRetrieved(IIndividual pollen);
}
@@ -1,20 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.core.IModelManager;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IBeeModelProvider {
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager);
@SideOnly(Side.CLIENT)
ModelResourceLocation getModel(EnumBeeType type);
}
@@ -1,72 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import javax.annotation.Nullable;
public interface IBeeModifier {
/**
* @param genome Genome of the bee this modifier is called for.
* @param currentModifier Current modifier.
* @return Float used to modify the base territory.
*/
float getTerritoryModifier(IBeeGenome genome, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @param mate Genome of the bee mate this modifier is called for.
* @param currentModifier Current modifier.
* @return Float used to modify the base mutation chance.
*/
float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @param currentModifier Current modifier.
* @return Float used to modify the life span of queens.
*/
float getLifespanModifier(IBeeGenome genome, @Nullable IBeeGenome mate, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @param currentModifier Current modifier.
* @return Float modifying the production speed of queens.
*/
float getProductionModifier(IBeeGenome genome, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @return Float modifying the flowering of queens.
*/
float getFloweringModifier(IBeeGenome genome, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @return Float modifying the chance for a swarmer queen to die off.
*/
float getGeneticDecay(IBeeGenome genome, float currentModifier);
/**
* @return Boolean indicating if housing can ignore rain
*/
boolean isSealed();
/**
* @return Boolean indicating if housing can ignore darkness/night
*/
boolean isSelfLighted();
/**
* @return Boolean indicating if housing can ignore not seeing the sky
*/
boolean isSunlightSimulated();
/**
* @return Boolean indicating whether this housing simulates the nether
*/
boolean isHellish();
}
@@ -1,19 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IMutation;
public interface IBeeMutation extends IMutation {
@Override
IBeeRoot getRoot();
/**
* @return float representing the chance for mutation to occur. note that this is 0 - 100 based, since it was an integer previously!
*/
float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, IBeeGenome genome0, IBeeGenome genome1);
}
@@ -1,13 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IMutationBuilder;
public interface IBeeMutationBuilder extends IMutationBuilder {
@Override
IBeeMutation build();
}
@@ -1,23 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IAllele;
public interface IBeeMutationFactory {
/**
* Creates a new bee mutation.
* Automatically registered with BeeManager.beeRoot.registerMutation()
* See IBeeMutationBuilder and IMutationBuilder for adding additional properties to the returned mutation.
*
* @param parentBee0 A parent bee for this mutation
* @param parentBee1 A parent bee for this mutation
* @param result The resulting alleles for this mutation
* @param chance The chance that breeding the two parent bees will result in this mutation
* @return a new bee mutation.
*/
IBeeMutationBuilder createMutation(IAlleleBeeSpecies parentBee0, IAlleleBeeSpecies parentBee1, IAllele[] result, int chance);
}
@@ -1,134 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import javax.annotation.Nullable;
import java.util.List;
import com.mojang.authlib.GameProfile;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.ISpeciesRoot;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public interface IBeeRoot extends ISpeciesRoot {
/**
* @return true if passed item is a Forestry bee. Equal to getType(ItemStack stack) != null
*/
@Override
boolean isMember(ItemStack stack);
/**
* @return {@link IBee} pattern parsed from the passed stack's nbt data. Null if the ItemStack is not a valid member.
*/
@Override
@Nullable
IBee getMember(ItemStack stack);
@Override
IBee getMember(NBTTagCompound compound);
/* GENOME CONVERSION */
@Override
IBee templateAsIndividual(IAllele[] template);
@Override
IBee templateAsIndividual(IAllele[] templateActive, IAllele[] templateInactive);
@Override
IBeeGenome templateAsGenome(IAllele[] template);
@Override
IBeeGenome templateAsGenome(IAllele[] templateActive, IAllele[] templateInactive);
/* BREEDING TRACKER */
/**
* @return {@link IApiaristTracker} associated with the passed world.
*/
@Override
IApiaristTracker getBreedingTracker(World world, @Nullable GameProfile player);
/* BEE SPECIFIC */
/**
* @return type of bee encoded on the itemstack. null if it isn't a bee.
*/
@Nullable
@Override
EnumBeeType getType(ItemStack stack);
/**
* @return true if passed item is a drone. Equal to getType(ItemStack stack) == EnumBeeType.DRONE
*/
boolean isDrone(ItemStack stack);
/**
* @return true if passed item is mated (i.e. a queen)
*/
boolean isMated(ItemStack stack);
/**
* @param genome Valid {@link IBeeGenome}
* @return {@link IBee} from the passed genome
*/
IBee getBee(IBeeGenome genome);
/**
* Creates an IBee suitable for a queen containing the necessary second genome for the mate.
*
* @param genome Valid {@link IBeeGenome}
* @param mate Valid {@link IBee} representing the mate.
* @return Mated {@link IBee} from the passed genomes.
*/
IBee getBee(World world, IBeeGenome genome, IBee mate);
/* TEMPLATES */
@Override
List<IBee> getIndividualTemplates();
/* MUTATIONS */
@Override
List<IBeeMutation> getMutations(boolean shuffle);
/* GAME MODE */
void resetBeekeepingMode();
List<IBeekeepingMode> getBeekeepingModes();
IBeekeepingMode getBeekeepingMode(World world);
@Nullable
IBeekeepingMode getBeekeepingMode(String name);
void registerBeekeepingMode(IBeekeepingMode mode);
void setBeekeepingMode(World world, IBeekeepingMode mode);
/* MISC */
/**
* Creates beekeepingLogic for a housing.
* Should be used when the housing is created, see IBeekeepingLogic
*/
IBeekeepingLogic createBeekeepingLogic(IBeeHousing housing);
/**
* Combines multiple modifiers from an IBeeHousing into one.
* Stays up to date with changes to the housing's modifiers.
*/
IBeeModifier createBeeHousingModifier(IBeeHousing housing);
/**
* Combines multiple listeners from an IBeeHousing into one.
* Stays up to date with changes to the housing's listeners.
*/
IBeeListener createBeeHousingListener(IBeeHousing housing);
}
@@ -1,13 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
/**
* Custom colour provider for bees with complicated colors.
*/
public interface IBeeSpriteColourProvider {
int getSpriteColour(int renderPass);
}
@@ -1,78 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.List;
import forestry.api.core.INbtReadable;
import forestry.api.core.INbtWritable;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
/**
* Stores beekeeping logic for bee housings.
* Get one with BeeManager.beeRoot.createBeekeepingLogic(IBeeHousing housing)
* Save and load it to NBT using the INbtWritable methods.
*/
public interface IBeekeepingLogic extends INbtWritable, INbtReadable {
/* SERVER */
/**
* Checks that the bees can work, setting error conditions on the housing where needed
*
* @return true if no errors are present and doWork should be called
*/
boolean canWork();
/**
* Performs actual work, breeding, production, etc.
*/
void doWork();
/**
* Force the logic to refresh any cached values and error states.
* Call this when a player opens the gui so that all errors are up to date.
*/
void clearCachedValues();
/* CLIENT */
/**
* Sync to client by using {@link #writeToNBT(NBTTagCompound)} in your {@link TileEntity#getUpdateTag()}
*/
void syncToClient();
void syncToClient(EntityPlayerMP player);
/**
* Get the progress bar for breeding and production.
* To avoid network spam, this is only available server-side,
* and must be synced manually to the client when a GUI is open.
*/
int getBeeProgressPercent();
/**
* Whether bee fx should be active.
* Internally, this is automatically synced to the client.
*/
boolean canDoBeeFX();
/**
* Display bee fx. Calls IBee.doFX(IEffectData[] storedData, IBeeHousing housing) on the queen.
* Internally, the queen is automatically synced to the client for the fx.
*/
void doBeeFX();
/**
* Used by bee fx to direct bees to nearby flowers.
* These positions are synced to the client from the server.
*/
List<BlockPos> getFlowerPositions();
}
@@ -1,64 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.List;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface IBeekeepingMode {
/**
* @return Localized name of this beekeeping mode.
*/
String getName();
/**
* @return Localized list of strings outlining the behaviour of this beekeeping mode.
*/
List<String> getDescription();
/**
* @return Float used to modify the wear on comb frames.
*/
float getWearModifier();
/**
* @return fertility taking into account the birthing queen and surroundings.
*/
int getFinalFertility(IBee queen, World world, BlockPos pos);
/**
* @return true if the queen is genetically "fatigued" and should not be reproduced anymore.
*/
boolean isFatigued(IBee queen, IBeeHousing housing);
/**
* @return true if the queen is being overworked in the bee housing (with chance). will trigger a negative effect.
*/
boolean isOverworked(IBee queen, IBeeHousing housing);
/**
* @return true if the genetic structure of the queen is breaking down during spawning of the offspring (with chance). will trigger a negative effect.
*/
boolean isDegenerating(IBee queen, IBee offspring, IBeeHousing housing);
/**
* @return true if an offspring of this queen is considered a natural
*/
boolean isNaturalOffspring(IBee queen);
/**
* @return true if this mode allows the passed queen or princess to be multiplied
*/
boolean mayMultiplyPrincess(IBee queen);
/**
* @return the bee modifier for this mode
*/
IBeeModifier getBeeModifier();
}
@@ -1,43 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
/**
* Bees can be seeded either as hive drops or as mutation results.
* <p>
* Add IHiveDrops with HiveManager.get___Hive.addDrop
*
* @author SirSengir
*/
public interface IHiveDrop {
IBee getBeeType(IBlockAccess world, BlockPos pos);
NonNullList<ItemStack> getExtraItems(IBlockAccess world, BlockPos pos, int fortune);
/**
* Chance to drop a bee or extra items. Default drops have 0.80 (= 80 %).
*
* @param world Minecraft world this is called for.
* @param pos Coordinates of the broken hive.
* @return Chance for drop as a float of 0.0 - 1.0.
*/
double getChance(IBlockAccess world, BlockPos pos, int fortune);
/**
* Chance for the princess to be ignoble. Default is around 0.4 to 0.7 (40% - 70%).
*
* @param world Minecraft world this is called for.
* @param pos Coordinates of the broken hive.
* @return Chance for ignoble as a float of 0.0 - 1.0.
*/
double getIgnobleChance(IBlockAccess world, BlockPos pos, int fortune);
}
@@ -1,24 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.item.ItemStack;
public interface IHiveFrame {
/**
* Wears out a frame.
*
* @param housing IBeeHousing the frame is contained in.
* @param frame ItemStack containing the actual frame.
* @param queen Current queen in the caller.
* @param wear Integer denoting the amount worn out. The wear modifier of the current beekeeping mode has already been taken into account.
* @return ItemStack containing the actual frame with adjusted damage, or Empty ItemStack if it has been broken.
*/
ItemStack frameUsed(IBeeHousing housing, ItemStack frame, IBee queen, int wear);
IBeeModifier getBeeModifier();
}
@@ -1,25 +0,0 @@
package forestry.api.apiculture;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface IHiveTile {
/**
* Call to calm agitated bees. Used by the smoker to stop wild bees from attacking as much.
* Bees will not stay calm for very long.
*/
void calmBees();
boolean isAngry();
/**
* Called when the hive is attacked.
*/
void onAttack(World world, BlockPos pos, EntityPlayer player);
/**
* Called when the hive is broken.
*/
void onBroken(World world, BlockPos pos, EntityPlayer player, boolean canHarvest);
}
@@ -1,20 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.block.state.IBlockState;
public interface IJubilanceFactory {
/**
* The default Jubilance Provider is satisfied when the humidity and temperature are ideal for the bee.
*/
IJubilanceProvider getDefault();
/**
* The Requires Resource Jubilance Provider is satisfied when a specific block is under the hive.
*/
IJubilanceProvider getRequiresResource(IBlockState... acceptedBlockStates);
}
@@ -1,15 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
public interface IJubilanceProvider {
/**
* Returns true when conditions are right to make this species Jubilant.
* Jubilant bees can produce their Specialty products.
*/
boolean isJubilant(IAlleleBeeSpecies species, IBeeGenome genome, IBeeHousing housing);
}
@@ -1,13 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
public class HiveManager {
public static IHiveRegistry hiveRegistry;
public static IHiveGenHelper genHelper;
}
@@ -1,51 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import java.util.Random;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
public interface IHiveDescription {
/**
* The hive generator for this hive.
*/
IHiveGen getHiveGen();
/**
* The hive block to be placed in the world.
*/
IBlockState getBlockState();
/**
* returns true if the hive can be generated in these conditions.
* Used as a fast early-elimination check for hives that have no hope of spawning in the area.
*/
boolean isGoodBiome(Biome biome);
boolean isGoodHumidity(EnumHumidity humidity);
boolean isGoodTemperature(EnumTemperature temperature);
/**
* float representing the relative chance a hive will generate in a chunk.
* Default is 1.0, higher numbers result in more hives, smaller will result in fewer.
* Tree hives want around 3.0 to 4.0 since there are less locations to generate on.
*/
float getGenChance();
/**
* Called after successful hive generation.
* world, x, y, z give the location of the new hive.
**/
void postGen(World world, Random rand, BlockPos pos);
}
@@ -1,34 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import javax.annotation.Nullable;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface IHiveGen {
/**
* return a position that the hive should try to generate at.
* returns null if the hive can't be placed anywhere.
*/
@Nullable
BlockPos getPosForHive(World world, int x, int z);
/**
* returns true if the hive can be generated at this location.
* Used for advanced conditions, like checking that the ground below the hive is a certain type.
*/
boolean isValidLocation(World world, BlockPos pos);
/**
* returns true if the hive can safely replace the block at this location.
*/
boolean canReplace(IBlockState blockState, World world, BlockPos pos);
}
@@ -1,23 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import net.minecraft.block.Block;
public interface IHiveGenHelper {
/**
* Returns a hiveGen for a hive that spawns on the ground.
* validGroundBlocks specifies which block materials it can spawn on.
*/
IHiveGen ground(Block... validGroundBlocks);
/**
* Returns a hiveGen for a hive that spawns in trees.
*/
IHiveGen tree();
}
@@ -1,68 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import java.util.List;
import java.util.Locale;
import forestry.api.apiculture.IHiveDrop;
import net.minecraft.util.IStringSerializable;
public interface IHiveRegistry {
/* Forestry Hive Names */
enum HiveType implements IStringSerializable {
FOREST("forestry:forest", "forestry.speciesForest"),
MEADOWS("forestry:meadows", "forestry.speciesMeadows"),
DESERT("forestry:desert", "forestry.speciesModest"),
JUNGLE("forestry:jungle", "forestry.speciesTropical"),
END("forestry:end", "forestry.speciesEnded"),
SNOW("forestry:snow", "forestry.speciesWintry"),
SWAMP("forestry:swamp", "forestry.speciesMarshy"),
SWARM("forestry:swarm", "forestry.speciesForest");
public static final HiveType[] VALUES = values();
private final String hiveUid;
private final String speciesUid;
HiveType(String hiveUid, String speciesUid) {
this.hiveUid = hiveUid;
this.speciesUid = speciesUid;
}
public String getHiveUid() {
return hiveUid;
}
public String getSpeciesUid() {
return speciesUid;
}
@Override
public String getName() {
return name().toLowerCase(Locale.ENGLISH);
}
public int getMeta() {
return ordinal();
}
}
/**
* Adds a new hive to be generated in the world.
*/
void registerHive(String hiveName, IHiveDescription hiveDescription);
/**
* Add drops to a registered hive.
*/
void addDrops(String hiveName, IHiveDrop... drops);
void addDrops(String hiveName, List<IHiveDrop> drop);
}
@@ -1,14 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@API(apiVersion = "4.1.0", owner = "ForestryAPI|apiculture", provides = "ForestryAPI|hives")
package forestry.api.apiculture.hives;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraftforge.fml.common.API;
@@ -1,14 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@API(apiVersion = "5.0.0", owner = "ForestryAPI|core", provides = "ForestryAPI|apiculture")
package forestry.api.apiculture;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraftforge.fml.common.API;
@@ -1,14 +0,0 @@
package forestry.api.arboriculture;
import forestry.api.core.IArmorNaturalist;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
public class ArboricultureCapabilities {
/**
* Capability for {@link IArmorNaturalist}.
* The {@link Capability#getDefaultInstance()} will always show pollination with no side effects.
*/
@CapabilityInject(IArmorNaturalist.class)
public static Capability<IArmorNaturalist> ARMOR_NATURALIST;
}
@@ -1,132 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.Locale;
import java.util.Random;
public enum EnumForestryWoodType implements IWoodType {
LARCH(4),
TEAK(4),
ACACIA(4),
LIME(4),
CHESTNUT(4),
WENGE(4),
BAOBAB(4),
SEQUOIA(3, 4.0f),
KAPOK(4),
EBONY(4),
MAHOGANY(4),
BALSA(4, 1.0f),
WILLOW(4),
WALNUT(4),
GREENHEART(4, 7.5f),
CHERRY(4),
MAHOE(4),
POPLAR(4),
PALM(4),
PAPAYA(4),
PINE(4, 3.0f),
PLUM(4),
MAPLE(4),
CITRUS(4),
GIGANTEUM(3, 4.0f),
IPE(4),
PADAUK(4),
COCOBOLO(4),
ZEBRAWOOD(4);
public static final float DEFAULT_HARDNESS = 2.0f;
public static final EnumForestryWoodType[] VALUES = values();
private final int carbonization;
private final float hardness;
EnumForestryWoodType(int carbonization) {
this(carbonization, DEFAULT_HARDNESS);
}
EnumForestryWoodType(int carbonization, float hardness) {
this.carbonization = carbonization;
this.hardness = hardness;
}
@Override
public float getHardness() {
return hardness;
}
public static EnumForestryWoodType getRandom(Random random) {
return VALUES[random.nextInt(VALUES.length)];
}
@Override
public String toString() {
return super.toString().toLowerCase(Locale.ENGLISH);
}
@Override
public String getName() {
return toString();
}
@Override
public int getMetadata() {
return ordinal();
}
public static EnumForestryWoodType byMetadata(int meta) {
if (meta < 0 || meta >= VALUES.length) {
meta = 0;
}
return VALUES[meta];
}
@Override
public int getCarbonization() {
return carbonization;
}
@Override
public float getCharcoalChance(int numberOfCharcoal) {
if (numberOfCharcoal == 3) {
return 0.75F;
} else if (numberOfCharcoal == 4) {
return 0.5F;
} else if (numberOfCharcoal == 5) {
return 0.25F;
}
return 0.15F;
}
@Override
public String getPlankTexture() {
return "forestry:blocks/wood/planks." + getName();
}
@Override
public String getDoorLowerTexture() {
return "forestry:blocks/doors/" + getName() + "_lower";
}
@Override
public String getDoorUpperTexture() {
return "forestry:blocks/doors/" + getName() + "_upper";
}
@Override
public String getBarkTexture() {
return "forestry:blocks/wood/bark." + getName();
}
@Override
public String getHeartTexture() {
return "forestry:blocks/wood/heart." + getName();
}
}
@@ -1,49 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IFruitFamily;
import forestry.core.utils.Translator;
import net.minecraft.util.text.translation.I18n;
public enum EnumFruitFamily implements IFruitFamily {
PRUNES("prunes", "Prunus domestica"),
POMES("pomes", "Pomum"),
JUNGLE("jungle", "Tropicus"),
NUX("nuts", "Nux"),
NONE("none", "None");
private final String uid;
private final String scientific;
EnumFruitFamily(String uid, String scientific) {
this.uid = uid;
this.scientific = scientific;
AlleleManager.alleleRegistry.registerFruitFamily(this);
}
@Override
public String getUID() {
return "forestry." + uid;
}
@Override
public String getScientific() {
return this.scientific;
}
@Override
public String getName() {
return Translator.translateToLocal("for.family." + uid);
}
@Override
public String getDescription() {
return Translator.translateToLocal("for.family." + uid + ".description");
}
}
@@ -1,25 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.ISpeciesType;
public enum EnumGermlingType implements ISpeciesType {
SAPLING("sapling"), POLLEN("pollen");
public static final EnumGermlingType[] VALUES = values();
private final String name;
EnumGermlingType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
@@ -1,10 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
public enum EnumGrowthConditions {
HOSTILE, PALTRY, NORMAL, GOOD, EXCELLENT
}
@@ -1,10 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
public enum EnumLeafType {
DECIDUOUS, CONIFERS, JUNGLE, WILLOW, MAPLE, PALM
}
@@ -1,14 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
public enum EnumPileType {
WOOD,
DIRT,
ASH;
public static final EnumPileType[] VALUES = values();
}
@@ -1,82 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.Locale;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleBoolean;
import forestry.api.genetics.IAlleleFloat;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IFruitFamily;
import forestry.api.genetics.ISpeciesRoot;
import net.minecraftforge.common.EnumPlantType;
public enum EnumTreeChromosome implements IChromosomeType {
/**
* Determines the following: - WorldGen, including the used wood blocks - {@link IFruitFamily}s supported. Limits which {@link IFruitProvider}
* will actually yield fruit with this species. - Native {@link EnumPlantType} for this tree. Combines with the PLANT chromosome.
*/
SPECIES(IAlleleTreeSpecies.class),
/**
* A float modifying the height of the tree. Taken into account at worldgen.
*/
HEIGHT(IAlleleFloat.class),
/**
* Chance for saplings.
*/
FERTILITY(IAlleleFloat.class),
/**
* {@link IFruitProvider}, determines if and what fruits are grown on the tree. Limited by the {@link IFruitFamily}s the species supports.
*/
FRUITS(IAlleleFruit.class),
/**
* Chance for fruit leaves and/or drops.
*/
YIELD(IAlleleFloat.class),
/**
* Determines the speed at which fruit will ripen on this tree.
*/
SAPPINESS(IAlleleFloat.class),
/**
* Leaf effect. Unused.
*/
EFFECT(IAlleleLeafEffect.class),
/**
* Amount of random ticks which need to elapse before a sapling will grow into a tree.
*/
MATURATION(IAlleleInteger.class),
GIRTH(IAlleleInteger.class),
/**
* Determines if the tree can burn.
*/
FIREPROOF(IAlleleBoolean.class),;
private final Class<? extends IAllele> alleleClass;
EnumTreeChromosome(Class<? extends IAllele> alleleClass) {
this.alleleClass = alleleClass;
}
@Override
public Class<? extends IAllele> getAlleleClass() {
return alleleClass;
}
@Override
public String getName() {
return this.toString().toLowerCase(Locale.ENGLISH);
}
@Override
public ISpeciesRoot getSpeciesRoot() {
return TreeManager.treeRoot;
}
}
@@ -1,117 +0,0 @@
package forestry.api.arboriculture;
import java.util.Locale;
import java.util.Random;
import net.minecraft.block.BlockPlanks;
public enum EnumVanillaWoodType implements IWoodType {
OAK(BlockPlanks.EnumType.OAK, 5),
SPRUCE(BlockPlanks.EnumType.SPRUCE, 4),
BIRCH(BlockPlanks.EnumType.BIRCH, 4),
JUNGLE(BlockPlanks.EnumType.JUNGLE, 5),
ACACIA(BlockPlanks.EnumType.ACACIA, 4),
DARK_OAK(BlockPlanks.EnumType.DARK_OAK, 5);
public static final EnumVanillaWoodType[] VALUES = values();
public static EnumVanillaWoodType getRandom(Random random) {
return VALUES[random.nextInt(VALUES.length)];
}
private final BlockPlanks.EnumType vanillaType;
private final int carbonization;
EnumVanillaWoodType(BlockPlanks.EnumType vanillaType, int carbonization) {
this.vanillaType = vanillaType;
this.carbonization = carbonization;
}
public BlockPlanks.EnumType getVanillaType() {
return vanillaType;
}
@Override
public String toString() {
return super.toString().toLowerCase(Locale.ENGLISH);
}
@Override
public String getName() {
return toString();
}
@Override
public int getMetadata() {
return ordinal();
}
public static EnumVanillaWoodType byMetadata(int meta) {
if (meta < 0 || meta >= VALUES.length) {
meta = 0;
}
return VALUES[meta];
}
@Override
public float getHardness() {
return 2.0F;
}
@Override
public int getCarbonization() {
return carbonization;
}
@Override
public float getCharcoalChance(int numberOfCharcoal) {
if (numberOfCharcoal == 3) {
return 0.75F;
} else if (numberOfCharcoal == 4) {
return 0.5F;
} else if (numberOfCharcoal == 5) {
return 0.25F;
}
return 0.15F;
}
@Override
public String getPlankTexture() {
if (this == DARK_OAK) {
return "blocks/planks_big_oak";
}
return "blocks/planks_" + getName();
}
@Override
public String getDoorLowerTexture() {
if (this == OAK) {
return "blocks/door_wood_lower";
}
return "blocks/door_wood_lower";
}
@Override
public String getDoorUpperTexture() {
if (this == OAK) {
return "blocks/door_wood_upper";
}
return "blocks/door_" + getName() + "_upper";
}
@Override
public String getBarkTexture() {
if (this == DARK_OAK) {
return "blocks/log_big_oak";
}
return "blocks/log_" + getName();
}
@Override
public String getHeartTexture() {
if (this == DARK_OAK) {
return "blocks/log_big_oak_top";
}
return "blocks/log_" + getName() + "_top";
}
}
@@ -1,24 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import javax.annotation.Nullable;
import forestry.api.genetics.IAlleleProperty;
/**
* Simple allele encapsulating an {@link IFruitProvider}.
*/
public interface IAlleleFruit extends IAlleleProperty<IAlleleFruit> {
IFruitProvider getProvider();
@Nullable
String getModelName();
String getModID();
}
@@ -1,20 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IEffectData;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
* Simple allele encapsulating a leaf effect. (Not implemented)
*/
public interface IAlleleLeafEffect extends IAlleleEffect {
IEffectData doEffect(ITreeGenome genome, IEffectData storedData, World world, BlockPos pos);
}
@@ -1,60 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.Collection;
import forestry.api.core.IModelManager;
import forestry.api.genetics.IAlleleProperty;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IFruitFamily;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IAlleleTreeSpecies extends IAlleleSpecies, IAlleleProperty<IAlleleTreeSpecies> {
@Override
ITreeRoot getRoot();
/**
* @return Native plant type of this species.
*/
EnumPlantType getPlantType();
/**
* @return List of all {@link IFruitFamily}s which can grow on leaves generated by this species.
*/
Collection<IFruitFamily> getSuitableFruit();
/**
* @return Tree generator for this species.
*/
ITreeGenerator getGenerator();
/**
* @return The modid from the mod of the species.
*/
String getModID();
IWoodProvider getWoodProvider();
/* MODELS AND OVERRIDES */
@SideOnly(Side.CLIENT)
ILeafSpriteProvider getLeafSpriteProvider();
@SideOnly(Side.CLIENT)
int getGermlingColour(EnumGermlingType type, int renderPass);
@SideOnly(Side.CLIENT)
ModelResourceLocation getGermlingModel(EnumGermlingType type);
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager, EnumGermlingType type);
}
@@ -1,27 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IAlleleSpeciesBuilder;
import forestry.api.genetics.IFruitFamily;
import net.minecraftforge.common.EnumPlantType;
public interface IAlleleTreeSpeciesBuilder extends IAlleleSpeciesBuilder {
@Override
IAlleleTreeSpecies build();
/**
* Add a fruit family for this tree. Trees can have multiple fruit families.
*/
IAlleleTreeSpeciesBuilder addFruitFamily(IFruitFamily family);
/**
* Set the minecraft plant type for this tree. Default is Plains.
*/
IAlleleTreeSpeciesBuilder setPlantType(EnumPlantType type);
}
@@ -1,12 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IBreedingTracker;
public interface IArboristTracker extends IBreedingTracker {
}
@@ -1,84 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import javax.annotation.Nullable;
import java.util.Map;
import java.util.Random;
import forestry.api.genetics.IFruitFamily;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IFruitProvider {
IFruitFamily getFamily();
int getColour(ITreeGenome genome, IBlockAccess world, BlockPos pos, int ripeningTime);
/**
* return the color to use for decorative leaves. Usually the ripe color.
*/
int getDecorativeColor();
boolean isFruitLeaf(ITreeGenome genome, World world, BlockPos pos);
int getRipeningPeriod();
// / Products, Chance
Map<ItemStack, Float> getProducts();
// / Specialty, Chance
Map<ItemStack, Float> getSpecialty();
NonNullList<ItemStack> getFruits(ITreeGenome genome, World world, BlockPos pos, int ripeningTime);
/**
* @return Short, human-readable identifier used in the treealyzer.
*/
String getDescription();
@Nullable
String getModelName();
String getModID();
/* TEXTURE OVERLAY */
/**
* @param ripeningTime Elapsed ripening time for the fruit.
* @return ResourceLocation of the texture to overlay on the leaf block.
*/
@Nullable
ResourceLocation getSprite(ITreeGenome genome, IBlockAccess world, BlockPos pos, int ripeningTime);
/**
* return the ResourceLocation to display on decorative leaves
*/
@Nullable
ResourceLocation getDecorativeSprite();
/**
* @return true if this fruit provider requires fruit blocks to spawn, false otherwise.
*/
boolean requiresFruitBlocks();
/**
* Tries to spawn a fruit block at the potential position when the tree generates.
* Spawning a fruit has a random chance of success based on {@link ITreeGenome#getSappiness()}
*
* @return true if a fruit block was spawned, false otherwise.
*/
boolean trySpawnFruitBlock(ITreeGenome genome, World world, Random rand, BlockPos pos);
@SideOnly(Side.CLIENT)
void registerSprites();
}
@@ -1,33 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.core.IModelManager;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Provides icons for saplings, pollen, etc.
* You must implement this yourself to use TreeManager.treeFactory.createSpecies()
* There is no default implementation because every sapling has a unique icon.
*/
public interface IGermlingModelProvider {
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager, EnumGermlingType type);
ModelResourceLocation getModel(EnumGermlingType type);
/**
* Provides color for sapling. See {@link ILeafSpriteProvider} for pollen color.
*
* @param type the germling type to render
* @param renderPass renderPass of rendering
* @return sapling color for renderPass
*/
int getSpriteColor(EnumGermlingType type, int renderPass);
}
@@ -1,21 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.util.ResourceLocation;
/**
* Provides icons for leaves. Used by TreeManager.treeFactory.createSpecies()
* Get a default Forestry implementation from TreeManager.treeFactory.getLeafIconProvider() or implement your own.
* <p>
* If you implement your own, be sure to register the icons.
* Icon registration is not done here because these icons are heavily reused.
*/
public interface ILeafSpriteProvider {
ResourceLocation getSprite(boolean pollinated, boolean fancy);
int getColor(boolean pollinated);
}
@@ -1,15 +0,0 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.Random;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface ILeafTickHandler {
boolean onRandomLeafTick(ITree tree, World world, Random rand, BlockPos pos, boolean isDestroyed);
}
Loaded 100 of 3455 files, more files were not shown because too many files have changed in this diff. Show more