From 0b510e842630a70c08a6cf2b92233d7249d41c1d Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 12 Feb 2013 13:40:18 -0800 Subject: [PATCH 01/19] Tweaking the flux & purify bee effect Commenting out Magic Apiary blocks for a release version. --- .../thaumicbees/bees/FlowerProviderAuraNodeFlux.java | 2 +- .../thaumicbees/bees/FlowerProviderAuraNodePurify.java | 6 +++--- thaumicbees_src/thaumicbees/main/Config.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java index cc4c106..6eb51bf 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java @@ -14,7 +14,7 @@ public class FlowerProviderAuraNodeFlux extends FlowerProviderAuraNode @Override public ItemStack[] affectProducts(World world, IBeeGenome genome, int x, int y, int z, ItemStack[] products) { - if (world.rand.nextInt(10) < 1) + if (world.rand.nextInt(20) < 1) { EnumTag tag; do diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java index 64027fd..ca56c6f 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java @@ -27,10 +27,10 @@ public class FlowerProviderAuraNodePurify extends FlowerProviderAuraNode @Override public ItemStack[] affectProducts(World world, IBeeGenome genome, int x, int y, int z, ItemStack[] products) { - if (world.rand.nextInt(10) < 1) + if (world.rand.nextInt(25) < 1) { AuraNode node = this.getNodeWithinRange(world, x, y, z); - if (node != null) + if (node != null && (1.0 * node.level) / node.baseLevel > 0.75) { int aspectCount = node.flux.tags.size(); if (aspectCount > 0) @@ -39,7 +39,7 @@ public class FlowerProviderAuraNodePurify extends FlowerProviderAuraNode if (selectedTag != null) { node.flux.remove(selectedTag, 1); - ThaumcraftApi.queueNodeChanges(node.key, 0, 0, false, new ObjectTags().add(selectedTag, -1), 0, 0, 0); + ThaumcraftApi.queueNodeChanges(node.key, node.baseLevel / -16, 0, false, new ObjectTags().add(selectedTag, -1), 0, 0, 0); products = addItemToProducts(products, new ItemStack(Config.solidFlux, 1, selectedTag.id)); } } diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index d7bd7ef..64c311b 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -121,8 +121,8 @@ public class Config int blockIdBase = 1750; - magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase).getInt()); - GameRegistry.registerBlock(magicApiary, "Magic Apiary"); + /*magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase).getInt()); + GameRegistry.registerBlock(magicApiary, "Magic Apiary");*/ } public void setupItems() From 902812e0155b5b93fad43fc9ba0040f1e687e319 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 12 Feb 2013 17:21:29 -0800 Subject: [PATCH 02/19] Starting Localization! Yaaaaaaaaaay --- .../gfx/thaumicbees/items/items.png | Bin 62011 -> 7094 bytes .../lang/thaumicbees/en_US.properties | 1 - thaumicbees_res/lang/thaumicbees/en_US.xml | 190 ++++++++++++++++++ thaumicbees_src/thaumicbees/bees/Allele.java | 16 +- .../thaumicbees/bees/AlleleEffect.java | 8 +- .../bees/AlleleEffectAuraNodeGrow.java | 4 +- .../thaumicbees/bees/AlleleEffectCure.java | 2 +- .../thaumicbees/bees/AlleleEffectPotion.java | 4 +- .../bees/AlleleEffectSpawnMob.java | 4 +- .../bees/AlleleEffectSpawnWisp.java | 4 +- .../thaumicbees/bees/BeeClassification.java | 30 ++- .../thaumicbees/bees/BeeSpecies.java | 86 ++++---- .../bees/FlowerProviderAuraNode.java | 3 +- .../bees/FlowerProviderAuraNodeFlux.java | 3 +- .../bees/FlowerProviderAuraNodePurify.java | 3 +- .../bees/FlowerProviderBookshelf.java | 3 +- .../bees/FlowerProviderThaumcraftFlower.java | 4 +- .../compat/CompatabilityManager.java | 20 +- .../thaumicbees/item/ItemCapsule.java | 2 +- .../thaumicbees/item/ItemComb.java | 8 +- .../thaumicbees/item/ItemDrop.java | 10 +- .../thaumicbees/item/ItemMagicHiveFrame.java | 2 +- .../thaumicbees/item/ItemMiscResources.java | 8 +- .../thaumicbees/item/ItemPollen.java | 8 +- .../thaumicbees/item/ItemPropolis.java | 8 +- .../thaumicbees/item/ItemSolidFlux.java | 5 +- thaumicbees_src/thaumicbees/item/ItemWax.java | 8 +- .../thaumicbees/item/types/CapsuleType.java | 11 +- .../thaumicbees/item/types/CombType.java | 31 +-- .../thaumicbees/item/types/DropType.java | 13 +- .../thaumicbees/item/types/HiveFrameType.java | 20 +- .../thaumicbees/item/types/LiquidType.java | 48 +++-- .../thaumicbees/item/types/PollenType.java | 11 +- .../thaumicbees/item/types/PropolisType.java | 21 +- .../thaumicbees/item/types/ResourceType.java | 16 +- .../thaumicbees/item/types/WaxType.java | 11 +- .../thaumicbees/main/CommonProxy.java | 1 + thaumicbees_src/thaumicbees/main/Config.java | 10 +- .../thaumicbees/main/ThaumicBees.java | 4 +- .../main/utils/LocalizationManager.java | 28 +++ .../thaumicbees/main/utils/MoonPhase.java | 28 ++- 41 files changed, 480 insertions(+), 217 deletions(-) delete mode 100644 thaumicbees_res/lang/thaumicbees/en_US.properties create mode 100644 thaumicbees_res/lang/thaumicbees/en_US.xml create mode 100644 thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java diff --git a/thaumicbees_res/gfx/thaumicbees/items/items.png b/thaumicbees_res/gfx/thaumicbees/items/items.png index c9916a379d82f003bae78301bfba986310429db9..c46d974af621d9c90c3b49f4e569c417cc636049 100644 GIT binary patch literal 7094 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 diff --git a/thaumicbees_res/lang/thaumicbees/en_US.properties b/thaumicbees_res/lang/thaumicbees/en_US.properties deleted file mode 100644 index bd14f84..0000000 --- a/thaumicbees_res/lang/thaumicbees/en_US.properties +++ /dev/null @@ -1 +0,0 @@ -storage.backpack.Thaumaturge=Thaumaturge's Backpack \ No newline at end of file diff --git a/thaumicbees_res/lang/thaumicbees/en_US.xml b/thaumicbees_res/lang/thaumicbees/en_US.xml new file mode 100644 index 0000000..e6098d0 --- /dev/null +++ b/thaumicbees_res/lang/thaumicbees/en_US.xml @@ -0,0 +1,190 @@ + + + + + Handful of Jelly Babies + + + + + Occult Comb + Otherworldy Comb + Papery Comb + Stark Comb + Airy Comb + Firey Comb + Watery Comb + Earthy Comb + Infused Comb + Memory Comb + Furtive Comb + + + Magic Wax + + + Enchanting Drop + Intellect Drop + + + Unusual Pollen + + + Dull Propolis + Breezey Propolis + Burning Propolis + Flowing Propolis + Stony Propolis + Infused Propolis + + + Lore Fragment + Aromatic Lump + Concentrated Compound + Crystalized %s Aspect + + + Magic Frame + Resilient Frame + Gentle Frame + Metabolic Frame + Necrotic Frame + Temporal Frame + + + Magic Capsule + + + Empty + Water + Lava + Biomass + Empty + Oil + Fuel + Seed Oil + Honey + Juice + Ice + Milk + Acid + Poison + Liquid Nitrogen + Liquid DNA + Creosote Oil + Steam + + + Full Moon + Waning Gibbous + Waxing Gibbous + Waning Half + Waxing Half + Waning Crescent + Waxing Crescent + New Moon + + + Thaumaturge's Backpack + + + Esoteric + An unusual crossbreed which seems to have magical properties.|Apinomicon + Mysterious + These bees have been to the end of the world and back, and their power has grown.|Apinomicon + Arcane + "Their produce is charged with magic."|Azanor, Master Thaumaturge + Charmed + Your first experiments in Thaumaturgical Apiculture have yielded fruit. Buzzing fruit.|Apinomicon + Enchanted + Successive generations of Charmed bees have reinforced their connection to the unknown.|Apinomicon + Supernatural + These bees walk the line between this world and the unseen.|Apinomicon + Pupil + "What does that bee want with my paper?!|Yorae, Librarian + Scholarly + "I can't be sure, but I think they might be smarter than me..."|Yorae, Librarian + Savant + lim(x^(i / pi)/ log(e * 7 - ln(32/x^-pi))). Solve for honey.|Note found on Yorae's desk + Stark + "These are unusually attracted to shards. This warrents further investigation."|Azanor, Master Thaumaturge + Aura + "They work so fast it's breathtaking."|Sengir, Mad Apiarist + Ignis + Caution: Contents of hive extremely hot.|Warning label on Azanor's apiary + Aqua + "I tried to breed them once, but that was a wash."|MysteriousAges, Apprentice Thaumaturge + Solum + "You're really gonna dig these bees, but watch out - they bore quite easily."|MysteriousAges, Apprentice Comedian + Praecantatio + Beekeeping is magic!|Apinomicon, Preface + Aware + "They can see into your soul!"|Florastar, Expert Beekeeper + Vis + "They can feel changes in the aura, but are not yet able to affect it."|Azanor, research notes + Pure + "It's like a bee janitor!"|MysteriousAges, Thaumaturge + Flux + "I thought they would help clean up, but it only makes things worse!"|Kreicus, Apprentice Thaumaturge + Node + Having undergone a freak mutation, these bees now attract magic to them.|Apinomicon + Skulking + These bees have become xenophobic and bad-tempered. Use caution.|Apinomicon + Brainy + Their combs may be fetid and foul-smelling, but their intelligence is well-developed.|Apinomicon + Gossamer + As they work, they seem to fade out from light for brief moments.|Apinomicon + Wispy + Their language is garbled and unintelligible. It is probable they are speaking to unnatural beings.|Apinomicon + Batty + They tend to attract bats to their hives through means unknown.|Apinomicon + Ghastly + "*sigh*... Really, Myst?"|Taveria + Timely + "An apiarist is never late. He arrives precicely when he means to!"|Sengir, Mad Apiarist + Lordly + They live in peace, within the sight of the Eye of Harmony|Tattered Remains of ancient Apinomicon + Doctoral + "Would you like a Jelly Baby?"|Passing stranger with a great scarf and a blue box + + + Cleansing + Mining + Swiftness + Time Warp + Aura Attract + Brainy + Batty + Wispy + Ghastly + Books + Magic Flowers + Node + Purify Node + Fluxify Node + + + Arcane + Arcanus + + Supernatural + Coeleste + + Scholarly + Docto + + Thaumic + Thaumis + + Skulking + Malevolens + + Vis + Patabilis + + Time + Sempiternus + + + + \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/bees/Allele.java b/thaumicbees_src/thaumicbees/bees/Allele.java index 4f98c65..6aef12f 100644 --- a/thaumicbees_src/thaumicbees/bees/Allele.java +++ b/thaumicbees_src/thaumicbees/bees/Allele.java @@ -37,22 +37,22 @@ public class Allele implements IAllele Allele.flowerNodeFluxify = new AlleleFlower("flowerAuraNodeFlux", new FlowerProviderAuraNodeFlux(), false); Allele.cleansingEffect = new AlleleEffectCure("effectCurative", false); - Allele.digSpeed = new AlleleEffectPotion("effectDigSpeed", "Mining", Potion.digSpeed, 7, false); - Allele.moveSpeed = new AlleleEffectPotion("effectMoveSpeed", "Swiftness", Potion.moveSpeed, 5, false); - Allele.slowSpeed = new AlleleEffectPotion("effectSlowSpeed", "Time Warp", Potion.moveSlowdown, 3, false); + Allele.digSpeed = new AlleleEffectPotion("effectDigSpeed", Potion.digSpeed, 7, false); + Allele.moveSpeed = new AlleleEffectPotion("effectMoveSpeed", Potion.moveSpeed, 5, false); + Allele.slowSpeed = new AlleleEffectPotion("effectSlowSpeed", Potion.moveSlowdown, 3, false); - Allele.nodeGen = new AlleleEffectAuraNodeGrow("effectNodeGeneration", "Nodeify", false, 400); + Allele.nodeGen = new AlleleEffectAuraNodeGrow("effectNodeGeneration", false, 400); - Allele.spawnBrainyZombie = new AlleleEffectSpawnMob("effectBrainy", false, "Brainy", ThaumcraftHelper.Entity.BRAINY_ZOMBIE.entityID); + Allele.spawnBrainyZombie = new AlleleEffectSpawnMob("effectBrainy", false, ThaumcraftHelper.Entity.BRAINY_ZOMBIE.entityID); Allele.spawnBrainyZombie.setAggrosPlayerOnSpawn().setThrottle(800).setSpawnsOnPlayerNear(null).setMaxMobsInSpawnZone(2); - Allele.spawnBats = new AlleleEffectSpawnMob("effectBatty", false, "Batty", ThaumcraftHelper.Entity.FIREBAT.entityID); + Allele.spawnBats = new AlleleEffectSpawnMob("effectBatty", false, ThaumcraftHelper.Entity.FIREBAT.entityID); Allele.spawnBats.setThrottle(300).setSpawnsOnPlayerNear("Bat"); - Allele.spawnWisp = new AlleleEffectSpawnWisp("effectWispy", false, "Wispy", ThaumcraftHelper.Entity.WISP.entityID); + Allele.spawnWisp = new AlleleEffectSpawnWisp("effectWispy", false, ThaumcraftHelper.Entity.WISP.entityID); Allele.spawnWisp.setThrottle(1800); - Allele.spawnGhast = new AlleleEffectSpawnMob("Ghast", false, "Ghastly", "Ghast"); + Allele.spawnGhast = new AlleleEffectSpawnMob("Ghast", false, "Ghast"); Allele.spawnGhast.setThrottle(2000).setChanceToSpawn(20).setMaxMobsInSpawnZone(1); } diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffect.java b/thaumicbees_src/thaumicbees/bees/AlleleEffect.java index 79fc660..18cc5ff 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffect.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffect.java @@ -2,6 +2,8 @@ package thaumicbees.bees; import java.util.List; +import cpw.mods.fml.common.registry.LanguageRegistry; + import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; @@ -14,12 +16,10 @@ import forestry.api.genetics.IEffectData; public abstract class AlleleEffect extends Allele implements IAlleleBeeEffect { - protected String readableName; - public AlleleEffect(String id, boolean isDominant, String identifier) + public AlleleEffect(String id, boolean isDominant) { super(id, isDominant); - this.readableName = identifier; } @Override @@ -34,7 +34,7 @@ public abstract class AlleleEffect extends Allele implements IAlleleBeeEffect @Override public String getIdentifier() { - return this.readableName; + return LanguageRegistry.instance().getStringLocalization(getUID()); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java index dcf3b0e..e070b7e 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java @@ -16,9 +16,9 @@ public class AlleleEffectAuraNodeGrow extends AlleleEffect private int throttle; - public AlleleEffectAuraNodeGrow(String id, String identifier, boolean isDominant, int timeout) + public AlleleEffectAuraNodeGrow(String id, boolean isDominant, int timeout) { - super(id, isDominant, identifier); + super(id, isDominant); this.throttle = timeout; } diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectCure.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectCure.java index f7a160e..eceb67a 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectCure.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectCure.java @@ -21,7 +21,7 @@ public class AlleleEffectCure extends AlleleEffect public AlleleEffectCure(String id, boolean isDominant) { - super(id, isDominant, "Cleansing"); + super(id, isDominant); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectPotion.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectPotion.java index cdf9f54..a6c9b81 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectPotion.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectPotion.java @@ -18,9 +18,9 @@ public class AlleleEffectPotion extends AlleleEffect private int potionId; private int duration; - public AlleleEffectPotion(String name, String readableName, Potion potionApplied, int effectDuration, boolean isDominant) + public AlleleEffectPotion(String name, Potion potionApplied, int effectDuration, boolean isDominant) { - super("effect" + name, isDominant, readableName); + super("effect" + name, isDominant); this.potionId = potionApplied.id; this.duration = 20 * effectDuration; } diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnMob.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnMob.java index c0799c1..3a574a0 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnMob.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnMob.java @@ -25,9 +25,9 @@ public class AlleleEffectSpawnMob extends AlleleEffect protected int chanceToSpawn; protected int maxMobsInArea; - public AlleleEffectSpawnMob(String id, boolean isDominant, String identifier, String mobToSpawn) + public AlleleEffectSpawnMob(String id, boolean isDominant, String mobToSpawn) { - super(id, isDominant, identifier); + super(id, isDominant); this.aggosOnPlayer = false; this.mobName = mobToSpawn; this.throttle = 200; diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java index 41689cd..7e82831 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java @@ -18,9 +18,9 @@ public class AlleleEffectSpawnWisp extends AlleleEffectSpawnMob private byte[] wispTypes = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; - public AlleleEffectSpawnWisp(String id, boolean isDominant, String identifier, String mobToSpawn) + public AlleleEffectSpawnWisp(String id, boolean isDominant, String mobToSpawn) { - super(id, isDominant, identifier, mobToSpawn); + super(id, isDominant, mobToSpawn); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/BeeClassification.java b/thaumicbees_src/thaumicbees/bees/BeeClassification.java index 23b093e..03d4336 100644 --- a/thaumicbees_src/thaumicbees/bees/BeeClassification.java +++ b/thaumicbees_src/thaumicbees/bees/BeeClassification.java @@ -2,36 +2,32 @@ package thaumicbees.bees; import java.util.ArrayList; +import cpw.mods.fml.common.registry.LanguageRegistry; + import forestry.api.genetics.AlleleManager; import forestry.api.genetics.IAlleleSpecies; import forestry.api.genetics.IClassification; public enum BeeClassification implements IClassification { - ARCANE("Arcane", "Arcanus", ""), - SUPERNATURAL("Supernatural", "Coeleste", ""), - SCHOLARLY("Scholarly", "Docto", ""), - THAUMIC("Thaumic", "Thaumis", ""), - SKULKING("Skulking", "Malevolens", ""), - VIS("Vis", "Patabilis", ""), - TIME("Time", "Sempiternus", ""), + ARCANE("Arcane"), + SUPERNATURAL("Supernatural"), + SCHOLARLY("Scholarly"), + THAUMIC("Thaumic"), + SKULKING("Skulking"), + VIS("Vis"), + TIME("Time"), ; private String uID; - private String name; - private String scientific; - private String description; private ArrayList species; private IClassification parent; private EnumClassLevel level; - private BeeClassification(String name, String latin, String desc) + private BeeClassification(String name) { this.uID = "classification." + name.toLowerCase(); - this.name = name; - this.scientific = latin; this.level = EnumClassLevel.GENUS; - this.description = desc; this.species = new ArrayList(); this.parent = AlleleManager.alleleRegistry.getClassification("family.apidae"); AlleleManager.alleleRegistry.registerClassification(this); @@ -52,19 +48,19 @@ public enum BeeClassification implements IClassification @Override public String getName() { - return this.name; + return LanguageRegistry.instance().getStringLocalization(getUID()); } @Override public String getScientific() { - return this.scientific; + return LanguageRegistry.instance().getStringLocalization(getUID() + ".latin"); } @Override public String getDescription() { - return this.description; + return LanguageRegistry.instance().getStringLocalization(getUID() + ".description"); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java index 972d6d6..a77135e 100644 --- a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java +++ b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java @@ -9,6 +9,8 @@ import forestry.api.genetics.IClassification.EnumClassLevel; import java.util.HashMap; +import cpw.mods.fml.common.registry.LanguageRegistry; + import thaumicbees.compat.ForestryHelper; import thaumicbees.compat.ThaumcraftHelper; import thaumicbees.item.types.CombType; @@ -25,63 +27,63 @@ import net.minecraft.world.World; public enum BeeSpecies implements IAlleleBeeSpecies { - ESOTERIC("Esoteric", "An unusual crossbreed which seems to have magical properties.|Apinomicon", "secretiore", + ESOTERIC("Esoteric", "secretiore", BeeClassification.ARCANE, 0x001099, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - MYSTERIOUS("Mysterious", "These bees have been to the end of the world and back, and their power has grown.|Apinomicon", "mysticus", + MYSTERIOUS("Mysterious", "mysticus", BeeClassification.ARCANE, 0x762bc2, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - ARCANE("Arcane", "\"Their produce is charged with magic.\"|Azanor, Master Thaumaturge", "arcanus", + ARCANE("Arcane", "arcanus", BeeClassification.ARCANE, 0xd242df, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true), - CHARMED("Charmed", "Your first experiments in Thaumaturgical Apiculture have yielded fruit. Buzzing fruit.|Apinomicon", "larvatus", + CHARMED("Charmed", "larvatus", BeeClassification.SUPERNATURAL, 0x48EEEC, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - ENCHANTED("Enchanted", "Successive generations of Charmed bees have reinforced their connection to the unknown.|Apinomicon", "cantatus", + ENCHANTED("Enchanted", "cantatus", BeeClassification.SUPERNATURAL, 0x18e726, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - SUPERNATURAL("Supernatural", "These bees walk the line between this world and the unseen.|Apinomicon", "coeleste", + SUPERNATURAL("Supernatural", "coeleste", BeeClassification.SUPERNATURAL, 0x005614, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true), - PUPIL("Pupil", "\"What does that bee want with my paper?!|Yorae, Librarian", "disciplina", + PUPIL("Pupil", "disciplina", BeeClassification.SCHOLARLY, 0xFFFF00, EnumTemperature.NORMAL, EnumHumidity.ARID, false, true), - SCHOLARLY("Scholarly", "\"I can't be sure, but I think they might be smarter than me...\"|Yorae, Librarian", "studiosis", + SCHOLARLY("Scholarly", "studiosis", BeeClassification.SCHOLARLY, 0x6E0000, EnumTemperature.NORMAL, EnumHumidity.ARID, false, false), - SAVANT("Savant", "lim(x^(i / pi)/ log(e * 7 - ln(32/x^-pi))). Solve for honey.|Note found on Yorae's desk", "philologus", + SAVANT("Savant", "philologus", BeeClassification.SCHOLARLY, 0x6E1C6D, EnumTemperature.NORMAL, EnumHumidity.ARID, true, false), - STARK("Stark", "\"These are unusually attracted to shards. This warrents further investigation.\"|Azanor, Master Thaumaturge", "torridae", + STARK("Stark", "torridae", BeeClassification.THAUMIC, 0xCCCCCC, 0x999999, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false), - AIR("Aura", "\"They work so fast it's breathtaking.\"|Sengir, Mad Apiarist", "ventosa", + AIR("Aura", "ventosa", BeeClassification.THAUMIC, 0xD9D636, 0xA19E10, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true), - FIRE("Ignis", "Caution: Contents of hive extremely hot.|Warning label on Azanor's apiary", "praefervidus", + FIRE("Ignis", "praefervidus", BeeClassification.THAUMIC, 0xE50B0B, 0x95132F, EnumTemperature.HOT, EnumHumidity.ARID, true, true), - WATER("Aqua", "\"I tried to breed them once, but that was a wash.\"|MysteriousAges, Apprentice Thaumaturge", "umidus", + WATER("Aqua", "umidus", BeeClassification.THAUMIC, 0x36CFD9, 0x1054A1, EnumTemperature.NORMAL, EnumHumidity.DAMP, true, true), - EARTH("Solum", "\"You're really gonna dig these bees, but watch out - they bore quite easily.\"|MysteriousAges, Apprentice Comedian", "sordida", + EARTH("Solum", "sordida", BeeClassification.THAUMIC, 0x005100, 0x00a000, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true), - INFUSED("Praecantatio", "Beekeeping is magic!|Apinomicon, Preface", "azanorius", + INFUSED("Praecantatio", "azanorius", BeeClassification.THAUMIC, 0xaa32fc, 0x7A489E, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true), - AWARE("Aware", "\"They can see into your soul!\"|Florastar, Expert Beekeeper", "sensibilis", + AWARE("Aware", "sensibilis", BeeClassification.VIS, 0xb0092e9, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false), - VIS("Vis", "\"They can feel changes in the aura, but are not yet able to affect it.\"|Azanor, research notes", "arcanus saecula", + VIS("Vis", "arcanus saecula", BeeClassification.VIS, 0x004c99, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false), - PURE("Pure", "\"It's like a bee janitor!\"|MysteriousAges, Thaumaturge", "arcanus puritatem", + PURE("Pure", "arcanus puritatem", BeeClassification.VIS, 0xb0092e9, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false), - FLUX("Flux", "\"I thought they would help clean up, but it only makes things worse!\"|Kreicus, Apprentice Thaumaturge", "arcanus labe", + FLUX("Flux", "arcanus labe", BeeClassification.VIS, 0x004c99, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false), - NODE("Node", "Having undergone a freak mutation, these bees now attract magic to them.|Apinomicon", "conficiens", + NODE("Node", "conficiens", BeeClassification.VIS, 0xFFF266, 0xFF8CE9, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false), - SKULKING("Skulking", "These bees have become xenophobic and bad-tempered. Use caution.|Apinomicon", "malevolens", + SKULKING("Skulking", "malevolens", BeeClassification.SKULKING, 0x524827, 0xe15236, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - BRAINY("Brainy", "Their combs may be fetid and foul-smelling, but their intelligence is well-developed.|Apinomicon", "cerebrum", + BRAINY("Brainy", "cerebrum", BeeClassification.SKULKING, 0x83FF70, 0xe15236, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - GOSSAMER("Gossamer", "As they work, they seem to fade out from light for brief moments.|Apinomicon", "perlucidus", + GOSSAMER("Gossamer", "perlucidus", BeeClassification.SKULKING, 0x183f66, 0xe15236, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - WISPY("Wispy", "Their language is garbled and unintelligible. It is probable they are speaking to unnatural beings.|Apinomicon", "umbrabilis", + WISPY("Wispy", "umbrabilis", BeeClassification.SKULKING, 0x9cb8d5, 0xe15236, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false), - BATTY("Batty", "They tend to attract bats to their hives through means unknown.|Apinomicon", "chiroptera", + BATTY("Batty", "chiroptera", BeeClassification.SKULKING, 0x27350d, 0xe15236, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,true), - GHASTLY("Ghastly", "\"*sigh*... Really, Myst?\"|Taveria", "pallens", + GHASTLY("Ghastly", "pallens", BeeClassification.SKULKING, 0xccccee, 0xbf877c, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false), - TIMELY("Timely", "\"An apiarist is never late. He arrives precicely when he means to!\"|Sengir, Mad Apiarist", "gallifreis", + TIMELY("Timely", "gallifreis", BeeClassification.TIME, 0xC6AF86, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true), - LORDLY("Lordly", "", "rassilonis", + LORDLY("Lordly", "rassilonis", BeeClassification.TIME, 0xC6AF86, 0x8E0213, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false), - DOCTORAL("Doctoral", "\"Would you like a Jelly Baby?\"", "medicus qui", + DOCTORAL("Doctoral", "medicus qui", BeeClassification.TIME, 0xDDE5FC, 0x4B6E8C, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false), ; @@ -182,17 +184,17 @@ public enum BeeSpecies implements IAlleleBeeSpecies TIMELY.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.DRIPPING.ordinal()), 25) .setGenome(BeeGenomeManager.getTemplateTimely()) .register(); - LORDLY.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 30) + LORDLY.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 5) + .addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.DRIPPING.ordinal()), 25) .setGenome(BeeGenomeManager.getTemplateLordly()) .register(); - DOCTORAL.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 35) - .addSpecialty(new ItemStack(Config.jellyBaby), 5) + DOCTORAL.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 10) + .addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.DRIPPING.ordinal()), 30) + .addSpecialty(new ItemStack(Config.jellyBaby), 4) .setGenome(BeeGenomeManager.getTemplateDoctoral()) .register(); } - private String name; - private String descripton; private String binomial; private String authority; private int bodyType; @@ -210,23 +212,21 @@ public enum BeeSpecies implements IAlleleBeeSpecies private String uid; private boolean dominant; - private BeeSpecies(String speciesName, String speciesDescription, String genusName, IClassification classification, int firstColour, EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect, boolean isSpeciesDominant) + private BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect, boolean isSpeciesDominant) { - this(speciesName, speciesDescription, genusName, classification, 0, firstColour, 0xFF6E0D, preferredTemp, preferredHumidity, hasGlowEffect, true, true, isSpeciesDominant); + this(speciesName, genusName, classification, 0, firstColour, 0xFF6E0D, preferredTemp, preferredHumidity, hasGlowEffect, true, true, isSpeciesDominant); } - private BeeSpecies(String speciesName, String speciesDescription, String genusName, IClassification classification, int firstColour, int secondColour, EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect, boolean isSpeciesDominant) + private BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, int secondColour, EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect, boolean isSpeciesDominant) { - this(speciesName, speciesDescription, genusName, classification, 0, firstColour, secondColour, preferredTemp, preferredHumidity, hasGlowEffect, true, true, isSpeciesDominant); + this(speciesName, genusName, classification, 0, firstColour, secondColour, preferredTemp, preferredHumidity, hasGlowEffect, true, true, isSpeciesDominant); } - private BeeSpecies(String speciesName, String speciesDescription, String genusName, IClassification classification, int body, int firstColour, int secondColour, EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect, boolean isSpeciesSecret, boolean isSpeciesCounted, boolean isSpeciesDominant) + private BeeSpecies(String speciesName, String genusName, IClassification classification, int body, int firstColour, int secondColour, EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect, boolean isSpeciesSecret, boolean isSpeciesCounted, boolean isSpeciesDominant) { this.uid = "thaumicbees.species" + speciesName; this.dominant = isSpeciesDominant; AlleleManager.alleleRegistry.registerAllele(this); - name = speciesName; - descripton = speciesDescription; binomial = genusName; authority = "MysteriousAges"; bodyType = body; @@ -273,12 +273,12 @@ public enum BeeSpecies implements IAlleleBeeSpecies public String getName() { - return name; + return LanguageRegistry.instance().getStringLocalization(getUID()); } public String getDescription() { - return descripton; + return LanguageRegistry.instance().getStringLocalization(getUID() + ".description"); } public int getBodyType() diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java index b2530fc..6ef2828 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java @@ -1,5 +1,6 @@ package thaumicbees.bees; +import cpw.mods.fml.common.registry.LanguageRegistry; import thaumcraft.api.AuraNode; import thaumcraft.api.ThaumcraftApi; import thaumicbees.main.Config; @@ -44,7 +45,7 @@ public class FlowerProviderAuraNode implements IFlowerProvider @Override public String getDescription() { - return "Node"; + return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.node"); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java index 6eb51bf..0b7b121 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java @@ -1,5 +1,6 @@ package thaumicbees.bees; +import cpw.mods.fml.common.registry.LanguageRegistry; import thaumcraft.api.EnumTag; import thaumcraft.api.ObjectTags; import thaumcraft.api.ThaumcraftApi; @@ -37,6 +38,6 @@ public class FlowerProviderAuraNodeFlux extends FlowerProviderAuraNode @Override public String getDescription() { - return "Node Flux"; + return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.nodeFlux"); } } diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java index ca56c6f..2eaf18e 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java @@ -1,5 +1,6 @@ package thaumicbees.bees; +import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -21,7 +22,7 @@ public class FlowerProviderAuraNodePurify extends FlowerProviderAuraNode @Override public String getDescription() { - return "Node Purify"; + return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.nodePure"); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java index 3734104..c73067d 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java @@ -1,5 +1,6 @@ package thaumicbees.bees; +import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -46,6 +47,6 @@ public class FlowerProviderBookshelf implements IFlowerProvider public String getDescription() { - return "Books"; + return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.book"); } } diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java index 9e3789b..0a83c87 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java @@ -1,5 +1,6 @@ package thaumicbees.bees; +import cpw.mods.fml.common.registry.LanguageRegistry; import thaumicbees.main.Config; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; @@ -36,7 +37,6 @@ public class FlowerProviderThaumcraftFlower implements IFlowerProvider { int rand = world.rand.nextInt(10); world.setBlockAndMetadataWithNotify(x, y, z, Config.tcPlant.blockID, (rand >= 5) ? 2 : 3); - System.out.println(x + ", " + y + ", " + ", " + z + " set to flower."); flag = true; } return flag; @@ -45,7 +45,7 @@ public class FlowerProviderThaumcraftFlower implements IFlowerProvider @Override public String getDescription() { - return "Magic Flowers"; + return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.magic"); } @Override diff --git a/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java b/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java index c8171d8..48509f5 100644 --- a/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java +++ b/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java @@ -26,6 +26,7 @@ import thaumicbees.main.Config; import thaumicbees.main.ThaumicBees; import thaumicbees.storage.BackpackDefinition; +import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameRegistry; import forestry.api.apiculture.EnumBeeChromosome; @@ -57,7 +58,7 @@ public class CompatabilityManager } catch (Exception e) { - + FMLLog.warning("Could not get Extra Bees item: " + field + ". If you notice this, please report the issue on the Thaumic Bees thread."); } return value; } @@ -221,12 +222,12 @@ public class CompatabilityManager itemStack = ItemInterface.getItem("beealyzer"); tags = new ObjectTags().add(EnumTag.VALUABLE, 3).add(EnumTag.MECHANISM, 3).add(EnumTag.METAL, 19) - .add(EnumTag.POWER, 8).add(EnumTag.CRYSTAL, 18); + .add(EnumTag.POWER, 8).add(EnumTag.TOOL, 18); ThaumcraftApi.registerObjectTag(itemStack.itemID, itemStack.getItemDamage(), tags); itemStack = ItemInterface.getItem("treealyzer"); tags = new ObjectTags().add(EnumTag.POWER, 3).add(EnumTag.PURE, 3).add(EnumTag.LIFE, 6) - .add(EnumTag.CRYSTAL, 12).add(EnumTag.METAL, 19); + .add(EnumTag.TOOL, 12).add(EnumTag.METAL, 19); ThaumcraftApi.registerObjectTag(itemStack.itemID, itemStack.getItemDamage(), tags); itemStack = ItemInterface.getItem("apatite"); @@ -234,11 +235,11 @@ public class CompatabilityManager ThaumcraftApi.registerObjectTag(itemStack.itemID, itemStack.getItemDamage(), tags); itemStack = ItemInterface.getItem("impregnatedCasing"); - tags = new ObjectTags().add(EnumTag.WOOD, 58).add(EnumTag.PLANT, 8); + tags = new ObjectTags().add(EnumTag.WOOD, 56).add(EnumTag.EXCHANGE, 8); ThaumcraftApi.registerObjectTag(itemStack.itemID, itemStack.getItemDamage(), tags); itemStack = ItemInterface.getItem("stickImpregnated"); - tags = new ObjectTags().add(EnumTag.WOOD, 8).add(EnumTag.PLANT, 2); + tags = new ObjectTags().add(EnumTag.WOOD, 6).add(EnumTag.EXCHANGE, 2); ThaumcraftApi.registerObjectTag(itemStack.itemID, itemStack.getItemDamage(), tags); itemStack = ItemInterface.getItem("peat"); @@ -403,8 +404,9 @@ public class CompatabilityManager { ObjectTags tags; - ResearchItem startNode = new ResearchItem("TBSTARTNODE", null, 10, 0, Config.miscResources.getStackForType(ResourceType.RESEARCH_StartNode)) - .setAutoUnlock() + tags = new ObjectTags().add(EnumTag.WOOD, 10).add(EnumTag.PLANT, 10).add(EnumTag.INSECT, 10); + ResearchItem startNode = new ResearchItem("TBSTARTNODE", tags, 10, 0, Config.miscResources.getStackForType(ResourceType.RESEARCH_StartNode)) + .setParents(ResearchList.getResearch("UTFT")) .registerResearchItem(); tags = new ObjectTags().add(EnumTag.INSECT, 9).add(EnumTag.MAGIC, 4).add(EnumTag.FLUX, 4); @@ -415,7 +417,7 @@ public class CompatabilityManager tags = new ObjectTags().add(EnumTag.INSECT, 15).add(EnumTag.MAGIC, 5).add(EnumTag.WATER, 5).add(EnumTag.EARTH, 5) .add(EnumTag.WIND, 5).add(EnumTag.FIRE, 5); ResearchItem beeInfusion = new ResearchItem("BEEINFUSION", tags, 5, 3, Config.miscResources.getStackForType(ResourceType.RESEARCH_BeeInfusion)) - .setParents(starkHint, ResearchList.getResearch("UTFT")).setHidden() + .setParents(starkHint).setHidden() .registerResearchItem(); tags = new ObjectTags().add(EnumTag.CROP, 20).add(EnumTag.EARTH, 20).add(EnumTag.WATER, 5); @@ -423,7 +425,7 @@ public class CompatabilityManager .setParents(startNode) .registerResearchItem(); - tags = new ObjectTags().add(EnumTag.WOOD, 10).add(EnumTag.TOOL, 6).add(EnumTag.INSECT, 15).add(EnumTag.BEAST, 2) + tags = new ObjectTags().add(EnumTag.TOOL, 6).add(EnumTag.INSECT, 15).add(EnumTag.BEAST, 2) .add(EnumTag.MAGIC, 5); ResearchItem magicFrame = new ResearchItem("HIVEFRAME", tags, 10, -2, Config.hiveFrameMagic) .setParents(startNode) diff --git a/thaumicbees_src/thaumicbees/item/ItemCapsule.java b/thaumicbees_src/thaumicbees/item/ItemCapsule.java index e78dcc8..f9df9ee 100644 --- a/thaumicbees_src/thaumicbees/item/ItemCapsule.java +++ b/thaumicbees_src/thaumicbees/item/ItemCapsule.java @@ -43,7 +43,7 @@ public class ItemCapsule extends Item @Override public String getItemDisplayName(ItemStack itemStack) { - return LiquidType.values()[itemStack.getItemDamage()].displayName + " " + this.capsuleType.name; + return LiquidType.values()[itemStack.getItemDamage()].getDisplayName() + " " + this.capsuleType.getName(); } public ItemStack getCapsuleForLiquid(LiquidType l) diff --git a/thaumicbees_src/thaumicbees/item/ItemComb.java b/thaumicbees_src/thaumicbees/item/ItemComb.java index f82f60e..ceeaaff 100644 --- a/thaumicbees_src/thaumicbees/item/ItemComb.java +++ b/thaumicbees_src/thaumicbees/item/ItemComb.java @@ -89,13 +89,7 @@ public class ItemComb extends Item @Override public String getItemDisplayName(ItemStack stack) { - String result = ""; - int meta = stack.getItemDamage(); - if (meta >= 0 && meta < CombType.values().length) - { - result = CombType.values()[meta].name; - } - return result; + return CombType.values()[stack.getItemDamage()].getName(); } } diff --git a/thaumicbees_src/thaumicbees/item/ItemDrop.java b/thaumicbees_src/thaumicbees/item/ItemDrop.java index 6eadf05..e641f2f 100644 --- a/thaumicbees_src/thaumicbees/item/ItemDrop.java +++ b/thaumicbees_src/thaumicbees/item/ItemDrop.java @@ -3,8 +3,10 @@ package thaumicbees.item; import java.util.List; import thaumicbees.item.types.DropType; +import thaumicbees.item.types.PropolisType; import thaumicbees.main.CommonProxy; import thaumicbees.main.ThaumicBees; +import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import forestry.api.core.Tabs; @@ -85,13 +87,7 @@ public class ItemDrop extends Item @Override public String getItemDisplayName(ItemStack stack) { - String result = ""; - int meta = stack.getItemDamage(); - if (meta >= 0 && meta < DropType.values().length) - { - result = DropType.values()[meta].name; - } - return result; + return DropType.values()[stack.getItemDamage()].getName(); } } diff --git a/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java b/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java index 70cd2e3..c76c2ce 100644 --- a/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java +++ b/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java @@ -35,7 +35,7 @@ public class ItemMagicHiveFrame extends Item implements IHiveFrame @Override public String getItemDisplayName(ItemStack itemStack) { - return this.type.frameName; + return this.type.getName(); } // --------- IHiveFrame functions ----------------------------------------- diff --git a/thaumicbees_src/thaumicbees/item/ItemMiscResources.java b/thaumicbees_src/thaumicbees/item/ItemMiscResources.java index c541803..545c07c 100644 --- a/thaumicbees_src/thaumicbees/item/ItemMiscResources.java +++ b/thaumicbees_src/thaumicbees/item/ItemMiscResources.java @@ -59,13 +59,7 @@ public class ItemMiscResources extends Item @Override public String getItemDisplayName(ItemStack stack) { - String result = ""; - int meta = stack.getItemDamage(); - if (meta >= 0 && meta < ResourceType.values().length) - { - result = ResourceType.values()[meta].name; - } - return result; + return ResourceType.values()[stack.getItemDamage()].getName(); } } diff --git a/thaumicbees_src/thaumicbees/item/ItemPollen.java b/thaumicbees_src/thaumicbees/item/ItemPollen.java index 014df48..f473be8 100644 --- a/thaumicbees_src/thaumicbees/item/ItemPollen.java +++ b/thaumicbees_src/thaumicbees/item/ItemPollen.java @@ -84,13 +84,7 @@ public class ItemPollen extends Item @Override public String getItemDisplayName(ItemStack stack) { - String result = ""; - int meta = stack.getItemDamage(); - if (meta >= 0 && meta < PollenType.values().length) - { - result = PollenType.values()[meta].name; - } - return result; + return PollenType.values()[stack.getItemDamage()].getName(); } } diff --git a/thaumicbees_src/thaumicbees/item/ItemPropolis.java b/thaumicbees_src/thaumicbees/item/ItemPropolis.java index 576aa19..d39251a 100644 --- a/thaumicbees_src/thaumicbees/item/ItemPropolis.java +++ b/thaumicbees_src/thaumicbees/item/ItemPropolis.java @@ -57,13 +57,7 @@ public class ItemPropolis extends Item @Override public String getItemDisplayName(ItemStack stack) { - String result = ""; - int meta = stack.getItemDamage(); - if (meta >= 0 && meta < PropolisType.values().length) - { - result = PropolisType.values()[meta].name; - } - return result; + return PropolisType.values()[stack.getItemDamage()].getName(); } } diff --git a/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java b/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java index 4756731..8a68985 100644 --- a/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java +++ b/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java @@ -2,11 +2,13 @@ package thaumicbees.item; import java.util.List; +import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import forestry.api.core.Tabs; import thaumcraft.api.EnumTag; import thaumicbees.main.CommonProxy; +import thaumicbees.main.utils.LocalizationManager; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -32,7 +34,6 @@ public class ItemSolidFlux extends Item { continue; } - list.add(new ItemStack(this.itemID, 1, tag.id)); } } @@ -40,7 +41,7 @@ public class ItemSolidFlux extends Item @Override public String getItemDisplayName(ItemStack stack) { - return "Crystalized " + EnumTag.get(stack.getItemDamage()).name + " Aspect"; + return String.format(LanguageRegistry.instance().getStringLocalization("tb.resource.crystalFlux"), EnumTag.get(stack.getItemDamage()).name); } @Override diff --git a/thaumicbees_src/thaumicbees/item/ItemWax.java b/thaumicbees_src/thaumicbees/item/ItemWax.java index 6d7e075..4964d4c 100644 --- a/thaumicbees_src/thaumicbees/item/ItemWax.java +++ b/thaumicbees_src/thaumicbees/item/ItemWax.java @@ -70,12 +70,6 @@ public class ItemWax extends Item @Override public String getItemDisplayName(ItemStack stack) { - String result = ""; - int meta = stack.getItemDamage(); - if (meta >= 0 && meta < WaxType.values().length) - { - result = WaxType.values()[meta].name; - } - return result; + return WaxType.values()[stack.getItemDamage()].getName(); } } diff --git a/thaumicbees_src/thaumicbees/item/types/CapsuleType.java b/thaumicbees_src/thaumicbees/item/types/CapsuleType.java index c86a327..80efe96 100644 --- a/thaumicbees_src/thaumicbees/item/types/CapsuleType.java +++ b/thaumicbees_src/thaumicbees/item/types/CapsuleType.java @@ -1,10 +1,12 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; + public enum CapsuleType { - MAGIC("Magic Capsule", 2000, 0), + MAGIC("magic", 2000, 0), ; - public String name; + private String name; public int capacity; public int iconIdx; @@ -14,4 +16,9 @@ public enum CapsuleType this.capacity = c; this.iconIdx = idx; } + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.capsule." + name); + } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/CombType.java b/thaumicbees_src/thaumicbees/item/types/CombType.java index 73948f0..2e80262 100644 --- a/thaumicbees_src/thaumicbees/item/types/CombType.java +++ b/thaumicbees_src/thaumicbees/item/types/CombType.java @@ -1,18 +1,20 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; + public enum CombType { - OCCULT("Occult Comb", 0x6e1c6d, 0xff8fff, true), - OTHERWORLDLY("Otherworldy Comb", 0x000056, 0x765cc1, true), - PAPERY("Papery Comb", 0x503900, 0xbd9a30, true), - STARK("Stark Comb", 0xB0B0BC, 0x6e6e79, false), - AIRY("Airy Comb", 0xffff7e, 0x717600, false), - FIREY("Firey Comb", 0xff3C01, 0x740002, false), - WATERY("Watery Comb", 0x0090ff, 0x00308c, false), - EARTHY("Earthy Comb", 0x00a000, 0x005100, false), - INFUSED("Infused Comb", 0xaa32fc, 0x7A489E, false), - INTELLECT("Memory Comb", 0x618fff, 0xb0092e9, false), - SKULKING("Furtive Comb", 0x545454, 0xcda6cd, true), + OCCULT("occult", 0x6e1c6d, 0xff8fff, true), + OTHERWORLDLY("otherworldly", 0x000056, 0x765cc1, true), + PAPERY("paper", 0x503900, 0xbd9a30, true), + STARK("stark", 0xB0B0BC, 0x6e6e79, false), + AIRY("air", 0xffff7e, 0x717600, false), + FIREY("fire", 0xff3C01, 0x740002, false), + WATERY("water", 0x0090ff, 0x00308c, false), + EARTHY("earth", 0x00a000, 0x005100, false), + INFUSED("magic", 0xaa32fc, 0x7A489E, false), + INTELLECT("aware", 0x618fff, 0xb0092e9, false), + SKULKING("furtive", 0x545454, 0xcda6cd, true), ; private CombType(String pName, int colourA, int colourB, boolean show) @@ -25,7 +27,12 @@ public enum CombType this.showInList = show; } - public final String name; + private String name; public int[] combColour; public boolean showInList; + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.comb." + this.name); + } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/DropType.java b/thaumicbees_src/thaumicbees/item/types/DropType.java index 2424119..a1da8cb 100644 --- a/thaumicbees_src/thaumicbees/item/types/DropType.java +++ b/thaumicbees_src/thaumicbees/item/types/DropType.java @@ -1,9 +1,11 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; + public enum DropType { - ENCHANTED("Enchanting Drop", 0x6e1c6d, 0xff8fff), - INTELLECT("Intellect Drop", 0x25914D, 0x18E072), + ENCHANTED("enchanting", 0x6e1c6d, 0xff8fff), + INTELLECT("intellect", 0x25914D, 0x18E072), ; private DropType(String pName, int colourA, int colourB) @@ -13,6 +15,11 @@ public enum DropType this.combColour[1] = colourB; } - public final String name; + private final String name; public int[] combColour = new int[2]; + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.drop." + this.name); + } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java b/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java index 6f8628a..32da4ba 100644 --- a/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java +++ b/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java @@ -1,21 +1,22 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; import thaumcraft.api.EnumTag; import thaumcraft.api.ObjectTags; public enum HiveFrameType { - MAGIC("Magic Frame", 32, 240, 1f, 1f, 1f, 2f, 2, + MAGIC("magic", 32, 240, 1f, 1f, 1f, 2f, 2, null), - RESILIENT("Resilient Frame", 33, 840, 1f, 1f, 1f, 2f, 2, + RESILIENT("resillient", 33, 840, 1f, 1f, 1f, 2f, 2, new ObjectTags().add(EnumTag.ARMOR, 1)), - GENTLE("Gentle Frame", 34, 200, 1f, 0.7f, 1.5f, 1.4f, 1, + GENTLE("gentle", 34, 200, 1f, 0.7f, 1.5f, 1.4f, 1, new ObjectTags().add(EnumTag.HEAL, 1).add(EnumTag.LIFE, 1)), - METABOLIC("Metabolic Frame", 35, 120, 1f, 1.8f, 1f, 1.2f, 5, + METABOLIC("metabolic", 35, 120, 1f, 1.8f, 1f, 1.2f, 5, new ObjectTags().add(EnumTag.EXCHANGE, 1).add(EnumTag.MOTION, 1)), - NECROTIC("Necrotic Frame", 36, 290, 1f, 1f, 0.3f, 0.75f, 1, + NECROTIC("necrotic", 36, 290, 1f, 1f, 0.3f, 0.75f, 1, new ObjectTags().add(EnumTag.DEATH, 3).add(EnumTag.POISON, 2)), - TEMPORAL("Temporal Frame", 37, 300, 1f, 1f, 2.5f, 1f, 1, + TEMPORAL("temporal", 37, 300, 1f, 1f, 2.5f, 1f, 1, new ObjectTags().add(EnumTag.TIME, 5)), ; @@ -49,7 +50,7 @@ public enum HiveFrameType this.flux = fluxTags; } - public String frameName; + private String frameName; public int iconIdx; public int maxDamage; @@ -65,4 +66,9 @@ public enum HiveFrameType public ObjectTags flux; public int auraPerUse; + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.frame." + this.frameName); + } } diff --git a/thaumicbees_src/thaumicbees/item/types/LiquidType.java b/thaumicbees_src/thaumicbees/item/types/LiquidType.java index f8165c2..d70e661 100644 --- a/thaumicbees_src/thaumicbees/item/types/LiquidType.java +++ b/thaumicbees_src/thaumicbees/item/types/LiquidType.java @@ -1,50 +1,56 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; +import net.minecraftforge.liquids.LiquidDictionary; + public enum LiquidType { // Incidentally, Item meta is the liquid ID. // Args are: forgeLiquidID, Display Name, Icon idx - EMPTY("", "Empty", 16), + EMPTY("", 16), // Vanilla - WATER("water", "Water", 17), - LAVA("lava", "Lava", 18), + WATER("water", 17), + LAVA("lava", 18), // Forestry - BIOMASS("biomass", "Biomass", 19), - BIOFUEL("biofuel", "Biofuel", 20), + BIOMASS("biomass", 19), + BIOFUEL("biofuel", 20), // Buildcraft - OIL("Oil", "Oil", 21), - FUEL("Fuel", "Fuel", 22), + OIL("Oil", 21), + FUEL("Fuel", 22), // More Forestry - SEEDOIL("seedoil", "Seed Oil", 23), - HONEY("honey", "Honey", 24), - JUICE("juice", "Juice", 25), - CRUSHEDICE("ice", "Crushed Ice", 26), - MILK("milk", "Milk", 27), + SEEDOIL("seedoil", 23), + HONEY("honey", 24), + JUICE("juice", 25), + CRUSHEDICE("ice", 26), + MILK("milk", 27), // ExtraBees liquids - ACID("acid", "Acid", 28), - POISON("poison", "Poison", 29), - LIQUIDNITROGEN("liquidNitrogen", "Liquid Nitrogen", 30), - DNA("liquidDNA", "Liquid DNA", 31), + ACID("acid", 28), + POISON("poison", 29), + LIQUIDNITROGEN("liquidNitrogen", 30), + DNA("liquidDNA", 31), // Railcraft - CREOSOTEOIL("Creosote Oil", "Creosote Oil", 32), - STEAM("Steam", "Steam", 33), + CREOSOTEOIL("Creosote Oil", 32), + STEAM("Steam", 33), ; public String liquidID; - public String displayName; public int iconIdx; public boolean available = false; - private LiquidType(String l, String display, int idx) + private LiquidType(String l, int idx) { this.liquidID = l; - this.displayName = display; this.iconIdx = idx; } + + public String getDisplayName() + { + return LanguageRegistry.instance().getStringLocalization("tb.liquid." + liquidID); + } } diff --git a/thaumicbees_src/thaumicbees/item/types/PollenType.java b/thaumicbees_src/thaumicbees/item/types/PollenType.java index 389f83a..e25df2a 100644 --- a/thaumicbees_src/thaumicbees/item/types/PollenType.java +++ b/thaumicbees_src/thaumicbees/item/types/PollenType.java @@ -1,8 +1,10 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; + public enum PollenType { - UNUSUAL("Unusual Pollen", 0xA03059, 0xD8417B), + UNUSUAL("unusual", 0xA03059, 0xD8417B), ; private PollenType(String pName, int colourA, int colourB) @@ -12,6 +14,11 @@ public enum PollenType this.combColour[1] = colourB; } - public final String name; + private String name; public int[] combColour = new int[2]; + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.pollen." + this.name); + } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/PropolisType.java b/thaumicbees_src/thaumicbees/item/types/PropolisType.java index ba06717..a96577b 100644 --- a/thaumicbees_src/thaumicbees/item/types/PropolisType.java +++ b/thaumicbees_src/thaumicbees/item/types/PropolisType.java @@ -1,13 +1,15 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; + public enum PropolisType { - STARK("Dull Propolis", 0xBBBBBB), - AIR("Air Propolis", 0xA19E10), - FIRE("Firey Propolis", 0x95132F), - WATER("Watery Propolis", 0x1054A1), - EARTH("Earthen Propolis", 0x00a000), - INFUSED("Infused Propolis", 0xaa32fc), + STARK("dull", 0xBBBBBB), + AIR("air", 0xA19E10), + FIRE("fire", 0x95132F), + WATER("water", 0x1054A1), + EARTH("earth", 0x00a000), + INFUSED("magic", 0xaa32fc), ; private PropolisType(String pName, int overlayColour) @@ -16,6 +18,11 @@ public enum PropolisType this.colour = overlayColour; } - public String name; + private String name; public int colour; + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.propolis." + this.name); + } } diff --git a/thaumicbees_src/thaumicbees/item/types/ResourceType.java b/thaumicbees_src/thaumicbees/item/types/ResourceType.java index 7d41862..dbc8b9b 100644 --- a/thaumicbees_src/thaumicbees/item/types/ResourceType.java +++ b/thaumicbees_src/thaumicbees/item/types/ResourceType.java @@ -1,12 +1,15 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; + public enum ResourceType { - LORE_FRAGMENT("Lore Fragment", 2, true), - AROMATIC_LUMP("Aromatic Lump", 3, true), - EXTENDED_FERTILIZER("Concentrated Compound", 4, true), + LORE_FRAGMENT("fragment", 2, true), + AROMATIC_LUMP("lump", 3, true), + EXTENDED_FERTILIZER("fertilizer", 4, true), // Dummy items for Thaumanomicon research icons. + // These won't ever actually exist in-game, and so RESEARCH_StartNode("Start Node", 241, false), RESEARCH_BeeInfusion("Bee Infusion", 240, false), ; @@ -17,7 +20,12 @@ public enum ResourceType this.iconIdx = i; this.showInList = show; } - public String name; + private String name; public int iconIdx; public boolean showInList; + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.resource." + this.name); + } } diff --git a/thaumicbees_src/thaumicbees/item/types/WaxType.java b/thaumicbees_src/thaumicbees/item/types/WaxType.java index fea3a89..8fc2513 100644 --- a/thaumicbees_src/thaumicbees/item/types/WaxType.java +++ b/thaumicbees_src/thaumicbees/item/types/WaxType.java @@ -1,8 +1,10 @@ package thaumicbees.item.types; +import cpw.mods.fml.common.registry.LanguageRegistry; + public enum WaxType { - MAGIC("Magic Wax", false, 0xd242df), + MAGIC("magic", false, 0xd242df), ; private WaxType(String n, boolean sp, int c) @@ -12,7 +14,12 @@ public enum WaxType this.colour = c; } - public String name; + private String name; public boolean sparkly; public int colour; + + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.wax." + this.name); + } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/main/CommonProxy.java b/thaumicbees_src/thaumicbees/main/CommonProxy.java index ea8a418..f1df93f 100644 --- a/thaumicbees_src/thaumicbees/main/CommonProxy.java +++ b/thaumicbees_src/thaumicbees/main/CommonProxy.java @@ -8,6 +8,7 @@ public class CommonProxy { public static final String TCBEES_GFX = "/gfx/thaumicbees/"; public static final String TCBEES_RESEARCH = "/research/thaumicbees/"; + public static final String TCBEES_LOCDIR = "/lang/thaumicbees/"; public static final String TCBEES_ITEM_GFX = TCBEES_GFX + "items/"; public static String FORESTRY_GFX_ITEMS; diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index 64c311b..b167e39 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -144,7 +144,8 @@ public class Config try { // 0x8700C6 = purpleish. - BackpackDefinition def = new BackpackDefinition("thaumaturge", "Thaumaturge's Backpack", 0x8700C6); + String backpackName = LanguageRegistry.instance().getStringLocalization("tb.backpack.thaumaturge"); + BackpackDefinition def = new BackpackDefinition("thaumaturge", backpackName, 0x8700C6); thaumaturgeBackpackT1 = BackpackManager.backpackInterface.addBackpack(tbConfig.getItem("thaumaturgePack1", itemIDBase++).getInt(), def, EnumBackpackType.T1); @@ -187,11 +188,10 @@ public class Config itemIDBase++; itemIDBase++; - // New items here. - jellyBaby = new ItemFood(tbConfig.getItem("sugarSnack", itemIDBase++).getInt(), 1, false).setAlwaysEdible() + // Jelly babies for Dr. Whoniversary. + jellyBaby = new ItemFood(tbConfig.getItem("jellyBabies", itemIDBase++).getInt(), 1, false).setAlwaysEdible() .setPotionEffect(Potion.moveSpeed.id, 5, 1, 1f); - jellyBaby.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE).setIconIndex(19).setItemName("sugarSnack"); - LanguageRegistry.addName(jellyBaby, "Jelly Baby"); + jellyBaby.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE).setIconIndex(19).setItemName("jellyBabies"); } diff --git a/thaumicbees_src/thaumicbees/main/ThaumicBees.java b/thaumicbees_src/thaumicbees/main/ThaumicBees.java index 415d868..ca9a188 100644 --- a/thaumicbees_src/thaumicbees/main/ThaumicBees.java +++ b/thaumicbees_src/thaumicbees/main/ThaumicBees.java @@ -5,6 +5,7 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeSubscribe; import thaumicbees.compat.CompatabilityManager; import thaumicbees.main.utils.CraftingManager; +import thaumicbees.main.utils.LocalizationManager; import thaumicbees.main.utils.VersionInfo; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; @@ -41,6 +42,8 @@ public class ThaumicBees @Mod.PreInit public void preInit(FMLPreInitializationEvent event) { + LocalizationManager.setupLocalizationInfo(); + this.configsPath = event.getModConfigurationDirectory().getAbsolutePath(); this.modConfig = new Config(event.getSuggestedConfigurationFile()); @@ -86,7 +89,6 @@ public class ThaumicBees // Forestry has init'd by this point. MinecraftForge.EVENT_BUS.register(this); - CompatabilityManager.setupResearch(); } diff --git a/thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java b/thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java new file mode 100644 index 0000000..f9e37e5 --- /dev/null +++ b/thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java @@ -0,0 +1,28 @@ +package thaumicbees.main.utils; + +import thaumicbees.main.CommonProxy; +import cpw.mods.fml.common.registry.LanguageRegistry; + +public class LocalizationManager +{ + private enum Locale + { + en_US("en_US"), + ; + public String locale; + + private Locale(String loc) + { + this.locale = loc; + } + } + + public static void setupLocalizationInfo() + { + for (Locale l : Locale.values()) + { + LanguageRegistry.instance().loadLocalization(CommonProxy.TCBEES_LOCDIR + l.locale + ".xml", l.locale, true); + } + } + +} diff --git a/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java b/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java index 5bd7411..aa63b02 100644 --- a/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java +++ b/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java @@ -1,5 +1,6 @@ package thaumicbees.main.utils; +import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraft.world.World; /** @@ -7,14 +8,20 @@ import net.minecraft.world.World; */ public enum MoonPhase { - FULL, - WANING_GIBBOUS, - WANING_HALF, - WANING_CRESCENT, - NEW, - WAXING_CRESCENT, - WAXING_HALF, - WAXING_GIBBOUS; + FULL("full"), + WANING_GIBBOUS("gibbousWaning"), + WANING_HALF("halfWaning"), + WANING_CRESCENT("crescentWaning"), + NEW("new"), + WAXING_CRESCENT("crecentWaxing"), + WAXING_HALF("halfWaxing"), + WAXING_GIBBOUS("gibbousWaxing"); + + private String phaseName; + private MoonPhase(String name) + { + this.phaseName = name; + } public boolean isBetween(MoonPhase first, MoonPhase second) { @@ -35,6 +42,11 @@ public enum MoonPhase return flag; } + public String getName() + { + return LanguageRegistry.instance().getStringLocalization("tb.moon." + this.phaseName); + } + public static MoonPhase getMoonPhase(World w) { return MoonPhase.values()[(int)((w.getWorldTime() - 0) / 24000L) % 8]; From 596ae798ec595a874f8e0d9b2c6ce8207591bea5 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 12 Feb 2013 17:34:33 -0800 Subject: [PATCH 03/19] Initial commit. en_US only. --- lang/en_US.xml | 190 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 lang/en_US.xml diff --git a/lang/en_US.xml b/lang/en_US.xml new file mode 100644 index 0000000..e6098d0 --- /dev/null +++ b/lang/en_US.xml @@ -0,0 +1,190 @@ + + + + + Handful of Jelly Babies + + + + + Occult Comb + Otherworldy Comb + Papery Comb + Stark Comb + Airy Comb + Firey Comb + Watery Comb + Earthy Comb + Infused Comb + Memory Comb + Furtive Comb + + + Magic Wax + + + Enchanting Drop + Intellect Drop + + + Unusual Pollen + + + Dull Propolis + Breezey Propolis + Burning Propolis + Flowing Propolis + Stony Propolis + Infused Propolis + + + Lore Fragment + Aromatic Lump + Concentrated Compound + Crystalized %s Aspect + + + Magic Frame + Resilient Frame + Gentle Frame + Metabolic Frame + Necrotic Frame + Temporal Frame + + + Magic Capsule + + + Empty + Water + Lava + Biomass + Empty + Oil + Fuel + Seed Oil + Honey + Juice + Ice + Milk + Acid + Poison + Liquid Nitrogen + Liquid DNA + Creosote Oil + Steam + + + Full Moon + Waning Gibbous + Waxing Gibbous + Waning Half + Waxing Half + Waning Crescent + Waxing Crescent + New Moon + + + Thaumaturge's Backpack + + + Esoteric + An unusual crossbreed which seems to have magical properties.|Apinomicon + Mysterious + These bees have been to the end of the world and back, and their power has grown.|Apinomicon + Arcane + "Their produce is charged with magic."|Azanor, Master Thaumaturge + Charmed + Your first experiments in Thaumaturgical Apiculture have yielded fruit. Buzzing fruit.|Apinomicon + Enchanted + Successive generations of Charmed bees have reinforced their connection to the unknown.|Apinomicon + Supernatural + These bees walk the line between this world and the unseen.|Apinomicon + Pupil + "What does that bee want with my paper?!|Yorae, Librarian + Scholarly + "I can't be sure, but I think they might be smarter than me..."|Yorae, Librarian + Savant + lim(x^(i / pi)/ log(e * 7 - ln(32/x^-pi))). Solve for honey.|Note found on Yorae's desk + Stark + "These are unusually attracted to shards. This warrents further investigation."|Azanor, Master Thaumaturge + Aura + "They work so fast it's breathtaking."|Sengir, Mad Apiarist + Ignis + Caution: Contents of hive extremely hot.|Warning label on Azanor's apiary + Aqua + "I tried to breed them once, but that was a wash."|MysteriousAges, Apprentice Thaumaturge + Solum + "You're really gonna dig these bees, but watch out - they bore quite easily."|MysteriousAges, Apprentice Comedian + Praecantatio + Beekeeping is magic!|Apinomicon, Preface + Aware + "They can see into your soul!"|Florastar, Expert Beekeeper + Vis + "They can feel changes in the aura, but are not yet able to affect it."|Azanor, research notes + Pure + "It's like a bee janitor!"|MysteriousAges, Thaumaturge + Flux + "I thought they would help clean up, but it only makes things worse!"|Kreicus, Apprentice Thaumaturge + Node + Having undergone a freak mutation, these bees now attract magic to them.|Apinomicon + Skulking + These bees have become xenophobic and bad-tempered. Use caution.|Apinomicon + Brainy + Their combs may be fetid and foul-smelling, but their intelligence is well-developed.|Apinomicon + Gossamer + As they work, they seem to fade out from light for brief moments.|Apinomicon + Wispy + Their language is garbled and unintelligible. It is probable they are speaking to unnatural beings.|Apinomicon + Batty + They tend to attract bats to their hives through means unknown.|Apinomicon + Ghastly + "*sigh*... Really, Myst?"|Taveria + Timely + "An apiarist is never late. He arrives precicely when he means to!"|Sengir, Mad Apiarist + Lordly + They live in peace, within the sight of the Eye of Harmony|Tattered Remains of ancient Apinomicon + Doctoral + "Would you like a Jelly Baby?"|Passing stranger with a great scarf and a blue box + + + Cleansing + Mining + Swiftness + Time Warp + Aura Attract + Brainy + Batty + Wispy + Ghastly + Books + Magic Flowers + Node + Purify Node + Fluxify Node + + + Arcane + Arcanus + + Supernatural + Coeleste + + Scholarly + Docto + + Thaumic + Thaumis + + Skulking + Malevolens + + Vis + Patabilis + + Time + Sempiternus + + + + \ No newline at end of file From a7774e1fca54397335ad866c4cb7557a10f0de32 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Fri, 15 Feb 2013 13:00:30 -0800 Subject: [PATCH 04/19] Loc problems getting fixed. --- thaumicbees_res/build.number | 4 +- thaumicbees_res/build.xml | 2 +- thaumicbees_res/changelog.txt | 44 +++++++++++++++++++ thaumicbees_res/lang/thaumicbees/en_US.xml | 7 --- .../thaumicbees/bees/AlleleEffect.java | 3 +- .../bees/AlleleEffectAuraNodeGrow.java | 12 ++--- .../thaumicbees/bees/BeeClassification.java | 26 ++++++----- .../thaumicbees/bees/BeeSpecies.java | 5 ++- .../bees/FlowerProviderAuraNode.java | 3 +- .../bees/FlowerProviderAuraNodeFlux.java | 3 +- .../bees/FlowerProviderAuraNodePurify.java | 3 +- .../bees/FlowerProviderBookshelf.java | 3 +- .../bees/FlowerProviderThaumcraftFlower.java | 3 +- .../compat/CompatabilityManager.java | 3 +- .../thaumicbees/item/ItemPollen.java | 2 +- .../thaumicbees/item/ItemSolidFlux.java | 2 +- .../thaumicbees/item/types/CapsuleType.java | 3 +- .../thaumicbees/item/types/CombType.java | 3 +- .../thaumicbees/item/types/DropType.java | 3 +- .../thaumicbees/item/types/HiveFrameType.java | 3 +- .../thaumicbees/item/types/LiquidType.java | 3 +- .../thaumicbees/item/types/PollenType.java | 3 +- .../thaumicbees/item/types/PropolisType.java | 3 +- .../thaumicbees/item/types/ResourceType.java | 3 +- .../thaumicbees/item/types/WaxType.java | 3 +- thaumicbees_src/thaumicbees/main/Config.java | 3 +- .../main/utils/LocalizationManager.java | 10 +++++ .../thaumicbees/main/utils/MoonPhase.java | 2 +- 28 files changed, 118 insertions(+), 49 deletions(-) diff --git a/thaumicbees_res/build.number b/thaumicbees_res/build.number index 39900b6..01d41b0 100644 --- a/thaumicbees_res/build.number +++ b/thaumicbees_res/build.number @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sat Feb 09 14:11:48 PST 2013 -build.number=114 +#Fri Feb 15 12:43:48 PST 2013 +build.number=119 diff --git a/thaumicbees_res/build.xml b/thaumicbees_res/build.xml index 81b1627..1e85d8e 100644 --- a/thaumicbees_res/build.xml +++ b/thaumicbees_res/build.xml @@ -17,7 +17,7 @@ - + diff --git a/thaumicbees_res/changelog.txt b/thaumicbees_res/changelog.txt index 983ff4c..5866418 100644 --- a/thaumicbees_res/changelog.txt +++ b/thaumicbees_res/changelog.txt @@ -1,3 +1,47 @@ +1.4.0a +Fixed some issues with the Node bee's effect. + +1.4.0 +New branch of bees containing 3 new species. A new type of frame! +Thaumaturge's Backpack now require Amber rather than Gold Nuggets. +Due to popular complaint, the Bees & Magic node now requires Unified Thaumic Field Theory to unlock. +Moving all kinds of string contstants out of code into Localization files. +Also fixed crazy aspects showing up on things that shouldn't have those aspects. + +1.3.0d +Fixed an issue with mutations requiring a non-specific type of node to fail. + +1.3.0c +Discovered a function call that will crash dedicated servers. If you are running ThuamicBees on a server, please update to this revision. + +1.3.0b +Fixed a problem with capsules not being registered with the Forge Liquid Dictionary. You should be able to use them just about everywhere, now. +Fixed the issue with certain items appearing twice in Creative Mode tabs. + +1.3.0a +Some bug fixes, including uncommenting some mutation-related code, research tweaking. +Added the last bee for a long while, probably. Good luck getting it. Posted Image + +Common TB crashes stemming from Forestry issues should now be reported a little better, especially the backpack registration & item texture file related things. Errors should appear in your log, so make sure you read the log before you report the error here. It could be something silly on your end that is causing the crash. + +1.3.0 +3 new species of bee: Vis, Pure, and Flux! Each requires an aura node nearby, and may have some side-effects... +New Thaumcraft research! Open up your Thaumanomicon to see it. +New Apiary Frames! They run off magic, confers bees with bonuses, and may have an impact outside of your apiary... + +1.2.705B - Replaced 1.2.705 +Fixed issue with bad Mutation class, allowing pure bees to turn into any bee that involves them in a mutation. +Also ACTUALLY fixed issue with Extra Bees loading after ThaumicBees on *nix-based systems. + +1.2.705 +*Stealth update: Fixed an issue with TB loading before Extra Bees, resulting in some Null Pointers getting passed and choked on. If you get this issue, please re-download 1.2.705. No other changes were made in this version. + +*8 new species of bees, including "Praecantatio", which, like the other Elemental bees, may contain Vis shards in its propolis. Some of the new species may also have extra evil involved, so be ready for anything. +*Extra integration with Extra Bees! Mutations for some of the new bees. If Extra Bees is present, their mutations will require EB species rather than the base Forestry species. +*Changed the "Charmed" mutation to avoid conflicting with Extra Bees. (Binnie already had one there, so mine got moved.) +*New bee branch, similar to Extra Bees's mob spawning bees. +*One new bee from a new branch, the rest of which will come once Azanor releases the Thaumcraft API. + 1.1.702-67 - Replaced 1.1.702-62 Additional Magic Capsules, featuring ExtraBees liquids, and RailCraft Creosote & Steam. (Yes, steam capsules. It's magic. That's how. :P) Tagged additional Forestry items with Thaumcraft aspects. diff --git a/thaumicbees_res/lang/thaumicbees/en_US.xml b/thaumicbees_res/lang/thaumicbees/en_US.xml index e6098d0..84c69fc 100644 --- a/thaumicbees_res/lang/thaumicbees/en_US.xml +++ b/thaumicbees_res/lang/thaumicbees/en_US.xml @@ -165,25 +165,18 @@ Arcane - Arcanus Supernatural - Coeleste Scholarly - Docto Thaumic - Thaumis Skulking - Malevolens Vis - Patabilis Time - Sempiternus diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffect.java b/thaumicbees_src/thaumicbees/bees/AlleleEffect.java index 18cc5ff..1ae6634 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffect.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffect.java @@ -9,6 +9,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import thaumicbees.main.ThaumicBees; +import thaumicbees.main.utils.LocalizationManager; import forestry.api.apiculture.IAlleleBeeEffect; import forestry.api.apiculture.IBeeGenome; import forestry.api.apiculture.IBeeHousing; @@ -34,7 +35,7 @@ public abstract class AlleleEffect extends Allele implements IAlleleBeeEffect @Override public String getIdentifier() { - return LanguageRegistry.instance().getStringLocalization(getUID()); + return LocalizationManager.getLocalizedString(getUID()); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java index e070b7e..ef6af74 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectAuraNodeGrow.java @@ -39,7 +39,7 @@ public class AlleleEffectAuraNodeGrow extends AlleleEffect if (value >= throttle) { World w = housing.getWorld(); - if (w.rand.nextInt(15) < 1) + if (w.rand.nextInt(10) < 1) { float x = housing.getXCoord(); float y = housing.getYCoord(); @@ -48,7 +48,7 @@ public class AlleleEffectAuraNodeGrow extends AlleleEffect if (nodeId != -1) { AuraNode node = ThaumcraftApi.getNodeCopy(nodeId); - if (node.level >= node.baseLevel * 3 / 4) + if (node.level >= node.baseLevel * 4 / 5) { x = (float)(x - node.xPos); y = (float)(y - node.yPos); @@ -59,11 +59,11 @@ public class AlleleEffectAuraNodeGrow extends AlleleEffect y = y / distance; z = z / distance; - x *= 0.0125f; - y *= 0.0125f; - z *= 0.0125f; + x *= 0.05f; + y *= 0.05f; + z *= 0.05f; - ThaumcraftApi.queueNodeChanges(nodeId, node.baseLevel * -3 / 10, w.rand.nextInt(1), false, null, x, y, z); + ThaumcraftApi.queueNodeChanges(nodeId, node.baseLevel * -1 / 13, w.rand.nextInt(2), false, null, x, y, z); } } } diff --git a/thaumicbees_src/thaumicbees/bees/BeeClassification.java b/thaumicbees_src/thaumicbees/bees/BeeClassification.java index 03d4336..f8af328 100644 --- a/thaumicbees_src/thaumicbees/bees/BeeClassification.java +++ b/thaumicbees_src/thaumicbees/bees/BeeClassification.java @@ -2,6 +2,8 @@ package thaumicbees.bees; import java.util.ArrayList; +import thaumicbees.main.utils.LocalizationManager; + import cpw.mods.fml.common.registry.LanguageRegistry; import forestry.api.genetics.AlleleManager; @@ -10,23 +12,25 @@ import forestry.api.genetics.IClassification; public enum BeeClassification implements IClassification { - ARCANE("Arcane"), - SUPERNATURAL("Supernatural"), - SCHOLARLY("Scholarly"), - THAUMIC("Thaumic"), - SKULKING("Skulking"), - VIS("Vis"), - TIME("Time"), + ARCANE("Arcane", "Arcanus"), + SUPERNATURAL("Supernatural", ""), + SCHOLARLY("Scholarly", ""), + THAUMIC("Thaumic", ""), + SKULKING("Skulking", ""), + VIS("Vis", ""), + TIME("Time", ""), ; private String uID; + private String latin; private ArrayList species; private IClassification parent; private EnumClassLevel level; - private BeeClassification(String name) + private BeeClassification(String name, String scientific) { this.uID = "classification." + name.toLowerCase(); + this.latin = scientific; this.level = EnumClassLevel.GENUS; this.species = new ArrayList(); this.parent = AlleleManager.alleleRegistry.getClassification("family.apidae"); @@ -48,19 +52,19 @@ public enum BeeClassification implements IClassification @Override public String getName() { - return LanguageRegistry.instance().getStringLocalization(getUID()); + return LocalizationManager.getLocalizedString(getUID()); } @Override public String getScientific() { - return LanguageRegistry.instance().getStringLocalization(getUID() + ".latin"); + return this.latin; } @Override public String getDescription() { - return LanguageRegistry.instance().getStringLocalization(getUID() + ".description"); + return LocalizationManager.getLocalizedString(getUID() + ".description"); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java index a77135e..162a2cd 100644 --- a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java +++ b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java @@ -18,6 +18,7 @@ import thaumicbees.item.types.DropType; import thaumicbees.item.types.PollenType; import thaumicbees.item.types.ResourceType; import thaumicbees.main.Config; +import thaumicbees.main.utils.LocalizationManager; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -273,12 +274,12 @@ public enum BeeSpecies implements IAlleleBeeSpecies public String getName() { - return LanguageRegistry.instance().getStringLocalization(getUID()); + return LocalizationManager.getLocalizedString(getUID()); } public String getDescription() { - return LanguageRegistry.instance().getStringLocalization(getUID() + ".description"); + return LocalizationManager.getLocalizedString(getUID() + ".description"); } public int getBodyType() diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java index 6ef2828..58b51ae 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNode.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import thaumcraft.api.AuraNode; import thaumcraft.api.ThaumcraftApi; import thaumicbees.main.Config; +import thaumicbees.main.utils.LocalizationManager; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -45,7 +46,7 @@ public class FlowerProviderAuraNode implements IFlowerProvider @Override public String getDescription() { - return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.node"); + return LocalizationManager.getLocalizedString("tb.bees.flower.node"); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java index 0b7b121..cf7acfe 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodeFlux.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import thaumcraft.api.EnumTag; import thaumcraft.api.ObjectTags; import thaumcraft.api.ThaumcraftApi; +import thaumicbees.main.utils.LocalizationManager; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import forestry.api.apiculture.IBeeGenome; @@ -38,6 +39,6 @@ public class FlowerProviderAuraNodeFlux extends FlowerProviderAuraNode @Override public String getDescription() { - return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.nodeFlux"); + return LocalizationManager.getLocalizedString("tb.bees.flower.nodeFlux"); } } diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java index 2eaf18e..a27d901 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderAuraNodePurify.java @@ -9,6 +9,7 @@ import thaumcraft.api.EnumTag; import thaumcraft.api.ObjectTags; import thaumcraft.api.ThaumcraftApi; import thaumicbees.main.Config; +import thaumicbees.main.utils.LocalizationManager; import forestry.api.apiculture.IBeeGenome; public class FlowerProviderAuraNodePurify extends FlowerProviderAuraNode @@ -22,7 +23,7 @@ public class FlowerProviderAuraNodePurify extends FlowerProviderAuraNode @Override public String getDescription() { - return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.nodePure"); + return LocalizationManager.getLocalizedString("tb.bees.flower.nodePure"); } @Override diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java index c73067d..594c676 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderBookshelf.java @@ -1,5 +1,6 @@ package thaumicbees.bees; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; @@ -47,6 +48,6 @@ public class FlowerProviderBookshelf implements IFlowerProvider public String getDescription() { - return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.book"); + return LocalizationManager.getLocalizedString("tb.bees.flower.book"); } } diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java index 0a83c87..2b3ac42 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java @@ -2,6 +2,7 @@ package thaumicbees.bees; import cpw.mods.fml.common.registry.LanguageRegistry; import thaumicbees.main.Config; +import thaumicbees.main.utils.LocalizationManager; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -45,7 +46,7 @@ public class FlowerProviderThaumcraftFlower implements IFlowerProvider @Override public String getDescription() { - return LanguageRegistry.instance().getStringLocalization("tb.bees.flower.magic"); + return LocalizationManager.getLocalizedString("tb.bees.flower.magic"); } @Override diff --git a/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java b/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java index 48509f5..ae47659 100644 --- a/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java +++ b/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java @@ -58,7 +58,8 @@ public class CompatabilityManager } catch (Exception e) { - FMLLog.warning("Could not get Extra Bees item: " + field + ". If you notice this, please report the issue on the Thaumic Bees thread."); + FMLLog.warning("Could not get Extra Bees item: " + field + ". If you notice this, please report this on the Thaumic Bees thread with the following trace:"); + e.printStackTrace(); } return value; } diff --git a/thaumicbees_src/thaumicbees/item/ItemPollen.java b/thaumicbees_src/thaumicbees/item/ItemPollen.java index f473be8..dccd127 100644 --- a/thaumicbees_src/thaumicbees/item/ItemPollen.java +++ b/thaumicbees_src/thaumicbees/item/ItemPollen.java @@ -80,7 +80,7 @@ public class ItemPollen extends Item return colour; } - + @Override public String getItemDisplayName(ItemStack stack) { diff --git a/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java b/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java index 8a68985..63024bd 100644 --- a/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java +++ b/thaumicbees_src/thaumicbees/item/ItemSolidFlux.java @@ -41,7 +41,7 @@ public class ItemSolidFlux extends Item @Override public String getItemDisplayName(ItemStack stack) { - return String.format(LanguageRegistry.instance().getStringLocalization("tb.resource.crystalFlux"), EnumTag.get(stack.getItemDamage()).name); + return String.format(LocalizationManager.getLocalizedString("tb.resource.crystalFlux"), EnumTag.get(stack.getItemDamage()).name); } @Override diff --git a/thaumicbees_src/thaumicbees/item/types/CapsuleType.java b/thaumicbees_src/thaumicbees/item/types/CapsuleType.java index 80efe96..12b1796 100644 --- a/thaumicbees_src/thaumicbees/item/types/CapsuleType.java +++ b/thaumicbees_src/thaumicbees/item/types/CapsuleType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; public enum CapsuleType @@ -19,6 +20,6 @@ public enum CapsuleType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.capsule." + name); + return LocalizationManager.getLocalizedString("tb.capsule." + name); } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/CombType.java b/thaumicbees_src/thaumicbees/item/types/CombType.java index 2e80262..7d154bb 100644 --- a/thaumicbees_src/thaumicbees/item/types/CombType.java +++ b/thaumicbees_src/thaumicbees/item/types/CombType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; public enum CombType @@ -33,6 +34,6 @@ public enum CombType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.comb." + this.name); + return LocalizationManager.getLocalizedString("tb.comb." + this.name); } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/DropType.java b/thaumicbees_src/thaumicbees/item/types/DropType.java index a1da8cb..08a3f7b 100644 --- a/thaumicbees_src/thaumicbees/item/types/DropType.java +++ b/thaumicbees_src/thaumicbees/item/types/DropType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; public enum DropType @@ -20,6 +21,6 @@ public enum DropType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.drop." + this.name); + return LocalizationManager.getLocalizedString("tb.drop." + this.name); } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java b/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java index 32da4ba..7e0abe1 100644 --- a/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java +++ b/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java @@ -3,6 +3,7 @@ package thaumicbees.item.types; import cpw.mods.fml.common.registry.LanguageRegistry; import thaumcraft.api.EnumTag; import thaumcraft.api.ObjectTags; +import thaumicbees.main.utils.LocalizationManager; public enum HiveFrameType { @@ -69,6 +70,6 @@ public enum HiveFrameType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.frame." + this.frameName); + return LocalizationManager.getLocalizedString("tb.frame." + this.frameName); } } diff --git a/thaumicbees_src/thaumicbees/item/types/LiquidType.java b/thaumicbees_src/thaumicbees/item/types/LiquidType.java index d70e661..76d2fce 100644 --- a/thaumicbees_src/thaumicbees/item/types/LiquidType.java +++ b/thaumicbees_src/thaumicbees/item/types/LiquidType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; import net.minecraftforge.liquids.LiquidDictionary; @@ -51,6 +52,6 @@ public enum LiquidType public String getDisplayName() { - return LanguageRegistry.instance().getStringLocalization("tb.liquid." + liquidID); + return LocalizationManager.getLocalizedString("tb.liquid." + liquidID); } } diff --git a/thaumicbees_src/thaumicbees/item/types/PollenType.java b/thaumicbees_src/thaumicbees/item/types/PollenType.java index e25df2a..3873bdb 100644 --- a/thaumicbees_src/thaumicbees/item/types/PollenType.java +++ b/thaumicbees_src/thaumicbees/item/types/PollenType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; public enum PollenType @@ -19,6 +20,6 @@ public enum PollenType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.pollen." + this.name); + return LocalizationManager.getLocalizedString("tb.pollen." + this.name); } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/types/PropolisType.java b/thaumicbees_src/thaumicbees/item/types/PropolisType.java index a96577b..fefa0c5 100644 --- a/thaumicbees_src/thaumicbees/item/types/PropolisType.java +++ b/thaumicbees_src/thaumicbees/item/types/PropolisType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; public enum PropolisType @@ -23,6 +24,6 @@ public enum PropolisType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.propolis." + this.name); + return LocalizationManager.getLocalizedString("tb.propolis." + this.name); } } diff --git a/thaumicbees_src/thaumicbees/item/types/ResourceType.java b/thaumicbees_src/thaumicbees/item/types/ResourceType.java index dbc8b9b..5a53ce1 100644 --- a/thaumicbees_src/thaumicbees/item/types/ResourceType.java +++ b/thaumicbees_src/thaumicbees/item/types/ResourceType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; public enum ResourceType @@ -26,6 +27,6 @@ public enum ResourceType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.resource." + this.name); + return LocalizationManager.getLocalizedString("tb.resource." + this.name); } } diff --git a/thaumicbees_src/thaumicbees/item/types/WaxType.java b/thaumicbees_src/thaumicbees/item/types/WaxType.java index 8fc2513..8120948 100644 --- a/thaumicbees_src/thaumicbees/item/types/WaxType.java +++ b/thaumicbees_src/thaumicbees/item/types/WaxType.java @@ -1,5 +1,6 @@ package thaumicbees.item.types; +import thaumicbees.main.utils.LocalizationManager; import cpw.mods.fml.common.registry.LanguageRegistry; public enum WaxType @@ -20,6 +21,6 @@ public enum WaxType public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.wax." + this.name); + return LocalizationManager.getLocalizedString("tb.wax." + this.name); } } \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index b167e39..ac7bc5d 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -17,6 +17,7 @@ import thaumicbees.item.ItemSolidFlux; import thaumicbees.item.ItemWax; import thaumicbees.item.types.CapsuleType; import thaumicbees.item.types.HiveFrameType; +import thaumicbees.main.utils.LocalizationManager; import thaumicbees.storage.BackpackDefinition; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.event.FMLInterModComms; @@ -144,7 +145,7 @@ public class Config try { // 0x8700C6 = purpleish. - String backpackName = LanguageRegistry.instance().getStringLocalization("tb.backpack.thaumaturge"); + String backpackName = LocalizationManager.getLocalizedString("tb.backpack.thaumaturge"); BackpackDefinition def = new BackpackDefinition("thaumaturge", backpackName, 0x8700C6); thaumaturgeBackpackT1 = BackpackManager.backpackInterface.addBackpack(tbConfig.getItem("thaumaturgePack1", itemIDBase++).getInt(), diff --git a/thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java b/thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java index f9e37e5..b8d7c41 100644 --- a/thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/LocalizationManager.java @@ -1,5 +1,6 @@ package thaumicbees.main.utils; +import net.minecraft.util.StringTranslate; import thaumicbees.main.CommonProxy; import cpw.mods.fml.common.registry.LanguageRegistry; @@ -25,4 +26,13 @@ public class LocalizationManager } } + public static String getLocalizedString(String key) + { + String result = LanguageRegistry.instance().getStringLocalization(key); + if (result.isEmpty()) + { + result = LanguageRegistry.instance().getStringLocalization(key, "en_US"); + } + return result; + } } diff --git a/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java b/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java index aa63b02..e7237bf 100644 --- a/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java +++ b/thaumicbees_src/thaumicbees/main/utils/MoonPhase.java @@ -44,7 +44,7 @@ public enum MoonPhase public String getName() { - return LanguageRegistry.instance().getStringLocalization("tb.moon." + this.phaseName); + return LocalizationManager.getLocalizedString("tb.moon." + this.phaseName); } public static MoonPhase getMoonPhase(World w) From 5eb787352bda4d625d72aa85a7bc94f648cc0c27 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Mon, 18 Feb 2013 12:13:31 -0800 Subject: [PATCH 05/19] Planks & Refactoring. --- thaumicbees_res/build.number | 4 +- thaumicbees_res/build.xml | 2 +- .../gfx/thaumicbees/items/items.png | Bin 7094 -> 65907 bytes thaumicbees_res/lang/thaumicbees/en_US.xml | 5 ++ thaumicbees_src/thaumicbees/bees/Allele.java | 2 +- .../bees/AlleleEffectSpawnWisp.java | 2 +- .../thaumicbees/bees/BeeSpecies.java | 11 +-- .../thaumicbees/block/BlockPlanks.java | 49 ++++++++++++++ .../thaumicbees/block/BlockWoodSlab.java | 63 ++++++++++++++++++ .../thaumicbees/item/types/PlankType.java | 45 +++++++++++++ .../thaumicbees/item/types/PollenType.java | 3 +- thaumicbees_src/thaumicbees/main/Config.java | 39 +++++++++-- .../thaumicbees/main/ThaumicBees.java | 2 +- .../utils}/CompatabilityManager.java | 18 ++++- .../main/utils/CraftingManager.java | 56 +++++++++++----- .../{ => utils}/compat/ForestryHelper.java | 2 +- .../ShapelessBeeInfusionCraftingRecipe.java | 2 +- .../{ => utils}/compat/ThaumcraftHelper.java | 2 +- 18 files changed, 272 insertions(+), 35 deletions(-) create mode 100644 thaumicbees_src/thaumicbees/block/BlockPlanks.java create mode 100644 thaumicbees_src/thaumicbees/block/BlockWoodSlab.java create mode 100644 thaumicbees_src/thaumicbees/item/types/PlankType.java rename thaumicbees_src/thaumicbees/{compat => main/utils}/CompatabilityManager.java (96%) rename thaumicbees_src/thaumicbees/{ => utils}/compat/ForestryHelper.java (97%) rename thaumicbees_src/thaumicbees/{ => utils}/compat/ShapelessBeeInfusionCraftingRecipe.java (99%) rename thaumicbees_src/thaumicbees/{ => utils}/compat/ThaumcraftHelper.java (98%) diff --git a/thaumicbees_res/build.number b/thaumicbees_res/build.number index 01d41b0..b9f6702 100644 --- a/thaumicbees_res/build.number +++ b/thaumicbees_res/build.number @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Fri Feb 15 12:43:48 PST 2013 -build.number=119 +#Sat Feb 16 15:49:23 PST 2013 +build.number=124 diff --git a/thaumicbees_res/build.xml b/thaumicbees_res/build.xml index 1e85d8e..e2860a1 100644 --- a/thaumicbees_res/build.xml +++ b/thaumicbees_res/build.xml @@ -17,7 +17,7 @@ - + diff --git a/thaumicbees_res/gfx/thaumicbees/items/items.png b/thaumicbees_res/gfx/thaumicbees/items/items.png index c46d974af621d9c90c3b49f4e569c417cc636049..9dda5305dbd7faf3572de0a4c30b037530e362ae 100644 GIT binary patch literal 65907 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 Z{{tyS^Xf8%<{bb4002ovPDHLkV1gRZKf?e3 literal 7094 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 zQbLHandful of Jelly Babies + Greatwood Planks + Greatwood Slab + Silverwood Planks + Silverwood Slab Occult Comb @@ -28,6 +32,7 @@ Unusual Pollen + Phased Pollen Dull Propolis diff --git a/thaumicbees_src/thaumicbees/bees/Allele.java b/thaumicbees_src/thaumicbees/bees/Allele.java index 6aef12f..c185b9c 100644 --- a/thaumicbees_src/thaumicbees/bees/Allele.java +++ b/thaumicbees_src/thaumicbees/bees/Allele.java @@ -1,7 +1,7 @@ package thaumicbees.bees; import net.minecraft.potion.Potion; -import thaumicbees.compat.ThaumcraftHelper; +import thaumicbees.utils.compat.ThaumcraftHelper; import forestry.api.apiculture.IAlleleBeeSpecies; import forestry.api.genetics.AlleleManager; import forestry.api.genetics.IAllele; diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java index 7e82831..e61e087 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java @@ -3,8 +3,8 @@ package thaumicbees.bees; import java.lang.reflect.Field; import cpw.mods.fml.common.FMLLog; -import thaumicbees.compat.ThaumcraftHelper; import thaumicbees.item.ItemArmorApiarist; +import thaumicbees.utils.compat.ThaumcraftHelper; import forestry.api.apiculture.IBeeGenome; import forestry.api.apiculture.IBeeHousing; import net.minecraft.entity.EntityList; diff --git a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java index 162a2cd..44cb5a7 100644 --- a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java +++ b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java @@ -11,14 +11,14 @@ import java.util.HashMap; import cpw.mods.fml.common.registry.LanguageRegistry; -import thaumicbees.compat.ForestryHelper; -import thaumicbees.compat.ThaumcraftHelper; import thaumicbees.item.types.CombType; import thaumicbees.item.types.DropType; import thaumicbees.item.types.PollenType; import thaumicbees.item.types.ResourceType; import thaumicbees.main.Config; import thaumicbees.main.utils.LocalizationManager; +import thaumicbees.utils.compat.ForestryHelper; +import thaumicbees.utils.compat.ThaumcraftHelper; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -183,15 +183,18 @@ public enum BeeSpecies implements IAlleleBeeSpecies .setGenome(BeeGenomeManager.getTemplateGhastly()) .register(); TIMELY.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.DRIPPING.ordinal()), 25) + .addProduct(Config.pollen.getStackForType(PollenType.PHASED), 10) .setGenome(BeeGenomeManager.getTemplateTimely()) .register(); LORDLY.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 5) .addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.DRIPPING.ordinal()), 25) + .addProduct(Config.pollen.getStackForType(PollenType.PHASED), 15) .setGenome(BeeGenomeManager.getTemplateLordly()) .register(); DOCTORAL.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 10) - .addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.DRIPPING.ordinal()), 30) - .addSpecialty(new ItemStack(Config.jellyBaby), 4) + .addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.DRIPPING.ordinal()), 25) + .addProduct(Config.pollen.getStackForType(PollenType.PHASED), 19) + .addSpecialty(new ItemStack(Config.jellyBaby), 7) .setGenome(BeeGenomeManager.getTemplateDoctoral()) .register(); } diff --git a/thaumicbees_src/thaumicbees/block/BlockPlanks.java b/thaumicbees_src/thaumicbees/block/BlockPlanks.java new file mode 100644 index 0000000..11371f6 --- /dev/null +++ b/thaumicbees_src/thaumicbees/block/BlockPlanks.java @@ -0,0 +1,49 @@ +package thaumicbees.block; + +import java.util.List; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import thaumicbees.item.types.PlankType; +import thaumicbees.main.CommonProxy; +import net.minecraft.block.Block; +import net.minecraft.block.BlockWood; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +public class BlockPlanks extends Block +{ + public BlockPlanks(int id) + { + super(id, Material.wood); + this.setHardness(2.5f); + this.setResistance(6.0f); + this.setBlockName("tb.planks"); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + Block.setBurnProperties(id, 5, 20); + } + + @Override + public int getBlockTextureFromSideAndMetadata(int side, int meta) + { + return PlankType.getType(meta).textureIdx; + } + + @Override + public int damageDropped(int meta) + { + return meta; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(int id, CreativeTabs tab, List itemsList) + { + for (PlankType type : PlankType.values()) + { + itemsList.add(new ItemStack(this, 1, type.ordinal())); + } + } +} diff --git a/thaumicbees_src/thaumicbees/block/BlockWoodSlab.java b/thaumicbees_src/thaumicbees/block/BlockWoodSlab.java new file mode 100644 index 0000000..d730bd8 --- /dev/null +++ b/thaumicbees_src/thaumicbees/block/BlockWoodSlab.java @@ -0,0 +1,63 @@ +package thaumicbees.block; + +import java.util.List; +import java.util.Random; + +import thaumicbees.item.types.PlankType; +import thaumicbees.main.CommonProxy; +import thaumicbees.main.Config; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockHalfSlab; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +public class BlockWoodSlab extends BlockHalfSlab +{ + + public BlockWoodSlab(int id, boolean doubleSlab) + { + super(id, doubleSlab, Material.wood); + this.setHardness(2.5f); + this.setResistance(6.0f); + this.setBlockName("tb.slab.wood"); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + this.setLightOpacity(doubleSlab ? 255 : 0); + Block.setBurnProperties(id, 5, 20); + } + + @Override + public int getBlockTextureFromSideAndMetadata(int side, int meta) + { + return PlankType.getType(meta & 7).textureIdx; + } + + public int idDropped(int id, Random rand, int par3) + { + return Config.slabWoodHalf.blockID; + } + + protected ItemStack createStackedBlock(int meta) + { + return new ItemStack(Config.slabWoodHalf.blockID, 2, meta & 7); + } + + @Override + public String getFullSlabName(int meta) + { + return this.getBlockName() + "." + PlankType.getType(meta).name; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(int id, CreativeTabs tab, List itemsList) + { + for (PlankType type : PlankType.values()) + { + itemsList.add(new ItemStack(this, 1, type.ordinal())); + } + } +} diff --git a/thaumicbees_src/thaumicbees/item/types/PlankType.java b/thaumicbees_src/thaumicbees/item/types/PlankType.java new file mode 100644 index 0000000..3a99904 --- /dev/null +++ b/thaumicbees_src/thaumicbees/item/types/PlankType.java @@ -0,0 +1,45 @@ +package thaumicbees.item.types; + +public enum PlankType +{ + GREATWOOD("greatwood", 48), + SILVERWOOD("silverwood", 49), + ; + + public String name; + public int textureIdx; + private static String[] nameList; + + private PlankType(String n, int idx) + { + this.name = n; + this.textureIdx = idx; + } + + public static PlankType getType(int meta) + { + PlankType type = null; + + if (meta >= 0 && meta <= values().length) + { + type = values()[meta]; + } + + return type; + } + + public static String[] getAllNames() + { + return (nameList == null) ? nameList = generateNames() : nameList; + } + + private static String[] generateNames() + { + String[] names = new String[values().length]; + for (int i = 0; i < names.length; ++i) + { + names[i] = values()[i].name; + } + return names; + } +} diff --git a/thaumicbees_src/thaumicbees/item/types/PollenType.java b/thaumicbees_src/thaumicbees/item/types/PollenType.java index 3873bdb..453b8a4 100644 --- a/thaumicbees_src/thaumicbees/item/types/PollenType.java +++ b/thaumicbees_src/thaumicbees/item/types/PollenType.java @@ -5,7 +5,8 @@ import cpw.mods.fml.common.registry.LanguageRegistry; public enum PollenType { - UNUSUAL("unusual", 0xA03059, 0xD8417B), + UNUSUAL("unusual", 0xA03059, 0xD8417B), + PHASED("phased", 0x456BA5, 0x4974B4), ; private PollenType(String pName, int colourA, int colourB) diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index ac7bc5d..8b9f048 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -3,9 +3,8 @@ package thaumicbees.main; import java.io.File; import thaumicbees.block.BlockMagicApiary; -import thaumicbees.compat.CompatabilityManager; -import thaumicbees.compat.ForestryHelper; -import thaumicbees.compat.ThaumcraftHelper; +import thaumicbees.block.BlockPlanks; +import thaumicbees.block.BlockWoodSlab; import thaumicbees.item.ItemCapsule; import thaumicbees.item.ItemComb; import thaumicbees.item.ItemDrop; @@ -17,8 +16,12 @@ import thaumicbees.item.ItemSolidFlux; import thaumicbees.item.ItemWax; import thaumicbees.item.types.CapsuleType; import thaumicbees.item.types.HiveFrameType; +import thaumicbees.item.types.PlankType; +import thaumicbees.main.utils.CompatabilityManager; import thaumicbees.main.utils.LocalizationManager; import thaumicbees.storage.BackpackDefinition; +import thaumicbees.utils.compat.ForestryHelper; +import thaumicbees.utils.compat.ThaumcraftHelper; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameRegistry; @@ -26,8 +29,11 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import forestry.api.storage.BackpackManager; import forestry.api.storage.EnumBackpackType; import net.minecraft.block.Block; +import net.minecraft.block.BlockLog; import net.minecraft.item.Item; import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemMultiTextureTile; +import net.minecraft.item.ItemSlab; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraftforge.common.Configuration; @@ -47,7 +53,9 @@ public class Config public boolean AddThaumcraftItemsToBackpacks; public String ThaumaturgeExtraItems; - + public static BlockPlanks planksWood; + public static BlockWoodSlab slabWoodHalf; + public static BlockWoodSlab slabWoodFull; public static BlockMagicApiary magicApiary; public static ItemComb combs; @@ -122,6 +130,29 @@ public class Config int blockIdBase = 1750; + planksWood = new BlockPlanks(tbConfig.getBlock("planksTC", blockIdBase++).getInt()); + + Item item = new ItemMultiTextureTile(planksWood.blockID - 256, planksWood, PlankType.getAllNames()) + .setItemName(planksWood.getBlockName()).setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + Item.itemsList[planksWood.blockID] = item; + + OreDictionary.registerOre("plankWood", new ItemStack(planksWood, 1, -1)); + + slabWoodFull = new BlockWoodSlab(tbConfig.getBlock("slabFull", blockIdBase++).getInt(), true); + slabWoodHalf = new BlockWoodSlab(tbConfig.getBlock("slabHalf", blockIdBase++).getInt(), false); + + item = new ItemSlab(slabWoodHalf.blockID - 256, slabWoodHalf, slabWoodFull, false) + .setItemName(slabWoodHalf.getBlockName()).setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + Item.itemsList[slabWoodHalf.blockID] = item; + item = new ItemSlab(slabWoodFull.blockID - 256, slabWoodHalf, slabWoodFull, true) + .setItemName(slabWoodFull.getBlockName()).setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + Item.itemsList[slabWoodFull.blockID] = item; + + OreDictionary.registerOre("slabWood", new ItemStack(slabWoodHalf, 1, -1)); + + + blockIdBase++; // Stair + /*magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase).getInt()); GameRegistry.registerBlock(magicApiary, "Magic Apiary");*/ } diff --git a/thaumicbees_src/thaumicbees/main/ThaumicBees.java b/thaumicbees_src/thaumicbees/main/ThaumicBees.java index ca9a188..79573ab 100644 --- a/thaumicbees_src/thaumicbees/main/ThaumicBees.java +++ b/thaumicbees_src/thaumicbees/main/ThaumicBees.java @@ -3,7 +3,7 @@ package thaumicbees.main; import net.minecraftforge.common.Configuration; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeSubscribe; -import thaumicbees.compat.CompatabilityManager; +import thaumicbees.main.utils.CompatabilityManager; import thaumicbees.main.utils.CraftingManager; import thaumicbees.main.utils.LocalizationManager; import thaumicbees.main.utils.VersionInfo; diff --git a/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java similarity index 96% rename from thaumicbees_src/thaumicbees/compat/CompatabilityManager.java rename to thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java index ae47659..280fef6 100644 --- a/thaumicbees_src/thaumicbees/compat/CompatabilityManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java @@ -1,4 +1,4 @@ -package thaumicbees.compat; +package thaumicbees.main.utils; import java.io.File; import java.lang.reflect.Field; @@ -25,6 +25,15 @@ import thaumicbees.main.CommonProxy; import thaumicbees.main.Config; import thaumicbees.main.ThaumicBees; import thaumicbees.storage.BackpackDefinition; +import thaumicbees.utils.compat.ForestryHelper; +import thaumicbees.utils.compat.ThaumcraftHelper; +import thaumicbees.utils.compat.ForestryHelper.CircuitBoard; +import thaumicbees.utils.compat.ForestryHelper.Comb; +import thaumicbees.utils.compat.ForestryHelper.CraftingMaterial; +import thaumicbees.utils.compat.ForestryHelper.Pollen; +import thaumicbees.utils.compat.ForestryHelper.Propolis; +import thaumicbees.utils.compat.ForestryHelper.Tube; +import thaumicbees.utils.compat.ThaumcraftHelper.MiscResource; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.event.FMLInterModComms; @@ -117,6 +126,9 @@ public class CompatabilityManager ObjectTags tags; ItemStack itemStack; + tags = new ObjectTags().add(EnumTag.WOOD, 2); + ThaumcraftApi.registerObjectTag(Config.planksWood.blockID, -1, tags); + tags = new ObjectTags().add(EnumTag.MAGIC, 2); ThaumcraftApi.registerObjectTag(Config.wax.itemID, WaxType.MAGIC.ordinal(), tags); @@ -125,8 +137,10 @@ public class CompatabilityManager tags = new ObjectTags().add(EnumTag.KNOWLEDGE, 1); ThaumcraftApi.registerObjectTag(Config.drops.itemID, DropType.INTELLECT.ordinal(), tags); - tags = new ObjectTags().add(EnumTag.ELDRITCH, 1); + tags = new ObjectTags().add(EnumTag.ELDRITCH, 2); ThaumcraftApi.registerObjectTag(Config.pollen.itemID, PollenType.UNUSUAL.ordinal(), tags); + tags = new ObjectTags().add(EnumTag.TIME, 2); + ThaumcraftApi.registerObjectTag(Config.pollen.itemID, PollenType.PHASED.ordinal(), tags); tags = new ObjectTags().add(EnumTag.CONTROL, 1); ThaumcraftApi.registerObjectTag(Config.propolis.itemID, -1, tags); diff --git a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java index 67489b8..e5be449 100644 --- a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java @@ -6,17 +6,18 @@ import thaumcraft.api.ThaumcraftApi; import thaumicbees.bees.Allele; import thaumicbees.bees.BeeGenomeManager; import thaumicbees.bees.BeeSpecies; -import thaumicbees.compat.ShapelessBeeInfusionCraftingRecipe; -import thaumicbees.compat.ThaumcraftHelper; import thaumicbees.item.ItemCapsule; import thaumicbees.item.types.CombType; import thaumicbees.item.types.DropType; import thaumicbees.item.types.HiveFrameType; import thaumicbees.item.types.LiquidType; +import thaumicbees.item.types.PlankType; import thaumicbees.item.types.PropolisType; import thaumicbees.item.types.ResourceType; import thaumicbees.item.types.WaxType; import thaumicbees.main.Config; +import thaumicbees.utils.compat.ShapelessBeeInfusionCraftingRecipe; +import thaumicbees.utils.compat.ThaumcraftHelper; import cpw.mods.fml.common.registry.GameRegistry; import forestry.api.apiculture.BeeManager; import forestry.api.apiculture.EnumBeeChromosome; @@ -37,10 +38,22 @@ public class CraftingManager { public static void setupCrafting() { - ItemStack inputStack; // Variable to hold forestry items + ItemStack input; + ItemStack output; + + // Slabs + for (int i = 0; i < PlankType.values().length; ++i) + { + input = new ItemStack(Config.planksWood, 1, i); + output = new ItemStack(Config.slabWoodHalf, 6, i); + GameRegistry.addRecipe(output, new Object[] { + "PPP", + 'P', input + }); + } // Essentia bottles - ItemStack output = new ItemStack(Config.tcEssentiaBottle); + output = new ItemStack(Config.tcEssentiaBottle); output.stackSize = 8; GameRegistry.addRecipe(output, new Object[] { " C ", "GPG", "PGP", @@ -79,17 +92,17 @@ public class CraftingManager }); // Concentrated Fertilizer -> Forestry fertilizer - inputStack = Config.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); + input = Config.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); output = ItemInterface.getItem("fertilizerCompound"); output.stackSize = 6; GameRegistry.addRecipe(output, new Object[] { " S ", " F ", " S ", - 'F', inputStack, + 'F', input, 'S', Block.sand }); GameRegistry.addRecipe(output, new Object[] { " ", "SFS", " ", - 'F', inputStack, + 'F', input, 'S', Block.sand }); @@ -97,7 +110,7 @@ public class CraftingManager output.stackSize = 12; GameRegistry.addRecipe(output, new Object[] { "aaa", "aFa", "aaa", - 'F', inputStack, + 'F', input, 'a', ItemInterface.getItem("ash") }); @@ -152,7 +165,7 @@ public class CraftingManager new int[] { 100, 50, 65 }); RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.INTELLECT), new ItemStack[] { Config.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeydew"), Config.drops.getStackForType(DropType.INTELLECT) }, - new int[] { 90, 40, 2 }); + new int[] { 90, 40, 10 }); RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.SKULKING), new ItemStack[] {ItemInterface.getItem("beeswax"), ItemInterface.getItem("propolis"), ItemInterface.getItem("honeydew") }, new int[] { 90, 20, 35 }); @@ -185,13 +198,13 @@ public class CraftingManager new ItemStack(Config.tcShard, 1, ThaumcraftHelper.ShardType.WATER.ordinal()), 18); // Carpenter recipes - inputStack = ItemInterface.getItem("craftingMaterial"); - inputStack.setItemDamage(3); // Set to Silk Mesh + input = ItemInterface.getItem("craftingMaterial"); + input.setItemDamage(3); // Set to Silk Mesh output = new ItemStack(Config.thaumaturgeBackpackT2); RecipeManagers.carpenterManager.addRecipe(200, new LiquidStack(Block.waterStill.blockID, 1000), null, output, new Object[] { "WXW", "WTW", "WWW", 'X', Item.diamond, - 'W', inputStack, + 'W', input, 'T', new ItemStack(Config.thaumaturgeBackpackT1) }); @@ -205,12 +218,12 @@ public class CraftingManager output = BlockInterface.getBlock("candle"); output.stackSize = 6; - inputStack = ItemInterface.getItem("craftingMaterial"); - inputStack.setItemDamage(2); // Set to Silk Wisp + input = ItemInterface.getItem("craftingMaterial"); + input.setItemDamage(2); // Set to Silk Wisp RecipeManagers.carpenterManager.addRecipe(30, new LiquidStack(Block.waterStill, 600), null, output, new Object[] { "WSW", 'W', Config.wax, - 'S', inputStack + 'S', input }); output = Config.miscResources.getStackForType(ResourceType.AROMATIC_LUMP, 2); @@ -227,6 +240,19 @@ public class CraftingManager 'J', ItemInterface.getItem("royalJelly"), 'D', Config.drops.getStackForType(DropType.ENCHANTED) }); + + output = new ItemStack(Config.planksWood, 6, 0); + RecipeManagers.carpenterManager.addRecipe(8, new LiquidStack(Block.waterStill, 500), null, output, new Object[] { + "B", + 'B', new ItemStack(Config.tcLog, 1, 0) + }); + + output = new ItemStack(Config.planksWood, 8, 1); + RecipeManagers.carpenterManager.addRecipe(8, new LiquidStack(Block.waterStill, 500), null, output, new Object[] { + "B", + 'B', new ItemStack(Config.tcLog, 1, 1) + }); + // Make Aromatic Lumps a swarmer inducer. Chance is /1000. BeeManager.inducers.put(output, 80); diff --git a/thaumicbees_src/thaumicbees/compat/ForestryHelper.java b/thaumicbees_src/thaumicbees/utils/compat/ForestryHelper.java similarity index 97% rename from thaumicbees_src/thaumicbees/compat/ForestryHelper.java rename to thaumicbees_src/thaumicbees/utils/compat/ForestryHelper.java index 16003f0..9a5ea86 100644 --- a/thaumicbees_src/thaumicbees/compat/ForestryHelper.java +++ b/thaumicbees_src/thaumicbees/utils/compat/ForestryHelper.java @@ -1,4 +1,4 @@ -package thaumicbees.compat; +package thaumicbees.utils.compat; import net.minecraft.item.Item; import forestry.api.core.ItemInterface; diff --git a/thaumicbees_src/thaumicbees/compat/ShapelessBeeInfusionCraftingRecipe.java b/thaumicbees_src/thaumicbees/utils/compat/ShapelessBeeInfusionCraftingRecipe.java similarity index 99% rename from thaumicbees_src/thaumicbees/compat/ShapelessBeeInfusionCraftingRecipe.java rename to thaumicbees_src/thaumicbees/utils/compat/ShapelessBeeInfusionCraftingRecipe.java index b5c98b9..84942a2 100644 --- a/thaumicbees_src/thaumicbees/compat/ShapelessBeeInfusionCraftingRecipe.java +++ b/thaumicbees_src/thaumicbees/utils/compat/ShapelessBeeInfusionCraftingRecipe.java @@ -1,4 +1,4 @@ -package thaumicbees.compat; +package thaumicbees.utils.compat; import java.util.ArrayList; import java.util.Arrays; diff --git a/thaumicbees_src/thaumicbees/compat/ThaumcraftHelper.java b/thaumicbees_src/thaumicbees/utils/compat/ThaumcraftHelper.java similarity index 98% rename from thaumicbees_src/thaumicbees/compat/ThaumcraftHelper.java rename to thaumicbees_src/thaumicbees/utils/compat/ThaumcraftHelper.java index f95564e..e88af5c 100644 --- a/thaumicbees_src/thaumicbees/compat/ThaumcraftHelper.java +++ b/thaumicbees_src/thaumicbees/utils/compat/ThaumcraftHelper.java @@ -1,4 +1,4 @@ -package thaumicbees.compat; +package thaumicbees.utils.compat; import net.minecraft.block.Block; import net.minecraft.item.Item; From b3660ecf58b38277c00b46b82b0057407cd33574 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Mon, 18 Feb 2013 12:37:37 -0800 Subject: [PATCH 06/19] Removing build number from repo. --- thaumicbees_res/build.number | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 thaumicbees_res/build.number diff --git a/thaumicbees_res/build.number b/thaumicbees_res/build.number deleted file mode 100644 index b9f6702..0000000 --- a/thaumicbees_res/build.number +++ /dev/null @@ -1,3 +0,0 @@ -#Build Number for ANT. Do not edit! -#Sat Feb 16 15:49:23 PST 2013 -build.number=124 From 0fa9a6ed23768cc9f5c228f98a00ecdc595fcf19 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Fri, 22 Feb 2013 16:14:17 -0800 Subject: [PATCH 07/19] New capsule, more refactoring. More research. More config options for capsule stack size --- thaumicbees_res/changelog.txt | 8 ++++ .../gfx/thaumicbees/items/liquids.png | Bin 2537 -> 54061 bytes thaumicbees_res/lang/thaumicbees/en_US.xml | 1 + .../research/thaumicbees/research.xml | 12 ++++- thaumicbees_src/thaumicbees/bees/Allele.java | 2 +- .../bees/AlleleEffectSpawnWisp.java | 2 +- .../thaumicbees/bees/BeeSpecies.java | 4 +- .../bees/FlowerProviderThaumcraftFlower.java | 16 +++++-- .../thaumicbees/item/ItemCapsule.java | 3 +- .../thaumicbees/item/ItemMagicHiveFrame.java | 44 ++++++++++++++---- .../thaumicbees/item/types/CapsuleType.java | 1 + .../thaumicbees/item/types/HiveFrameType.java | 20 ++++---- thaumicbees_src/thaumicbees/main/Config.java | 14 ++++-- .../main/utils/CompatabilityManager.java | 44 +++++++++--------- .../main/utils/CraftingManager.java | 15 +++++- .../utils/compat/ForestryHelper.java | 2 +- .../ShapelessBeeInfusionCraftingRecipe.java | 2 +- .../utils/compat/ThaumcraftHelper.java | 4 +- 18 files changed, 135 insertions(+), 59 deletions(-) rename thaumicbees_src/thaumicbees/{ => main}/utils/compat/ForestryHelper.java (96%) rename thaumicbees_src/thaumicbees/{ => main}/utils/compat/ShapelessBeeInfusionCraftingRecipe.java (99%) rename thaumicbees_src/thaumicbees/{ => main}/utils/compat/ThaumcraftHelper.java (98%) diff --git a/thaumicbees_res/changelog.txt b/thaumicbees_res/changelog.txt index 5866418..22e5f56 100644 --- a/thaumicbees_res/changelog.txt +++ b/thaumicbees_res/changelog.txt @@ -1,3 +1,11 @@ +1.4.2 +Added Void Capsules - hold up to 8 buckets of liquid with one! It's a waterproof bag of holding! +Fix: Added Greatwood & Silverwood slabs to the ore dictionary so they should work as normal. + +1.4.1 +Added Greatwood and Silverwood planks. Since Greatwood and Silverwood are tougher than other trees, you'll need some extra machinery. To obtain these, jam a log of the appropriate tree into a Forestry carpenter and provide a half bucket of water. +Added slabs for the new planks also. + 1.4.0a Fixed some issues with the Node bee's effect. diff --git a/thaumicbees_res/gfx/thaumicbees/items/liquids.png b/thaumicbees_res/gfx/thaumicbees/items/liquids.png index 96735a0348873a186c0f98d33acb7144f26c814c..83f3118fc467c96d16d2e0876748bb26436ec872 100644 GIT binary patch literal 54061 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�!-ZjT26 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 diff --git a/thaumicbees_res/lang/thaumicbees/en_US.xml b/thaumicbees_res/lang/thaumicbees/en_US.xml index a3ae51c..74eb1b7 100644 --- a/thaumicbees_res/lang/thaumicbees/en_US.xml +++ b/thaumicbees_res/lang/thaumicbees/en_US.xml @@ -58,6 +58,7 @@ Magic Capsule + Void Capsule Empty diff --git a/thaumicbees_res/research/thaumicbees/research.xml b/thaumicbees_res/research/thaumicbees/research.xml index d3692ca..7ff6d57 100644 --- a/thaumicbees_res/research/thaumicbees/research.xml +++ b/thaumicbees_res/research/thaumicbees/research.xml @@ -99,8 +99,18 @@ Like the Magic Frame, this frame consumes aura to maintain its enchantments. Thi You have been seeking a way to significantly extend bee life. It should be possible by adding a frame enchanted with the essence of time to the hive. Keeping bees has been frustrating, as the insects' short lives requires you to manually intervene far too often. -A new variation of your frame design, this version involving some Time magic, should help extend their lives significantly. +A new variation of your frame design, this version involving some Time magic, should help extend their lives significantly. Like the Magic frame, this one too requires aura to run, and will produce flux now and again. FRAMETIME + +Void Capsule +Another Dimension of Liquid Storage +It seems reasonable that if you can shift blocks and other matter into an alternate dimension temporarily, you should be able to do something similar with liquids. +These new capsules can hold the equivalent of 8 buckets' worth of liquid by syphoning off a large quantity into a pocket dimension temporarily. + +Like other capsules, they are fragile and are typically single-use. They have proven popular for long-term storage. +VOIDCAPSULE + + \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/bees/Allele.java b/thaumicbees_src/thaumicbees/bees/Allele.java index c185b9c..61fb3f5 100644 --- a/thaumicbees_src/thaumicbees/bees/Allele.java +++ b/thaumicbees_src/thaumicbees/bees/Allele.java @@ -1,7 +1,7 @@ package thaumicbees.bees; import net.minecraft.potion.Potion; -import thaumicbees.utils.compat.ThaumcraftHelper; +import thaumicbees.main.utils.compat.ThaumcraftHelper; import forestry.api.apiculture.IAlleleBeeSpecies; import forestry.api.genetics.AlleleManager; import forestry.api.genetics.IAllele; diff --git a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java index e61e087..bc8efb0 100644 --- a/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java +++ b/thaumicbees_src/thaumicbees/bees/AlleleEffectSpawnWisp.java @@ -4,7 +4,7 @@ import java.lang.reflect.Field; import cpw.mods.fml.common.FMLLog; import thaumicbees.item.ItemArmorApiarist; -import thaumicbees.utils.compat.ThaumcraftHelper; +import thaumicbees.main.utils.compat.ThaumcraftHelper; import forestry.api.apiculture.IBeeGenome; import forestry.api.apiculture.IBeeHousing; import net.minecraft.entity.EntityList; diff --git a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java index 44cb5a7..7b71522 100644 --- a/thaumicbees_src/thaumicbees/bees/BeeSpecies.java +++ b/thaumicbees_src/thaumicbees/bees/BeeSpecies.java @@ -17,8 +17,8 @@ import thaumicbees.item.types.PollenType; import thaumicbees.item.types.ResourceType; import thaumicbees.main.Config; import thaumicbees.main.utils.LocalizationManager; -import thaumicbees.utils.compat.ForestryHelper; -import thaumicbees.utils.compat.ThaumcraftHelper; +import thaumicbees.main.utils.compat.ForestryHelper; +import thaumicbees.main.utils.compat.ThaumcraftHelper; import net.minecraft.block.Block; import net.minecraft.item.Item; diff --git a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java b/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java index 2b3ac42..65e7dc9 100644 --- a/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java +++ b/thaumicbees_src/thaumicbees/bees/FlowerProviderThaumcraftFlower.java @@ -3,6 +3,7 @@ package thaumicbees.bees; import cpw.mods.fml.common.registry.LanguageRegistry; import thaumicbees.main.Config; import thaumicbees.main.utils.LocalizationManager; +import thaumicbees.main.utils.compat.ThaumcraftHelper; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -34,11 +35,18 @@ public class FlowerProviderThaumcraftFlower implements IFlowerProvider { boolean flag = false; int blockDown = world.getBlockId(x, y - 1, z); - if (world.isAirBlock(x, y, z) && (blockDown == Block.dirt.blockID || blockDown == Block.grass.blockID)) + if (world.isAirBlock(x, y, z)) { - int rand = world.rand.nextInt(10); - world.setBlockAndMetadataWithNotify(x, y, z, Config.tcPlant.blockID, (rand >= 5) ? 2 : 3); - flag = true; + if (blockDown == Block.dirt.blockID || blockDown == Block.grass.blockID) + { + world.setBlockAndMetadataWithNotify(x, y, z, Config.tcPlant.blockID, ThaumcraftHelper.BlockPlant.SHIMMERLEAF.ordinal()); + flag = true; + } + else if (blockDown == Block.sand.blockID) + { + world.setBlockAndMetadataWithNotify(x, y, z, Config.tcPlant.blockID, ThaumcraftHelper.BlockPlant.CINDERPEARL.ordinal()); + flag = true; + } } return flag; } diff --git a/thaumicbees_src/thaumicbees/item/ItemCapsule.java b/thaumicbees_src/thaumicbees/item/ItemCapsule.java index f9df9ee..66bc725 100644 --- a/thaumicbees_src/thaumicbees/item/ItemCapsule.java +++ b/thaumicbees_src/thaumicbees/item/ItemCapsule.java @@ -26,13 +26,14 @@ public class ItemCapsule extends Item { private CapsuleType capsuleType; - public ItemCapsule(CapsuleType type, int itemId) + public ItemCapsule(CapsuleType type, int itemId, int maxStackSize) { super(itemId); this.capsuleType = type; this.setTextureFile(CommonProxy.TCBEES_LIQUIDS_IMAGE); this.setCreativeTab(Tabs.tabApiculture); this.setHasSubtypes(true); + this.setMaxStackSize(maxStackSize); } public CapsuleType getType() diff --git a/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java b/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java index c76c2ce..83c2971 100644 --- a/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java +++ b/thaumicbees_src/thaumicbees/item/ItemMagicHiveFrame.java @@ -12,6 +12,7 @@ import thaumicbees.main.CommonProxy; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import forestry.api.apiculture.IBee; import forestry.api.apiculture.IBeeGenome; @@ -43,10 +44,7 @@ public class ItemMagicHiveFrame extends Item implements IHiveFrame @Override public ItemStack frameUsed(IBeeHousing housing, ItemStack frame, IBee queen, int wear) { - this.doFluxEffect(housing.getWorld(), housing.getXCoord(), housing.getYCoord(), housing.getZCoord()); - frame = this.doWear(housing.getWorld(), housing.getXCoord(), housing.getYCoord(), housing.getZCoord(), frame, wear); - - return frame; + return this.doWear(housing.getWorld(), housing.getXCoord(), housing.getYCoord(), housing.getZCoord(), frame, wear); } private void doFluxEffect(World w, int x, int y, int z) @@ -60,22 +58,50 @@ public class ItemMagicHiveFrame extends Item implements IHiveFrame private ItemStack doWear(World w, int x, int y, int z, ItemStack frame, int wear) { int damage = wear; + int fluxMod = 1; + // This throttles back the amount of aura consumed by the frame by storing a smidge of data on the item stack. if (this.type.auraPerUse > 0) { - // Attempt to use aura for the frame. - if (!ThaumcraftApi.decreaseClosestAura(w, x, y, z, this.type.auraPerUse, true)) + NBTTagCompound tag; + if (frame.hasTagCompound()) { - // Insufficient aura, or no nearby node. - damage = wear + this.type.auraPerUse; + tag = frame.getTagCompound(); } + else + { + tag = new NBTTagCompound(); + tag.setByte("wearTicks", (byte)0); + frame.setTagCompound(tag); + } + + int wearTicks = tag.getByte("wearTicks") + 1; + + if (wearTicks == this.type.wearTicksPerAura) + { + // Attempt to use aura for the frame. + if (!ThaumcraftApi.decreaseClosestAura(w, x, y, z, this.type.auraPerUse, true)) + { + // Insufficient aura, or no nearby node. + damage = wear + this.type.auraPerUse * this.type.wearTicksPerAura; + fluxMod = 1 + w.rand.nextInt(this.type.wearTicksPerAura); + } + wearTicks = 0; + } + + tag.setByte("wearTicks", (byte)wearTicks); } frame.setItemDamage(frame.getItemDamage() + damage); + for (int i = 0; i < fluxMod; ++i) + { + this.doFluxEffect(w, x, y, z); + } + if (frame.getItemDamage() >= frame.getMaxDamage()) { - // Break! + // Break the frame. frame = null; } diff --git a/thaumicbees_src/thaumicbees/item/types/CapsuleType.java b/thaumicbees_src/thaumicbees/item/types/CapsuleType.java index 12b1796..de73441 100644 --- a/thaumicbees_src/thaumicbees/item/types/CapsuleType.java +++ b/thaumicbees_src/thaumicbees/item/types/CapsuleType.java @@ -6,6 +6,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; public enum CapsuleType { MAGIC("magic", 2000, 0), + VOID("void", 8000, 1), ; private String name; public int capacity; diff --git a/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java b/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java index 7e0abe1..be1a3d6 100644 --- a/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java +++ b/thaumicbees_src/thaumicbees/item/types/HiveFrameType.java @@ -7,31 +7,31 @@ import thaumicbees.main.utils.LocalizationManager; public enum HiveFrameType { - MAGIC("magic", 32, 240, 1f, 1f, 1f, 2f, 2, + MAGIC("magic", 32, 240, 1f, 1f, 1f, 2f, 2, 5, null), - RESILIENT("resillient", 33, 840, 1f, 1f, 1f, 2f, 2, + RESILIENT("resillient", 33, 840, 1f, 1f, 1f, 2f, 2, 5, new ObjectTags().add(EnumTag.ARMOR, 1)), - GENTLE("gentle", 34, 200, 1f, 0.7f, 1.5f, 1.4f, 1, + GENTLE("gentle", 34, 200, 1f, 0.7f, 1.5f, 1.4f, 1, 5, new ObjectTags().add(EnumTag.HEAL, 1).add(EnumTag.LIFE, 1)), - METABOLIC("metabolic", 35, 120, 1f, 1.8f, 1f, 1.2f, 5, + METABOLIC("metabolic", 35, 120, 1f, 1.8f, 1f, 1.2f, 5, 5, new ObjectTags().add(EnumTag.EXCHANGE, 1).add(EnumTag.MOTION, 1)), - NECROTIC("necrotic", 36, 290, 1f, 1f, 0.3f, 0.75f, 1, + NECROTIC("necrotic", 36, 290, 1f, 1f, 0.3f, 0.75f, 1, 5, new ObjectTags().add(EnumTag.DEATH, 3).add(EnumTag.POISON, 2)), - TEMPORAL("temporal", 37, 300, 1f, 1f, 2.5f, 1f, 1, + TEMPORAL("temporal", 37, 300, 1f, 1f, 2.5f, 1f, 1, 5, new ObjectTags().add(EnumTag.TIME, 5)), ; private HiveFrameType(String name, int icon, int damage, float territory, float mutation, float lifespan, float production, - int auraUse, ObjectTags fluxTags) + int auraUse, int wearTicks, ObjectTags fluxTags) { - this(name, icon, damage, territory, mutation, lifespan, production, 1f, false, false, false, false, auraUse, fluxTags); + this(name, icon, damage, territory, mutation, lifespan, production, 1f, false, false, false, false, auraUse, wearTicks, fluxTags); } private HiveFrameType(String name, int icon, int damage, float territory, float mutation, float lifespan, float production, float flowering, boolean sealed, boolean lit, boolean sunlit, boolean hellish, - int auraUse, ObjectTags fluxTags) + int auraUse, int wearTicks, ObjectTags fluxTags) { this.frameName = name; this.iconIdx = icon; @@ -49,6 +49,7 @@ public enum HiveFrameType this.auraPerUse = auraUse; this.flux = fluxTags; + this.wearTicksPerAura = wearTicks; } private String frameName; @@ -67,6 +68,7 @@ public enum HiveFrameType public ObjectTags flux; public int auraPerUse; + public int wearTicksPerAura; public String getName() { diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index 8b9f048..05faa44 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -19,9 +19,9 @@ import thaumicbees.item.types.HiveFrameType; import thaumicbees.item.types.PlankType; import thaumicbees.main.utils.CompatabilityManager; import thaumicbees.main.utils.LocalizationManager; +import thaumicbees.main.utils.compat.ForestryHelper; +import thaumicbees.main.utils.compat.ThaumcraftHelper; import thaumicbees.storage.BackpackDefinition; -import thaumicbees.utils.compat.ForestryHelper; -import thaumicbees.utils.compat.ThaumcraftHelper; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameRegistry; @@ -52,6 +52,7 @@ public class Config public boolean ExtraBeesInstalled; public boolean AddThaumcraftItemsToBackpacks; public String ThaumaturgeExtraItems; + public int capsuleStackSizeMax; public static BlockPlanks planksWood; public static BlockWoodSlab slabWoodHalf; @@ -69,6 +70,7 @@ public class Config //----- Liquid Capsules -------------------- public static ItemCapsule magicCapsule; + public static ItemCapsule voidCapsule; //----- Apiary Frames ---------------------- public static ItemMagicHiveFrame hiveFrameMagic; @@ -198,7 +200,7 @@ public class Config } - magicCapsule = new ItemCapsule(CapsuleType.MAGIC, tbConfig.getItem("magicCapsule", itemIDBase++).getInt()); + magicCapsule = new ItemCapsule(CapsuleType.MAGIC, tbConfig.getItem("magicCapsule", itemIDBase++).getInt(), this.capsuleStackSizeMax); pollen = new ItemPollen(tbConfig.getItem("pollen", itemIDBase++).getInt()); solidFlux = new ItemSolidFlux(tbConfig.getItem("fluxCrystal", itemIDBase++).getInt()); @@ -225,6 +227,7 @@ public class Config .setPotionEffect(Potion.moveSpeed.id, 5, 1, 1f); jellyBaby.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE).setIconIndex(19).setItemName("jellyBabies"); + voidCapsule = new ItemCapsule(CapsuleType.VOID, tbConfig.getItem("voidCapsule", itemIDBase++).getInt(), this.capsuleStackSizeMax); } private void doMiscConfig() @@ -240,6 +243,11 @@ public class Config p.comment = "Set to true if you want ThaumicBees to add several Thaumcraft blocks & items to Forestry backpacks." + "\n Set to false to disable."; this.AddThaumcraftItemsToBackpacks = p.getBoolean(true); + + p = tbConfig.get("general", "capsuleStackSize", 64); + p.comment = "Allows you to edit the stack size of the capsules in ThaumicBees if using GregTech, \n" + + "or the reduced capsule size in Forestry & Railcraft. Default: 64"; + this.capsuleStackSizeMax = p.getInt(); } } diff --git a/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java index 280fef6..8915515 100644 --- a/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java @@ -24,16 +24,16 @@ import thaumicbees.item.types.WaxType; import thaumicbees.main.CommonProxy; import thaumicbees.main.Config; import thaumicbees.main.ThaumicBees; +import thaumicbees.main.utils.compat.ForestryHelper; +import thaumicbees.main.utils.compat.ThaumcraftHelper; +import thaumicbees.main.utils.compat.ForestryHelper.CircuitBoard; +import thaumicbees.main.utils.compat.ForestryHelper.Comb; +import thaumicbees.main.utils.compat.ForestryHelper.CraftingMaterial; +import thaumicbees.main.utils.compat.ForestryHelper.Pollen; +import thaumicbees.main.utils.compat.ForestryHelper.Propolis; +import thaumicbees.main.utils.compat.ForestryHelper.Tube; +import thaumicbees.main.utils.compat.ThaumcraftHelper.MiscResource; import thaumicbees.storage.BackpackDefinition; -import thaumicbees.utils.compat.ForestryHelper; -import thaumicbees.utils.compat.ThaumcraftHelper; -import thaumicbees.utils.compat.ForestryHelper.CircuitBoard; -import thaumicbees.utils.compat.ForestryHelper.Comb; -import thaumicbees.utils.compat.ForestryHelper.CraftingMaterial; -import thaumicbees.utils.compat.ForestryHelper.Pollen; -import thaumicbees.utils.compat.ForestryHelper.Propolis; -import thaumicbees.utils.compat.ForestryHelper.Tube; -import thaumicbees.utils.compat.ThaumcraftHelper.MiscResource; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.event.FMLInterModComms; @@ -65,11 +65,7 @@ public class CompatabilityManager Item i = (Item) f.get(null); value = new ItemStack(i); } - catch (Exception e) - { - FMLLog.warning("Could not get Extra Bees item: " + field + ". If you notice this, please report this on the Thaumic Bees thread with the following trace:"); - e.printStackTrace(); - } + catch (Exception e) { } return value; } @@ -378,11 +374,11 @@ public class CompatabilityManager itemStack = ItemInterface.getItem("tubes"); tags = new ObjectTags(ItemInterface.getItem("ingotCopper").itemID, 0).add(EnumTag.MECHANISM, 1).add(EnumTag.POWER, 1); - ThaumcraftApi.registerObjectTag(itemStack.itemID, ForestryHelper.Tube.COPPER.ordinal(), tags); + //ThaumcraftApi.registerObjectTag(itemStack.itemID, ForestryHelper.Tube.COPPER.ordinal(), tags); tags = new ObjectTags(ItemInterface.getItem("ingotTin").itemID, 0).add(EnumTag.MECHANISM, 1).add(EnumTag.POWER, 1); - ThaumcraftApi.registerObjectTag(itemStack.itemID, ForestryHelper.Tube.TIN.ordinal(), tags); + //ThaumcraftApi.registerObjectTag(itemStack.itemID, ForestryHelper.Tube.TIN.ordinal(), tags); tags = new ObjectTags(ItemInterface.getItem("ingotBronze").itemID, 0).add(EnumTag.MECHANISM, 1).add(EnumTag.POWER, 1); - ThaumcraftApi.registerObjectTag(itemStack.itemID, ForestryHelper.Tube.BRONZE.ordinal(), tags); + //ThaumcraftApi.registerObjectTag(itemStack.itemID, ForestryHelper.Tube.BRONZE.ordinal(), tags); tags = new ObjectTags(Item.ingotIron.itemID, 0).add(EnumTag.MECHANISM, 1).add(EnumTag.POWER, 1); ThaumcraftApi.registerObjectTag(itemStack.itemID, ForestryHelper.Tube.IRON.ordinal(), tags); tags = new ObjectTags(Item.ingotGold.itemID, 0).add(EnumTag.MECHANISM, 1).add(EnumTag.POWER, 1); @@ -407,12 +403,11 @@ public class CompatabilityManager { ItemStack itemStack; ObjectTags tags; + } + + private static void setupItemAspectsOreDict() + { - if ((itemStack = getExtraBeeItem("comb")) != null) - { - tags = new ObjectTags().add(EnumTag.INSECT, 2).add(EnumTag.TRAP, 2); - ThaumcraftApi.registerObjectTag(itemStack.itemID, -1, tags); - } } public static void setupResearch() @@ -474,6 +469,11 @@ public class CompatabilityManager ResearchItem temporalFrame = new ResearchItem("HIVEFRAMETIME", tags, 9, -5, Config.hiveFrameTemporal) .setParents(magicFrame).setHidden() .registerResearchItem(); + + tags = new ObjectTags().add(EnumTag.VOID, 15).add(EnumTag.CRYSTAL, 8).add(EnumTag.ELDRITCH, 8).add(EnumTag.EXCHANGE, 15); + ResearchItem voidCapsule = new ResearchItem("VOIDCAPSULE", tags, 10, 9, Config.voidCapsule) + .setParents(startNode, ResearchList.getResearch("PORTABLEHOLE")).setHidden() + .registerResearchItem(); } public static void registerResearch() diff --git a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java index e5be449..235dd42 100644 --- a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java @@ -16,8 +16,8 @@ import thaumicbees.item.types.PropolisType; import thaumicbees.item.types.ResourceType; import thaumicbees.item.types.WaxType; import thaumicbees.main.Config; -import thaumicbees.utils.compat.ShapelessBeeInfusionCraftingRecipe; -import thaumicbees.utils.compat.ThaumcraftHelper; +import thaumicbees.main.utils.compat.ShapelessBeeInfusionCraftingRecipe; +import thaumicbees.main.utils.compat.ThaumcraftHelper; import cpw.mods.fml.common.registry.GameRegistry; import forestry.api.apiculture.BeeManager; import forestry.api.apiculture.EnumBeeChromosome; @@ -313,6 +313,16 @@ public class CraftingManager 'S', Block.sand, 'F', inputA }); + + output = Config.voidCapsule.getCapsuleForLiquid(LiquidType.EMPTY); + output.stackSize = 4; + tags = new ObjectTags().add(EnumTag.VOID, 16).add(EnumTag.ELDRITCH, 4).add(EnumTag.EXCHANGE, 8); + ThaumcraftApi.addInfusionCraftingRecipe("VOIDCAPSULE", "VOIDCAPSULE", 10, tags, output, new Object[] { + " G ", "GPG", "TGT", + 'G', Block.thinGlass, + 'P', Item.enderPearl, + 'T', Item.ingotIron + }); ItemStack drone = BeeGenomeManager.getBeeNBTForSpecies(BeeSpecies.STARK, EnumBeeType.DRONE); ItemStack princess = BeeGenomeManager.getBeeNBTForSpecies(BeeSpecies.STARK, EnumBeeType.PRINCESS); @@ -360,6 +370,7 @@ public class CraftingManager 100, tags, BeeSpecies.STARK, EnumBeeChromosome.SPECIES); registerLiquidContainer(Config.magicCapsule); + registerLiquidContainer(Config.voidCapsule); } private static void registerLiquidContainer(ItemCapsule baseCapsule) diff --git a/thaumicbees_src/thaumicbees/utils/compat/ForestryHelper.java b/thaumicbees_src/thaumicbees/main/utils/compat/ForestryHelper.java similarity index 96% rename from thaumicbees_src/thaumicbees/utils/compat/ForestryHelper.java rename to thaumicbees_src/thaumicbees/main/utils/compat/ForestryHelper.java index 9a5ea86..ad885bd 100644 --- a/thaumicbees_src/thaumicbees/utils/compat/ForestryHelper.java +++ b/thaumicbees_src/thaumicbees/main/utils/compat/ForestryHelper.java @@ -1,4 +1,4 @@ -package thaumicbees.utils.compat; +package thaumicbees.main.utils.compat; import net.minecraft.item.Item; import forestry.api.core.ItemInterface; diff --git a/thaumicbees_src/thaumicbees/utils/compat/ShapelessBeeInfusionCraftingRecipe.java b/thaumicbees_src/thaumicbees/main/utils/compat/ShapelessBeeInfusionCraftingRecipe.java similarity index 99% rename from thaumicbees_src/thaumicbees/utils/compat/ShapelessBeeInfusionCraftingRecipe.java rename to thaumicbees_src/thaumicbees/main/utils/compat/ShapelessBeeInfusionCraftingRecipe.java index 84942a2..dd484aa 100644 --- a/thaumicbees_src/thaumicbees/utils/compat/ShapelessBeeInfusionCraftingRecipe.java +++ b/thaumicbees_src/thaumicbees/main/utils/compat/ShapelessBeeInfusionCraftingRecipe.java @@ -1,4 +1,4 @@ -package thaumicbees.utils.compat; +package thaumicbees.main.utils.compat; import java.util.ArrayList; import java.util.Arrays; diff --git a/thaumicbees_src/thaumicbees/utils/compat/ThaumcraftHelper.java b/thaumicbees_src/thaumicbees/main/utils/compat/ThaumcraftHelper.java similarity index 98% rename from thaumicbees_src/thaumicbees/utils/compat/ThaumcraftHelper.java rename to thaumicbees_src/thaumicbees/main/utils/compat/ThaumcraftHelper.java index e88af5c..b309be9 100644 --- a/thaumicbees_src/thaumicbees/utils/compat/ThaumcraftHelper.java +++ b/thaumicbees_src/thaumicbees/main/utils/compat/ThaumcraftHelper.java @@ -1,4 +1,4 @@ -package thaumicbees.utils.compat; +package thaumicbees.main.utils.compat; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -104,7 +104,7 @@ public class ThaumcraftHelper { GREATWOOD_SAPLING, SILVERWOOD_SAPLING, - SILVERLEAF, + SHIMMERLEAF, CINDERPEARL; } } From aed979a19fb09353ea65171964e7792f01751f44 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 26 Feb 2013 17:56:57 -0800 Subject: [PATCH 08/19] dev --- thaumicbees_res/changelog.txt | 2 +- .../gfx/thaumicbees/items/items.png | Bin 65907 -> 68602 bytes thaumicbees_res/lang/thaumicbees/en_US.xml | 1 + .../utils/GenericInventory.java | 199 ++++++++++++++++++ .../utils/GenericOwnedInventory.java | 71 +++++++ .../thaumicbees/block/BlockMagicApiary.java | 39 +++- .../thaumicbees/block/BlockPlanks.java | 7 +- .../thaumicbees/block/BlockWoodSlab.java | 7 +- .../LogicMagicApiary.java} | 181 ++++++++-------- .../block/TileEntityMagicApiary.java | 97 +++++++++ thaumicbees_src/thaumicbees/main/Config.java | 24 ++- .../thaumicbees/main/ThaumicBees.java | 1 + .../main/utils/CraftingManager.java | 61 ++++-- .../main/utils/compat/ForestryHelper.java | 42 ++++ 14 files changed, 600 insertions(+), 132 deletions(-) create mode 100644 thaumicbees_src/net/mysteriousages/utils/GenericInventory.java create mode 100644 thaumicbees_src/net/mysteriousages/utils/GenericOwnedInventory.java rename thaumicbees_src/thaumicbees/{tile/TileEntityMagicApiary.java => block/LogicMagicApiary.java} (52%) create mode 100644 thaumicbees_src/thaumicbees/block/TileEntityMagicApiary.java diff --git a/thaumicbees_res/changelog.txt b/thaumicbees_res/changelog.txt index 22e5f56..b4022ef 100644 --- a/thaumicbees_res/changelog.txt +++ b/thaumicbees_res/changelog.txt @@ -28,7 +28,7 @@ Fixed the issue with certain items appearing twice in Creative Mode tabs. 1.3.0a Some bug fixes, including uncommenting some mutation-related code, research tweaking. -Added the last bee for a long while, probably. Good luck getting it. Posted Image +Added the last bee for a long while, probably. Good luck getting it. Common TB crashes stemming from Forestry issues should now be reported a little better, especially the backpack registration & item texture file related things. Errors should appear in your log, so make sure you read the log before you report the error here. It could be something silly on your end that is causing the crash. diff --git a/thaumicbees_res/gfx/thaumicbees/items/items.png b/thaumicbees_res/gfx/thaumicbees/items/items.png index 9dda5305dbd7faf3572de0a4c30b037530e362ae..c27b57898312b32fe706966443f5ffb717284980 100644 GIT binary patch delta 34095 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 delta 31379 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

)dV#Ht$6VZ7hUb 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 Iho&F?AIb$65dZ)H diff --git a/thaumicbees_res/lang/thaumicbees/en_US.xml b/thaumicbees_res/lang/thaumicbees/en_US.xml index 74eb1b7..85f4f1a 100644 --- a/thaumicbees_res/lang/thaumicbees/en_US.xml +++ b/thaumicbees_res/lang/thaumicbees/en_US.xml @@ -9,6 +9,7 @@ Greatwood Slab Silverwood Planks Silverwood Slab + Magic Apiary Occult Comb diff --git a/thaumicbees_src/net/mysteriousages/utils/GenericInventory.java b/thaumicbees_src/net/mysteriousages/utils/GenericInventory.java new file mode 100644 index 0000000..0c0cb3d --- /dev/null +++ b/thaumicbees_src/net/mysteriousages/utils/GenericInventory.java @@ -0,0 +1,199 @@ +package net.mysteriousages.utils; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +/** + * Provides some common functionality for Inventory clusters. Performs bounds-checking on slot args. + * + * @author MysteriousAges + * + */ +public class GenericInventory implements IInventory +{ + private ItemStack[] inventory; + private String name; + private int stackLimit; + + public GenericInventory(String inventoryName, int slotCount) + { + this(inventoryName, slotCount, 64); + } + + public GenericInventory(String inventoryName, int slotCount, int maxStackSize) + { + this.inventory = new ItemStack[slotCount]; + this.name = inventoryName; + this.stackLimit = maxStackSize; + } + + @Override + public int getSizeInventory() + { + return this.inventory.length; + } + + @Override + public ItemStack getStackInSlot(int slot) + { + ItemStack result = null; + + if (this.slotNumberValid(slot)) + { + result = this.inventory[slot]; + } + + return result; + } + + @Override + public ItemStack decrStackSize(int slot, int count) + { + ItemStack result = null; + + if (this.slotNumberValid(slot)) + { + if (this.inventory[slot] != null) + { + result = this.inventory[slot].splitStack(Math.min(count, this.inventory[slot].stackSize)); + if (this.inventory[slot].stackSize <= 0) + { + this.inventory[slot] = null; + } + } + } + + return result; + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) + { + return this.getStackInSlot(slot); + } + + @Override + public void setInventorySlotContents(int slot, ItemStack itemStack) + { + if (this.slotNumberValid(slot)) + { + this.inventory[slot] = itemStack; + } + } + + @Override + public String getInvName() + { + return this.name; + } + + @Override + public int getInventoryStackLimit() + { + return this.stackLimit; + } + + public ItemStack[] getInventory() + { + return this.inventory; + } + + @Override + public void onInventoryChanged() { } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return true; + } + + /** + * Accepts an ItemStack and attempts to merge it with a similar item stack or an empty slot. + * @param stack + * @return Any leftover items, or null if the merge completed successfully. + */ + public ItemStack attemptStackMerge(ItemStack stack) + { + for (int i = 0; i < this.inventory.length; ++i) + { + if (this.inventory[i] == null) + { + this.inventory[i] = stack; + stack = null; + break; + } + else if (this.inventory[i].isItemEqual(stack)) + { + int freeSlots = stack.getItem().getItemStackLimit() - this.inventory[i].stackSize; + + this.inventory[i].stackSize += freeSlots; + stack.stackSize -= freeSlots; + } + + if (stack.stackSize <= 0) + { + stack = null; + break; + } + } + + return stack; + } + + public void writeToNBT(NBTTagCompound tag) + { + tag.setString("Name", this.name); + tag.setInteger("Size", this.inventory.length); + NBTTagList itemList = new NBTTagList(); + + for (int i = 0; i < this.inventory.length; ++i) + { + NBTTagCompound itemTag = new NBTTagCompound(); + itemTag.setByte("Slot", (byte)i); + this.inventory[i].writeToNBT(itemTag); + itemList.appendTag(itemTag); + } + + tag.setTag("Items", itemList); + } + + public void readFromNBT(NBTTagCompound tag) + { + this.name = tag.getString("Name"); + NBTTagList itemList = tag.getTagList("Items"); + int length = tag.getInteger("Size"); + this.inventory = new ItemStack[length]; + + for (int i = 0; i < itemList.tagCount(); ++i) + { + NBTTagCompound item = (NBTTagCompound)itemList.tagAt(i); + int slotId = item.getByte("Slot"); + if (slotId >= 0 && slotId < this.inventory.length) + { + this.inventory[slotId] = ItemStack.loadItemStackFromNBT(item); + } + } + } + + /** + * Checks to see if the given slot number is valid with the inventory size + * @param slot + * @return True, if slot in [0, inventory size) + */ + protected boolean slotNumberValid(int slot) + { + return slot >= 0 && slot < this.inventory.length; + } + + @Override + public void openChest() { } + + @Override + public void closeChest() { } + + +} diff --git a/thaumicbees_src/net/mysteriousages/utils/GenericOwnedInventory.java b/thaumicbees_src/net/mysteriousages/utils/GenericOwnedInventory.java new file mode 100644 index 0000000..042d2f6 --- /dev/null +++ b/thaumicbees_src/net/mysteriousages/utils/GenericOwnedInventory.java @@ -0,0 +1,71 @@ +package net.mysteriousages.utils; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; + +/** + * Provides basic functionality for an owned inventory. + * @author MysteriousAges + * + */ +public class GenericOwnedInventory extends GenericInventory +{ + private String ownerName; + private boolean isPublic; + + public GenericOwnedInventory(EntityPlayer player, String inventoryName, int slotCount) + { + super(inventoryName, slotCount); + this.setInfo(player); + } + + public GenericOwnedInventory(EntityPlayer player, String inventoryName, int slotCount, int maxStackSize) + { + super(inventoryName, slotCount, maxStackSize); + this.setInfo(player); + } + + private void setInfo(EntityPlayer player) + { + this.ownerName = player.username; + } + + public void setPubliclyAccessible(boolean flag) + { + this.isPublic = flag; + } + + public String getOwnerName() + { + return this.ownerName; + } + + public boolean isPubliclyAccessible() + { + return this.isPublic; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return this.isPublic || this.ownerName.equalsIgnoreCase(player.username); + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + super.writeToNBT(tag); + tag.setString("Owner", this.ownerName); + tag.setBoolean("PublicFlag", this.isPublic); + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + super.readFromNBT(tag); + this.ownerName = tag.getString("Owner"); + this.isPublic = tag.getBoolean("PublicFlag"); + } + + +} diff --git a/thaumicbees_src/thaumicbees/block/BlockMagicApiary.java b/thaumicbees_src/thaumicbees/block/BlockMagicApiary.java index f03677c..02a23ef 100644 --- a/thaumicbees_src/thaumicbees/block/BlockMagicApiary.java +++ b/thaumicbees_src/thaumicbees/block/BlockMagicApiary.java @@ -3,9 +3,10 @@ package thaumicbees.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import thaumicbees.main.CommonProxy; -import thaumicbees.tile.TileEntityMagicApiary; -import net.minecraft.block.BlockContainer; +import thaumicbees.block.TileEntityMagicApiary; +import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLiving; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; @@ -16,41 +17,57 @@ import forestry.api.apiculture.IBeeHousing; import forestry.api.core.EnumHumidity; import forestry.api.core.EnumTemperature; -public class BlockMagicApiary extends BlockContainer +public class BlockMagicApiary extends Block { public BlockMagicApiary(int par1) { super(par1, Material.wood); this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); this.setBlockName("Magic Apiary"); - this.blockIndexInTexture = 48; + this.blockIndexInTexture = 50; + this.setHardness(2f); + this.setResistance(5f); } @Override @SideOnly(Side.CLIENT) public int getBlockTexture(IBlockAccess worldAccess, int x, int y, int z, int side) { - int texture = 48; - if (side == 0 || side == 1) + int texture = 50; + if (side == 0) { - texture = 50; + texture = 51; + } + else if (side == 1) + { + TileEntityMagicApiary tileInfo = (TileEntityMagicApiary)worldAccess.getBlockTileEntity(x, y, z); + if (tileInfo != null && tileInfo.isMaster()) + { + texture = 52; + } + else + { + texture = 51; + } } return texture; } public int getBlockTextureFromSideAndMetadata(int side, int meta) { - int texture = 48; + int texture = 50; if (side == 0 || side == 1) { - texture = 50; + texture = 51; } return texture; } @Override - public TileEntity createNewTileEntity(World var1) + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving entity) { - return new TileEntityMagicApiary(); + super.onBlockPlacedBy(world, x, y, z, entity); + + // Validate block arrangement } } diff --git a/thaumicbees_src/thaumicbees/block/BlockPlanks.java b/thaumicbees_src/thaumicbees/block/BlockPlanks.java index 11371f6..a24feee 100644 --- a/thaumicbees_src/thaumicbees/block/BlockPlanks.java +++ b/thaumicbees_src/thaumicbees/block/BlockPlanks.java @@ -28,7 +28,12 @@ public class BlockPlanks extends Block @Override public int getBlockTextureFromSideAndMetadata(int side, int meta) { - return PlankType.getType(meta).textureIdx; + int tx = 256; + if (PlankType.getType(meta) != null) + { + tx = PlankType.getType(meta).textureIdx; + } + return tx; } @Override diff --git a/thaumicbees_src/thaumicbees/block/BlockWoodSlab.java b/thaumicbees_src/thaumicbees/block/BlockWoodSlab.java index d730bd8..85bfdd8 100644 --- a/thaumicbees_src/thaumicbees/block/BlockWoodSlab.java +++ b/thaumicbees_src/thaumicbees/block/BlockWoodSlab.java @@ -32,7 +32,12 @@ public class BlockWoodSlab extends BlockHalfSlab @Override public int getBlockTextureFromSideAndMetadata(int side, int meta) { - return PlankType.getType(meta & 7).textureIdx; + int tx = 256; + if (PlankType.getType(meta & 7) != null) + { + tx = PlankType.getType(meta & 7).textureIdx; + } + return tx; } public int idDropped(int id, Random rand, int par3) diff --git a/thaumicbees_src/thaumicbees/tile/TileEntityMagicApiary.java b/thaumicbees_src/thaumicbees/block/LogicMagicApiary.java similarity index 52% rename from thaumicbees_src/thaumicbees/tile/TileEntityMagicApiary.java rename to thaumicbees_src/thaumicbees/block/LogicMagicApiary.java index 0bed05e..f7fd94c 100644 --- a/thaumicbees_src/thaumicbees/tile/TileEntityMagicApiary.java +++ b/thaumicbees_src/thaumicbees/block/LogicMagicApiary.java @@ -1,140 +1,140 @@ -package thaumicbees.tile; +package thaumicbees.block; +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.mysteriousages.utils.GenericInventory; +import forestry.api.apiculture.BeeManager; import forestry.api.apiculture.IBee; import forestry.api.apiculture.IBeeGenome; import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeekeepingLogic; import forestry.api.core.EnumHumidity; import forestry.api.core.EnumTemperature; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; +import thaumicbees.main.utils.compat.ForestryHelper; -public class TileEntityMagicApiary extends TileEntity implements IInventory, IBeeHousing +public class LogicMagicApiary implements IBeeHousing { - - @Override - public int getSizeInventory() + private TileEntityMagicApiary parent; + private String ownerName; + private BiomeGenBase biome; + private IBeekeepingLogic beeLogic; + private GenericInventory tileInventory; + private ArrayList inventoryOverflow; + + private static final int SLOT_ID_QUEEN = 0; + private static final int SLOT_ID_DRONE = 1; + private static final int SLOT_ID_FRAME = 2; + private static final int SLOT_LENGTH_FRAME = 2; + private static final int SLOT_ID_PRODUCE = 4; + private static final int SLOT_LENGTH_PRODUCE = 6; + + public LogicMagicApiary(TileEntityMagicApiary master) { - // TODO Auto-generated method stub - return 0; + this.parent = master; + this.beeLogic = BeeManager.breedingManager.createBeekeepingLogic(this); + this.tileInventory = new GenericInventory("MagicApiary", 11); } - - @Override - public ItemStack getStackInSlot(int var1) + + public TileEntityMagicApiary getParent() { - // TODO Auto-generated method stub - return null; + return parent; } - - @Override - public ItemStack decrStackSize(int var1, int var2) + + public void setOwner(EntityPlayer player) { - // TODO Auto-generated method stub - return null; + this.ownerName = player.username; } - - @Override - public ItemStack getStackInSlotOnClosing(int var1) + + public String getOwner() { - // TODO Auto-generated method stub - return null; + return this.ownerName; } - - @Override - public void setInventorySlotContents(int var1, ItemStack var2) + + public void writeToNBT(NBTTagCompound tag) + { + NBTTagCompound beeTag = new NBTTagCompound(); + this.beeLogic.writeToNBT(beeTag); + tag.setTag("BeeLogic", beeTag); + tag.setString("Owner", this.ownerName); + NBTTagCompound inventory = new NBTTagCompound(); + this.tileInventory.writeToNBT(inventory); + tag.setTag("Inventory", inventory); + + if (this.inventoryOverflow.size() > 0) + { + NBTTagList overflow = new NBTTagList(); + for (int i = 0; i < this.inventoryOverflow.size(); ++i) + { + NBTTagCompound itemTag = new NBTTagCompound(); + this.inventoryOverflow.get(i).writeToNBT(itemTag); + overflow.appendTag(itemTag); + } + } + + } + + public void readFromNBT(NBTTagCompound tag) { - // TODO Auto-generated method stub } - @Override - public String getInvName() - { - return "thaumicbees.magicApiary"; - } - - @Override - public int getInventoryStackLimit() - { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer var1) - { - return true; - } - - @Override - public void openChest() { } - - @Override - public void closeChest() { } - @Override public float getTerritoryModifier(IBeeGenome genome) { - // TODO Auto-generated method stub - return 0; + return 1f; } @Override public float getMutationModifier(IBeeGenome genome, IBeeGenome mate) { - // TODO Auto-generated method stub - return 0; + return 1f; } @Override public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate) { - // TODO Auto-generated method stub - return 0; + return 1f; } @Override public float getProductionModifier(IBeeGenome genome) { - // TODO Auto-generated method stub - return 0; + return 2f; } @Override public float getFloweringModifier(IBeeGenome genome) { - // TODO Auto-generated method stub - return 0; + return 1f; } @Override public boolean isSealed() { - // TODO Auto-generated method stub return false; } @Override public boolean isSelfLighted() { - // TODO Auto-generated method stub return false; } @Override public boolean isSunlightSimulated() { - // TODO Auto-generated method stub return false; } @Override public boolean isHellish() { - // TODO Auto-generated method stub return false; } @@ -142,49 +142,46 @@ public class TileEntityMagicApiary extends TileEntity implements IInventory, IBe public void onQueenChange(ItemStack queen) { // TODO Auto-generated method stub - + } @Override public void wearOutEquipment(int amount) { // TODO Auto-generated method stub - + } @Override public void onQueenDeath(IBee queen) { // TODO Auto-generated method stub - + } @Override public void onPostQueenDeath(IBee queen) { // TODO Auto-generated method stub - + } @Override public int getXCoord() { - // TODO Auto-generated method stub - return 0; + return parent.xCoord; } @Override public int getYCoord() { - // TODO Auto-generated method stub - return 0; + return parent.yCoord; } @Override public int getZCoord() { - // TODO Auto-generated method stub - return 0; + return parent.zCoord; } @Override @@ -205,56 +202,51 @@ public class TileEntityMagicApiary extends TileEntity implements IInventory, IBe public void setQueen(ItemStack itemstack) { // TODO Auto-generated method stub - + } @Override public void setDrone(ItemStack itemstack) { // TODO Auto-generated method stub - + } @Override public int getBiomeId() { - // TODO Auto-generated method stub - return 0; + return this.biome.biomeID; } @Override public EnumTemperature getTemperature() { - // TODO Auto-generated method stub - return null; + return ForestryHelper.getEnumTemperatureFromValue(this.biome.temperature); } @Override public EnumHumidity getHumidity() { - // TODO Auto-generated method stub - return null; + return ForestryHelper.getEnumHumidityFromValue(this.biome.rainfall); } @Override public World getWorld() { - // TODO Auto-generated method stub - return null; + return this.getWorld(); } @Override public String getOwnerName() { - // TODO Auto-generated method stub - return null; + return parent.getOwner(); } @Override public void setErrorState(int state) { // TODO Auto-generated method stub - + } @Override @@ -277,4 +269,5 @@ public class TileEntityMagicApiary extends TileEntity implements IInventory, IBe // TODO Auto-generated method stub return false; } + } diff --git a/thaumicbees_src/thaumicbees/block/TileEntityMagicApiary.java b/thaumicbees_src/thaumicbees/block/TileEntityMagicApiary.java new file mode 100644 index 0000000..73d1635 --- /dev/null +++ b/thaumicbees_src/thaumicbees/block/TileEntityMagicApiary.java @@ -0,0 +1,97 @@ +package thaumicbees.block; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; + +public class TileEntityMagicApiary extends TileEntity +{ + private String owner; + private LogicMagicApiary logic; + private int masterX; + private int masterY; + private int masterZ; + + public TileEntityMagicApiary(World w) + { + this.setWorldObj(w); + } + + public void setValid(TileEntityMagicApiary masterEntity) + { + this.logic = masterEntity.logic; + this.masterX = masterEntity.xCoord; + this.masterY = masterEntity.yCoord; + this.masterZ = masterEntity.zCoord; + } + + public String getOwner() + { + return this.owner; + } + + public boolean isValidStructure() + { + return false; + } + + public boolean isMaster() + { + boolean flag = false; + + if (this.logic != null) + { + flag = this.logic.getParent() == this; + } + + return flag; + } + + public LogicMagicApiary getLogic() + { + return this.logic; + } + + @Override + public void readFromNBT(NBTTagCompound tagRoot) + { + super.readFromNBT(tagRoot); + this.owner = tagRoot.getString("Owner"); + if (tagRoot.hasKey("Logic")) + { + this.logic = new LogicMagicApiary(this); + this.logic.readFromNBT(tagRoot.getCompoundTag("Logic")); + } + else + { + this.masterX = tagRoot.getInteger("MasterX"); + this.masterY = tagRoot.getInteger("MasterY"); + this.masterZ = tagRoot.getInteger("MasterZ"); + } + } + + @Override + public void writeToNBT(NBTTagCompound tagRoot) + { + super.writeToNBT(tagRoot); + tagRoot.setString("Owner", this.owner); + if (this.isMaster()) + { + NBTTagCompound logicTag = new NBTTagCompound(); + this.logic.writeToNBT(logicTag); + tagRoot.setTag("Logic", logicTag); + } + else + { + tagRoot.setInteger("MasterX", this.masterX); + tagRoot.setInteger("MasterY", this.masterY); + tagRoot.setInteger("MasterZ", this.masterZ); + } + } +} diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index 05faa44..79997fd 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -5,6 +5,7 @@ import java.io.File; import thaumicbees.block.BlockMagicApiary; import thaumicbees.block.BlockPlanks; import thaumicbees.block.BlockWoodSlab; +import thaumicbees.block.TileEntityMagicApiary; import thaumicbees.item.ItemCapsule; import thaumicbees.item.ItemComb; import thaumicbees.item.ItemDrop; @@ -17,6 +18,7 @@ import thaumicbees.item.ItemWax; import thaumicbees.item.types.CapsuleType; import thaumicbees.item.types.HiveFrameType; import thaumicbees.item.types.PlankType; +import thaumicbees.item.types.ResourceType; import thaumicbees.main.utils.CompatabilityManager; import thaumicbees.main.utils.LocalizationManager; import thaumicbees.main.utils.compat.ForestryHelper; @@ -26,6 +28,7 @@ import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; +import forestry.api.apiculture.BeeManager; import forestry.api.storage.BackpackManager; import forestry.api.storage.EnumBackpackType; import net.minecraft.block.Block; @@ -36,6 +39,7 @@ import net.minecraft.item.ItemMultiTextureTile; import net.minecraft.item.ItemSlab; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.Configuration; import net.minecraftforge.common.Property; import net.minecraftforge.oredict.OreDictionary; @@ -144,19 +148,23 @@ public class Config slabWoodHalf = new BlockWoodSlab(tbConfig.getBlock("slabHalf", blockIdBase++).getInt(), false); item = new ItemSlab(slabWoodHalf.blockID - 256, slabWoodHalf, slabWoodFull, false) - .setItemName(slabWoodHalf.getBlockName()).setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + .setItemName(slabWoodHalf.getBlockName()).setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); Item.itemsList[slabWoodHalf.blockID] = item; item = new ItemSlab(slabWoodFull.blockID - 256, slabWoodHalf, slabWoodFull, true) - .setItemName(slabWoodFull.getBlockName()).setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + .setItemName(slabWoodFull.getBlockName()).setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); Item.itemsList[slabWoodFull.blockID] = item; OreDictionary.registerOre("slabWood", new ItemStack(slabWoodHalf, 1, -1)); - blockIdBase++; // Stair - - /*magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase).getInt()); - GameRegistry.registerBlock(magicApiary, "Magic Apiary");*/ + + magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase++).getInt()); + GameRegistry.registerBlock(magicApiary, "tb.magicApiary"); + } + + public void registerTileEntities() + { + TileEntity.addMapping(TileEntityMagicApiary.class, "MagicApiary"); } public void setupItems() @@ -175,6 +183,10 @@ public class Config drops = new ItemDrop(tbConfig.getItem("drop", itemIDBase++).getInt()); miscResources = new ItemMiscResources(tbConfig.getItem("miscResources", itemIDBase++).getInt()); + + // Make Aromatic Lumps a swarmer inducer. Chance is /1000. + BeeManager.inducers.put(miscResources.getStackForType(ResourceType.AROMATIC_LUMP), 80); + try { // 0x8700C6 = purpleish. diff --git a/thaumicbees_src/thaumicbees/main/ThaumicBees.java b/thaumicbees_src/thaumicbees/main/ThaumicBees.java index 79573ab..3201716 100644 --- a/thaumicbees_src/thaumicbees/main/ThaumicBees.java +++ b/thaumicbees_src/thaumicbees/main/ThaumicBees.java @@ -70,6 +70,7 @@ public class ThaumicBees } this.modConfig.setupBlocks(); + this.modConfig.registerTileEntities(); this.modConfig.setupItems(); CompatabilityManager.setupBackpacks(); diff --git a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java index 235dd42..4a5a935 100644 --- a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java @@ -37,6 +37,19 @@ import net.minecraftforge.liquids.LiquidStack; public class CraftingManager { public static void setupCrafting() + { + // Broken up into seperate sections to make things a bit easier to find. + setupVanillaCrafting(); + setupCentrifugeRecipes(); + setupSqueezerRecipes(); + setupCarpenterRecipes(); + setupThaumcraftInfusions(); + + registerLiquidContainer(Config.magicCapsule); + registerLiquidContainer(Config.voidCapsule); + } + + private static void setupVanillaCrafting() { ItemStack input; ItemStack output; @@ -134,7 +147,10 @@ public class CraftingManager }); } } - + } + + private static void setupCentrifugeRecipes() + { // 20 is the 'average' time to centrifuge a comb. RecipeManagers.centrifugeManager.addRecipe(20, Config.combs.getStackForType(CombType.OCCULT), new ItemStack[] {Config.wax.getStackForType(WaxType.MAGIC), ItemInterface.getItem("honeyDrop") }, @@ -188,7 +204,10 @@ public class CraftingManager RecipeManagers.centrifugeManager.addRecipe(8, Config.propolis.getStackForType(PropolisType.INFUSED), new ItemStack[] {new ItemStack(Config.tcShard, 1, ThaumcraftHelper.ShardType.MAGIC.ordinal())}, new int[] { 10 }); - + } + + private static void setupSqueezerRecipes() + { // Squeezer recipes RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] {Config.propolis.getStackForType(PropolisType.FIRE) }, new LiquidStack(Block.lavaStill, 250), @@ -196,7 +215,13 @@ public class CraftingManager RecipeManagers.squeezerManager.addRecipe(20, new ItemStack[] {Config.propolis.getStackForType(PropolisType.WATER) }, new LiquidStack(Block.waterStill, 500), new ItemStack(Config.tcShard, 1, ThaumcraftHelper.ShardType.WATER.ordinal()), 18); + } + private static void setupCarpenterRecipes() + { + ItemStack input; + ItemStack output; + // Carpenter recipes input = ItemInterface.getItem("craftingMaterial"); input.setItemDamage(3); // Set to Silk Mesh @@ -241,34 +266,37 @@ public class CraftingManager 'D', Config.drops.getStackForType(DropType.ENCHANTED) }); - output = new ItemStack(Config.planksWood, 6, 0); + output = new ItemStack(Config.planksWood, 4, 0); RecipeManagers.carpenterManager.addRecipe(8, new LiquidStack(Block.waterStill, 500), null, output, new Object[] { "B", 'B', new ItemStack(Config.tcLog, 1, 0) }); - output = new ItemStack(Config.planksWood, 8, 1); + output = new ItemStack(Config.planksWood, 6, 1); RecipeManagers.carpenterManager.addRecipe(8, new LiquidStack(Block.waterStill, 500), null, output, new Object[] { "B", 'B', new ItemStack(Config.tcLog, 1, 1) }); - - // Make Aromatic Lumps a swarmer inducer. Chance is /1000. - BeeManager.inducers.put(output, 80); + } + + private static void setupThaumcraftInfusions() + { + ItemStack input; + ItemStack output; output = Config.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); - ItemStack inputA = ItemInterface.getItem("apatite"); + input = ItemInterface.getItem("apatite"); ObjectTags tags = (new ObjectTags()).add(EnumTag.CROP, 12); output.stackSize = 2; ThaumcraftApi.addShapelessInfusionCraftingRecipe("FERTILIZER", "FERTILIZER", 5, tags, output, new Object[] { - inputA + input }); output = new ItemStack(Config.hiveFrameMagic); - inputA = ItemInterface.getItem("frameUntreated"); + input = ItemInterface.getItem("frameUntreated"); tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8); ThaumcraftApi.addShapelessInfusionCraftingRecipe("HIVEFRAME", "FRAMEMAGIC", 50, tags, output, new Object[] { - inputA + input }); output = new ItemStack(Config.hiveFrameResilient); @@ -283,7 +311,7 @@ public class CraftingManager tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.HEAL, 12); ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAMEGENTLE", "FRAMEGENTLE", 50, tags, output, new Object[] { "www", "wFw", "www", - 'F', inputA, + 'F', input, 'w', ItemInterface.getItem("beeswax") }); @@ -293,7 +321,7 @@ public class CraftingManager .add(EnumTag.EXCHANGE, 8); ThaumcraftApi.addShapelessInfusionCraftingRecipe("HIVEFRAMEMETA", "FRAMEMETABOLIC", 50, tags, output, new Object[] { Item.magmaCream, - inputA + input }); output = new ItemStack(Config.hiveFrameNecrotic); @@ -302,7 +330,7 @@ public class CraftingManager ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAMENECRO", "FRAMENECROTIC", 50, tags, output, new Object[] { " S ", "SxS", " S ", 'S', Item.rottenFlesh, - 'x', inputA + 'x', input }); output = new ItemStack(Config.hiveFrameTemporal); @@ -311,7 +339,7 @@ public class CraftingManager "tSt", "SFS", "tSt", 't', Item.stick, 'S', Block.sand, - 'F', inputA + 'F', input }); output = Config.voidCapsule.getCapsuleForLiquid(LiquidType.EMPTY); @@ -368,9 +396,6 @@ public class CraftingManager ShapelessBeeInfusionCraftingRecipe.createNewRecipe(researchKey, "BEEINFUSION0", BeeSpecies.INFUSED.getBeeItem(EnumBeeType.PRINCESS), new Object[] { princess, new ItemStack(Config.tcShard, 1, ThaumcraftHelper.ShardType.MAGIC.ordinal()) }, 100, tags, BeeSpecies.STARK, EnumBeeChromosome.SPECIES); - - registerLiquidContainer(Config.magicCapsule); - registerLiquidContainer(Config.voidCapsule); } private static void registerLiquidContainer(ItemCapsule baseCapsule) diff --git a/thaumicbees_src/thaumicbees/main/utils/compat/ForestryHelper.java b/thaumicbees_src/thaumicbees/main/utils/compat/ForestryHelper.java index ad885bd..94d3617 100644 --- a/thaumicbees_src/thaumicbees/main/utils/compat/ForestryHelper.java +++ b/thaumicbees_src/thaumicbees/main/utils/compat/ForestryHelper.java @@ -1,6 +1,8 @@ package thaumicbees.main.utils.compat; import net.minecraft.item.Item; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; import forestry.api.core.ItemInterface; import thaumicbees.main.Config; @@ -92,4 +94,44 @@ public class ForestryHelper LAPIS, ; } + + public static EnumTemperature getEnumTemperatureFromValue(float rawTemp) + { + EnumTemperature value = EnumTemperature.ICY; + + if (rawTemp >= 2.0f) + { + value = EnumTemperature.HOT; + } + else if (rawTemp >= 1.2f) + { + value = EnumTemperature.WARM; + } + else if (rawTemp >= 0.2f) + { + value = EnumTemperature.NORMAL; + } + else if (rawTemp >= 0.05f) + { + value = EnumTemperature.COLD; + } + + return value; + } + + public static EnumHumidity getEnumHumidityFromValue(float rawHumidity) + { + EnumHumidity value = EnumHumidity.ARID; + + if (rawHumidity >= 0.9f) + { + value = EnumHumidity.DAMP; + } + else if (rawHumidity >= 0.3f) + { + value = EnumHumidity.NORMAL; + } + + return value; + } } From 92ace4e9a3a93a9ea1175311cedb777ea9b611e0 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Wed, 27 Feb 2013 17:49:32 -0800 Subject: [PATCH 09/19] Scoop work. --- .../thaumicbees/item/ItemReinforcedScoop.java | 46 +++++++++++++++++++ thaumicbees_src/thaumicbees/main/Config.java | 5 ++ 2 files changed, 51 insertions(+) create mode 100644 thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java diff --git a/thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java b/thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java new file mode 100644 index 0000000..a331ecd --- /dev/null +++ b/thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java @@ -0,0 +1,46 @@ +package thaumicbees.item; + +import thaumcraft.api.IVisRepairable; +import thaumcraft.api.ThaumcraftApi; +import thaumicbees.main.CommonProxy; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.ForgeHooks; + +public class ItemReinforcedScoop extends Item implements IVisRepairable +{ + public ItemReinforcedScoop(int itemID) + { + super(itemID); + this.setMaxStackSize(1); + this.setMaxDamage(20); + this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + } + + @Override + public float getStrVsBlock(ItemStack itemStack, Block block) + { + return 1f; + } + + @Override + public float getStrVsBlock(ItemStack itemStack, Block block, int metadata) + { + return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4f : getStrVsBlock(itemStack, block); + } + + @Override + public void doRepair(ItemStack stack, Entity e) + { + if (stack.getItemDamage() > 0) + { + if (ThaumcraftApi.decreaseClosestAura(e.worldObj, e.posX, e.posY, e.posZ, 1, true)) + { + stack.damageItem(-1, (EntityLiving)e); + } + } + } +} diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index 8b9f048..6c7f006 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -12,6 +12,7 @@ import thaumicbees.item.ItemMagicHiveFrame; import thaumicbees.item.ItemMiscResources; import thaumicbees.item.ItemPollen; import thaumicbees.item.ItemPropolis; +import thaumicbees.item.ItemReinforcedScoop; import thaumicbees.item.ItemSolidFlux; import thaumicbees.item.ItemWax; import thaumicbees.item.types.CapsuleType; @@ -37,6 +38,7 @@ import net.minecraft.item.ItemSlab; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraftforge.common.Configuration; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.Property; import net.minecraftforge.oredict.OreDictionary; @@ -66,6 +68,7 @@ public class Config public static ItemSolidFlux solidFlux; public static ItemMiscResources miscResources; public static ItemFood jellyBaby; + public static ItemReinforcedScoop thaumiumScoop; //----- Liquid Capsules -------------------- public static ItemCapsule magicCapsule; @@ -225,6 +228,8 @@ public class Config .setPotionEffect(Potion.moveSpeed.id, 5, 1, 1f); jellyBaby.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE).setIconIndex(19).setItemName("jellyBabies"); + thaumiumScoop = new ItemReinforcedScoop(tbConfig.getItem("reinforcedScoop", itemIDBase++).getInt()); + MinecraftForge.setToolClass(thaumiumScoop, "scoop", 3); } private void doMiscConfig() From 29069e7e9ff76d5f3f83114e095b8b4c0cce2804 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Sun, 3 Mar 2013 23:50:29 -0800 Subject: [PATCH 10/19] Grafter & Scoop~! --- .../gfx/thaumicbees/items/items.png | Bin 68602 -> 65999 bytes thaumicbees_res/lang/thaumicbees/en_US.xml | 1 + .../research/thaumicbees/research.xml | 20 ++++ .../thaumicbees/item/ItemReinforcedScoop.java | 46 --------- .../thaumicbees/item/ItemThaumiumGrafter.java | 89 ++++++++++++++++++ .../thaumicbees/item/ItemThaumiumScoop.java | 81 ++++++++++++++++ thaumicbees_src/thaumicbees/main/Config.java | 10 +- .../main/utils/CompatabilityManager.java | 12 ++- .../main/utils/CraftingManager.java | 19 +++- .../main/utils/compat/ThaumcraftHelper.java | 7 ++ 10 files changed, 232 insertions(+), 53 deletions(-) delete mode 100644 thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java create mode 100644 thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java create mode 100644 thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java diff --git a/thaumicbees_res/gfx/thaumicbees/items/items.png b/thaumicbees_res/gfx/thaumicbees/items/items.png index c27b57898312b32fe706966443f5ffb717284980..796cd17513b0108b5677074fa28238fd9e2a17c9 100644 GIT binary patch delta 33045 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

  • 24}i3;;69-zwMHtzRS;xk-8r3X(jBI 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 YnJIGk5ge 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 LOm9@^J3aqjh!l}d delta 35662 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 Pe-H2J-Yvdu`R0EBnE;zr diff --git a/thaumicbees_res/lang/thaumicbees/en_US.xml b/thaumicbees_res/lang/thaumicbees/en_US.xml index 85f4f1a..f9435ca 100644 --- a/thaumicbees_res/lang/thaumicbees/en_US.xml +++ b/thaumicbees_res/lang/thaumicbees/en_US.xml @@ -3,6 +3,7 @@ Handful of Jelly Babies + Thaumium Scoop Greatwood Planks diff --git a/thaumicbees_res/research/thaumicbees/research.xml b/thaumicbees_res/research/thaumicbees/research.xml index 7ff6d57..c740b7e 100644 --- a/thaumicbees_res/research/thaumicbees/research.xml +++ b/thaumicbees_res/research/thaumicbees/research.xml @@ -113,4 +113,24 @@ Like other capsules, they are fragile and are typically single-use. They have pr VOIDCAPSULE + +Thaumium Scoop +Stronger, Faster, Bee-tter +It is possible to improve the durability of the scoop by creating them out of sterner materials. While you're at it, it may be helpful to enable them to be enchanted with restorative magics. +This improved scoop is more durable than the plain one your non-magical beekeeping friends are liable to use. It is good for three times as long as the average scoop at the cost of using some thaumium instead. + +Because the thaumium present in its construction, it is possible to enchant the scoop with a Repairing spell in the usual manner. +THAUMIUMSCOOP + + + +Thaumium Grafter +The Treesnipper +This improved grafter is more durable than the plain one your non-magical arborist acquaintances tend to use in their exploits. It should be possible to allow them to be enchanted with repairing magic to make them last indefinitely. +Adding Thaumium to your grafter design has increased its durability significantly - up to two times longer than regular grafters. + +It is also possible to enchant them with the Repair enchant, given sufficient experience. +THAUMIUMGRAFTER + + \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java b/thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java deleted file mode 100644 index a331ecd..0000000 --- a/thaumicbees_src/thaumicbees/item/ItemReinforcedScoop.java +++ /dev/null @@ -1,46 +0,0 @@ -package thaumicbees.item; - -import thaumcraft.api.IVisRepairable; -import thaumcraft.api.ThaumcraftApi; -import thaumicbees.main.CommonProxy; -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.ForgeHooks; - -public class ItemReinforcedScoop extends Item implements IVisRepairable -{ - public ItemReinforcedScoop(int itemID) - { - super(itemID); - this.setMaxStackSize(1); - this.setMaxDamage(20); - this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); - } - - @Override - public float getStrVsBlock(ItemStack itemStack, Block block) - { - return 1f; - } - - @Override - public float getStrVsBlock(ItemStack itemStack, Block block, int metadata) - { - return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4f : getStrVsBlock(itemStack, block); - } - - @Override - public void doRepair(ItemStack stack, Entity e) - { - if (stack.getItemDamage() > 0) - { - if (ThaumcraftApi.decreaseClosestAura(e.worldObj, e.posX, e.posY, e.posZ, 1, true)) - { - stack.damageItem(-1, (EntityLiving)e); - } - } - } -} diff --git a/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java new file mode 100644 index 0000000..875e8e9 --- /dev/null +++ b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java @@ -0,0 +1,89 @@ +package thaumicbees.item; + +import thaumcraft.api.IVisRepairable; +import thaumcraft.api.ThaumcraftApi; +import thaumicbees.main.CommonProxy; +import thaumicbees.main.Config; +import thaumicbees.main.utils.compat.ThaumcraftHelper; +import forestry.api.arboriculture.IToolGrafter; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; + +public class ItemThaumiumGrafter extends Item implements IVisRepairable, IToolGrafter +{ + + public ItemThaumiumGrafter(int id) + { + super(id); + this.setCreativeTab(forestry.api.core.Tabs.tabArboriculture); + this.setMaxDamage(25); + this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + this.setIconIndex(21); + this.setItemName("tb.thaumiumGrafter"); + } + + @Override + public float getSaplingModifier(ItemStack stack, World world, int x, int y, int z) + { + return 100f; + } + + @Override + public float getStrVsBlock(ItemStack itemStack, Block block) + { + return 1f; + } + + @Override + public float getStrVsBlock(ItemStack itemStack, Block block, int metadata) + { + return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4f : getStrVsBlock(itemStack, block); + } + + @Override + public boolean onBlockDestroyed(ItemStack itemstack, World world, int id, int x, int y, int z, EntityLiving entityliving) { + itemstack.damageItem(1, entityliving); + return true; + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return ThaumcraftApi.toolMatThaumium.getEnchantability(); + } + + /** + * Return the name for this tool's material. + */ + public String getToolMaterialName() + { + return ThaumcraftApi.toolMatThaumium.toString(); + } + + /** + * Return whether this item is repairable in an anvil. + */ + public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) + { + return ThaumcraftApi.toolMatThaumium.getToolCraftingMaterial() == par2ItemStack.itemID ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); + } + + @Override + public void doRepair(ItemStack stack, Entity e) + { + if (stack.getItemDamage() > 0) + { + if (ThaumcraftApi.decreaseClosestAura(e.worldObj, e.posX, e.posY, e.posZ, 1, true)) + { + stack.damageItem(-1, (EntityLiving)e); + } + } + } +} diff --git a/thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java b/thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java new file mode 100644 index 0000000..8a47140 --- /dev/null +++ b/thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java @@ -0,0 +1,81 @@ +package thaumicbees.item; + +import thaumcraft.api.IVisRepairable; +import thaumcraft.api.ThaumcraftApi; +import thaumicbees.main.CommonProxy; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; + +public class ItemThaumiumScoop extends Item implements IVisRepairable +{ + public ItemThaumiumScoop(int itemID) + { + super(itemID); + this.setMaxStackSize(1); + this.setMaxDamage(30); + this.setIconIndex(20); + this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); + this.setItemName("tb.thaumiumScoop"); + this.setCreativeTab(forestry.api.core.Tabs.tabApiculture); + } + + @Override + public float getStrVsBlock(ItemStack itemStack, Block block) + { + return 1f; + } + + @Override + public float getStrVsBlock(ItemStack itemStack, Block block, int metadata) + { + return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4f : getStrVsBlock(itemStack, block); + } + + @Override + public boolean onBlockDestroyed(ItemStack itemstack, World world, int i, int j, int k, int l, EntityLiving entityliving) { + itemstack.damageItem(1, entityliving); + return true; + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return ThaumcraftApi.toolMatThaumium.getEnchantability(); + } + + /** + * Return the name for this tool's material. + */ + public String getToolMaterialName() + { + return ThaumcraftApi.toolMatThaumium.toString(); + } + + /** + * Return whether this item is repairable in an anvil. + */ + public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) + { + return ThaumcraftApi.toolMatThaumium.getToolCraftingMaterial() == par2ItemStack.itemID ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); + } + + @Override + public void doRepair(ItemStack stack, Entity e) + { + if (stack.getItemDamage() > 0) + { + if (ThaumcraftApi.decreaseClosestAura(e.worldObj, e.posX, e.posY, e.posZ, 1, true)) + { + stack.damageItem(-1, (EntityLiving)e); + } + } + } +} diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index c8dcc2b..d6e786a 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -13,7 +13,8 @@ import thaumicbees.item.ItemMagicHiveFrame; import thaumicbees.item.ItemMiscResources; import thaumicbees.item.ItemPollen; import thaumicbees.item.ItemPropolis; -import thaumicbees.item.ItemReinforcedScoop; +import thaumicbees.item.ItemThaumiumGrafter; +import thaumicbees.item.ItemThaumiumScoop; import thaumicbees.item.ItemSolidFlux; import thaumicbees.item.ItemWax; import thaumicbees.item.types.CapsuleType; @@ -73,7 +74,8 @@ public class Config public static ItemSolidFlux solidFlux; public static ItemMiscResources miscResources; public static ItemFood jellyBaby; - public static ItemReinforcedScoop thaumiumScoop; + public static ItemThaumiumScoop thaumiumScoop; + public static ItemThaumiumGrafter thaumiumGrafter; //----- Liquid Capsules -------------------- public static ItemCapsule magicCapsule; @@ -244,8 +246,10 @@ public class Config voidCapsule = new ItemCapsule(CapsuleType.VOID, tbConfig.getItem("voidCapsule", itemIDBase++).getInt(), this.capsuleStackSizeMax); - thaumiumScoop = new ItemReinforcedScoop(tbConfig.getItem("reinforcedScoop", itemIDBase++).getInt()); + thaumiumScoop = new ItemThaumiumScoop(tbConfig.getItem("thaumiumScoop", itemIDBase++).getInt()); MinecraftForge.setToolClass(thaumiumScoop, "scoop", 3); + + thaumiumGrafter = new ItemThaumiumGrafter(tbConfig.getItem("thaumiumGrafter", itemIDBase++).getInt()); } private void doMiscConfig() diff --git a/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java index 8915515..1188f5d 100644 --- a/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java @@ -415,7 +415,7 @@ public class CompatabilityManager ObjectTags tags; tags = new ObjectTags().add(EnumTag.WOOD, 10).add(EnumTag.PLANT, 10).add(EnumTag.INSECT, 10); - ResearchItem startNode = new ResearchItem("TBSTARTNODE", tags, 10, 0, Config.miscResources.getStackForType(ResourceType.RESEARCH_StartNode)) + ResearchItem startNode = new ResearchItem("TBSTARTNODE", tags, 10, 1, Config.miscResources.getStackForType(ResourceType.RESEARCH_StartNode)) .setParents(ResearchList.getResearch("UTFT")) .registerResearchItem(); @@ -474,6 +474,16 @@ public class CompatabilityManager ResearchItem voidCapsule = new ResearchItem("VOIDCAPSULE", tags, 10, 9, Config.voidCapsule) .setParents(startNode, ResearchList.getResearch("PORTABLEHOLE")).setHidden() .registerResearchItem(); + + tags = new ObjectTags().add(EnumTag.WOOD, 8).add(EnumTag.INSECT, 10).add(EnumTag.TOOL, 6).add(EnumTag.MAGIC, 6); + ResearchItem scoop = new ResearchItem("THAUMIUMSCOOP", tags, 0, -3, Config.thaumiumScoop) + .setParents(ResearchList.getResearch("THAUMIUM")) + .registerResearchItem(); + + tags = new ObjectTags().add(EnumTag.WOOD, 16).add(EnumTag.PLANT, 20).add(EnumTag.TOOL, 6).add(EnumTag.MAGIC, 6); + ResearchItem grafter = new ResearchItem("THAUMIUMGRAFTER", tags, 0, -4, Config.thaumiumGrafter) + .setParents(scoop) + .registerResearchItem(); } public static void registerResearch() diff --git a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java index 4a5a935..c1d11b7 100644 --- a/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CraftingManager.java @@ -43,7 +43,7 @@ public class CraftingManager setupCentrifugeRecipes(); setupSqueezerRecipes(); setupCarpenterRecipes(); - setupThaumcraftInfusions(); + setupThaumcraftCrafting(); registerLiquidContainer(Config.magicCapsule); registerLiquidContainer(Config.voidCapsule); @@ -279,11 +279,24 @@ public class CraftingManager }); } - private static void setupThaumcraftInfusions() + private static void setupThaumcraftCrafting() { ItemStack input; ItemStack output; + ThaumcraftApi.addArcaneCraftingRecipe("THAUMIUMSCOOP", "THAUMIUMSCOOP", 45, new ItemStack(Config.thaumiumScoop), new Object[] { + "sWs", "sTs", " T ", + 's', Item.stick, + 'W', Block.cloth, + 'T', new ItemStack(Config.tcMiscResource, 1, ThaumcraftHelper.MiscResource.THAUMIUM.ordinal()) + }); + + ThaumcraftApi.addArcaneCraftingRecipe("THAUMIUMGRAFTER", "THAUMIUMGRAFTER", 160, new ItemStack(Config.thaumiumGrafter), new Object[] { + " T", " T ", "s ", + 's', Item.stick, + 'T', new ItemStack(Config.tcMiscResource, 1, ThaumcraftHelper.MiscResource.THAUMIUM.ordinal()) + }); + output = Config.miscResources.getStackForType(ResourceType.EXTENDED_FERTILIZER); input = ItemInterface.getItem("apatite"); ObjectTags tags = (new ObjectTags()).add(EnumTag.CROP, 12); @@ -326,7 +339,7 @@ public class CraftingManager output = new ItemStack(Config.hiveFrameNecrotic); tags = new ObjectTags().add(EnumTag.WOOD, 4).add(EnumTag.INSECT, 8).add(EnumTag.EXCHANGE, 12).add(EnumTag.DEATH, 16) - .add(EnumTag.POISON, 4); + .add(EnumTag.POISON, 1); ThaumcraftApi.addInfusionCraftingRecipe("HIVEFRAMENECRO", "FRAMENECROTIC", 50, tags, output, new Object[] { " S ", "SxS", " S ", 'S', Item.rottenFlesh, diff --git a/thaumicbees_src/thaumicbees/main/utils/compat/ThaumcraftHelper.java b/thaumicbees_src/thaumicbees/main/utils/compat/ThaumcraftHelper.java index b309be9..f0c6da9 100644 --- a/thaumicbees_src/thaumicbees/main/utils/compat/ThaumcraftHelper.java +++ b/thaumicbees_src/thaumicbees/main/utils/compat/ThaumcraftHelper.java @@ -107,4 +107,11 @@ public class ThaumcraftHelper SHIMMERLEAF, CINDERPEARL; } + + public enum TreeType + { + GREATWOOD, + SILVERWOOD, + ; + } } From 85a2723ef8109a4300cb6f79d65744ad014ec8b2 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Mon, 4 Mar 2013 13:02:15 -0800 Subject: [PATCH 11/19] Checkin before moving Apiary stuff to branch. --- thaumicbees_res/build.xml | 2 +- thaumicbees_res/lang/thaumicbees/en_US.xml | 1 + thaumicbees_res/research/thaumicbees/research.xml | 2 +- thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java | 2 +- thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java | 2 +- thaumicbees_src/thaumicbees/main/Config.java | 4 ++-- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/thaumicbees_res/build.xml b/thaumicbees_res/build.xml index e2860a1..2689bc4 100644 --- a/thaumicbees_res/build.xml +++ b/thaumicbees_res/build.xml @@ -17,7 +17,7 @@ - + diff --git a/thaumicbees_res/lang/thaumicbees/en_US.xml b/thaumicbees_res/lang/thaumicbees/en_US.xml index f9435ca..8287645 100644 --- a/thaumicbees_res/lang/thaumicbees/en_US.xml +++ b/thaumicbees_res/lang/thaumicbees/en_US.xml @@ -4,6 +4,7 @@ Handful of Jelly Babies Thaumium Scoop + Thaumium Grafter Greatwood Planks diff --git a/thaumicbees_res/research/thaumicbees/research.xml b/thaumicbees_res/research/thaumicbees/research.xml index c740b7e..6f58a9c 100644 --- a/thaumicbees_res/research/thaumicbees/research.xml +++ b/thaumicbees_res/research/thaumicbees/research.xml @@ -115,7 +115,7 @@ Like other capsules, they are fragile and are typically single-use. They have pr Thaumium Scoop -Stronger, Faster, Bee-tter +Stronger, Faster, Bee-ter It is possible to improve the durability of the scoop by creating them out of sterner materials. While you're at it, it may be helpful to enable them to be enchanted with restorative magics. This improved scoop is more durable than the plain one your non-magical beekeeping friends are liable to use. It is good for three times as long as the average scoop at the cost of using some thaumium instead. diff --git a/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java index 875e8e9..5da5ebb 100644 --- a/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java +++ b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java @@ -42,7 +42,7 @@ public class ItemThaumiumGrafter extends Item implements IVisRepairable, IToolGr @Override public float getStrVsBlock(ItemStack itemStack, Block block, int metadata) { - return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4f : getStrVsBlock(itemStack, block); + return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4.8f : getStrVsBlock(itemStack, block); } @Override diff --git a/thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java b/thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java index 8a47140..b4e278c 100644 --- a/thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java +++ b/thaumicbees_src/thaumicbees/item/ItemThaumiumScoop.java @@ -34,7 +34,7 @@ public class ItemThaumiumScoop extends Item implements IVisRepairable @Override public float getStrVsBlock(ItemStack itemStack, Block block, int metadata) { - return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4f : getStrVsBlock(itemStack, block); + return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4.8f : getStrVsBlock(itemStack, block); } @Override diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index d6e786a..489c7bc 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -163,8 +163,8 @@ public class Config blockIdBase++; // Stair - magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase++).getInt()); - GameRegistry.registerBlock(magicApiary, "tb.magicApiary"); + /*magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase++).getInt()); + GameRegistry.registerBlock(magicApiary, "tb.magicApiary");*/ } public void registerTileEntities() From d3e93188c01d344f11ba60be3867046044e83cba Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Mon, 4 Mar 2013 13:09:50 -0800 Subject: [PATCH 12/19] Edits to build.xml & mod info. --- thaumicbees_res/build.xml | 13 ++++++------- thaumicbees_res/mcmod.info | 1 + 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/thaumicbees_res/build.xml b/thaumicbees_res/build.xml index 2689bc4..cec0927 100644 --- a/thaumicbees_res/build.xml +++ b/thaumicbees_res/build.xml @@ -74,15 +74,19 @@ + - + + + + @@ -120,6 +124,7 @@ + @@ -134,12 +139,6 @@ - - diff --git a/thaumicbees_res/mcmod.info b/thaumicbees_res/mcmod.info index c7f4d96..c22ecf5 100644 --- a/thaumicbees_res/mcmod.info +++ b/thaumicbees_res/mcmod.info @@ -1,6 +1,7 @@ [ { "modid": "ThaumicBees", + "version": @MODVERSION@ "name": "ThaumicBees", "url": "http://bit.ly/XFDvLY", "description": "Crossover mod for Forestry and Thaumcraft. Magic bees & more.", From f21bd467c24ec069ea77718c531ad6b6b1002eb0 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Mon, 4 Mar 2013 13:10:21 -0800 Subject: [PATCH 13/19] Uncommenting blocks in Config. --- thaumicbees_src/thaumicbees/main/Config.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index 489c7bc..d6e786a 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -163,8 +163,8 @@ public class Config blockIdBase++; // Stair - /*magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase++).getInt()); - GameRegistry.registerBlock(magicApiary, "tb.magicApiary");*/ + magicApiary = new BlockMagicApiary(tbConfig.getBlock("magicApiary", blockIdBase++).getInt()); + GameRegistry.registerBlock(magicApiary, "tb.magicApiary"); } public void registerTileEntities() From 8aaa24c3c18903051c9e94fa38b32de16651dbba Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Mon, 4 Mar 2013 14:08:42 -0800 Subject: [PATCH 14/19] Adding new keys. --- lang/en_US.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lang/en_US.xml b/lang/en_US.xml index e6098d0..31bec94 100644 --- a/lang/en_US.xml +++ b/lang/en_US.xml @@ -3,8 +3,14 @@ Handful of Jelly Babies + Thaumium Scoop + Thaumium Grafter + Greatwood Planks + Greatwood Slab + Silverwood Planks + Silverwood Slab Occult Comb @@ -28,6 +34,7 @@ Unusual Pollen + Phased Pollen Dull Propolis @@ -53,6 +60,7 @@ Magic Capsule + Void Capsule Empty @@ -165,25 +173,18 @@ Arcane - Arcanus Supernatural - Coeleste Scholarly - Docto Thaumic - Thaumis Skulking - Malevolens Vis - Patabilis Time - Sempiternus From 2c2306b2236c972e87ba2a598ba4e4905fdb5b6e Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 5 Mar 2013 00:57:31 -0800 Subject: [PATCH 15/19] Adding aspects for Extra Bees items Adding support for remote version checking! Wahoo! --- thaumicbees_res/build.xml | 16 +- thaumicbees_res/changelog.txt | 5 +- thaumicbees_res/mcmod.info | 4 +- .../thaumicbees/item/ItemThaumiumGrafter.java | 2 +- thaumicbees_src/thaumicbees/main/Config.java | 5 + .../thaumicbees/main/ThaumicBees.java | 2 + .../main/utils/CompatabilityManager.java | 44 +++- .../main/utils/TickHandlerVersion.java | 102 ++++++++ .../thaumicbees/main/utils/VersionInfo.java | 238 +++++++++++++++++- .../main/utils/compat/ExtraBeesHelper.java | 91 +++++++ 10 files changed, 490 insertions(+), 19 deletions(-) create mode 100644 thaumicbees_src/thaumicbees/main/utils/TickHandlerVersion.java create mode 100644 thaumicbees_src/thaumicbees/main/utils/compat/ExtraBeesHelper.java diff --git a/thaumicbees_res/build.xml b/thaumicbees_res/build.xml index cec0927..d733f7e 100644 --- a/thaumicbees_res/build.xml +++ b/thaumicbees_res/build.xml @@ -74,7 +74,7 @@ - + @@ -84,9 +84,6 @@ - - - @@ -124,7 +121,7 @@ - + @@ -139,6 +136,15 @@ + + + + + + + + + diff --git a/thaumicbees_res/changelog.txt b/thaumicbees_res/changelog.txt index b4022ef..99f0a2b 100644 --- a/thaumicbees_res/changelog.txt +++ b/thaumicbees_res/changelog.txt @@ -1,6 +1,8 @@ 1.4.2 -Added Void Capsules - hold up to 8 buckets of liquid with one! It's a waterproof bag of holding! +Added Void Capsules - hold up to 8 buckets of liquid with one! It's a waterproof bag of holding! Plus stacking. Fix: Added Greatwood & Silverwood slabs to the ore dictionary so they should work as normal. +Added Thaumium Scoop - 30 uses, can be enchanted with Repair. +Added Thaumium Grafter - 15 uses, can be enchanted with Repair. 1.4.1 Added Greatwood and Silverwood planks. Since Greatwood and Silverwood are tougher than other trees, you'll need some extra machinery. To obtain these, jam a log of the appropriate tree into a Forestry carpenter and provide a half bucket of water. @@ -15,6 +17,7 @@ Thaumaturge's Backpack now require Amber rather than Gold Nuggets. Due to popular complaint, the Bees & Magic node now requires Unified Thaumic Field Theory to unlock. Moving all kinds of string contstants out of code into Localization files. Also fixed crazy aspects showing up on things that shouldn't have those aspects. +ACTUALLY fixed issue with untyped node mutations failing. 1.3.0d Fixed an issue with mutations requiring a non-specific type of node to fail. diff --git a/thaumicbees_res/mcmod.info b/thaumicbees_res/mcmod.info index c22ecf5..e3d6385 100644 --- a/thaumicbees_res/mcmod.info +++ b/thaumicbees_res/mcmod.info @@ -1,12 +1,12 @@ [ { "modid": "ThaumicBees", - "version": @MODVERSION@ + "version": "@MODVERSION@", "name": "ThaumicBees", "url": "http://bit.ly/XFDvLY", "description": "Crossover mod for Forestry and Thaumcraft. Magic bees & more.", "authors": [ "MysteriousAges" ], - "credits": "Thanks to Sengir and Azanor for awesome mods! Also thanks to Binnie and Florastar. (:", + "credits": "SirSengir, Azanor, Binnie & the Forestry Dev peeps", "logoFile": "/gfx/thaumicbees/logo.png" } ] \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java index 5da5ebb..a3291bb 100644 --- a/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java +++ b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java @@ -21,7 +21,7 @@ public class ItemThaumiumGrafter extends Item implements IVisRepairable, IToolGr { super(id); this.setCreativeTab(forestry.api.core.Tabs.tabArboriculture); - this.setMaxDamage(25); + this.setMaxDamage(15); this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); this.setIconIndex(21); this.setItemName("tb.thaumiumGrafter"); diff --git a/thaumicbees_src/thaumicbees/main/Config.java b/thaumicbees_src/thaumicbees/main/Config.java index 10e2332..0f879b5 100644 --- a/thaumicbees_src/thaumicbees/main/Config.java +++ b/thaumicbees_src/thaumicbees/main/Config.java @@ -56,6 +56,7 @@ public class Config public boolean BeeInfusionsAdded; public boolean ExtraBeesInstalled; public boolean AddThaumcraftItemsToBackpacks; + public boolean SkipUpdateCheck; public String ThaumaturgeExtraItems; public int capsuleStackSizeMax; @@ -264,6 +265,10 @@ public class Config p.comment = "Allows you to edit the stack size of the capsules in ThaumicBees if using GregTech, \n" + "or the reduced capsule size in Forestry & Railcraft. Default: 64"; this.capsuleStackSizeMax = p.getInt(); + + p = tbConfig.get("general", "disableVersionCheck", false); + p.comment = "Set to true to stop ThaumicBees from checking for updates."; + this.SkipUpdateCheck = p.getBoolean(false); } } diff --git a/thaumicbees_src/thaumicbees/main/ThaumicBees.java b/thaumicbees_src/thaumicbees/main/ThaumicBees.java index 3201716..f0c0534 100644 --- a/thaumicbees_src/thaumicbees/main/ThaumicBees.java +++ b/thaumicbees_src/thaumicbees/main/ThaumicBees.java @@ -91,6 +91,8 @@ public class ThaumicBees MinecraftForge.EVENT_BUS.register(this); CompatabilityManager.setupResearch(); + + VersionInfo.doVersionCheck(); } public static Config getConfig() diff --git a/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java index 1188f5d..0100583 100644 --- a/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java +++ b/thaumicbees_src/thaumicbees/main/utils/CompatabilityManager.java @@ -24,6 +24,7 @@ import thaumicbees.item.types.WaxType; import thaumicbees.main.CommonProxy; import thaumicbees.main.Config; import thaumicbees.main.ThaumicBees; +import thaumicbees.main.utils.compat.ExtraBeesHelper; import thaumicbees.main.utils.compat.ForestryHelper; import thaumicbees.main.utils.compat.ThaumcraftHelper; import thaumicbees.main.utils.compat.ForestryHelper.CircuitBoard; @@ -51,6 +52,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.Property; import net.minecraftforge.common.Configuration; +import net.minecraftforge.oredict.OreDictionary; public class CompatabilityManager { @@ -158,17 +160,20 @@ public class CompatabilityManager tags = new ObjectTags().add(EnumTag.INSECT, 2).add(EnumTag.TRAP, 2); ThaumcraftApi.registerObjectTag(Config.combs.itemID, -1, tags); - - itemStack = Config.combs.getStackForType(CombType.OCCULT); - tags = new ObjectTags().add(EnumTag.INSECT, 2).add(EnumTag.TRAP, 2).add(EnumTag.MAGIC, 2); + tags = new ObjectTags(Config.combs.itemID, -1).add(EnumTag.MAGIC, 2); ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.OCCULT.ordinal(), tags); ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.OTHERWORLDLY.ordinal(), tags); ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.STARK.ordinal(), tags); - ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.AIRY.ordinal(), tags); - ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.FIREY.ordinal(), tags); - ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.WATERY.ordinal(), tags); - ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.EARTHY.ordinal(), tags); + tags = new ObjectTags(Config.combs.itemID, -1).add(EnumTag.MAGIC, 4); ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.INFUSED.ordinal(), tags); + tags = new ObjectTags(Config.combs.itemID, -1).add(EnumTag.MAGIC, 2).add(EnumTag.MOTION, 2); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.AIRY.ordinal(), tags); + tags = new ObjectTags(Config.combs.itemID, -1).add(EnumTag.MAGIC, 2).add(EnumTag.POWER, 2); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.FIREY.ordinal(), tags); + tags = new ObjectTags(Config.combs.itemID, -1).add(EnumTag.MAGIC, 2).add(EnumTag.COLD, 2); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.WATERY.ordinal(), tags); + tags = new ObjectTags(Config.combs.itemID, -1).add(EnumTag.MAGIC, 2).add(EnumTag.ROCK, 2); + ThaumcraftApi.registerObjectTag(Config.combs.itemID, CombType.EARTHY.ordinal(), tags); // Tagging capsules. tags = new ObjectTags().add(EnumTag.VOID, 2).add(EnumTag.MAGIC, 2); @@ -403,6 +408,31 @@ public class CompatabilityManager { ItemStack itemStack; ObjectTags tags; + + try // One try block suffices. If we can't get one item, it's probably safe to assume we can't get any others. + { + itemStack = getExtraBeeItem("comb"); + tags = new ObjectTags().add(EnumTag.INSECT, 2).add(EnumTag.TRAP, 2); + ThaumcraftApi.registerObjectTag(itemStack.itemID, -1, tags); + tags = new ObjectTags(itemStack.itemID, -1).add(EnumTag.POWER, 2); + ThaumcraftApi.registerObjectTag(itemStack.itemID, ExtraBeesHelper.CombType.OIL.ordinal(), tags); + ThaumcraftApi.registerObjectTag(itemStack.itemID, ExtraBeesHelper.CombType.COAL.ordinal(), tags); + ThaumcraftApi.registerObjectTag(itemStack.itemID, ExtraBeesHelper.CombType.FUEL.ordinal(), tags); + ThaumcraftApi.registerObjectTag(itemStack.itemID, ExtraBeesHelper.CombType.ALCOHOL.ordinal(), tags); + ThaumcraftApi.registerObjectTag(itemStack.itemID, ExtraBeesHelper.CombType.REDSTONE.ordinal(), tags); + ThaumcraftApi.registerObjectTag(itemStack.itemID, ExtraBeesHelper.CombType.URANIUM.ordinal(), tags); + tags = new ObjectTags(itemStack.itemID, -1).add(EnumTag.POISON, 2); + ThaumcraftApi.registerObjectTag(itemStack.itemID, ExtraBeesHelper.CombType.VENOMOUS.ordinal(), tags); + + itemStack = getExtraBeeItem("propolis"); + tags = new ObjectTags().add(EnumTag.CONTROL, 1); + ThaumcraftApi.registerObjectTag(itemStack.itemID, -1, tags); + + itemStack = getExtraBeeItem("honeyDrop"); + tags = new ObjectTags().add(EnumTag.EXCHANGE, 2).add(EnumTag.LIFE, 1); + ThaumcraftApi.registerObjectTag(itemStack.itemID, -1, tags); + } + catch (NullPointerException e) { } } private static void setupItemAspectsOreDict() diff --git a/thaumicbees_src/thaumicbees/main/utils/TickHandlerVersion.java b/thaumicbees_src/thaumicbees/main/utils/TickHandlerVersion.java new file mode 100644 index 0000000..e47ed25 --- /dev/null +++ b/thaumicbees_src/thaumicbees/main/utils/TickHandlerVersion.java @@ -0,0 +1,102 @@ +package thaumicbees.main.utils; + +import java.util.ArrayList; +import java.util.EnumSet; + +import net.minecraft.entity.player.EntityPlayer; +import cpw.mods.fml.common.IScheduledTickHandler; +import cpw.mods.fml.common.TickType; + +public class TickHandlerVersion implements IScheduledTickHandler +{ + + public static TickHandlerVersion instance = new TickHandlerVersion(); + + private static ArrayList modVersionInfo = new ArrayList(); + private static boolean initialized; + private static boolean sent; + private static int modIndex = 0; + + public static boolean initialize() + { + if (initialized) + { + return false; + } + initialized = true; + return true; + } + + public static boolean isInitialized() + { + return initialized; + } + + public static boolean registerModVersionInfo(VersionInfo info) + { + if (modVersionInfo.contains(info)) + { + return false; + } + modVersionInfo.add(info); + return true; + } + + @Override + public void tickStart(EnumSet type, Object... tickData) + { + if (sent) + { + return; + } + + if (modIndex < modVersionInfo.size()) + { + VersionInfo anInfo = modVersionInfo.get(modIndex); + + if (anInfo.isNewVersionAvailable()) + { + EntityPlayer player = (EntityPlayer) tickData[0]; + player.sendChatToPlayer("[" + anInfo.modName + "] A new version is available: " + anInfo.getLatestVersion()); + player.sendChatToPlayer(anInfo.getVersionDescription()); + } + modIndex += 1; + } + else + { + sent = true; + } + } + + @Override + public void tickEnd(EnumSet type, Object... tickData) + { + + } + + @Override + public EnumSet ticks() + { + if (TickHandlerVersion.sent) + { + return EnumSet.noneOf(TickType.class); + } + return EnumSet.of(TickType.PLAYER); + } + + @Override + public String getLabel() + { + return "thaumicbees.version"; + } + + @Override + public int nextTickSpacing() + { + if (!sent) + { + return 200; + } + return 72000; + } +} \ No newline at end of file diff --git a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java index a62062b..f837207 100644 --- a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java +++ b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java @@ -1,14 +1,246 @@ package thaumicbees.main.utils; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; + +import thaumicbees.main.ThaumicBees; + +import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.common.registry.TickRegistry; +import cpw.mods.fml.relauncher.Side; + +/** + * Using some of the VersionInfo code from cofh. (Thanks, Lemming!) + * @author MysteriousAges + * + */ public class VersionInfo { - public static final String Version = "@MODVERSION@"; + public static final String Version = "1.4.2a";//"@MODVERSION@"; public static final String MCVersion = "@MCVERSION@"; public static final String Build = "@BUILD_NUMBER@"; - + public static final String VersionURL = "http://bit.ly/thaumicbeeversion"; + public static final String Logo = "/gfx/thaumicbees/logo.png"; - + public static final String Depends = "required-after:Forestry;required-after:Thaumcraft@[3.0.3,);after:ExtraBees"; + boolean criticalUpdate; + boolean newVersion; + boolean newMinecraftVersion; + boolean versionCheckComplete; + + String latestModVersion; + String latestMCVersion = MCVersion; + String description = ""; + + String modName; + String modVersion; + String releaseURL; + Logger modLogger = FMLLog.getLogger(); + + public static int[] parseVersion(String rawVersion) + { + ArrayList versionTokens = new ArrayList(); + String[] tokens = rawVersion.trim().split("\\."); + + for (int i = 0; i < tokens.length; ++i) + { + if (tokens[i].matches("[0-9]+[a-z]")) + { + String numberString = tokens[i].substring(0, tokens[i].length()-1); + versionTokens.add(Integer.valueOf(numberString)); + versionTokens.add(Character.getNumericValue(tokens[i].charAt(tokens[i].length()-1))); + } + else + { + versionTokens.add(Integer.valueOf(tokens[i])); + } + } + + int[] value = new int[versionTokens.size()]; + for (int i = 0; i < value.length; ++i) + { + value[i] = versionTokens.get(i).intValue(); + } + return value; + } + + /* VERSION COMPARISON */ + public static boolean beforeTargetVersion(String version, String target) + { + boolean result = false; + int[] versionTokens = parseVersion(version); + int[] targetTokens = parseVersion(target); + + for (int i = 0; i < versionTokens.length; ++i) + { + if (versionTokens[i] < targetTokens[i]) + { + result = true; + break; + } + else if (versionTokens[i] > targetTokens[i]) + { + result = false; + break; + } + } + + return result; + } + + public static boolean afterTargetVersion(String version, String target) + { + boolean result = false; + int[] versionTokens = parseVersion(version); + int[] targetTokens = parseVersion(target); + + for (int i = 0; i < versionTokens.length; ++i) + { + if (versionTokens[i] > targetTokens[i]) + { + result = true; + break; + } + } + + return result; + } + + public VersionInfo(String name, String version, String url) + { + modName = name; + modVersion = latestModVersion = version; + releaseURL = url; + } + + public VersionInfo(String name, String version, String url, Logger logger) + { + modName = name; + modVersion = latestModVersion = version; + releaseURL = url; + modLogger = logger; + } + + public void checkForNewVersion() + { + Thread versionCheckThread = new VersionCheckThread(); + versionCheckThread.start(); + } + + public String getCurrentVersion() + { + return modVersion; + } + + public String getLatestVersion() + { + return latestModVersion; + } + + public String getLatestMCVersion() + { + return latestMCVersion; + } + + public String getVersionDescription() + { + return description; + } + + public boolean isCriticalUpdate() + { + return criticalUpdate; + } + + public boolean isNewVersionAvailable() + { + return newVersion; + } + + public boolean isMinecraftOutdated() + { + return newMinecraftVersion; + } + + public boolean isVersionCheckComplete() + { + return versionCheckComplete; + } + + /* VERSION CHECK THREAD CLASS */ + private class VersionCheckThread extends Thread + { + @Override + public void run() + { + + try + { + String location = VersionURL; + + HttpURLConnection connection = null; + + // Used to "dereference" any location headers we may get. + while (location != null && !location.isEmpty()) + { + URL url = new URL(location); + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestProperty("User-Agent", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17"); + connection.connect(); + location = connection.getHeaderField("Location"); + } + + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + latestModVersion = reader.readLine(); + criticalUpdate = Boolean.parseBoolean(reader.readLine()); + latestMCVersion = reader.readLine(); + description = reader.readLine(); + reader.close(); + + if (beforeTargetVersion(modVersion, latestModVersion)) + { + modLogger.log(Level.INFO, "An updated version of " + modName + " is available: " + latestModVersion + "."); + newVersion = true; + if (criticalUpdate) + { + modLogger.log(Level.INFO, "This update has been marked as CRITICAL and will ignore notification suppression."); + } + if (beforeTargetVersion(MCVersion, latestMCVersion)) + { + newMinecraftVersion = true; + modLogger.log(Level.INFO, "This update is for Minecraft " + latestMCVersion + "."); + } + } + + } + catch (Exception e) + { + modLogger.log(Level.WARNING, "Version Check Failed: " + e.getMessage()); + } + versionCheckComplete = true; + } + } + + public static void doVersionCheck() + { + if (!ThaumicBees.getConfig().SkipUpdateCheck) + { + VersionInfo main = new VersionInfo("ThaumicBees", Version, VersionURL); + TickHandlerVersion.registerModVersionInfo(main); + TickHandlerVersion.initialize(); + TickRegistry.registerScheduledTickHandler(TickHandlerVersion.instance, Side.CLIENT); + + VersionCheckThread thread = main.new VersionCheckThread(); + thread.start(); + } + } } diff --git a/thaumicbees_src/thaumicbees/main/utils/compat/ExtraBeesHelper.java b/thaumicbees_src/thaumicbees/main/utils/compat/ExtraBeesHelper.java new file mode 100644 index 0000000..3f7d220 --- /dev/null +++ b/thaumicbees_src/thaumicbees/main/utils/compat/ExtraBeesHelper.java @@ -0,0 +1,91 @@ +package thaumicbees.main.utils.compat; + +public class ExtraBeesHelper +{ + + public enum CombType + { + BARREN, + ROTTEN, + BONE, + OIL, + COAL, + FUEL, + WATER, + MILK, + FRUIT, + SEED, + ALCOHOL, + STONE, + REDSTONE, + RESIN, + IC2, + IRON, + GOLD, + COPPER, + TIN, + SILVER, + BRONZE, + URANIUM, + CLAY, + OLD, + FUNGAL, + CREOSOTE, + LATEX, + ACIDIC, + VENOMOUS, + SLIME, + BLAZE, + COFFEE, + GLACIAL, + MINT, + CITRUS, + PEAT, + SHADOW, + LEAD, + BRASS, + ELECTRUM, + ZINC, + TITANIUM, + TUNGSTEN, + STEEL, + IRIDIUM, + PLATINUM, + LAPIS, + SODALITE, + PYRITE, + BAUXITE, + CINNABAR, + SPHALERITE, + EMERALD, + RUBY, + SAPPHIRE, + OLIVINE, + DIAMOND, + RED, + YELLOW, + BLUE, + GREEN, + BLACK, + WHITE, + BROWN, + ORANGE, + CYAN, + PURPLE, + GRAY, + LIGHTBLUE, + PINK, + LIMEGREEN, + MAGENTA, + LIGHTGRAY, + NICKEL, + INVAR, + GLOWSTONE, + SALTPETER, + PULP, + MULCH, + COMPOST, + SAWDUST, + ; + } +} From 5279a6e64ae25980a232d51733d2d9fcf685f59e Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 5 Mar 2013 01:06:29 -0800 Subject: [PATCH 16/19] Update to 1.4.3 --- thaumicbees_res/build.xml | 2 +- thaumicbees_res/changelog.txt | 4 ++++ thaumicbees_src/thaumicbees/main/utils/VersionInfo.java | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/thaumicbees_res/build.xml b/thaumicbees_res/build.xml index d733f7e..03e4535 100644 --- a/thaumicbees_res/build.xml +++ b/thaumicbees_res/build.xml @@ -17,7 +17,7 @@ - + diff --git a/thaumicbees_res/changelog.txt b/thaumicbees_res/changelog.txt index 99f0a2b..f6dba67 100644 --- a/thaumicbees_res/changelog.txt +++ b/thaumicbees_res/changelog.txt @@ -1,3 +1,7 @@ +1.4.3 +Added automatic version-checking for ThaumicBees! From this version on, when a new version becomes available, it will notify you in-game. Notifications can be switched off via a config file option. +Fixed missing aspects on Extra Bees combs. + 1.4.2 Added Void Capsules - hold up to 8 buckets of liquid with one! It's a waterproof bag of holding! Plus stacking. Fix: Added Greatwood & Silverwood slabs to the ore dictionary so they should work as normal. diff --git a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java index f837207..b470d5e 100644 --- a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java +++ b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java @@ -22,7 +22,7 @@ import cpw.mods.fml.relauncher.Side; public class VersionInfo { - public static final String Version = "1.4.2a";//"@MODVERSION@"; + public static final String Version = "@MODVERSION@"; public static final String MCVersion = "@MCVERSION@"; public static final String Build = "@BUILD_NUMBER@"; public static final String VersionURL = "http://bit.ly/thaumicbeeversion"; From 5d3bd8bde2fc7167bb5a5f6fc59d4493d12d4694 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 5 Mar 2013 18:08:53 -0800 Subject: [PATCH 17/19] Adjusting version info to match format Version checking supports. Better fix would be to add support in version checking. --- thaumicbees_res/build.xml | 1 - thaumicbees_res/mcmod.info | 2 +- thaumicbees_src/thaumicbees/main/ThaumicBees.java | 2 +- thaumicbees_src/thaumicbees/main/utils/VersionInfo.java | 4 ++-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/thaumicbees_res/build.xml b/thaumicbees_res/build.xml index 03e4535..b4be508 100644 --- a/thaumicbees_res/build.xml +++ b/thaumicbees_res/build.xml @@ -89,7 +89,6 @@ - diff --git a/thaumicbees_res/mcmod.info b/thaumicbees_res/mcmod.info index e3d6385..a9ea1bf 100644 --- a/thaumicbees_res/mcmod.info +++ b/thaumicbees_res/mcmod.info @@ -1,7 +1,7 @@ [ { "modid": "ThaumicBees", - "version": "@MODVERSION@", + "version": "@VERSION@ - @BUILD_NUMBER", "name": "ThaumicBees", "url": "http://bit.ly/XFDvLY", "description": "Crossover mod for Forestry and Thaumcraft. Magic bees & more.", diff --git a/thaumicbees_src/thaumicbees/main/ThaumicBees.java b/thaumicbees_src/thaumicbees/main/ThaumicBees.java index f0c0534..c56b5cd 100644 --- a/thaumicbees_src/thaumicbees/main/ThaumicBees.java +++ b/thaumicbees_src/thaumicbees/main/ThaumicBees.java @@ -20,7 +20,7 @@ import forestry.api.core.ItemInterface; name="Thaumic Bees", useMetadata=true, acceptedMinecraftVersions=VersionInfo.MCVersion, - version=VersionInfo.Version, + version=VersionInfo.Version + " - " + VersionInfo.Build, dependencies=VersionInfo.Depends ) public class ThaumicBees diff --git a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java index b470d5e..6a497fb 100644 --- a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java +++ b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java @@ -22,9 +22,9 @@ import cpw.mods.fml.relauncher.Side; public class VersionInfo { - public static final String Version = "@MODVERSION@"; - public static final String MCVersion = "@MCVERSION@"; + public static final String Version = "@VERSION@"; public static final String Build = "@BUILD_NUMBER@"; + public static final String MCVersion = "@MCVERSION@"; public static final String VersionURL = "http://bit.ly/thaumicbeeversion"; public static final String Logo = "/gfx/thaumicbees/logo.png"; From 1a394ce8585ed4045d4dafd845b2262475d2e6ce Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Tue, 5 Mar 2013 18:09:50 -0800 Subject: [PATCH 18/19] Changelog. --- thaumicbees_res/changelog.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/thaumicbees_res/changelog.txt b/thaumicbees_res/changelog.txt index f6dba67..38d6cd9 100644 --- a/thaumicbees_res/changelog.txt +++ b/thaumicbees_res/changelog.txt @@ -1,3 +1,5 @@ +Changed Version info embedded in mod to match format supported by Version checking. + 1.4.3 Added automatic version-checking for ThaumicBees! From this version on, when a new version becomes available, it will notify you in-game. Notifications can be switched off via a config file option. Fixed missing aspects on Extra Bees combs. From 9bed2d37494f412551883f6d016bce836a81d52a Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Wed, 6 Mar 2013 13:42:57 -0800 Subject: [PATCH 19/19] Fixing problems with grafter not enchanting; version checking. --- thaumicbees_res/changelog.txt | 4 +++- .../thaumicbees/item/ItemThaumiumGrafter.java | 6 ++--- .../thaumicbees/main/utils/VersionInfo.java | 22 +++++++++++++------ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/thaumicbees_res/changelog.txt b/thaumicbees_res/changelog.txt index 38d6cd9..43f416b 100644 --- a/thaumicbees_res/changelog.txt +++ b/thaumicbees_res/changelog.txt @@ -1,4 +1,6 @@ -Changed Version info embedded in mod to match format supported by Version checking. +1.4.3a +Changed Version info embedded in mod to match format supported by Version checking. Will need to make this more robust in the future. +Fixed bug with Thaumium Grafter not being enchantable. 1.4.3 Added automatic version-checking for ThaumicBees! From this version on, when a new version becomes available, it will notify you in-game. Notifications can be switched off via a config file option. diff --git a/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java index a3291bb..ae16fb7 100644 --- a/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java +++ b/thaumicbees_src/thaumicbees/item/ItemThaumiumGrafter.java @@ -16,15 +16,15 @@ import net.minecraftforge.common.ForgeHooks; public class ItemThaumiumGrafter extends Item implements IVisRepairable, IToolGrafter { - public ItemThaumiumGrafter(int id) { super(id); - this.setCreativeTab(forestry.api.core.Tabs.tabArboriculture); + this.setMaxStackSize(1); this.setMaxDamage(15); - this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); this.setIconIndex(21); + this.setTextureFile(CommonProxy.TCBEES_ITEMS_IMAGE); this.setItemName("tb.thaumiumGrafter"); + this.setCreativeTab(forestry.api.core.Tabs.tabArboriculture); } @Override diff --git a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java index 6a497fb..d7688f1 100644 --- a/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java +++ b/thaumicbees_src/thaumicbees/main/utils/VersionInfo.java @@ -22,7 +22,7 @@ import cpw.mods.fml.relauncher.Side; public class VersionInfo { - public static final String Version = "@VERSION@"; + public static final String Version = "1.4.3"; public static final String Build = "@BUILD_NUMBER@"; public static final String MCVersion = "@MCVERSION@"; public static final String VersionURL = "http://bit.ly/thaumicbeeversion"; @@ -52,18 +52,20 @@ public class VersionInfo for (int i = 0; i < tokens.length; ++i) { - if (tokens[i].matches("[0-9]+[a-z]")) + tokens[i] = tokens[i].trim(); + if (tokens[i].matches("[0-9]+")) + { + versionTokens.add(Integer.valueOf(tokens[i])); + } + else if (tokens[i].matches("[0-9]+[a-z]")) { String numberString = tokens[i].substring(0, tokens[i].length()-1); versionTokens.add(Integer.valueOf(numberString)); versionTokens.add(Character.getNumericValue(tokens[i].charAt(tokens[i].length()-1))); } - else - { - versionTokens.add(Integer.valueOf(tokens[i])); - } } + // Can't use versionTokens.toArray 'cause that returns an Integer[], not int[] int[] value = new int[versionTokens.size()]; for (int i = 0; i < value.length; ++i) { @@ -91,6 +93,13 @@ public class VersionInfo result = false; break; } + + if (i == versionTokens.length-1 && versionTokens.length < targetTokens.length) + { + // If the versions compared are the same, but target has an extra token, it's probably a "letter" build + // and is ahead of this one. + result = true; + } } return result; @@ -181,7 +190,6 @@ public class VersionInfo @Override public void run() { - try { String location = VersionURL;