From 727a158ed1094571946922aa668db4908caa0274 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 28 May 2023 21:53:58 +0200 Subject: [PATCH] bauxite, achievement stuff, fixes --- gradle.properties | 2 +- src/main/java/com/hbm/blocks/BlockEnums.java | 3 +- src/main/java/com/hbm/config/WorldConfig.java | 42 +++++++---- .../java/com/hbm/crafting/MineralRecipes.java | 4 ++ .../hbm/handler/guncfg/Gun20GaugeFactory.java | 4 ++ .../com/hbm/inventory/SlotCraftingOutput.java | 36 +--------- .../java/com/hbm/inventory/fluid/Fluids.java | 6 +- .../hbm/inventory/recipes/CokerRecipes.java | 1 + .../inventory/recipes/CombinationRecipes.java | 3 + .../recipes/SolidificationRecipes.java | 1 + src/main/java/com/hbm/items/ItemEnums.java | 12 ++++ src/main/java/com/hbm/items/ModItems.java | 19 +---- .../com/hbm/items/special/ItemBedrockOre.java | 4 +- .../com/hbm/items/special/ItemByproduct.java | 6 +- .../java/com/hbm/items/tool/ItemBoltgun.java | 4 ++ .../com/hbm/items/tool/ItemToolAbility.java | 17 ++--- src/main/java/com/hbm/lib/HbmWorldGen.java | 22 +++--- src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 30 +++++--- .../java/com/hbm/main/ModEventHandler.java | 24 +------ src/main/java/com/hbm/main/ServerProxy.java | 5 +- .../java/com/hbm/packet/AnvilCraftPacket.java | 16 +---- .../weapon/ItemRenderWeaponFFMaresLeg.java | 3 + .../machine/TileEntityMachineTurbineGas.java | 6 +- .../storage/TileEntityMachineFENSU.java | 39 +++++++++- .../java/com/hbm/util/AchievementHandler.java | 67 ++++++++++++++++++ src/main/java/com/hbm/util/ChatBuilder.java | 23 ++++++ .../com/hbm/util/WeightedRandomGeneric.java | 17 +++++ .../com/hbm/world/feature/BedrockOre.java | 63 ++++++++++++++++ .../java/com/hbm/world/feature/OilSpot.java | 2 +- .../com/hbm/world/feature/OreLayer3D.java | 24 +++++-- .../hbm/world/generator/DungeonToolbox.java | 26 ------- src/main/resources/assets/hbm/lang/de_DE.lang | 28 +++++--- src/main/resources/assets/hbm/lang/en_US.lang | 26 ++++--- .../blocks/stone_resource.bauxite.png | Bin 0 -> 811 bytes .../assets/hbm/textures/gui/fluids/redmud.png | Bin 0 -> 624 bytes .../textures/items/achievement_icon.acid.png | Bin 0 -> 29485 bytes .../textures/items/achievement_icon.balls.png | Bin 0 -> 31217 bytes ...l.png => achievement_icon.digammafeel.png} | Bin .../achievement_icon.digammaforourright.png | Bin 0 -> 208 bytes ... => achievement_icon.digammakauaimoho.png} | Bin ...w.png => achievement_icon.digammaknow.png} | Bin ...ee.png => achievement_icon.digammasee.png} | Bin ....png => achievement_icon.digammaunity.png} | Bin ...ng => achievement_icon.digammaupontop.png} | Bin .../items/achievement_icon.gofish.png | Bin 0 -> 174 bytes .../hbm/textures/items/digamma_128kbps.png | Bin 200 -> 0 bytes .../textures/items/digamma_event_horizon.png | Bin 169 -> 0 bytes 48 files changed, 398 insertions(+), 189 deletions(-) create mode 100644 src/main/java/com/hbm/util/AchievementHandler.java create mode 100644 src/main/java/com/hbm/util/WeightedRandomGeneric.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/stone_resource.bauxite.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/redmud.png create mode 100644 src/main/resources/assets/hbm/textures/items/achievement_icon.acid.png create mode 100644 src/main/resources/assets/hbm/textures/items/achievement_icon.balls.png rename src/main/resources/assets/hbm/textures/items/{digamma_feel.png => achievement_icon.digammafeel.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/items/achievement_icon.digammaforourright.png rename src/main/resources/assets/hbm/textures/items/{digamma_kauai_moho.png => achievement_icon.digammakauaimoho.png} (100%) rename src/main/resources/assets/hbm/textures/items/{digamma_know.png => achievement_icon.digammaknow.png} (100%) rename src/main/resources/assets/hbm/textures/items/{digamma_see.png => achievement_icon.digammasee.png} (100%) rename src/main/resources/assets/hbm/textures/items/{digamma_unity.png => achievement_icon.digammaunity.png} (100%) rename src/main/resources/assets/hbm/textures/items/{digamma_up_on_top.png => achievement_icon.digammaupontop.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/items/achievement_icon.gofish.png delete mode 100644 src/main/resources/assets/hbm/textures/items/digamma_128kbps.png delete mode 100644 src/main/resources/assets/hbm/textures/items/digamma_event_horizon.png diff --git a/gradle.properties b/gradle.properties index b9eb6b50b..17db097d2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4607 +mod_build_number=4613 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models, porting),\ diff --git a/src/main/java/com/hbm/blocks/BlockEnums.java b/src/main/java/com/hbm/blocks/BlockEnums.java index 5a8e89122..717ac2639 100644 --- a/src/main/java/com/hbm/blocks/BlockEnums.java +++ b/src/main/java/com/hbm/blocks/BlockEnums.java @@ -7,7 +7,8 @@ public class BlockEnums { ASBESTOS, HEMATITE, MALACHITE, - LIMESTONE + LIMESTONE, + BAUXITE } public static enum EnumBiomeType { diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index 9f560b536..62d951918 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -33,14 +33,20 @@ public class WorldConfig { public static int bedrockOilSpawn = 200; public static int meteoriteSpawn = 500; - public static int bedrockIronSpawn = 200; + public static int bedrockIronSpawn = 100; public static int bedrockCopperSpawn = 200; - public static int bedrockBoraxSpawn = 300; - public static int bedrockAsbestosSpawn = 300; - public static int bedrockNiobiumSpawn = 300; - public static int bedrockTitaniumSpawn = 400; - public static int bedrockTungstenSpawn = 300; - public static int bedrockGoldSpawn = 500; + public static int bedrockBoraxSpawn = 50; + public static int bedrockAsbestosSpawn = 50; + public static int bedrockNiobiumSpawn = 50; + public static int bedrockTitaniumSpawn = 100; + public static int bedrockTungstenSpawn = 100; + public static int bedrockGoldSpawn = 50; + public static int bedrockUraniumSpawn = 35; + public static int bedrockThoriumSpawn = 50; + public static int bedrockCoalSpawn = 200; + public static int bedrockNiterSpawn = 50; + public static int bedrockFluoriteSpawn = 50; + public static int bedrockRedstoneSpawn = 50; public static int ironClusterSpawn = 4; public static int titaniumClusterSpawn = 2; @@ -133,14 +139,20 @@ public class WorldConfig { bedrockOilSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.22_bedrockOilSpawnRate", "Spawns a bedrock oil node every nTH chunk", 200); meteoriteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.23_meteoriteSpawnRate", "Spawns a fallen meteorite every nTH chunk", 200); - bedrockIronSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B00_bedrockIronSpawn", "Spawns a bedrock iron deposit every nTH chunk", 200); - bedrockCopperSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B01_bedrockCopperSpawn", "Spawns a bedrock copper deposit every nTH chunk", 200); - bedrockBoraxSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B02_bedrockBoraxSpawn", "Spawns a bedrock borax deposit every nTH chunk", 300); - bedrockAsbestosSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B03_bedrockAsbestosSpawn", "Spawns a bedrock asbestos deposit every nTH chunk", 300); - bedrockNiobiumSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B04_bedrockNiobiumSpawn", "Spawns a bedrock niobium deposit every nTH chunk", 300); - bedrockTitaniumSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B05_bedrockTitaniumSpawn", "Spawns a bedrock titanium deposit every nTH chunk", 500); - bedrockTungstenSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B06_bedrockTungstenSpawn", "Spawns a bedrock tungsten deposit every nTH chunk", 300); - bedrockGoldSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B07_bedrockGoldSpawn", "Spawns a bedrock gold deposit every nTH chunk", 500); + bedrockIronSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B00_bedrockIronWeight", "Spawn weight for iron bedrock ore", 100); + bedrockCopperSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B01_bedrockCopperWeight", "Spawn weight for copper bedrock ore", 200); + bedrockBoraxSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B02_bedrockBoraxWeight", "Spawn weight for borax bedrock ore", 50); + bedrockAsbestosSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B03_bedrockAsbestosWeight", "Spawn weight for asbestos bedrock ore", 50); + bedrockNiobiumSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B04_bedrockNiobiumWeight", "Spawn weight for niobium bedrock ore", 50); + bedrockTitaniumSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B05_bedrockTitaniumWeight", "Spawn weight for titanium bedrock ore", 100); + bedrockTungstenSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B06_bedrockTungstenWeight", "Spawn weight for tungsten bedrock ore", 100); + bedrockGoldSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B07_bedrockGoldWeight", "Spawn weight for gold bedrock ore", 50); + bedrockUraniumSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B08_bedrockUraniumWeight", "Spawn weight for uranium bedrock ore", 35); + bedrockThoriumSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B09_bedrockThoriumWeight", "Spawn weight for thorium bedrock ore", 50); + bedrockCoalSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B10_bedrockCoalWeight", "Spawn weight for coal bedrock ore", 200); + bedrockNiterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B11_bedrockNiterWeight", "Spawn weight for niter bedrock ore", 50); + bedrockFluoriteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B12_bedrockFluoriteWeight", "Spawn weight for fluorite bedrock ore", 50); + bedrockRedstoneSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B13_bedrockRedstoneWeight", "Spawn weight for redstone bedrock ore", 50); ironClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C00_ironClusterSpawn", "Amount of iron cluster veins per chunk", 4); titaniumClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C01_titaniumClusterSpawn", "Amount of titanium cluster veins per chunk", 2); diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index 0f440dbe3..039775e82 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -454,6 +454,10 @@ public class MineralRecipes { add9To1(DictFrame.fromOne(ModItems.ore_byproduct, EnumByproduct.B_SULFUR), new ItemStack(ModItems.sulfur)); add9To1(DictFrame.fromOne(ModItems.ore_byproduct, EnumByproduct.B_CALCIUM), new ItemStack(ModItems.powder_calcium)); add9To1(DictFrame.fromOne(ModItems.ore_byproduct, EnumByproduct.B_BISMUTH), new ItemStack(ModItems.powder_bismuth)); + add9To1(DictFrame.fromOne(ModItems.ore_byproduct, EnumByproduct.B_RADIUM), new ItemStack(ModItems.powder_ra226)); + add9To1(DictFrame.fromOne(ModItems.ore_byproduct, EnumByproduct.B_TECHNETIUM), new ItemStack(ModItems.billet_technetium)); + add9To1(DictFrame.fromOne(ModItems.ore_byproduct, EnumByproduct.B_POLONIUM), new ItemStack(ModItems.billet_polonium)); + add9To1(DictFrame.fromOne(ModItems.ore_byproduct, EnumByproduct.B_URANIUM), new ItemStack(ModItems.powder_uranium)); } //Bundled 1/9 recipes diff --git a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java index b99da2c21..80f96b057 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java @@ -78,6 +78,8 @@ public class Gun20GaugeFactory { config.reloadSound = GunConfiguration.RSOUND_SHOTGUN; config.firingSound = "hbm:weapon.revolverShootAlt"; config.firingPitch = 0.75F; + config.hasSights = true; + config.zoomFOV = 0.75F; config.name = "win1887"; config.manufacturer = EnumGunManufacturer.WINCHESTER; @@ -95,6 +97,8 @@ public class Gun20GaugeFactory { config.reloadSound = GunConfiguration.RSOUND_SHOTGUN; config.firingSound = "hbm:weapon.revolverShootAlt"; config.firingPitch = 0.75F; + config.hasSights = true; + config.zoomFOV = 0.75F; config.name = "win1887Inox"; config.manufacturer = EnumGunManufacturer.WINCHESTER; diff --git a/src/main/java/com/hbm/inventory/SlotCraftingOutput.java b/src/main/java/com/hbm/inventory/SlotCraftingOutput.java index 7b8a1c86a..5095f2b7e 100644 --- a/src/main/java/com/hbm/inventory/SlotCraftingOutput.java +++ b/src/main/java/com/hbm/inventory/SlotCraftingOutput.java @@ -3,6 +3,7 @@ package com.hbm.inventory; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; +import com.hbm.util.AchievementHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -27,40 +28,7 @@ public class SlotCraftingOutput extends Slot { //ugly but nothing to be done public static void checkAchievements(EntityPlayer player, ItemStack stack) { - Item item = stack.getItem(); - - if(item == Item.getItemFromBlock(ModBlocks.machine_chemplant)) - player.triggerAchievement(MainRegistry.achChemplant); - if(item == Item.getItemFromBlock(ModBlocks.concrete_smooth) || item == Item.getItemFromBlock(ModBlocks.concrete_asbestos)) - player.triggerAchievement(MainRegistry.achConcrete); - if(item == ModItems.ingot_polymer) - player.triggerAchievement(MainRegistry.achPolymer); - if(item == ModItems.ingot_desh) - player.triggerAchievement(MainRegistry.achDesh); - if(item == ModItems.gem_tantalium) - player.triggerAchievement(MainRegistry.achTantalum); - if(item == Item.getItemFromBlock(ModBlocks.machine_gascent)) - player.triggerAchievement(MainRegistry.achGasCent); - if(item == Item.getItemFromBlock(ModBlocks.machine_centrifuge)) - player.triggerAchievement(MainRegistry.achCentrifuge); - if(item == ModItems.ingot_schrabidium || item == ModItems.nugget_schrabidium) - player.triggerAchievement(MainRegistry.achSchrab); - if(item == Item.getItemFromBlock(ModBlocks.machine_crystallizer)) - player.triggerAchievement(MainRegistry.achAcidizer); - if(item == Item.getItemFromBlock(ModBlocks.machine_silex)) - player.triggerAchievement(MainRegistry.achSILEX); - if(item == ModItems.nugget_technetium) - player.triggerAchievement(MainRegistry.achTechnetium); - if(item == Item.getItemFromBlock(ModBlocks.watz_core)) - player.triggerAchievement(MainRegistry.achWatz); - if(item == ModItems.nugget_bismuth) - player.triggerAchievement(MainRegistry.achBismuth); - if(item == ModItems.nugget_am241 || item == ModItems.nugget_am242) - player.triggerAchievement(MainRegistry.achBreeding); - if(item == ModItems.missile_nuclear || item == ModItems.missile_nuclear_cluster || item == ModItems.missile_doomsday || item == ModItems.mp_warhead_10_nuclear || item == ModItems.mp_warhead_10_nuclear_large || item == ModItems.mp_warhead_15_nuclear || item == ModItems.mp_warhead_15_nuclear_shark || item == ModItems.mp_warhead_15_boxcar) - player.triggerAchievement(MainRegistry.achRedBalloons); - if(item == Item.getItemFromBlock(ModBlocks.struct_iter_core)) - player.triggerAchievement(MainRegistry.achFusion); + AchievementHandler.fire(player, stack); } @Override diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index b39ac64ad..b1b4a9ad4 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -133,6 +133,7 @@ public class Fluids { public static FluidType FISHOIL; public static FluidType SUNFLOWEROIL; public static FluidType NITROGLYCERIN; + public static FluidType REDMUD; private static final HashMap idMapping = new HashMap(); private static final HashMap nameMapping = new HashMap(); @@ -276,7 +277,8 @@ public class Fluids { ESTRADIOL = new FluidType("ESTRADIOL", 0xCDD5D8, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); FISHOIL = new FluidType("FISHOIL", 0x4B4A45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID); SUNFLOWEROIL = new FluidType("SUNFLOWEROIL", 0xCBAD45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID); - NITROGLYCERIN = new FluidType(112, "NITROGLYCERIN", 0x92ACA6, 0, 4, 0, EnumSymbol.NONE).addTraits(LIQUID); + NITROGLYCERIN = new FluidType("NITROGLYCERIN", 0x92ACA6, 0, 4, 0, EnumSymbol.NONE).addTraits(LIQUID); + REDMUD = new FluidType(113, "REDMUD", 0xD85638, 3, 0, 4, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, LEADCON, new FT_Corrosive(60), new FT_Flammable(1_000)); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE @@ -384,6 +386,7 @@ public class Fluids { metaOrder.add(PAIN); metaOrder.add(DEATH); metaOrder.add(WATZ); + metaOrder.add(REDMUD); metaOrder.add(EGG); metaOrder.add(CHOLESTEROL); //solutions and working fluids @@ -415,6 +418,7 @@ public class Fluids { MUSTARDGAS.addTraits(new FT_Toxin().addEntry(new ToxinDirectDamage(ModDamageSource.cloud, 4F, 10, HazardClass.GAS_CORROSIVE, false)) .addEntry(new ToxinEffects(HazardClass.GAS_CORROSIVE, true).add(new PotionEffect(Potion.wither.id, 100, 1), new PotionEffect(Potion.confusion.id, 100, 0)))); ESTRADIOL.addTraits(new FT_Toxin().addEntry(new ToxinEffects(HazardClass.PARTICLE_FINE, false).add(new PotionEffect(HbmPotion.death.id, 60 * 60 * 20, 0)))); + REDMUD.addTraits(new FT_Toxin().addEntry(new ToxinEffects(HazardClass.GAS_CORROSIVE, false).add(new PotionEffect(Potion.wither.id, 30 * 20, 2)))); double eff_steam_boil = 1.0D; double eff_steam_heatex = 0.25D; diff --git a/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java index 01dfe8dd6..7dad7530d 100644 --- a/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java @@ -56,6 +56,7 @@ public class CokerRecipes extends SerializableRecipe { registerSFAuto(WOODOIL, 340_000L, new ItemStack(Items.coal, 1, 1), GAS_COKER); registerRecipe(WATZ, 4_000, new ItemStack(ModItems.ingot_mud, 4), null); + registerRecipe(REDMUD, 1_000, new ItemStack(Items.iron_ingot, 2), new FluidStack(MERCURY, 50)); registerRecipe(BITUMEN, 16_000, DictFrame.fromOne(ModItems.coke, EnumCokeType.PETROLEUM), new FluidStack(OIL_COKER, 1_600)); registerRecipe(LUBRICANT, 12_000, DictFrame.fromOne(ModItems.coke, EnumCokeType.PETROLEUM), new FluidStack(OIL_COKER, 1_200)); } diff --git a/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java b/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java index fa3b7ffaa..022068894 100644 --- a/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java @@ -9,6 +9,8 @@ import static com.hbm.inventory.OreDictManager.*; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.blocks.BlockEnums.EnumStoneType; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.FluidStack; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon.AStack; @@ -43,6 +45,7 @@ public class CombinationRecipes extends SerializableRecipe { recipes.put(CINNABAR.crystal(), new Pair(new ItemStack(ModItems.sulfur), new FluidStack(Fluids.MERCURY, 100))); recipes.put(new ComparableStack(Items.glowstone_dust), new Pair(new ItemStack(ModItems.sulfur), new FluidStack(Fluids.CHLORINE, 50))); + recipes.put(new ComparableStack(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.BAUXITE)), new Pair(new ItemStack(ModItems.ingot_aluminium, 2), new FluidStack(Fluids.REDMUD, 250))); recipes.put(KEY_LOG, new Pair(new ItemStack(Items.coal, 1 ,1), new FluidStack(Fluids.WOODOIL, 250))); recipes.put(KEY_SAPLING, new Pair(null, new FluidStack(Fluids.WOODOIL, 50))); diff --git a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java index 38f618aea..2612ba3c3 100644 --- a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java @@ -67,6 +67,7 @@ public class SolidificationRecipes extends SerializableRecipe { registerRecipe(SALIENT, 1280, new ItemStack(ModItems.bio_wafer, 8)); //4 (food val) * 2 (sat mod) * 2 (constant) * 10 (quanta) * 8 (batch size) registerRecipe(ENDERJUICE, 100, Items.ender_pearl); registerRecipe(WATZ, 1000, ModItems.ingot_mud); + registerRecipe(REDMUD, 1000, Items.iron_ingot); registerRecipe(OIL, SF_OIL, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRUDE)); registerRecipe(CRACKOIL, SF_CRACK, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRACK)); diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index a15664ddb..c1424f43f 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -40,4 +40,16 @@ public class ItemEnums { ROPE, MUSTARDWILLOW } + + public static enum EnumAchievementType { + GOFISH, + ACID, + BALLS, + DIGAMMASEE, + DIGAMMAFEEL, + DIGAMMAKNOW, + DIGAMMAKAUAIMOHO, + DIGAMMAUPONTOP, + DIGAMMAFOROURRIGHT + } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index c87bb3a60..791bcf915 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2436,18 +2436,13 @@ public class ModItems { public static Item nothing; public static Item void_anim; + public static Item achievement_icon; public static Item bob_metalworks; public static Item bob_assembly; public static Item bob_chemistry; public static Item bob_oil; public static Item bob_nuclear; - public static Item digamma_see; - public static Item digamma_feel; - public static Item digamma_know; - public static Item digamma_kauai_moho; - public static Item digamma_up_on_top; - public static Item mysteryshovel; public static Item memory; @@ -5452,16 +5447,12 @@ public class ModItems { void_anim = new Item().setUnlocalizedName("void_anim").setTextureName(RefStrings.MODID + ":void_anim"); + achievement_icon = new ItemEnumMulti(ItemEnums.EnumAchievementType.class, true, true).setUnlocalizedName("achievement_icon"); bob_metalworks = new Item().setUnlocalizedName("bob_metalworks").setTextureName(RefStrings.MODID + ":bob_metalworks"); bob_assembly = new Item().setUnlocalizedName("bob_assembly").setTextureName(RefStrings.MODID + ":bob_assembly"); bob_chemistry = new Item().setUnlocalizedName("bob_chemistry").setTextureName(RefStrings.MODID + ":bob_chemistry"); bob_oil = new Item().setUnlocalizedName("bob_oil").setTextureName(RefStrings.MODID + ":bob_oil"); bob_nuclear = new Item().setUnlocalizedName("bob_nuclear").setTextureName(RefStrings.MODID + ":bob_nuclear"); - digamma_see = new Item().setUnlocalizedName("digamma_see").setTextureName(RefStrings.MODID + ":digamma_see"); - digamma_feel = new Item().setUnlocalizedName("digamma_feel").setTextureName(RefStrings.MODID + ":digamma_feel"); - digamma_know = new Item().setUnlocalizedName("digamma_know").setTextureName(RefStrings.MODID + ":digamma_know"); - digamma_kauai_moho = new Item().setUnlocalizedName("digamma_kauai_moho").setTextureName(RefStrings.MODID + ":digamma_kauai_moho"); - digamma_up_on_top = new Item().setUnlocalizedName("digamma_up_on_top").setTextureName(RefStrings.MODID + ":digamma_up_on_top"); mysteryshovel = new ItemMS().setUnlocalizedName("mysteryshovel").setFull3D().setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cursed_shovel"); memory = new ItemBattery(Long.MAX_VALUE / 100L, 100000000000000L, 100000000000000L).setUnlocalizedName("memory").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mo8_anim"); @@ -8055,16 +8046,12 @@ public class ModItems { GameRegistry.registerItem(ln2_10, ln2_10.getUnlocalizedName()); GameRegistry.registerItem(nothing, nothing.getUnlocalizedName()); GameRegistry.registerItem(void_anim, void_anim.getUnlocalizedName()); + GameRegistry.registerItem(achievement_icon, achievement_icon.getUnlocalizedName()); GameRegistry.registerItem(bob_metalworks, bob_metalworks.getUnlocalizedName()); GameRegistry.registerItem(bob_assembly, bob_assembly.getUnlocalizedName()); GameRegistry.registerItem(bob_chemistry, bob_chemistry.getUnlocalizedName()); GameRegistry.registerItem(bob_oil, bob_oil.getUnlocalizedName()); GameRegistry.registerItem(bob_nuclear, bob_nuclear.getUnlocalizedName()); - GameRegistry.registerItem(digamma_see, digamma_see.getUnlocalizedName()); - GameRegistry.registerItem(digamma_feel, digamma_feel.getUnlocalizedName()); - GameRegistry.registerItem(digamma_know, digamma_know.getUnlocalizedName()); - GameRegistry.registerItem(digamma_kauai_moho, digamma_kauai_moho.getUnlocalizedName()); - GameRegistry.registerItem(digamma_up_on_top, digamma_up_on_top.getUnlocalizedName()); GameRegistry.registerItem(mysteryshovel, mysteryshovel.getUnlocalizedName()); GameRegistry.registerItem(memory, memory.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemBedrockOre.java b/src/main/java/com/hbm/items/special/ItemBedrockOre.java index 55539aa79..6dc73e9fc 100644 --- a/src/main/java/com/hbm/items/special/ItemBedrockOre.java +++ b/src/main/java/com/hbm/items/special/ItemBedrockOre.java @@ -92,7 +92,9 @@ public class ItemBedrockOre extends ItemEnumMulti { NIOBIUM("Niobium", 0xAF58D8, B_IRON, B_IRON, B_IRON), //iron in columbite, often found along tantalite TITANIUM("Titanium", 0xF2EFE2, B_SILICON, B_CALCIUM, B_ALUMINIUM), //titanite is titanium + calcium + silicon with traces of iron and aluminium TUNGSTEN("Tungsten", 0x2C293C, B_LEAD, B_IRON, B_BISMUTH), //ferberite has iron, raspite has lead, russelite is bismuth tungsten - GOLD("Gold", 0xF9D738, B_LEAD, B_COPPER, B_BISMUTH); //occurs with copper, lead and rare bismuthide + GOLD("Gold", 0xF9D738, B_LEAD, B_COPPER, B_BISMUTH), //occurs with copper, lead and rare bismuthide + URANIUM("Uranium", 0x868D82, B_LEAD, B_RADIUM, B_POLONIUM), //uranium and its decay products + THORIUM("Thorium", 0x7D401D, B_SILICON, B_URANIUM, B_TECHNETIUM); //thorium occours with uraninite and decay products public String oreName; public int color; diff --git a/src/main/java/com/hbm/items/special/ItemByproduct.java b/src/main/java/com/hbm/items/special/ItemByproduct.java index 049c8f20e..6b513884f 100644 --- a/src/main/java/com/hbm/items/special/ItemByproduct.java +++ b/src/main/java/com/hbm/items/special/ItemByproduct.java @@ -31,7 +31,11 @@ public class ItemByproduct extends ItemEnumMulti { B_ALUMINIUM(0xE8F2F9), B_SULFUR(0xEAD377), B_CALCIUM(0xCFCFA6), - B_BISMUTH(0x8D8577); + B_BISMUTH(0x8D8577), + B_RADIUM(0xE9FAF6), + B_TECHNETIUM(0xCADFDF), + B_POLONIUM(0xCADFDF), + B_URANIUM(0x868D82); public int color; diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index a4ef287f3..34440b70a 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -63,6 +63,10 @@ public class ItemBoltgun extends Item implements IAnimatedItem { player.inventory.decrStackSize(i, 1); player.inventoryContainer.detectAndSendChanges(); EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, DamageSource.causePlayerDamage(player).setDamageBypassesArmor(), 10F); + + if(!entity.isEntityAlive() && entity instanceof EntityPlayer) { + ((EntityPlayer) entity).triggerAchievement(MainRegistry.achGoFish); + } NBTTagCompound data = new NBTTagCompound(); data.setString("type", "vanillaExt"); diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index 85e0694d0..f0c4496ad 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -11,6 +11,10 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility.*; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.PlayerInformPacket; +import com.hbm.util.ChatBuilder; import com.hbm.handler.WeaponAbility; import api.hbm.item.IDepthRockTool; @@ -22,14 +26,12 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; @@ -239,18 +241,17 @@ public class ItemToolAbility extends ItemTool implements IItemAbility, IDepthRoc while(getCurrentAbility(stack) != null && !getCurrentAbility(stack).isAllowed()) { - player.addChatComponentMessage(new ChatComponentText("[Ability ").appendSibling(new ChatComponentTranslation(getCurrentAbility(stack).getName(), new Object[0])) - .appendSibling(new ChatComponentText(getCurrentAbility(stack).getExtension() + " is blacklisted!]")).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("[Ability ").nextTranslation(getCurrentAbility(stack).getName()).next(getCurrentAbility(stack).getExtension() + " is blacklisted!]").colorAll(EnumChatFormatting.RED).flush(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); + i++; setAbility(stack, i % this.breakAbility.size()); } if(getCurrentAbility(stack) != null) { - player.addChatComponentMessage(new ChatComponentText("[Enabled ").appendSibling(new ChatComponentTranslation(getCurrentAbility(stack).getName(), new Object[0])) - .appendSibling(new ChatComponentText(getCurrentAbility(stack).getExtension() + "]")).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("[Enabled ").nextTranslation(getCurrentAbility(stack).getName()).next(getCurrentAbility(stack).getExtension() + "]").colorAll(EnumChatFormatting.YELLOW).flush(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); } else { - player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GOLD + "[Tool ability deactivated]")); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("[Tool ability deactivated]").color(EnumChatFormatting.GOLD).flush(), MainRegistry.proxy.ID_TOOLABILITY), (EntityPlayerMP) player); } world.playSoundAtEntity(player, "random.orb", 0.25F, getCurrentAbility(stack) == null ? 0.75F : 1.25F); diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 58f772881..dac6fed84 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -8,14 +8,12 @@ import com.hbm.blocks.generic.BlockMotherOfAllOres; import com.hbm.blocks.generic.BlockNTMFlower.EnumFlowerType; import com.hbm.config.GeneralConfig; import com.hbm.config.WorldConfig; -import com.hbm.inventory.FluidStack; -import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; -import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.main.MainRegistry; import com.hbm.saveddata.TomSaveData; import com.hbm.tileentity.machine.storage.TileEntitySafe; import com.hbm.tileentity.machine.storage.TileEntitySoyuzCapsule; +import com.hbm.util.WeightedRandomGeneric; import com.hbm.world.dungeon.AncientTomb; import com.hbm.world.dungeon.Antenna; import com.hbm.world.dungeon.ArcticVault; @@ -32,6 +30,7 @@ import com.hbm.world.dungeon.Silo; import com.hbm.world.dungeon.Spaceship; import com.hbm.world.dungeon.Vertibird; import com.hbm.world.feature.BedrockOre; +import com.hbm.world.feature.BedrockOre.BedrockOreDefinition; import com.hbm.world.feature.DepthDeposit; import com.hbm.world.feature.Dud; import com.hbm.world.feature.Geyser; @@ -49,6 +48,7 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityChest; import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.WeightedRandom; import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; @@ -154,18 +154,16 @@ public class HbmWorldGen implements IWorldGenerator { DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.aluminiumClusterSpawn, 6, 15, 35, ModBlocks.cluster_aluminium); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.copperClusterSpawn, 6, 15, 20, ModBlocks.cluster_copper); - //DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.hematiteSpawn, 10, 4, 80, ModBlocks.stone_resource, EnumStoneType.HEMATITE.ordinal()); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.malachiteSpawn, 10, 6, 40, ModBlocks.stone_resource, EnumStoneType.MALACHITE.ordinal()); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.limestoneSpawn, 12, 25, 30, ModBlocks.stone_resource, EnumStoneType.LIMESTONE.ordinal()); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.IRON, 1, WorldConfig.bedrockIronSpawn); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.COPPER, 1, WorldConfig.bedrockCopperSpawn); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.BORAX, new FluidStack(Fluids.SULFURIC_ACID, 500), 3, WorldConfig.bedrockBoraxSpawn); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.ASBESTOS, 2, WorldConfig.bedrockAsbestosSpawn); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.NIOBIUM, new FluidStack(Fluids.ACID, 1_000), 2, WorldConfig.bedrockNiobiumSpawn); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.TITANIUM, new FluidStack(Fluids.SULFURIC_ACID, 500), 2, WorldConfig.bedrockTitaniumSpawn); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.TUNGSTEN, new FluidStack(Fluids.ACID, 1_000), 2, WorldConfig.bedrockTungstenSpawn); - DungeonToolbox.generateBedrockOreWithChance(world, rand, i, j, EnumBedrockOre.GOLD, 1, WorldConfig.bedrockGoldSpawn); + if(rand.nextInt(3) == 0) { + WeightedRandomGeneric item = (WeightedRandomGeneric) WeightedRandom.getRandomItem(rand, BedrockOre.weightedOres); + BedrockOreDefinition def = item.get(); + int randPosX = i + rand.nextInt(2) + 8; + int randPosZ = j + rand.nextInt(2) + 8; + BedrockOre.generate(world, randPosX, randPosZ, def.stack, def.acid, def.color, def.tier); + } for(int k = 0; k < WorldConfig.randomSpawn; k++) { BlockMotherOfAllOres.shuffleOverride(rand); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index f3cc40fb2..5416fa4d3 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4607)"; + public static final String VERSION = "1.0.27 BETA (4613)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index e58761275..99df0747c 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -61,6 +61,7 @@ import com.hbm.handler.imc.*; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.hazard.HazardRegistry; import com.hbm.inventory.*; +import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.*; import com.hbm.inventory.recipes.anvil.AnvilRecipes; @@ -69,6 +70,7 @@ import com.hbm.items.ModItems; import com.hbm.items.tool.ItemFertilizer; import com.hbm.items.weapon.ItemGenericGrenade; import com.hbm.items.ItemAmmoEnums.Ammo4Gauge; +import com.hbm.items.ItemEnums.EnumAchievementType; import com.hbm.lib.HbmWorld; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; @@ -79,6 +81,7 @@ import com.hbm.tileentity.TileMappings; import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.machine.*; import com.hbm.tileentity.machine.rbmk.RBMKDials; +import com.hbm.util.AchievementHandler; import com.hbm.util.ArmorUtil; import com.hbm.util.Compat; import com.hbm.util.StatHelper; @@ -187,6 +190,7 @@ public class MainRegistry { public static Achievement achSlimeball; public static Achievement achSulfuric; public static Achievement achWitchtaunter; + public static Achievement achGoFish; public static Achievement achNo9; public static Achievement achInferno; public static Achievement bobHidden; @@ -657,6 +661,7 @@ public class MainRegistry { achSacrifice = new Achievement("achievement.sacrifice", "sacrifice", -3, 1, ModItems.burnt_bark, null).initIndependentStat().setSpecial().registerStat(); achImpossible = new Achievement("achievement.impossible", "impossible", 18, 10, ModItems.nothing, null).initIndependentStat().setSpecial().registerStat(); achTOB = new Achievement("achievement.tasteofblood", "tasteofblood", 3, 10, new ItemStack(ModItems.fluid_icon, 1, Fluids.ASCHRAB.getID()), null).initIndependentStat().setSpecial().registerStat(); + achGoFish = new Achievement("achievement.goFish", "goFish", 5, 10, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.GOFISH), null).initIndependentStat().setSpecial().registerStat(); achFreytag = new Achievement("achievement.freytag", "freytag", 0, -4, ModItems.gun_mp40, null).initIndependentStat().setSpecial().registerStat(); achPotato = new Achievement("achievement.potato", "potato", -2, -2, ModItems.battery_potatos, null).initIndependentStat().setSpecial().registerStat(); achC44 = new Achievement("achievement.c44", "c44", 2, -4, ModItems.gun_revolver_pip, null).initIndependentStat().setSpecial().registerStat(); @@ -668,8 +673,8 @@ public class MainRegistry { achWitchtaunter = new Achievement("achievement.witchtaunter", "witchtaunter", -8, 7, ModItems.ammo_4gauge.stackFromEnum(Ammo4Gauge.VAMPIRE), null).initIndependentStat().setSpecial().registerStat(); achNo9 = new Achievement("achievement.no9", "no9", -8, 12, ModItems.no9, null).initIndependentStat().registerStat(); - achSlimeball = new Achievement("achievement.slimeball", "slimeball", -10, 6, Items.slime_ball, null).initIndependentStat().registerStat(); - achSulfuric = new Achievement("achievement.sulfuric", "sulfuric", -10, 8, ModItems.bucket_sulfuric_acid, achSlimeball).initIndependentStat().setSpecial().registerStat(); + achSlimeball = new Achievement("achievement.slimeball", "slimeball", -10, 6, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.ACID), null).initIndependentStat().registerStat(); + achSulfuric = new Achievement("achievement.sulfuric", "sulfuric", -10, 8, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.BALLS), achSlimeball).initIndependentStat().setSpecial().registerStat(); achInferno = new Achievement("achievement.inferno", "inferno", -8, 10, ModItems.canister_napalm, null).initIndependentStat().setSpecial().registerStat(); bobHidden = new Achievement("achievement.hidden", "hidden", 15, -4, ModItems.gun_dampfmaschine, null).initIndependentStat().registerStat(); @@ -689,11 +694,11 @@ public class MainRegistry { achSomeWounds = new Achievement("achievement.someWounds", "someWounds", -2, 10, ModItems.injector_knife, null).initIndependentStat().registerStat(); - digammaSee = new Achievement("achievement.digammaSee", "digammaSee", -1, 8, ModItems.digamma_see, null).initIndependentStat().registerStat(); - digammaFeel = new Achievement("achievement.digammaFeel", "digammaFeel", 1, 8, ModItems.digamma_feel, digammaSee).initIndependentStat().registerStat(); - digammaKnow = new Achievement("achievement.digammaKnow", "digammaKnow", 3, 8, ModItems.digamma_know, digammaFeel).initIndependentStat().registerStat().setSpecial(); - digammaKauaiMoho = new Achievement("achievement.digammaKauaiMoho", "digammaKauaiMoho", 5, 8, ModItems.digamma_kauai_moho, digammaKnow).initIndependentStat().registerStat().setSpecial(); - digammaUpOnTop = new Achievement("achievement.digammaUpOnTop", "digammaUpOnTop", 7, 8, ModItems.digamma_up_on_top, digammaKauaiMoho).initIndependentStat().registerStat().setSpecial(); + digammaSee = new Achievement("achievement.digammaSee", "digammaSee", -1, 8, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.DIGAMMASEE), null).initIndependentStat().registerStat(); + digammaFeel = new Achievement("achievement.digammaFeel", "digammaFeel", 1, 8, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.DIGAMMAFEEL), digammaSee).initIndependentStat().registerStat(); + digammaKnow = new Achievement("achievement.digammaKnow", "digammaKnow", 3, 8, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.DIGAMMAKNOW), digammaFeel).initIndependentStat().registerStat().setSpecial(); + digammaKauaiMoho = new Achievement("achievement.digammaKauaiMoho", "digammaKauaiMoho", 5, 8, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.DIGAMMAKAUAIMOHO), digammaKnow).initIndependentStat().registerStat().setSpecial(); + digammaUpOnTop = new Achievement("achievement.digammaUpOnTop", "digammaUpOnTop", 7, 8, DictFrame.fromOne(ModItems.achievement_icon, EnumAchievementType.DIGAMMAUPONTOP), digammaKauaiMoho).initIndependentStat().registerStat().setSpecial(); //progression achieves achBurnerPress = new Achievement("achievement.burnerPress", "burnerPress", 0, 0, new ItemStack(ModBlocks.machine_press), null).initIndependentStat().registerStat(); @@ -732,6 +737,7 @@ public class MainRegistry { achSacrifice, achImpossible, achTOB, + achGoFish, achFreytag, achPotato, achC44, @@ -847,6 +853,7 @@ public class MainRegistry { FluidContainerRegistry.register(); TileEntityMachineReactorLarge.registerAll(); BlockToolConversion.registerRecipes(); + AchievementHandler.register(); proxy.registerMissileItems(); @@ -860,9 +867,11 @@ public class MainRegistry { new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20).withFluid(ModBlocks.sulfuric_acid_block); //sulfur new OreCave(ModBlocks.stone_resource, 1).setThreshold(1.75D).setRangeMult(20).setYLevel(25).setMaxRange(20); //asbestos - new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.HEMATITE.ordinal()); + new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.HEMATITE.ordinal()).setScaleH(0.04D).setScaleV(0.25D).setThreshold(230); + new OreLayer3D(ModBlocks.stone_resource, EnumStoneType.BAUXITE.ordinal()).setScaleH(0.03D).setScaleV(0.15D).setThreshold(300); //new BiomeCave().setThreshold(1.5D).setRangeMult(20).setYLevel(40).setMaxRange(20); //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); + BedrockOre.init(); Compat.handleRailcraftNonsense(); SuicideThreadDump.register(); @@ -1104,6 +1113,11 @@ public class MainRegistry { ignoreMappings.add("hbm:item.gun_revolver_lead_ammo"); ignoreMappings.add("hbm:item.gun_revolver_schrabidium_ammo"); ignoreMappings.add("hbm:item.tank_waste"); + ignoreMappings.add("hbm:item.digamma_see"); + ignoreMappings.add("hbm:item.digamma_feel"); + ignoreMappings.add("hbm:item.digamma_know"); + ignoreMappings.add("hbm:item.digamma_kauai_moho"); + ignoreMappings.add("hbm:item.digamma_up_on_top"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 949a92461..00d3a9f64 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -63,6 +63,7 @@ import com.hbm.packet.PlayerInformPacket; import com.hbm.potion.HbmPotion; import com.hbm.saveddata.AuxSavedData; import com.hbm.tileentity.network.RTTYSystem; +import com.hbm.util.AchievementHandler; import com.hbm.util.ArmorUtil; import com.hbm.util.ContaminationUtil; import com.hbm.util.EnchantmentUtil; @@ -1111,31 +1112,12 @@ public class ModEventHandler { @SubscribeEvent public void itemCrafted(PlayerEvent.ItemCraftedEvent e) { - - Item item = e.crafting.getItem(); - - if(item == ModItems.gun_mp40) { - e.player.addStat(MainRegistry.achFreytag, 1); - } - if(item == ModItems.piston_selenium || item == ModItems.gun_b92) { - e.player.addStat(MainRegistry.achSelenium, 1); - } - if(item == ModItems.battery_potatos) { - e.player.addStat(MainRegistry.achPotato, 1); - } - if(item == ModItems.gun_revolver_pip) { - e.player.addStat(MainRegistry.achC44, 1); - } - if(item == Item.getItemFromBlock(ModBlocks.machine_press)) { - e.player.triggerAchievement(MainRegistry.achBurnerPress); - } - if(item == ModItems.rbmk_fuel_empty) { - e.player.triggerAchievement(MainRegistry.achRBMK); - } + AchievementHandler.fire(e.player, e.crafting); } @SubscribeEvent public void itemSmelted(PlayerEvent.ItemSmeltedEvent e) { + AchievementHandler.fire(e.player, e.smelting); if(!e.player.worldObj.isRemote && e.smelting.getItem() == Items.iron_ingot && e.player.getRNG().nextInt(64) == 0) { diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index d296c9ab3..ac286d931 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -24,8 +24,9 @@ public class ServerProxy { public static final int ID_HUD = 5; public static final int ID_DETONATOR = 6; public static final int ID_FLUID_ID = 7; - public static final int ID_GUN_MODE = 8; - public static final int ID_GAS_HAZARD = 9; + public static final int ID_TOOLABILITY = 8; + public static final int ID_GUN_MODE = 9; + public static final int ID_GAS_HAZARD = 10; public void registerRenderInfo() { } public void registerTileEntitySpecialRenderer() { } diff --git a/src/main/java/com/hbm/packet/AnvilCraftPacket.java b/src/main/java/com/hbm/packet/AnvilCraftPacket.java index bc1719702..d8b1049a4 100644 --- a/src/main/java/com/hbm/packet/AnvilCraftPacket.java +++ b/src/main/java/com/hbm/packet/AnvilCraftPacket.java @@ -1,12 +1,9 @@ package com.hbm.packet; -import com.hbm.blocks.ModBlocks; import com.hbm.inventory.container.ContainerAnvil; import com.hbm.inventory.recipes.anvil.AnvilRecipes; import com.hbm.inventory.recipes.anvil.AnvilRecipes.AnvilConstructionRecipe; -import com.hbm.items.ItemAmmoEnums; -import com.hbm.items.ModItems; -import com.hbm.main.MainRegistry; +import com.hbm.util.AchievementHandler; import com.hbm.util.InventoryUtil; import cpw.mods.fml.common.network.simpleimpl.IMessage; @@ -14,7 +11,6 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; public class AnvilCraftPacket implements IMessage { @@ -65,15 +61,7 @@ public class AnvilCraftPacket implements IMessage { if(InventoryUtil.doesPlayerHaveAStacks(p, recipe.input, true)) { InventoryUtil.giveChanceStacksToPlayer(p, recipe.output); - - if(recipe.output.get(0).stack.getItem() == Item.getItemFromBlock(ModBlocks.machine_difurnace_off)) - p.triggerAchievement(MainRegistry.achBlastFurnace); - if(recipe.output.get(0).stack.getItem() == Item.getItemFromBlock(ModBlocks.machine_assembler)) - p.triggerAchievement(MainRegistry.achAssembly); - if(recipe.output.get(0).stack.getItem() == ModItems.billet_pu_mix) - p.triggerAchievement(MainRegistry.achChicagoPile); - if(recipe.output.get(0).stack.getItem() == ModItems.ammo_4gauge && recipe.output.get(0).stack.getItemDamage() == ItemAmmoEnums.Ammo4Gauge.VAMPIRE.ordinal()) - p.triggerAchievement(MainRegistry.achWitchtaunter); + AchievementHandler.fire(p, recipe.output.get(0).stack); } else { break; diff --git a/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponFFMaresLeg.java b/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponFFMaresLeg.java index b95260b35..f63f1d68e 100644 --- a/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponFFMaresLeg.java +++ b/src/main/java/com/hbm/render/item/weapon/ItemRenderWeaponFFMaresLeg.java @@ -67,6 +67,9 @@ public class ItemRenderWeaponFFMaresLeg implements IItemRenderer { GL11.glTranslated(-0.71, 0.375, 0); GL11.glRotated(25, 1, 0, 0); GL11.glRotated(1, 0, 1, 0); + GL11.glRotated(-3, 0, 0, 1); + GL11.glRotated(0.2, 0, 1, 0); + GL11.glTranslated(-0.006, -0.005, 0.4); } double[] recoil = HbmAnimations.getRelevantTransformation("LEVER_RECOIL"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 419664383..f00709901 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -60,6 +60,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement fuelMaxCons.put(Fluids.GAS, 50D); // natgas doesn't burn well so it burns faster to compensate fuelMaxCons.put(Fluids.SYNGAS, 10D); // syngas just fucks fuelMaxCons.put(Fluids.OXYHYDROGEN, 100D); // oxyhydrogen is terrible so it needs to burn a ton for the bare minimum + fuelMaxCons.put(Fluids.REFORMGAS, 2.5D); // halved because it's too powerful // default to 5 if not in list } @@ -121,7 +122,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement ForgeDirection rot = dir.getRotation(ForgeDirection.UP); NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", this.power); //set first to get an unmodified view of how much power was generated before deductions from the net + data.setLong("power", Math.min(this.power, this.maxPower)); //set first to get an unmodified view of how much power was generated before deductions from the net //do net/battery deductions first... power = Library.chargeItemsFromTE(slots, 0, power, maxPower); @@ -141,9 +142,6 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement //steam this.sendFluid(tanks[3], worldObj, xCoord + dir.offsetZ * 6, yCoord + 1, zCoord - dir.offsetX * 6, rot.getOpposite()); - //if(audio != null) // audio shouldn't even exist serverside - // audio.updatePitch((float) (0.45 + 0.05 * rpm / 10)); - data.setInteger("rpm", this.rpm); data.setInteger("temp", this.temp); data.setInteger("state", this.state); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java index 46770f2a6..b936d41b8 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFENSU.java @@ -1,9 +1,12 @@ package com.hbm.tileentity.machine.storage; +import com.hbm.lib.Library; + import api.hbm.energy.IEnergyConductor; import api.hbm.energy.IEnergyConnector; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; @@ -17,7 +20,41 @@ public class TileEntityMachineFENSU extends TileEntityMachineBattery { @Override public void updateEntity() { - super.updateEntity(); + + if(!worldObj.isRemote) { + + long prevPower = this.power; + + power = Library.chargeItemsFromTE(slots, 1, power, getMaxPower()); + + ////////////////////////////////////////////////////////////////////// + this.transmitPowerFairly(); + ////////////////////////////////////////////////////////////////////// + + byte comp = this.getComparatorPower(); + if(comp != this.lastRedstone) + this.markDirty(); + this.lastRedstone = comp; + + power = Library.chargeTEFromItems(slots, 0, power, getMaxPower()); + + long avg = (power / 2 + prevPower / 2); + this.delta = avg - this.log[0]; + + for(int i = 1; i < this.log.length; i++) { + this.log[i - 1] = this.log[i]; + } + + this.log[19] = avg; + + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setLong("power", avg); + nbt.setLong("delta", delta); + nbt.setShort("redLow", redLow); + nbt.setShort("redHigh", redHigh); + nbt.setByte("priority", (byte) this.priority.ordinal()); + this.networkPack(nbt, 20); + } if(worldObj.isRemote) { this.prevRotation = this.rotation; diff --git a/src/main/java/com/hbm/util/AchievementHandler.java b/src/main/java/com/hbm/util/AchievementHandler.java new file mode 100644 index 000000000..3d395a43e --- /dev/null +++ b/src/main/java/com/hbm/util/AchievementHandler.java @@ -0,0 +1,67 @@ +package com.hbm.util; + +import java.util.HashMap; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ItemAmmoEnums; +import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.Achievement; + +public class AchievementHandler { + + public static HashMap craftingAchievements = new HashMap(); + + public static void register() { + craftingAchievements.put(new ComparableStack(ModItems.gun_mp40), MainRegistry.achFreytag); + craftingAchievements.put(new ComparableStack(ModItems.piston_selenium), MainRegistry.achSelenium); + craftingAchievements.put(new ComparableStack(ModItems.gun_b92), MainRegistry.achSelenium); + craftingAchievements.put(new ComparableStack(ModItems.battery_potatos), MainRegistry.achPotato); + craftingAchievements.put(new ComparableStack(ModItems.gun_revolver_pip), MainRegistry.achC44); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_press), MainRegistry.achBurnerPress); + craftingAchievements.put(new ComparableStack(ModItems.rbmk_fuel_empty), MainRegistry.achRBMK); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_chemplant), MainRegistry.achChemplant); + craftingAchievements.put(new ComparableStack(ModBlocks.concrete_smooth), MainRegistry.achConcrete); + craftingAchievements.put(new ComparableStack(ModBlocks.concrete_asbestos), MainRegistry.achConcrete); + craftingAchievements.put(new ComparableStack(ModItems.ingot_polymer), MainRegistry.achPolymer); + craftingAchievements.put(new ComparableStack(ModItems.ingot_desh), MainRegistry.achDesh); + craftingAchievements.put(new ComparableStack(ModItems.gem_tantalium), MainRegistry.achTantalum); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_gascent), MainRegistry.achGasCent); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_centrifuge), MainRegistry.achCentrifuge); + craftingAchievements.put(new ComparableStack(ModItems.ingot_schrabidium), MainRegistry.achSchrab); + craftingAchievements.put(new ComparableStack(ModItems.nugget_schrabidium), MainRegistry.achSchrab); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_crystallizer), MainRegistry.achAcidizer); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_silex), MainRegistry.achSILEX); + craftingAchievements.put(new ComparableStack(ModItems.nugget_technetium), MainRegistry.achTechnetium); + craftingAchievements.put(new ComparableStack(ModBlocks.struct_watz_core), MainRegistry.achWatz); + craftingAchievements.put(new ComparableStack(ModItems.nugget_bismuth), MainRegistry.achBismuth); + craftingAchievements.put(new ComparableStack(ModItems.nugget_am241), MainRegistry.achBreeding); + craftingAchievements.put(new ComparableStack(ModItems.nugget_am242), MainRegistry.achBreeding); + craftingAchievements.put(new ComparableStack(ModItems.missile_nuclear), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModItems.missile_nuclear_cluster), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModItems.missile_doomsday), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModItems.mp_warhead_10_nuclear), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModItems.mp_warhead_10_nuclear_large), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModItems.mp_warhead_15_nuclear), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModItems.mp_warhead_15_nuclear_shark), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModItems.mp_warhead_15_boxcar), MainRegistry.achRedBalloons); + craftingAchievements.put(new ComparableStack(ModBlocks.struct_iter_core), MainRegistry.achFusion); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_difurnace_off), MainRegistry.achBlastFurnace); + craftingAchievements.put(new ComparableStack(ModBlocks.machine_assembler), MainRegistry.achAssembly); + craftingAchievements.put(new ComparableStack(ModItems.billet_pu_mix), MainRegistry.achChicagoPile); + craftingAchievements.put(new ComparableStack(ModItems.ammo_4gauge, 1, ItemAmmoEnums.Ammo4Gauge.VAMPIRE.ordinal()), MainRegistry.achWitchtaunter); + } + + public static void fire(EntityPlayer player, ItemStack stack) { + if(player.worldObj.isRemote) return; + ComparableStack comp = new ComparableStack(stack).makeSingular(); + Achievement achievement = craftingAchievements.get(comp); + if(achievement != null) { + player.triggerAchievement(achievement); + } + } +} diff --git a/src/main/java/com/hbm/util/ChatBuilder.java b/src/main/java/com/hbm/util/ChatBuilder.java index 0140af364..9fc0c6169 100644 --- a/src/main/java/com/hbm/util/ChatBuilder.java +++ b/src/main/java/com/hbm/util/ChatBuilder.java @@ -1,10 +1,15 @@ package com.hbm.util; +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + import net.minecraft.util.ChatComponentStyle; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; public class ChatBuilder { @@ -46,6 +51,24 @@ public class ChatBuilder { return this; } + /** Will recursively go over all IChatComponents added to the root and then set the style */ + public ChatBuilder colorAll(EnumChatFormatting format) { + + List list = new ArrayList(); + list.add(text); + + ListIterator it = list.listIterator(); + + while(it.hasNext()) { + Object o = it.next(); + IChatComponent component = (IChatComponent) o; + component.getChatStyle().setColor(format); + for(Object s : component.getSiblings()) it.add(s); + } + + return this; + } + public ChatComponentText flush() { return this.text; } diff --git a/src/main/java/com/hbm/util/WeightedRandomGeneric.java b/src/main/java/com/hbm/util/WeightedRandomGeneric.java new file mode 100644 index 000000000..e72a7e6e8 --- /dev/null +++ b/src/main/java/com/hbm/util/WeightedRandomGeneric.java @@ -0,0 +1,17 @@ +package com.hbm.util; + +import net.minecraft.util.WeightedRandom; + +public class WeightedRandomGeneric extends WeightedRandom.Item { + + T item; + + public WeightedRandomGeneric(T o, int weight) { + super(weight); + item = o; + } + + public T get() { + return item; + } +} diff --git a/src/main/java/com/hbm/world/feature/BedrockOre.java b/src/main/java/com/hbm/world/feature/BedrockOre.java index 71cd87a12..6d054e206 100644 --- a/src/main/java/com/hbm/world/feature/BedrockOre.java +++ b/src/main/java/com/hbm/world/feature/BedrockOre.java @@ -1,15 +1,49 @@ package com.hbm.world.feature; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBedrockOreTE.TileEntityBedrockOre; +import com.hbm.config.WorldConfig; import com.hbm.inventory.FluidStack; +import com.hbm.inventory.OreDictManager.DictFrame; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; +import com.hbm.util.WeightedRandomGeneric; import net.minecraft.block.Block; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class BedrockOre { + + public static List> weightedOres = new ArrayList(); + + public static void init() { + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.IRON, 1), WorldConfig.bedrockIronSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.COPPER, 1), WorldConfig.bedrockCopperSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.BORAX, 3, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockBoraxSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.ASBESTOS, 2), WorldConfig.bedrockAsbestosSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.NIOBIUM, 2, new FluidStack(Fluids.ACID, 500)), WorldConfig.bedrockNiobiumSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.TITANIUM, 2, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockTitaniumSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.TUNGSTEN, 2, new FluidStack(Fluids.ACID, 500)), WorldConfig.bedrockTungstenSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.GOLD, 1), WorldConfig.bedrockGoldSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.URANIUM, 4, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockUraniumSpawn); + registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.THORIUM, 4, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockThoriumSpawn); + registerBedrockOre(new BedrockOreDefinition(new ItemStack(Items.coal, 4), 1, 0x202020), WorldConfig.bedrockCoalSpawn); + registerBedrockOre(new BedrockOreDefinition(new ItemStack(ModItems.niter, 4), 2, 0x808080, new FluidStack(Fluids.ACID, 500)), WorldConfig.bedrockNiterSpawn); + registerBedrockOre(new BedrockOreDefinition(new ItemStack(ModItems.fluorite, 4), 1, 0xd0d0d0), WorldConfig.bedrockFluoriteSpawn); + registerBedrockOre(new BedrockOreDefinition(new ItemStack(Items.redstone, 4), 1, 0xd01010), WorldConfig.bedrockRedstoneSpawn); + } + + public static void registerBedrockOre(BedrockOreDefinition def, int weight) { + WeightedRandomGeneric weighted = new WeightedRandomGeneric(def, weight); + weightedOres.add(weighted); + } public static void generate(World world, int x, int z, ItemStack stack, FluidStack acid, int color, int tier) { @@ -49,4 +83,33 @@ public class BedrockOre { } } } + + public static class BedrockOreDefinition { + public ItemStack stack; + public FluidStack acid; + public int tier; + public int color; + + public BedrockOreDefinition(ItemStack stack, int tier, int color) { + this(stack, tier, color, null); + } + + public BedrockOreDefinition(ItemStack stack, int tier, int color, FluidStack acid) { + this.stack = stack; + this.tier = tier; + this.color = color; + this.acid = acid; + } + + public BedrockOreDefinition(EnumBedrockOre type, int tier) { + this(type, tier, null); + } + + public BedrockOreDefinition(EnumBedrockOre type, int tier, FluidStack acid) { + this.stack = DictFrame.fromOne(ModItems.ore_bedrock, type); + this.color = type.color; + this.tier = tier; + this.acid = acid; + } + } } diff --git a/src/main/java/com/hbm/world/feature/OilSpot.java b/src/main/java/com/hbm/world/feature/OilSpot.java index bcd746638..7b02e5263 100644 --- a/src/main/java/com/hbm/world/feature/OilSpot.java +++ b/src/main/java/com/hbm/world/feature/OilSpot.java @@ -80,7 +80,7 @@ public class OilSpot { world.setBlock(rX, y, rZ, ModBlocks.stone_cracked); break; - } else if(ground.getMaterial() == Material.leaves) { + } else if(ground.getMaterial() == Material.leaves && (meta & 8) != 0 && (meta & 4) == 0) { world.setBlockToAir(rX, y, rZ); break; } diff --git a/src/main/java/com/hbm/world/feature/OreLayer3D.java b/src/main/java/com/hbm/world/feature/OreLayer3D.java index 67fecb388..aee3cf43d 100644 --- a/src/main/java/com/hbm/world/feature/OreLayer3D.java +++ b/src/main/java/com/hbm/world/feature/OreLayer3D.java @@ -16,6 +16,10 @@ public class OreLayer3D { NoiseGeneratorPerlin noiseY; NoiseGeneratorPerlin noiseZ; + double scaleH; + double scaleV; + double threshold; + Block block; int meta; int dim = 0; @@ -30,6 +34,21 @@ public class OreLayer3D { this.dim = dim; return this; } + + public OreLayer3D setScaleH(double scale) { + this.scaleH = scale; + return this; + } + + public OreLayer3D setScaleV(double scale) { + this.scaleV = scale; + return this; + } + + public OreLayer3D setThreshold(double threshold) { + this.threshold = threshold; + return this; + } @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { @@ -44,9 +63,6 @@ public class OreLayer3D { int cX = event.chunkX; int cZ = event.chunkZ; - - double scaleH = 0.04D; - double scaleV = 0.25D; for(int x = cX + 8; x < cX + 24; x++) { for(int z = cZ + 8; z < cZ + 24; z++) { @@ -55,7 +71,7 @@ public class OreLayer3D { double nY = this.noiseY.func_151601_a(x * scaleH, z * scaleH); double nZ = this.noiseZ.func_151601_a(x * scaleH, y * scaleV); - if(nX * nY * nZ > 220) { + if(nX * nY * nZ > threshold) { Block target = world.getBlock(x, y, z); if(target.isNormalCube() && target.getMaterial() == Material.rock) { diff --git a/src/main/java/com/hbm/world/generator/DungeonToolbox.java b/src/main/java/com/hbm/world/generator/DungeonToolbox.java index f8a739378..7e0a899f9 100644 --- a/src/main/java/com/hbm/world/generator/DungeonToolbox.java +++ b/src/main/java/com/hbm/world/generator/DungeonToolbox.java @@ -3,15 +3,10 @@ package com.hbm.world.generator; import java.util.List; import java.util.Random; -import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.MetaBlock; -import com.hbm.items.ModItems; -import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; -import com.hbm.world.feature.BedrockOre; import net.minecraft.block.Block; import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenFlowers; @@ -25,11 +20,8 @@ public class DungeonToolbox { return; for(int i = x; i < x + sx; i++) { - for(int j = y; j < y + sy; j++) { - for(int k = z; k < z + sz; k++) { - MetaBlock b = getRandom(blocks, world.rand); world.setBlock(i, j, k, b.block, b.meta, 2); } @@ -93,24 +85,6 @@ public class DungeonToolbox { (new WorldGenMinable(ore, meta, amount, target)).generate(world, rand, x, y, z); } } - - public static void generateBedrockOreWithChance(World world, Random rand, int chunkX, int chunkZ, EnumBedrockOre ore, int tier, int chance) { - if(chance > 0 && rand.nextInt(chance) == 0) generateBedrockOre(world, rand, chunkX, chunkZ, ore, null, tier); - } - - public static void generateBedrockOreWithChance(World world, Random rand, int chunkX, int chunkZ, EnumBedrockOre ore, FluidStack stack, int tier, int chance) { - if(chance > 0 && rand.nextInt(chance) == 0) generateBedrockOre(world, rand, chunkX, chunkZ, ore, stack, tier); - } - - public static void generateBedrockOre(World world, Random rand, int chunkX, int chunkZ, EnumBedrockOre ore, int tier) { - generateBedrockOre(world, rand, chunkX, chunkZ, ore, null, tier); - } - - public static void generateBedrockOre(World world, Random rand, int chunkX, int chunkZ, EnumBedrockOre ore, FluidStack stack, int tier) { - int randPosX = chunkX + rand.nextInt(16) + 8; - int randPosZ = chunkZ + rand.nextInt(16) + 8; - BedrockOre.generate(world, randPosX, randPosZ, new ItemStack(ModItems.ore_bedrock, 1, ore.ordinal()), stack, ore.color, tier); - } private static WorldGenFlowers genFlowers = new WorldGenFlowers(null); public static void generateFlowers(World world, Random rand, int chunkX, int chunkZ, Block flower, int meta) { diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 4e2684089..f17622a7a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -18,22 +18,24 @@ achievement.c44.desc=Galvanisch verzinkt! ...das macht in der Übersetzung sowas achievement.c44=Kapitel 44 achievement.chemistry.desc=Bobmazon Level 3 (Betonziegel) achievement.chemistry=Chemie -achievement.digammaFeel.desc=the hollow within. -achievement.digammaFeel=The Terror of Feeling +achievement.digammaFeel.desc=Meine Augen bluten +achievement.digammaFeel=SEWAGE-INFUSED GARBAGE WORLD achievement.digammaKauaiMoho.desc=Alles ist schrecklich, hier ist etwas heiße Schoki. -achievement.digammaKauaiMoho=Sing, sing mir das Lied der Kauai Moho +achievement.digammaKauaiMoho=SING, SING ME THE SONG OF THE KAUAI MOHO achievement.digammaKnow.desc=what this world is about. -achievement.digammaKnow=The Terror of Knowing -achievement.digammaSee.desc=into the abyss. -achievement.digammaSee=The Terror of Seeing -achievement.digammaUpOnTop.desc=Bewundere meinen Sohn, er ist mein Klon. -achievement.digammaUpOnTop=Bewundere mich, bewundere mein Heim +achievement.digammaKnow=THE TERROR OF KNOWING +achievement.digammaSee.desc=Es ist Dunkel, bring eine Taschenlampe. +achievement.digammaSee=ENTER THE ABYSS +achievement.digammaUpOnTop.desc=Admire my son, he's my clone. +achievement.digammaUpOnTop=ADMIRE ME, ADMIRE MY HOME achievement.fiend.desc=Sei gemein. achievement.fiend2.desc=Sei gemeiner. achievement.fiend2=Unhold 2: Noch unholdiger achievement.fiend=Unhold achievement.freytag.desc=Leibgarde Herold achievement.freytag=Freytag +achievement.goFish.desc=Kreuzigung auf See +achievement.goFish=Go Fish achievement.hidden.desc=Töte einen Enderman mit einem fallenden Güterwagon wärend du brennst und mehr als 250 RADs hast. achievement.hidden=Versteckter Katalog achievement.horizonsBonus.desc=junge was ist denn mit dir verkehrt @@ -679,6 +681,7 @@ hbmfluid.plasma_xm=Xenon-Quecksilber-Plasma hbmfluid.puf6=Plutoniumhexafluorid hbmfluid.radiosolvent=Hochleistungs-Lösungsmittel hbmfluid.reclaimed=Wiederaufbetreitetes Industrieöl +hbmfluid.redmud=Rotschlamm hbmfluid.reformate=Reformat hbmfluid.reformgas=Reformatgas hbmfluid.salient=Saftiges Grün @@ -2473,6 +2476,8 @@ item.ore.iron=Eisen item.ore.niobium=Niob item.ore.titanium=Titan item.ore.tungsten=Wolfram +item.ore.thorium=Thorium +item.ore.uranium=Uran item.ore_bedrock.name=Bedrock-%serz item.ore_byproduct.b_aluminium.name=Kristallines Aluminiumfragment item.ore_byproduct.b_bismuth.name=Kristallines Bismutfragment @@ -2481,9 +2486,13 @@ item.ore_byproduct.b_copper.name=Kristallines Kupferfragment item.ore_byproduct.b_iron.name=Kristallines Eisenfragment item.ore_byproduct.b_lead.name=Kristallines Bleifragment item.ore_byproduct.b_lithium.name=Kristallines Lithiumfragment +item.ore_byproduct.b_polonium.name=Kristallines Poloniumfragment +item.ore_byproduct.b_radium.name=Kristallines Radiumfragment item.ore_byproduct.b_silicon.name=Kristallines Siliziumfragment item.ore_byproduct.b_sulfur.name=Kristallines Schwefelfragment +item.ore_byproduct.b_technetium.name=Kristallines Technetiumfragment item.ore_byproduct.b_titanium.name=Kristallines Titanfragment +item.ore_byproduct.b_uranium.name=Kristallines Uranfragment item.ore_centrifuged.name=Zentrifugiertes %serz item.ore_cleaned.name=Gereinigtes %serz item.ore_deepcleaned.name=Tiefengereinigtes %serz @@ -2491,7 +2500,7 @@ item.ore_enriched.name=Reiches %serz item.ore_nitrated.name=Nitriertes %serz item.ore_nitrocrystalline.name=Nitrokristallines %serz item.ore_purified.name=Pures %serz -item.ore_radcleaaned.name=Strahlengereinigtes %serz +item.ore_radcleaned.name=Strahlengereinigtes %serz item.ore_seared.name=Geätztes %serz item.ore_separated.name=Separiertes %serz item.overfuse.name=Singularitätsschraubenzieher @@ -4242,6 +4251,7 @@ tile.stone_depth_nether.name=Nether-Tiefenfels tile.stone_gneiss.name=Graphitschiefer tile.stone_porous.name=Poröser Stein tile.stone_resource.asbestos.name=Chrysotil +tile.stone_resource.bauxite.name=Bauxit tile.stone_resource.hematite.name=Hämatit tile.stone_resource.limestone.name=Kalkstein tile.stone_resource.malachite.name=Malachit diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 3758781ef..5a20f09a4 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -36,16 +36,16 @@ achievement.concrete.desc=A Bolshevik's favorite. achievement.concrete=Old Reliable achievement.desh.desc="Come on then, you lot. Places to go!" achievement.desh=Le Verrier -achievement.digammaFeel.desc=the hollow within. -achievement.digammaFeel=The Terror of Feeling +achievement.digammaFeel.desc=My eyes are bleeding +achievement.digammaFeel=SEWAGE-INFUSED GARBAGE WORLD achievement.digammaKauaiMoho.desc=Everything is awful, here's some hot choccy. -achievement.digammaKauaiMoho=Sing, sing me the song of the Kauai Moho +achievement.digammaKauaiMoho=SING, SING ME THE SONG OF THE KAUAI MOHO achievement.digammaKnow.desc=what this world is about. -achievement.digammaKnow=The Terror of Knowing -achievement.digammaSee.desc=into the abyss. -achievement.digammaSee=The Terror of Seeing +achievement.digammaKnow=THE TERROR OF KNOWING +achievement.digammaSee.desc=It's a bit dark, bring a flashlight. +achievement.digammaSee=ENTER THE ABYSS achievement.digammaUpOnTop.desc=Admire my son, he's my clone. -achievement.digammaUpOnTop=Admire Me, Admire my Home +achievement.digammaUpOnTop=ADMIRE ME, ADMIRE MY HOME achievement.fiend.desc=Be mean. achievement.fiend2.desc=Be meaner. achievement.fiend2=Delinquent 2: Delinquent Harder @@ -56,6 +56,8 @@ achievement.fusion.desc=A dance of deuterons, tritons, and energy. achievement.fusion=Fusion achievement.gasCent.desc=Unenriched Uranium hates him! achievement.gasCent=The Zippe Style +achievement.goFish.desc=Nautical Crucifixion +achievement.goFish=Go Fish achievement.hidden.desc=Kill a tainted creeper with a falling boxcar. achievement.hidden=Hidden Catalog achievement.horizonsBonus.desc=honest to god what the hell is wrong with you @@ -1251,6 +1253,7 @@ hbmfluid.plasma_xm=Xenon-Mercury Plasma hbmfluid.puf6=Plutonium Hexafluoride hbmfluid.radiosolvent=High-Performance Solvent hbmfluid.reclaimed=Reclaimed Industrial Oil +hbmfluid.redmud=Red Mud hbmfluid.reformate=Reformate hbmfluid.reformgas=Reformate Gas hbmfluid.salient=Salient Green @@ -3152,6 +3155,8 @@ item.ore.iron=Iron item.ore.niobium=Niobium item.ore.titanium=Titanium item.ore.tungsten=Tungsten +item.ore.thorium=Thorium +item.ore.uranium=Uranium item.ore_bedrock.name=%s Bedrock Ore item.ore_byproduct.b_aluminium.name=Crystalline Aluminium Fragment item.ore_byproduct.b_bismuth.name=Crystalline Bismuth Fragment @@ -3160,9 +3165,13 @@ item.ore_byproduct.b_copper.name=Crystalline Copper Fragment item.ore_byproduct.b_iron.name=Crystalline Iron Fragment item.ore_byproduct.b_lead.name=Crystalline Lead Fragment item.ore_byproduct.b_lithium.name=Crystalline Lithium Fragment +item.ore_byproduct.b_polonium.name=Crystalline Polonium Fragment +item.ore_byproduct.b_radium.name=Crystalline Radium Fragment item.ore_byproduct.b_silicon.name=Crystalline Silicon Fragment item.ore_byproduct.b_sulfur.name=Crystalline Sulfur Fragment +item.ore_byproduct.b_technetium.name=Crystalline Technetium Fragment item.ore_byproduct.b_titanium.name=Crystalline Titanium Fragment +item.ore_byproduct.b_uranium.name=Crystalline Uranium Fragment item.ore_centrifuged.name=Centrifuged %s Ore item.ore_cleaned.name=Cleaned %s Ore item.ore_deepcleaned.name=Deep Cleaned %s Ore @@ -3170,7 +3179,7 @@ item.ore_enriched.name=Enriched %s Ore item.ore_nitrated.name=Nitrated %s Ore item.ore_nitrocrystalline.name=Nitrocrystalline %s Ore item.ore_purified.name=Purified %s Ore -item.ore_raadcleaned.name=Radiation-Cleaned %s Ore +item.ore_radcleaned.name=Radiation-Cleaned %s Ore item.ore_seared.name=Seared %s Ore item.ore_separated.name=Separated %s Ore item.overfuse.name=Singularity Screwdriver @@ -5062,6 +5071,7 @@ tile.stone_depth_nether.name=Nether Depth Rock tile.stone_gneiss.name=Graphitic Schist tile.stone_porous.name=Porous Stone tile.stone_resource.asbestos.name=Chrysotile +tile.stone_resource.bauxite.name=Bauxite tile.stone_resource.hematite.name=Hematite tile.stone_resource.limestone.name=Limestone tile.stone_resource.malachite.name=Malachite diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_resource.bauxite.png b/src/main/resources/assets/hbm/textures/blocks/stone_resource.bauxite.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b38295d37df0c3d1b261659d4d5d34904bfe07 GIT binary patch literal 811 zcmV+`1JwM9P)A8_g4 z;a}37OIPk(*@UEGnxbi}HJG*vNS!h*L0~?Z;r+UE?{)FU#It)AC(m=vc}{TtWz~zD z8i44)@E^ASOu4sE;OhGdBv2N}nWK_gnuYwF8yZ=WSmSZOjp)6x zWE1%AhXiGuXQiPCmvR~I)UvWFSsvvx#v#i&S+{2R`P(5{z`d5@c;Ha=sv^85A$G_Q zLS#!o;^;mcvao&y6o}?50_c7HI`=B`M2Y8g;n@op3zxw3jt#fqQ3o-m#d8XXCRn zY7l!aQ%kcZDAfdED5?Hq*|=LkE{0TW#P3Hb2ah6VLdjf3u(lxSU3iEcYVEd0OiM@{ z&z@(TT*TC?3LydpKVI;nn@2W3rC3|l2pw?p*93sA?HJWNu@naufc3itqPLPK`x$$$ z3}++9{FGqvjz-^a12pb-%+V6Ds=^|GU4WXR7!%~w}!=quW;j=stLjB=5nCuH{Z$B7*?yJ!zWP;?+CLF!gLS6^j4CJUpV? zcbJK%IVb53Es24Gf}#%40=k0<_czOkDap>G7-ioioc)nuw?>={9a=!@p;F4f?UUPz pB+D0s*CfqjfzScbf#Ji3tu+Ap@$m+&HPbY) zEDJG4)^#O>z}wp!ecv;VBiHMdrfIlbE-0l)DRI4CvCq%XG)=>Pzvp;7qLiYpYm6~` ze0(sDBhERjwKPpb+qTT}j8Y2kJ$6|ZthE5#+}zN09q02IV+;=u4^&l!bB^6^$Jf^v zcXxLT!vKIW2D`3n0asOph~T~F_VyNluIuRgp7Z&Ph_EaRbzRf8Ep=UE4~GMFUE{qc z=Zv+Mr>7^3F;rDWjFFr(IcJ7ppzAtB1OV?nI;HeO#ad#Fgb)fFW6Vz%Yw7#Gd@3R+ zrC62)t+hreMb4SJu4$SEYb{DC=6MDv%(kvuPDHT#{hkm)DKN$$BE{z|9%IB9Q$}6a zm6Q?|Kq-ZY5JDh?Kvh-6PJnGpr4%tnzQ4aq-fkVe_q1&bfO8HJA;$P0t4$N{J;2W* z0fqGrQf6VHk>V z8&E`wolVmaLMS?H+Gt}8#+d)CTGzE)X9%HO-*(n9Mx1jv=lBPrP*Hz^9#>=l0000< KMNUMnLSTZp`4Dda literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/achievement_icon.acid.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.acid.png new file mode 100644 index 0000000000000000000000000000000000000000..e83e786e34c2210894a3abb121a747fc55ef8382 GIT binary patch literal 29485 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
VScbgJ`YgLIpgd+r$^nSZ#*eh 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 g=chg{<{9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/digamma_feel.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.digammafeel.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/digamma_feel.png rename to src/main/resources/assets/hbm/textures/items/achievement_icon.digammafeel.png diff --git a/src/main/resources/assets/hbm/textures/items/achievement_icon.digammaforourright.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.digammaforourright.png new file mode 100644 index 0000000000000000000000000000000000000000..bccb7255a1ec255c5cde816dbe617aaba996c12e GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf(WAr;|p$=_#7*cuF42y$$E0FTv6)Bryq>#IxjC<{o(^_mAduQV_NI*Gy4)z4*}Q$iB} DfK5wg literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/digamma_kauai_moho.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.digammakauaimoho.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/digamma_kauai_moho.png rename to src/main/resources/assets/hbm/textures/items/achievement_icon.digammakauaimoho.png diff --git a/src/main/resources/assets/hbm/textures/items/digamma_know.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.digammaknow.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/digamma_know.png rename to src/main/resources/assets/hbm/textures/items/achievement_icon.digammaknow.png diff --git a/src/main/resources/assets/hbm/textures/items/digamma_see.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.digammasee.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/digamma_see.png rename to src/main/resources/assets/hbm/textures/items/achievement_icon.digammasee.png diff --git a/src/main/resources/assets/hbm/textures/items/digamma_unity.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.digammaunity.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/digamma_unity.png rename to src/main/resources/assets/hbm/textures/items/achievement_icon.digammaunity.png diff --git a/src/main/resources/assets/hbm/textures/items/digamma_up_on_top.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.digammaupontop.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/digamma_up_on_top.png rename to src/main/resources/assets/hbm/textures/items/achievement_icon.digammaupontop.png diff --git a/src/main/resources/assets/hbm/textures/items/achievement_icon.gofish.png b/src/main/resources/assets/hbm/textures/items/achievement_icon.gofish.png new file mode 100644 index 0000000000000000000000000000000000000000..f6622381a37c2ecd55082cf5e39a6b9db205040e GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VflSbB4w;YfOjn;>WldDMcQO6w z^*0Qf&t7g_qoKUvv&_^Doxe*QPq-GZ_}lx5x57AOmXOPhaL!e4CoQ<8$GPtX!{l78 VUsZkyd%?BKXO4CmzRQ4p7ZPafP(m~7boXDJ$Z}S>szv*q{t2y uIVbLkA^QKrxf}L|SUpo^I_;(}&mdR5-MW#zb(b5^DGZ*jelF{r5}E*HP(=p- diff --git a/src/main/resources/assets/hbm/textures/items/digamma_event_horizon.png b/src/main/resources/assets/hbm/textures/items/digamma_event_horizon.png deleted file mode 100644 index 11a7ae960ee5c735cc5b401373fff85021f8f8cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfb-;kbIr!#5n_cG7`?;bGoVOpk7jNhpyn^{aC%;VAgLm7DU6$-R$a~{N!GzK? zGml+aAe9sqc6itJ;%-~sfBXUSpL9OG`Mt%jd-b&|3zFC-#YXIjTc#(xFGOBi(N3!f PXcvR0tDnm{r-UW|70o=(