From 143e6d00e7db1b7594b153d755be9fc5fdfec821 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Wed, 26 Feb 2014 11:17:13 +0800 Subject: [PATCH] Resolved #298 - Added bucket for all fluids --- build-moduarlized.gradle | 140 ------ build-old.gradle | 137 +++++ build.gradle | 158 +++--- .../electrical/charger/RenderCharger.java | 2 +- .../electrical/levitator/RenderLevitator.java | 2 +- .../core/ResonantInduction.java | 14 +- .../core/resource/BlockDust.java | 1 - .../resource/{item => }/ItemOreResource.java | 16 +- .../core/resource/ResourceGenerator.java | 469 +++++++++--------- .../resource/fluid/ItemOreResourceBucket.java | 294 +++++++++++ .../core/resource/item/ItemFluidBucket.java | 110 ---- .../languages/en_US.properties | 4 +- .../textures/items/bucketMixture.png | Bin 0 -> 189 bytes .../textures/items/bucketMolten.png | Bin 0 -> 3001 bytes 14 files changed, 771 insertions(+), 576 deletions(-) delete mode 100644 build-moduarlized.gradle create mode 100644 build-old.gradle rename src/main/java/resonantinduction/core/resource/{item => }/ItemOreResource.java (91%) create mode 100644 src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java delete mode 100644 src/main/java/resonantinduction/core/resource/item/ItemFluidBucket.java create mode 100644 src/main/resources/assets/resonantinduction/textures/items/bucketMixture.png create mode 100644 src/main/resources/assets/resonantinduction/textures/items/bucketMolten.png diff --git a/build-moduarlized.gradle b/build-moduarlized.gradle deleted file mode 100644 index 9a08d467..00000000 --- a/build-moduarlized.gradle +++ /dev/null @@ -1,140 +0,0 @@ -buildscript { - repositories { - mavenCentral() - maven { - name = "forge" - url = "http://files.minecraftforge.net/maven" - } - } - dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.0-SNAPSHOT' - } -} - -apply plugin: 'forge' -apply plugin: 'maven-publish' - -ext.buildProps = file "build.properties" - -buildProps.withReader { - def prop = new Properties() - prop.load(it) - ext.config = new ConfigSlurper().parse prop -} - -group = "resonant-induction" -archivesBaseName = "Resonant-Induction" - -minecraft { - version = "${rootProject.config.version.minecraft}-${rootProject.config.version.forge}" - - replaceIn "Reference.java" - replace "@MAJOR@", rootProject.config.version.mod.major - replace "@MINOR@", rootProject.config.version.mod.minor - replace "@REVIS@", rootProject.config.version.mod.revis - replace "@BUILD@", "${System.getenv().BUILD_NUMBER}" -} - -allprojects { - apply plugin: 'java' - - version = "${config.version.mod.major}.${config.version.mod.minor}.${config.version.mod.revis}" - - if (System.getenv("BUILD_NUMBER") != null) - version += ".${System.getenv("BUILD_NUMBER")}" - - repositories { - maven { - name 'Calclavia Maven' - url 'http://calclavia.com/maven' - } - maven { - name = "forge" - url = "http://files.minecraftforge.net/maven" - } - ivy { - name 'CB FS' - artifactPattern "http://files.minecraftforge.net/[module]/[module]-dev-[revision].[ext]" - } - mavenCentral() - } - - dependencies { - compile group: 'universalelectricity', name: 'Universal-Electricity', version: "${rootProject.config.version.universalelectricity}", classifier: "dev" - compile group: 'calclaviacore', name: 'calclavia-core', version: "${rootProject.config.version.calclaviacore}", classifier: "dev" - compile name: 'CodeChickenLib', version: "${config.version.minecraft}-${config.version.cclib}", ext: 'jar' - compile name: 'ForgeMultipart', version: "${config.version.minecraft}-${config.version.fmp}", ext: 'jar' - } - - jar { - classifier = project.name - dependsOn ":copyBuildXml" - destinationDir = file (rootProject.getRootDir().getPath() + '/output') - } - - publishing { - publications { - mavenJava(MavenPublication) { - artifact jar - } - } - repositories { - maven { - url "file://var/www/maven" - } - } - } -} - -subprojects { - archivesBaseName = "Resonant-Induction" - - dependencies { - compile rootProject - } - - rootProject.tasks.reobf { - reobf.setUseRetroGuard(true) - reobf(tasks.jar) { spec -> - spec.classpath = sourceSets.main.compileClasspath - } - } -} - -processResources { - from 'build.properties' -} - -task copyBuildXml(type: Copy) { - from 'build.properties' - into 'output' -} - -task apiZip(type: Zip) { - classifier = 'api' - from sourceSets*.allSource - include 'resonantinduction/api/**' - destinationDir = file 'output' -} - -artifacts { - archives apiZip -} - -import net.minecraftforge.gradle.tasks.dev.ChangelogTask -import net.minecraftforge.gradle.common.Constants -import net.minecraftforge.gradle.delayed.* - -task createChangelog(type: ChangelogTask) { - def jobName = "${System.getenv().JOB_NAME}" - def buildNumber = "${System.getenv().BUILD_NUMBER}" - jobName.replaceAll(' ','%20') - setServerRoot(new DelayedString(project, 'http://ci.calclavia.com/')) - setJobName(new DelayedString(project, jobName.toString())); - setAuthName(new DelayedString(project, 'console_script')); - setAuthPassword(new DelayedString(project, '625d2ac53190be3422faa0c474fb299b')); - setTargetBuild({buildNumber.toString()}); - setOutput(new DelayedFile(project, 'output/' + jobName + "-${project.version}" + '-changelog' + '.txt')); -} - -build.dependsOn "apiZip", "copyBuildXml", "createChangelog" \ No newline at end of file diff --git a/build-old.gradle b/build-old.gradle new file mode 100644 index 00000000..b823113d --- /dev/null +++ b/build-old.gradle @@ -0,0 +1,137 @@ +buildscript { + repositories { + mavenCentral() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:1.0-SNAPSHOT' + } +} + +apply plugin: 'forge' +apply plugin: 'maven-publish' + +sourceSets { + main { + java { + srcDirs 'src/main/java', 'archaic/src/main/java', 'electrical/src/main/java', 'mechanical/src/main/java' + //exclude 'resonantinduction/core/nei/**' + } + } +} + +ext.buildProps = file "build.properties" + +buildProps.withReader { + def prop = new Properties() + prop.load(it) + ext.config = new ConfigSlurper().parse prop +} + +version = "${config.version.mod.major}.${config.version.mod.minor}.${config.version.mod.revis}" +group = "resonantinduction" +archivesBaseName = "Resonant-Induction" + +minecraft { + version = "${config.version.minecraft}-${config.version.forge}" + + replaceIn "Reference.java" + replace "@MAJOR@", config.version.mod.major + replace "@MINOR@", config.version.mod.minor + replace "@REVIS@", config.version.mod.revis + replace "@BUILD@", System.getenv("BUILD_NUMBER") +} + +if (System.getenv("BUILD_NUMBER") != null) + version += ".${System.getenv("BUILD_NUMBER")}" + + +processResources { + from 'build.properties' +} + +task copyBuildXml(type: Copy) { + from 'build.properties' + into 'output' +} + +task apiZip(type: Zip) { + classifier = 'api' + from sourceSets*.allSource + include 'resonantinduction/api/**' + destinationDir = file 'output' +} + +artifacts { + archives apiZip +} + +jar { + dependsOn copyBuildXml + classifier = '' + destinationDir = file 'output' +} + +repositories { + maven { + name 'Calclavia Maven' + url 'http://calclavia.com/maven' + } + + ivy { + name 'FMP' + artifactPattern "http://files.minecraftforge.net/[module]/[module]-dev-[revision].[ext]" + } + + ivy { + artifactPattern "http://www.chickenbones.craftsaddle.org/Files/New_Versions/1.6.4/[module]-dev%20[revision].[ext]" + } +} + +dependencies { + compile group: 'universalelectricity', name: 'Universal-Electricity', version: "${config.version.universalelectricity}", classifier: "dev" + compile group: 'calclaviacore', name: 'calclavia-core', version: "${config.version.calclaviacore}", classifier: "dev" + compile name: 'CodeChickenLib', version: "${config.version.minecraft}-${config.version.cclib}", ext: 'jar' + compile name: 'ForgeMultipart', version: "${config.version.minecraft}-${config.version.fmp}", ext: 'jar' + //compile name: 'NotEnoughItems', version: "1.6.1.8", ext: 'jar' + compile name: 'NotEnoughItems', version: "${config.version.nei}", ext: 'jar' +} + +publishing { + publications { + mavenJava(MavenPublication) { + artifact jar + /*artifact apiZip*/ + + artifact { + file 'output/build.properties' + } + } + } + repositories { + maven { + url "file://var/www/maven" + } + } +} + +import net.minecraftforge.gradle.tasks.dev.ChangelogTask +import net.minecraftforge.gradle.common.Constants +import net.minecraftforge.gradle.delayed.* + +task createChangelog(type: ChangelogTask) { + def jobName = "${System.getenv().JOB_NAME}" + def buildNumber = "${System.getenv().BUILD_NUMBER}" + jobName.replaceAll(' ','%20') + setServerRoot(new DelayedString(project, 'http://ci.calclavia.com/')) + setJobName(new DelayedString(project, jobName.toString())); + setAuthName(new DelayedString(project, 'console_script')); + setAuthPassword(new DelayedString(project, '625d2ac53190be3422faa0c474fb299b')); + setTargetBuild({buildNumber.toString()}); + setOutput(new DelayedFile(project, 'output/' + jobName + "-${project.version}" + '-changelog' + '.txt')); +} + +build.dependsOn "createChangelog" \ No newline at end of file diff --git a/build.gradle b/build.gradle index b823113d..b84ddc7e 100644 --- a/build.gradle +++ b/build.gradle @@ -10,114 +10,116 @@ buildscript { classpath 'net.minecraftforge.gradle:ForgeGradle:1.0-SNAPSHOT' } } - + apply plugin: 'forge' apply plugin: 'maven-publish' -sourceSets { - main { - java { - srcDirs 'src/main/java', 'archaic/src/main/java', 'electrical/src/main/java', 'mechanical/src/main/java' - //exclude 'resonantinduction/core/nei/**' - } - } -} - ext.buildProps = file "build.properties" - + buildProps.withReader { def prop = new Properties() prop.load(it) ext.config = new ConfigSlurper().parse prop } - -version = "${config.version.mod.major}.${config.version.mod.minor}.${config.version.mod.revis}" -group = "resonantinduction" + +group = "resonant-induction" archivesBaseName = "Resonant-Induction" - + minecraft { - version = "${config.version.minecraft}-${config.version.forge}" - - replaceIn "Reference.java" - replace "@MAJOR@", config.version.mod.major - replace "@MINOR@", config.version.mod.minor - replace "@REVIS@", config.version.mod.revis - replace "@BUILD@", System.getenv("BUILD_NUMBER") + version = "${rootProject.config.version.minecraft}-${rootProject.config.version.forge}" + + replaceIn "Reference.java" + replace "@MAJOR@", rootProject.config.version.mod.major + replace "@MINOR@", rootProject.config.version.mod.minor + replace "@REVIS@", rootProject.config.version.mod.revis + replace "@BUILD@", "${System.getenv().BUILD_NUMBER}" } -if (System.getenv("BUILD_NUMBER") != null) - version += ".${System.getenv("BUILD_NUMBER")}" - +subprojects*.apply plugin: 'java' +allprojects { + version = "${config.version.mod.major}.${config.version.mod.minor}.${config.version.mod.revis}" + + if (System.getenv("BUILD_NUMBER") != null) + version += ".${System.getenv("BUILD_NUMBER")}" + + repositories { + maven { + name 'Calclavia Maven' + url 'http://calclavia.com/maven' + } + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + ivy { + name 'CB FS' + artifactPattern "http://files.minecraftforge.net/[module]/[module]-dev-[revision].[ext]" + } + mavenCentral() + } + + dependencies { + compile group: 'universalelectricity', name: 'Universal-Electricity', version: "${rootProject.config.version.universalelectricity}", classifier: "dev" + compile group: 'calclaviacore', name: 'calclavia-core', version: "${rootProject.config.version.calclaviacore}", classifier: "dev" + compile name: 'CodeChickenLib', version: "${config.version.minecraft}-${config.version.cclib}", ext: 'jar' + compile name: 'ForgeMultipart', version: "${config.version.minecraft}-${config.version.fmp}", ext: 'jar' + } + + jar { + classifier = project.name + dependsOn ":copyBuildXml" + destinationDir = file (rootProject.getRootDir().getPath() + '/output') + } + + publishing { + publications { + mavenJava(MavenPublication) { + artifact jar + } + } + repositories { + maven { + url "file://var/www/maven" + } + } + } +} + +subprojects { + archivesBaseName = "Resonant-Induction" + + dependencies { + compile rootProject + } + + rootProject.tasks.reobf { + reobf(tasks.jar) { spec -> + spec.classpath = sourceSets.main.compileClasspath + } + } +} + processResources { from 'build.properties' } - + task copyBuildXml(type: Copy) { from 'build.properties' into 'output' } - + task apiZip(type: Zip) { classifier = 'api' from sourceSets*.allSource include 'resonantinduction/api/**' destinationDir = file 'output' } - + artifacts { archives apiZip } -jar { - dependsOn copyBuildXml - classifier = '' - destinationDir = file 'output' -} - -repositories { - maven { - name 'Calclavia Maven' - url 'http://calclavia.com/maven' - } - - ivy { - name 'FMP' - artifactPattern "http://files.minecraftforge.net/[module]/[module]-dev-[revision].[ext]" - } - - ivy { - artifactPattern "http://www.chickenbones.craftsaddle.org/Files/New_Versions/1.6.4/[module]-dev%20[revision].[ext]" - } -} - -dependencies { - compile group: 'universalelectricity', name: 'Universal-Electricity', version: "${config.version.universalelectricity}", classifier: "dev" - compile group: 'calclaviacore', name: 'calclavia-core', version: "${config.version.calclaviacore}", classifier: "dev" - compile name: 'CodeChickenLib', version: "${config.version.minecraft}-${config.version.cclib}", ext: 'jar' - compile name: 'ForgeMultipart', version: "${config.version.minecraft}-${config.version.fmp}", ext: 'jar' - //compile name: 'NotEnoughItems', version: "1.6.1.8", ext: 'jar' - compile name: 'NotEnoughItems', version: "${config.version.nei}", ext: 'jar' -} - -publishing { - publications { - mavenJava(MavenPublication) { - artifact jar - /*artifact apiZip*/ - - artifact { - file 'output/build.properties' - } - } - } - repositories { - maven { - url "file://var/www/maven" - } - } -} - import net.minecraftforge.gradle.tasks.dev.ChangelogTask import net.minecraftforge.gradle.common.Constants import net.minecraftforge.gradle.delayed.* @@ -134,4 +136,4 @@ task createChangelog(type: ChangelogTask) { setOutput(new DelayedFile(project, 'output/' + jobName + "-${project.version}" + '-changelog' + '.txt')); } -build.dependsOn "createChangelog" \ No newline at end of file +build.dependsOn "apiZip", "copyBuildXml", "createChangelog" \ No newline at end of file diff --git a/electrical/src/main/java/resonantinduction/electrical/charger/RenderCharger.java b/electrical/src/main/java/resonantinduction/electrical/charger/RenderCharger.java index b4c5d44f..44143947 100644 --- a/electrical/src/main/java/resonantinduction/electrical/charger/RenderCharger.java +++ b/electrical/src/main/java/resonantinduction/electrical/charger/RenderCharger.java @@ -84,7 +84,7 @@ public class RenderCharger implements ISimpleItemRenderer @Override public void renderInventoryItem(ItemStack itemStack) { - GL11.glTranslatef(0.5f, 0.7f, 0.5f); + GL11.glTranslatef(0f, 0.5f, 0f); RenderUtility.bind(TEXTURE); MODEL.renderAll(); } diff --git a/electrical/src/main/java/resonantinduction/electrical/levitator/RenderLevitator.java b/electrical/src/main/java/resonantinduction/electrical/levitator/RenderLevitator.java index c980f8be..20f69b39 100644 --- a/electrical/src/main/java/resonantinduction/electrical/levitator/RenderLevitator.java +++ b/electrical/src/main/java/resonantinduction/electrical/levitator/RenderLevitator.java @@ -66,7 +66,7 @@ public class RenderLevitator implements ISimpleItemRenderer public void renderInventoryItem(ItemStack itemStack) { GL11.glPushMatrix(); - GL11.glTranslatef(0.5f, 0.5f, 0.5f); + GL11.glTranslatef(0f, 0.5f, 0f); FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_OFF); MODEL.renderAll(); GL11.glPopMatrix(); diff --git a/src/main/java/resonantinduction/core/ResonantInduction.java b/src/main/java/resonantinduction/core/ResonantInduction.java index 4a1047c2..4494ac5a 100644 --- a/src/main/java/resonantinduction/core/ResonantInduction.java +++ b/src/main/java/resonantinduction/core/ResonantInduction.java @@ -16,18 +16,17 @@ import resonantinduction.core.handler.TextureHookHandler; import resonantinduction.core.prefab.part.PacketMultiPart; import resonantinduction.core.resource.BlockDust; import resonantinduction.core.resource.BlockMachineMaterial; +import resonantinduction.core.resource.ItemOreResource; import resonantinduction.core.resource.ResourceGenerator; import resonantinduction.core.resource.TileMaterial; +import resonantinduction.core.resource.fluid.ItemOreResourceBucket; import resonantinduction.core.resource.fluid.TileFluidMixture; -import resonantinduction.core.resource.item.ItemOreResource; -import calclavia.components.tool.ToolMode; import calclavia.lib.content.ContentRegistry; import calclavia.lib.network.PacketAnnotation; import calclavia.lib.network.PacketHandler; import calclavia.lib.network.PacketTile; import calclavia.lib.prefab.item.ItemBlockMetadata; import calclavia.lib.utility.LanguageUtility; -import calclavia.lib.utility.LinkUtility; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -73,9 +72,8 @@ public class ResonantInduction /** Blocks and Items */ public static Block blockOre; - public static ItemOreResource itemRubble; - public static ItemOreResource itemDust; - public static ItemOreResource itemRefinedDust; + public static ItemOreResource itemRubble, itemDust, itemRefinedDust; + public static ItemOreResourceBucket itemBucketMixture, itemBucketMolten; public static Block blockDust; public static final List blockMixtureFluids = new ArrayList(); public static final List blockMoltenFluid = new ArrayList(); @@ -110,10 +108,14 @@ public class ResonantInduction itemRubble = new ItemOreResource(Settings.getNextItemID("oreRubble"), "oreRubble"); itemDust = new ItemOreResource(Settings.getNextItemID("oreDust"), "oreDust"); itemRefinedDust = new ItemOreResource(Settings.getNextItemID("oreRefinedDust"), "oreRefinedDust"); + itemBucketMixture = new ItemOreResourceBucket(Settings.getNextItemID("bucketMixture"), "bucketMixture"); + itemBucketMolten = new ItemOreResourceBucket(Settings.getNextItemID("bucketMolten"), "bucketMolten"); GameRegistry.registerItem(itemRubble, itemRubble.getUnlocalizedName()); GameRegistry.registerItem(itemDust, itemDust.getUnlocalizedName()); GameRegistry.registerItem(itemRefinedDust, itemRefinedDust.getUnlocalizedName()); + GameRegistry.registerItem(itemBucketMixture, itemBucketMixture.getUnlocalizedName()); + GameRegistry.registerItem(itemBucketMolten, itemBucketMolten.getUnlocalizedName()); // Already registered with ContentRegistry // GameRegistry.registerTileEntity(TileMaterial.class, "ri_material"); diff --git a/src/main/java/resonantinduction/core/resource/BlockDust.java b/src/main/java/resonantinduction/core/resource/BlockDust.java index b01b68f6..cb7a6927 100644 --- a/src/main/java/resonantinduction/core/resource/BlockDust.java +++ b/src/main/java/resonantinduction/core/resource/BlockDust.java @@ -12,7 +12,6 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; -import resonantinduction.core.resource.item.ItemOreResource; import calclavia.lib.prefab.block.BlockTile; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/resonantinduction/core/resource/item/ItemOreResource.java b/src/main/java/resonantinduction/core/resource/ItemOreResource.java similarity index 91% rename from src/main/java/resonantinduction/core/resource/item/ItemOreResource.java rename to src/main/java/resonantinduction/core/resource/ItemOreResource.java index 9e9f2950..a897dcda 100644 --- a/src/main/java/resonantinduction/core/resource/item/ItemOreResource.java +++ b/src/main/java/resonantinduction/core/resource/ItemOreResource.java @@ -1,4 +1,4 @@ -package resonantinduction.core.resource.item; +package resonantinduction.core.resource; import java.util.List; @@ -16,8 +16,6 @@ import resonantinduction.api.recipe.RecipeResource; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; import resonantinduction.core.TabRI; -import resonantinduction.core.resource.ResourceGenerator; -import resonantinduction.core.resource.TileMaterial; import universalelectricity.api.vector.Vector3; import calclavia.lib.utility.LanguageUtility; import calclavia.lib.utility.inventory.InventoryUtility; @@ -206,21 +204,19 @@ public class ItemOreResource extends Item public ItemStack getStackFromMaterial(String name) { ItemStack itemStack = new ItemStack(this); - itemStack.setItemDamage(ResourceGenerator.materialNames.indexOf(name)); + itemStack.setItemDamage(ResourceGenerator.getID(name)); return itemStack; } public static String getMaterialFromStack(ItemStack itemStack) { - if (ResourceGenerator.materialNames.size() > itemStack.getItemDamage()) - return ResourceGenerator.materialNames.get(itemStack.getItemDamage()); - return null; + return ResourceGenerator.getName(itemStack.getItemDamage()); } @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) { - for (String materialName : ResourceGenerator.materialNames) + for (String materialName : ResourceGenerator.getMaterials()) { par3List.add(getStackFromMaterial(materialName)); } @@ -235,9 +231,9 @@ public class ItemOreResource extends Item */ String name = ItemOreResource.getMaterialFromStack(itemStack); - if (ResourceGenerator.materialColors.containsKey(name)) + if (ResourceGenerator.materialColorCache.containsKey(name)) { - return ResourceGenerator.materialColors.get(name); + return ResourceGenerator.materialColorCache.get(name); } return 16777215; diff --git a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java index d229df7c..99db7646 100644 --- a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java +++ b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java @@ -3,9 +3,7 @@ package resonantinduction.core.resource; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.InputStream; -import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Set; @@ -35,6 +33,9 @@ import resonantinduction.core.Settings; import resonantinduction.core.resource.fluid.BlockFluidMaterial; import resonantinduction.core.resource.fluid.BlockFluidMixture; import calclavia.lib.utility.LanguageUtility; + +import com.google.common.collect.HashBiMap; + import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -42,276 +43,288 @@ import cpw.mods.fml.relauncher.SideOnly; /** @author Calclavia */ public class ResourceGenerator { - public static final ResourceGenerator INSTANCE = new ResourceGenerator(); - public static final Set oreDictBlackList = new HashSet(); + public static final ResourceGenerator INSTANCE = new ResourceGenerator(); - /** A list of material names. They are all camelCase reference of ore dictionary names without - * the "ore" or "ingot" prefix. */ - public static final List materialNames = new ArrayList(); - public static final HashMap materialColors = new HashMap(); - private static final HashMap iconColorMap = new HashMap(); + /** + * A list of material names. They are all camelCase reference of ore dictionary names without + * the "ore" or "ingot" prefix. + * + * Name, ID + */ + static int maxID = 0; + static final HashBiMap materials = HashBiMap.create(); - static - { - oreDictBlackList.add("ingotRefinedIron"); - } + static final HashMap materialColorCache = new HashMap(); + static final HashMap iconColorCache = new HashMap(); - @ForgeSubscribe - public void oreRegisterEvent(OreRegisterEvent evt) - { - if (evt.Name.startsWith("ingot") && !oreDictBlackList.contains(evt.Name)) - { - String oreDictName = evt.Name.replace("ingot", ""); - String materialName = LanguageUtility.decapitalizeFirst(oreDictName); + static + { + OreDetectionBlackList.addIngot("refinedIron"); + } - if (!materialNames.contains(materialName)) - { - Settings.CONFIGURATION.load(); - boolean allowMaterial = Settings.CONFIGURATION.get("Resource_Generator", "Enable " + oreDictName, true).getBoolean(true); - Settings.CONFIGURATION.save(); + @ForgeSubscribe + public void oreRegisterEvent(OreRegisterEvent evt) + { + if (evt.Name.startsWith("ingot")) + { + String oreDictName = evt.Name.replace("ingot", ""); + String materialName = LanguageUtility.decapitalizeFirst(oreDictName); - if (!allowMaterial || OreDetectionBlackList.isIngotBlackListed("ingot" + oreDictName) || OreDetectionBlackList.isOreBlackListed("ore" + oreDictName)) - return; + if (!materials.containsKey(materialName)) + { + Settings.CONFIGURATION.load(); + boolean allowMaterial = Settings.CONFIGURATION.get("Resource_Generator", "Enable " + oreDictName, true).getBoolean(true); + Settings.CONFIGURATION.save(); - materialNames.add(materialName); - } - } - } + if (!allowMaterial || OreDetectionBlackList.isIngotBlackListed("ingot" + oreDictName) || OreDetectionBlackList.isOreBlackListed("ore" + oreDictName)) + return; - public static void generateOreResources() - { - OreDictionary.registerOre("ingotGold", Item.ingotGold); - OreDictionary.registerOre("ingotIron", Item.ingotIron); + materials.put(materialName, maxID++); + } + } + } - OreDictionary.registerOre("oreGold", Block.oreGold); - OreDictionary.registerOre("oreIron", Block.oreIron); - OreDictionary.registerOre("oreLapis", Block.oreLapis); + public static void generateOreResources() + { + OreDictionary.registerOre("ingotGold", Item.ingotGold); + OreDictionary.registerOre("ingotIron", Item.ingotIron); - //Vanilla fluid recipes - MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(Block.stone)); - - //Vanilla crusher recipes - MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, Block.cobblestone, Block.gravel); - MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, Block.stone, Block.cobblestone); - MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, Block.chest, new ItemStack(Block.planks, 7, 0)); - - //Vanilla grinder recipes - MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.cobblestone, Block.sand); - MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.gravel, Block.sand); - MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.glass, Block.sand); + OreDictionary.registerOre("oreGold", Block.oreGold); + OreDictionary.registerOre("oreIron", Block.oreIron); + OreDictionary.registerOre("oreLapis", Block.oreLapis); - for (String materialName : materialNames) - { - // Caps version of the name - String nameCaps = LanguageUtility.capitalizeFirst(materialName); + // Vanilla fluid recipes + MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(Block.stone)); - /** Generate molten fluids */ - Fluid fluidMolten = new Fluid(materialNameToMolten(materialName)); - fluidMolten.setDensity(7); - fluidMolten.setViscosity(5000); - fluidMolten.setTemperature(273 + 1538); - FluidRegistry.registerFluid(fluidMolten); - Block blockFluidMaterial = new BlockFluidMaterial(fluidMolten); - GameRegistry.registerBlock(blockFluidMaterial, "molten" + nameCaps); - ResonantInduction.blockMoltenFluid.add(blockFluidMaterial); + // Vanilla crusher recipes + MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, Block.cobblestone, Block.gravel); + MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, Block.stone, Block.cobblestone); + MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, Block.chest, new ItemStack(Block.planks, 7, 0)); - /** Generate dust mixture fluids */ - Fluid fluidMixture = new Fluid(materialNameToMixture(materialName)); - FluidRegistry.registerFluid(fluidMixture); - Block blockFluidMixture = new BlockFluidMixture(fluidMixture); - GameRegistry.registerBlock(blockFluidMixture, "mixture" + nameCaps); - ResonantInduction.blockMixtureFluids.add(blockFluidMixture); + // Vanilla grinder recipes + MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.cobblestone, Block.sand); + MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.gravel, Block.sand); + MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.glass, Block.sand); - if (OreDictionary.getOres("ore" + nameCaps).size() > 0) - { - OreDictionary.registerOre("dust" + nameCaps, ResonantInduction.itemDust.getStackFromMaterial(materialName)); - OreDictionary.registerOre("rubble" + nameCaps, ResonantInduction.itemRubble.getStackFromMaterial(materialName)); - OreDictionary.registerOre("dustRefined" + nameCaps, ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName)); + for (String materialName : materials.keySet()) + { + // Caps version of the name + String nameCaps = LanguageUtility.capitalizeFirst(materialName); - MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, "ore" + nameCaps, "rubble" + nameCaps); - MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "rubble" + nameCaps, "dust" + nameCaps, "dust" + nameCaps); - MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, "dust" + nameCaps, "dustRefined" + nameCaps); - MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(fluidMolten, FluidContainerRegistry.BUCKET_VOLUME), "ingot" + nameCaps); + /** Generate molten fluids */ + Fluid fluidMolten = new Fluid(materialNameToMolten(materialName)); + fluidMolten.setDensity(7); + fluidMolten.setViscosity(5000); + fluidMolten.setTemperature(273 + 1538); + FluidRegistry.registerFluid(fluidMolten); + Block blockFluidMaterial = new BlockFluidMaterial(fluidMolten); + GameRegistry.registerBlock(blockFluidMaterial, "molten" + nameCaps); + ResonantInduction.blockMoltenFluid.add(blockFluidMaterial); - ItemStack dust = ResonantInduction.itemDust.getStackFromMaterial(materialName); - FurnaceRecipes.smelting().addSmelting(dust.itemID, dust.getItemDamage(), OreDictionary.getOres("ingot" + nameCaps).get(0).copy(), 0.7f); - ItemStack refinedDust = ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName); - ItemStack smeltResult = OreDictionary.getOres("ingot" + nameCaps).get(0).copy(); - smeltResult.stackSize = 2; - FurnaceRecipes.smelting().addSmelting(refinedDust.itemID, refinedDust.getItemDamage(), smeltResult, 0.7f); - } - } - } + /** Generate dust mixture fluids */ + Fluid fluidMixture = new Fluid(materialNameToMixture(materialName)); + FluidRegistry.registerFluid(fluidMixture); + Block blockFluidMixture = new BlockFluidMixture(fluidMixture); + GameRegistry.registerBlock(blockFluidMixture, "mixture" + nameCaps); + ResonantInduction.blockMixtureFluids.add(blockFluidMixture); - @ForgeSubscribe - @SideOnly(Side.CLIENT) - public void reloadTextures(TextureStitchEvent.Post e) - { - computeColors(); - } + if (OreDictionary.getOres("ore" + nameCaps).size() > 0) + { + OreDictionary.registerOre("dust" + nameCaps, ResonantInduction.itemDust.getStackFromMaterial(materialName)); + OreDictionary.registerOre("rubble" + nameCaps, ResonantInduction.itemRubble.getStackFromMaterial(materialName)); + OreDictionary.registerOre("dustRefined" + nameCaps, ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName)); - @SideOnly(Side.CLIENT) - public static void computeColors() - { - for (String material : materialNames) - { - // Compute color - int totalR = 0; - int totalG = 0; - int totalB = 0; + MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, "ore" + nameCaps, "rubble" + nameCaps); + MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "rubble" + nameCaps, "dust" + nameCaps, "dust" + nameCaps); + MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, "dust" + nameCaps, "dustRefined" + nameCaps); + MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(fluidMolten, FluidContainerRegistry.BUCKET_VOLUME), "ingot" + nameCaps); - int colorCount = 0; + ItemStack dust = ResonantInduction.itemDust.getStackFromMaterial(materialName); + FurnaceRecipes.smelting().addSmelting(dust.itemID, dust.getItemDamage(), OreDictionary.getOres("ingot" + nameCaps).get(0).copy(), 0.7f); + ItemStack refinedDust = ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName); + ItemStack smeltResult = OreDictionary.getOres("ingot" + nameCaps).get(0).copy(); + smeltResult.stackSize = 2; + FurnaceRecipes.smelting().addSmelting(refinedDust.itemID, refinedDust.getItemDamage(), smeltResult, 0.7f); + } + } + } - for (ItemStack ingotStack : OreDictionary.getOres("ingot" + material.substring(0, 1).toUpperCase() + material.substring(1))) - { - Item theIngot = ingotStack.getItem(); - materialColors.put(material, getAverageColor(ingotStack)); - } + @ForgeSubscribe + @SideOnly(Side.CLIENT) + public void reloadTextures(TextureStitchEvent.Post e) + { + computeColors(); + } - if (!materialColors.containsKey(material)) - { - materialColors.put(material, 0xFFFFFF); - } - } - } + @SideOnly(Side.CLIENT) + public static void computeColors() + { + for (String material : materials.keySet()) + { + // Compute color + int totalR = 0; + int totalG = 0; + int totalB = 0; - /** Gets the average color of this item. - * - * @param itemStack - * @return The RGB hexadecimal color code. */ - @SideOnly(Side.CLIENT) - public static int getAverageColor(ItemStack itemStack) - { - int totalR = 0; - int totalG = 0; - int totalB = 0; + int colorCount = 0; - int colorCount = 0; - Item item = itemStack.getItem(); + for (ItemStack ingotStack : OreDictionary.getOres("ingot" + material.substring(0, 1).toUpperCase() + material.substring(1))) + { + Item theIngot = ingotStack.getItem(); + materialColorCache.put(material, getAverageColor(ingotStack)); + } - try - { - Icon icon = item.getIconIndex(itemStack); + if (!materialColorCache.containsKey(material)) + { + materialColorCache.put(material, 0xFFFFFF); + } + } + } - if (iconColorMap.containsKey(icon)) - { - return iconColorMap.get(icon); - } + /** + * Gets the average color of this item. + * + * @param itemStack + * @return The RGB hexadecimal color code. + */ + @SideOnly(Side.CLIENT) + public static int getAverageColor(ItemStack itemStack) + { + int totalR = 0; + int totalG = 0; + int totalB = 0; - String iconString = icon.getIconName(); + int colorCount = 0; + Item item = itemStack.getItem(); - if (iconString != null && !iconString.contains("MISSING_ICON_ITEM")) - { - iconString = (iconString.contains(":") ? iconString.replace(":", ":" + Reference.ITEM_TEXTURE_DIRECTORY) : Reference.ITEM_TEXTURE_DIRECTORY + iconString) + ".png"; - ResourceLocation textureLocation = new ResourceLocation(iconString); + try + { + Icon icon = item.getIconIndex(itemStack); - InputStream inputstream = Minecraft.getMinecraft().getResourceManager().getResource(textureLocation).getInputStream(); - BufferedImage bufferedimage = ImageIO.read(inputstream); + if (iconColorCache.containsKey(icon)) + { + return iconColorCache.get(icon); + } - int width = bufferedimage.getWidth(); - int height = bufferedimage.getWidth(); + String iconString = icon.getIconName(); - for (int x = 0; x < width; x++) - { - for (int y = 0; y < height; y++) - { - Color rgb = new Color(bufferedimage.getRGB(x, y)); + if (iconString != null && !iconString.contains("MISSING_ICON_ITEM")) + { + iconString = (iconString.contains(":") ? iconString.replace(":", ":" + Reference.ITEM_TEXTURE_DIRECTORY) : Reference.ITEM_TEXTURE_DIRECTORY + iconString) + ".png"; + ResourceLocation textureLocation = new ResourceLocation(iconString); - /** Ignore things that are too dark. Standard luma calculation. */ - double luma = 0.2126 * rgb.getRed() + 0.7152 * rgb.getGreen() + 0.0722 * rgb.getBlue(); + InputStream inputstream = Minecraft.getMinecraft().getResourceManager().getResource(textureLocation).getInputStream(); + BufferedImage bufferedimage = ImageIO.read(inputstream); - if (luma > 40) - { - totalR += rgb.getRed(); - totalG += rgb.getGreen(); - totalB += rgb.getBlue(); - colorCount++; - } - } - } - } + int width = bufferedimage.getWidth(); + int height = bufferedimage.getWidth(); - if (colorCount > 0) - { - totalR /= colorCount; - totalG /= colorCount; - totalB /= colorCount; - int averageColor = new Color(totalR, totalG, totalB).brighter().getRGB(); - iconColorMap.put(icon, averageColor); - return averageColor; - } - } - catch (Exception e) - { - ResonantInduction.LOGGER.fine("Failed to compute colors for: " + item); - } + for (int x = 0; x < width; x++) + { + for (int y = 0; y < height; y++) + { + Color rgb = new Color(bufferedimage.getRGB(x, y)); - return 0xFFFFFF; - } + /** Ignore things that are too dark. Standard luma calculation. */ + double luma = 0.2126 * rgb.getRed() + 0.7152 * rgb.getGreen() + 0.0722 * rgb.getBlue(); - public static String moltenNameToMaterial(String fluidName) - { - return fluidNameToMaterial(fluidName, "molten"); - } + if (luma > 40) + { + totalR += rgb.getRed(); + totalG += rgb.getGreen(); + totalB += rgb.getBlue(); + colorCount++; + } + } + } + } - public static String materialNameToMolten(String fluidName) - { - return materialNameToFluid(fluidName, "molten"); - } + if (colorCount > 0) + { + totalR /= colorCount; + totalG /= colorCount; + totalB /= colorCount; + int averageColor = new Color(totalR, totalG, totalB).brighter().getRGB(); + iconColorCache.put(icon, averageColor); + return averageColor; + } + } + catch (Exception e) + { + ResonantInduction.LOGGER.fine("Failed to compute colors for: " + item); + } - public static String mixtureToMaterial(String fluidName) - { - return fluidNameToMaterial(fluidName, "mixture"); - } + return 0xFFFFFF; + } - public static String materialNameToMixture(String fluidName) - { - return materialNameToFluid(fluidName, "mixture"); - } + public static String moltenNameToMaterial(String fluidName) + { + return fluidNameToMaterial(fluidName, "molten"); + } - public static String fluidNameToMaterial(String fluidName, String type) - { - return LanguageUtility.underscoreToCamel(fluidName).replace(type, ""); - } + public static String materialNameToMolten(String fluidName) + { + return materialNameToFluid(fluidName, "molten"); + } - public static String materialNameToFluid(String materialName, String type) - { - return type + "_" + LanguageUtility.camelToLowerUnderscore(materialName); - } + public static String mixtureToMaterial(String fluidName) + { + return fluidNameToMaterial(fluidName, "mixture"); + } - public static Block getMixture(String name) - { - return ResonantInduction.blockMixtureFluids.get((getID(name))); - } + public static String materialNameToMixture(String fluidName) + { + return materialNameToFluid(fluidName, "mixture"); + } - public static Block getMolten(String name) - { - return ResonantInduction.blockMoltenFluid.get((getID(name))); - } + public static String fluidNameToMaterial(String fluidName, String type) + { + return LanguageUtility.underscoreToCamel(fluidName).replace(type, ""); + } - public static int getID(String name) - { - if (!materialNames.contains(name)) - { - ResonantInduction.LOGGER.severe("Trying to get invalid material name " + name); - return 0; - } + public static String materialNameToFluid(String materialName, String type) + { + return type + "_" + LanguageUtility.camelToLowerUnderscore(materialName); + } - return materialNames.indexOf(name); - } + public static Block getMixture(String name) + { + return ResonantInduction.blockMixtureFluids.get(getID(name)); + } - public static String getName(int id) - { - return materialNames.size() > id ? materialNames.get(id) : null; - } + public static Block getMolten(String name) + { + return ResonantInduction.blockMoltenFluid.get(getID(name)); + } - public static int getColor(String name) - { - if (name != null && materialColors.containsKey(name)) - { - return materialColors.get(name); - } - return 0xFFFFFF; + public static int getID(String name) + { + if (!materials.containsKey(name)) + { + ResonantInduction.LOGGER.severe("Trying to get invalid material name " + name); + return 0; + } - } + return materials.get(name); + } + + public static String getName(int id) + { + return materials.inverse().get(id); + } + + public static int getColor(String name) + { + if (name != null && materialColorCache.containsKey(name)) + { + return materialColorCache.get(name); + } + + return 0xFFFFFF; + } + + public static Set getMaterials() + { + return materials.keySet(); + } } diff --git a/src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java b/src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java new file mode 100644 index 00000000..a04018de --- /dev/null +++ b/src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java @@ -0,0 +1,294 @@ +package resonantinduction.core.resource.fluid; + +import java.util.List; + +import calclavia.lib.utility.LanguageUtility; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import resonantinduction.core.Reference; +import resonantinduction.core.TabRI; +import resonantinduction.core.resource.ItemOreResource; +import resonantinduction.core.resource.ResourceGenerator; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBucket; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumMovingObjectType; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.Event; +import net.minecraftforge.event.entity.player.FillBucketEvent; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.oredict.OreDictionary; + +/** + * Modified version of the MC bucket to meet the needs of a dynamic fluid registry system + * + * @author Darkguardsman + */ +public class ItemOreResourceBucket extends Item +{ + public ItemOreResourceBucket(int id, String name) + { + super(id); + setMaxStackSize(1); + setUnlocalizedName(Reference.PREFIX + name); + setTextureName(Reference.PREFIX + name); + setCreativeTab(TabRI.CORE); + setHasSubtypes(true); + setMaxDamage(0); + } + + @Override + public String getItemDisplayName(ItemStack is) + { + + if (getMaterialFromStack(is) != null) + { + String dustName = getMaterialFromStack(is); + + if (dustName != null) + { + List list = OreDictionary.getOres("ingot" + dustName.substring(0, 1).toUpperCase() + dustName.substring(1)); + + if (list.size() > 0) + { + ItemStack type = list.get(0); + + String name = type.getDisplayName().replace(LanguageUtility.getLocal("misc.resonantinduction.ingot"), "").replaceAll("^ ", "").replaceAll(" $", ""); + return (LanguageUtility.getLocal(this.getUnlocalizedName() + ".name")).replace("%v", name).replace(" ", " "); + } + } + + return (FluidRegistry.getFluid(ResourceGenerator.materialNameToMixture(getMaterialFromStack(is))).getLocalizedName() + " Bucket"); + } + return null; + } + + /** + * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, + * world, entityPlayer + */ + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) + { + int fluidID = ResourceGenerator.getMixture(ResourceGenerator.getName(itemStack.getItemDamage())).blockID; + + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, entityPlayer, false); + + if (movingobjectposition == null) + { + return itemStack; + } + else + { + FillBucketEvent event = new FillBucketEvent(entityPlayer, itemStack, world, movingobjectposition); + if (MinecraftForge.EVENT_BUS.post(event)) + { + return itemStack; + } + + if (event.getResult() == Event.Result.ALLOW) + { + if (entityPlayer.capabilities.isCreativeMode) + { + return itemStack; + } + + if (--itemStack.stackSize <= 0) + { + return event.result; + } + + if (!entityPlayer.inventory.addItemStackToInventory(event.result)) + { + entityPlayer.dropPlayerItem(event.result); + } + + return itemStack; + } + + if (movingobjectposition.typeOfHit == EnumMovingObjectType.TILE) + { + int i = movingobjectposition.blockX; + int j = movingobjectposition.blockY; + int k = movingobjectposition.blockZ; + + if (!world.canMineBlock(entityPlayer, i, j, k)) + { + return itemStack; + } + + if (fluidID == 0) + { + if (!entityPlayer.canPlayerEdit(i, j, k, movingobjectposition.sideHit, itemStack)) + { + return itemStack; + } + + if (world.getBlockMaterial(i, j, k) == Material.water && world.getBlockMetadata(i, j, k) == 0) + { + world.setBlockToAir(i, j, k); + + if (entityPlayer.capabilities.isCreativeMode) + { + return itemStack; + } + + if (--itemStack.stackSize <= 0) + { + return new ItemStack(Item.bucketWater); + } + + if (!entityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketWater))) + { + entityPlayer.dropPlayerItem(new ItemStack(Item.bucketWater.itemID, 1, 0)); + } + + return itemStack; + } + + if (world.getBlockMaterial(i, j, k) == Material.lava && world.getBlockMetadata(i, j, k) == 0) + { + world.setBlockToAir(i, j, k); + + if (entityPlayer.capabilities.isCreativeMode) + { + return itemStack; + } + + if (--itemStack.stackSize <= 0) + { + return new ItemStack(Item.bucketLava); + } + + if (!entityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bucketLava))) + { + entityPlayer.dropPlayerItem(new ItemStack(Item.bucketLava.itemID, 1, 0)); + } + + return itemStack; + } + } + else + { + if (fluidID < 0) + { + return new ItemStack(Item.bucketEmpty); + } + + if (movingobjectposition.sideHit == 0) + { + --j; + } + + if (movingobjectposition.sideHit == 1) + { + ++j; + } + + if (movingobjectposition.sideHit == 2) + { + --k; + } + + if (movingobjectposition.sideHit == 3) + { + ++k; + } + + if (movingobjectposition.sideHit == 4) + { + --i; + } + + if (movingobjectposition.sideHit == 5) + { + ++i; + } + + if (!entityPlayer.canPlayerEdit(i, j, k, movingobjectposition.sideHit, itemStack)) + { + return itemStack; + } + + if (this.tryPlaceContainedLiquid(world, i, j, k, fluidID) && !entityPlayer.capabilities.isCreativeMode) + { + return new ItemStack(Item.bucketEmpty); + } + } + } + + return itemStack; + } + } + + /** + * Attempts to place the liquid contained inside the bucket. + */ + public boolean tryPlaceContainedLiquid(World world, int x, int y, int z, int fluidID) + { + if (fluidID <= 0) + { + return false; + } + else + { + Material material = world.getBlockMaterial(x, y, z); + boolean flag = !material.isSolid(); + + if (!world.isAirBlock(x, y, z) && !flag) + { + return false; + } + else + { + + if (!world.isRemote && flag && !material.isLiquid()) + { + world.destroyBlock(x, y, z, true); + } + + world.setBlock(x, y, z, fluidID, 0, 3); + + return true; + } + } + } + + public ItemStack getStackFromMaterial(String name) + { + ItemStack itemStack = new ItemStack(this); + itemStack.setItemDamage(ResourceGenerator.getID(name)); + return itemStack; + } + + public static String getMaterialFromStack(ItemStack itemStack) + { + return ResourceGenerator.getName(itemStack.getItemDamage()); + } + + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for (String materialName : ResourceGenerator.getMaterials()) + { + par3List.add(getStackFromMaterial(materialName)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack itemStack, int par2) + { + /** + * Auto-color based on the texture of the ingot. + */ + String name = ItemOreResource.getMaterialFromStack(itemStack); + return ResourceGenerator.getColor(name); + } +} diff --git a/src/main/java/resonantinduction/core/resource/item/ItemFluidBucket.java b/src/main/java/resonantinduction/core/resource/item/ItemFluidBucket.java deleted file mode 100644 index 2a78fc6f..00000000 --- a/src/main/java/resonantinduction/core/resource/item/ItemFluidBucket.java +++ /dev/null @@ -1,110 +0,0 @@ -package resonantinduction.core.resource.item; - -import java.util.List; - -import calclavia.lib.utility.LanguageUtility; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import resonantinduction.core.Reference; -import resonantinduction.core.TabRI; -import resonantinduction.core.resource.ResourceGenerator; -import net.minecraft.block.Block; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBucket; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.oredict.OreDictionary; - -/** Modified version of the MC bucket to meet the needs of a dynamic fluid registry system - * - * @author Darkguardsman */ -public class ItemFluidBucket extends ItemBucket -{ - public ItemFluidBucket(int id) - { - super(id, 0); - setContainerItem(Item.bucketEmpty); - setUnlocalizedName(Reference.PREFIX + "Bucket_Molten"); - setTextureName(Reference.PREFIX + "Bucket_Molten"); - setCreativeTab(CreativeTabs.tabMisc); - setHasSubtypes(true); - setMaxDamage(0); - } - - @Override - public String getItemDisplayName(ItemStack is) - { - String dustName = getMaterialFromStack(is); - - if (dustName != null) - { - List list = OreDictionary.getOres("ingot" + dustName.substring(0, 1).toUpperCase() + dustName.substring(1)); - - if (list.size() > 0) - { - ItemStack type = list.get(0); - - String name = type.getDisplayName().replace(LanguageUtility.getLocal("misc.resonantinduction.ingot"), "").replaceAll("^ ", "").replaceAll(" $", ""); - return (LanguageUtility.getLocal(this.getUnlocalizedName() + ".name")).replace("%v", name).replace(" ", " "); - } - } - - return ""; - } - - @Override - public ItemStack onItemRightClick(ItemStack bucket, World world, EntityPlayer player) - { - //TODO pull fluid instance from metadata - return super.onItemRightClick(bucket, world, player); - } - - @Override - public boolean tryPlaceContainedLiquid(World par1World, int par2, int par3, int par4) - { - return super.tryPlaceContainedLiquid(par1World, par2, par3, par4); - } - - public static String getMaterialFromStack(ItemStack itemStack) - { - if (ResourceGenerator.materialNames.size() > itemStack.getItemDamage()) - return ResourceGenerator.materialNames.get(itemStack.getItemDamage()); - return null; - } - - public ItemStack getStackFromMaterial(String name) - { - ItemStack itemStack = new ItemStack(this); - itemStack.setItemDamage(ResourceGenerator.materialNames.indexOf(name)); - return itemStack; - } - - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for (String materialName : ResourceGenerator.materialNames) - { - par3List.add(getStackFromMaterial(materialName)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack itemStack, int par2) - { - /** - * Auto-color based on the texture of the ingot. - */ - String name = ItemOreResource.getMaterialFromStack(itemStack); - - if (ResourceGenerator.materialColors.containsKey(name)) - { - return ResourceGenerator.materialColors.get(name); - } - - return 16777215; - } -} diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index 15a3de6f..ae331c41 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -17,7 +17,8 @@ item.resonantinduction\:oreDust.name=%v Dust item.resonantinduction\:oreDust.tooltip=Shift-right click on a cauldron to refine. item.resonantinduction\:oreRefinedDust.name=%v Refined Dust item.resonantinduction\:oreRubble.name=%v Rubble -item.resonantinduction\:handCrank.name=Hand Crank +item.resonantinduction\:bucketMixture.name=%v Mixture Bucket +item.resonantinduction\:bucketMolten.name=Molten %v Bucket ### Archaic Module ## machineMaterials @@ -38,6 +39,7 @@ tile.resonantinduction\:machineMaterial.10.name=Steel ## Items item.resonantinduction\:imprint.name=Imprint item.resonantinduction\:hammer.name=Hammer +item.resonantinduction\:handCrank.name=Hand Crank ## Machines tile.resonantinduction\:castingMold.name=Metal Caster diff --git a/src/main/resources/assets/resonantinduction/textures/items/bucketMixture.png b/src/main/resources/assets/resonantinduction/textures/items/bucketMixture.png new file mode 100644 index 0000000000000000000000000000000000000000..c77d92c53e8437702f0263ef1a192409234db9ae GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EuJopAr-gIPQJ*=pvdDKd&)89 zXyTlMrgs+IzB94k<6_qD;)2FM8K0$Cf`2V7I>#UDHItA1xWsJNCwxf)&FT;Nj=f=H zkQASH;}Xk+yvB;S?7hq-zPVZ~3##5<4#+T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/textures/items/bucketMolten.png b/src/main/resources/assets/resonantinduction/textures/items/bucketMolten.png new file mode 100644 index 0000000000000000000000000000000000000000..b62499770f5df38aa7decc0ba1736053b51f9e56 GIT binary patch literal 3001 zcmV;q3r6&bP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002wNkl!H3#7+YAB>NvCwK7w3<*Ey^1H`1{~vW1wmbRH@i#n z8#414LQnwIFHwI3%0)y-(OTz}HBW)m)O8)kaXdss4$uW4A{b*}j6qdZU}kvl;k^el z!&(awfrx;JZ~?T|AR-LIkPAy>o@ZEV^VOaLF~(dVB50Zh%nWAE``fnN10e*&7!Od& zvMgxZ7Ij^}20{n`fWGgs?|aTPO>oZL14^lk06+)<>$>KYr{6x~d5VNM=MJZT1$;EY v897gon%@G>xeTP{kAd@FDD(0!e4EDr_9AVyrbC){00000NkvXXu0mjfw$zGS literal 0 HcmV?d00001