diff --git a/changelog.txt b/changelog.txt index cb50d1c..6342395 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,12 @@ +# Thaumic Concilium 1.1.1 +- FIXES: + - Empty NBT tag no longer applied to dropped blocks and items. + - Added black list support for Sloppy Alchemist and Burned Witch. + - Correct handling of missing required mods instead of crash. + - Explicit floor generation for Burning Site. + - Crimson Avanpost' chest is now a legit loot table, modify "ThaumicConcilium:cultist_tower" with your loot editor of choice. + +# Thaumic Concilium 1.1.0 - !!!BREAKING, READ BEFORE UPDATING!!! - Config values for mob replacement and rift spawn chances are now defined in a sane way (lesser number - lesser chance). Reverse them in your configs accordingly. diff --git a/gradle.properties b/gradle.properties index 857da3c..4c03a30 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.daemon=false # General Specifications mc_version=1.7.10 -mod_version=1.1.0 +mod_version=1.1.1 forge_version=10.13.4.1614 mod_group=com.ilya3point999k.thaumicconcilium mod_id=thaumicconcilium diff --git a/src/main/java/com/ilya3point999k/thaumicconcilium/common/CommonProxy.java b/src/main/java/com/ilya3point999k/thaumicconcilium/common/CommonProxy.java index 2426170..dc63cd9 100644 --- a/src/main/java/com/ilya3point999k/thaumicconcilium/common/CommonProxy.java +++ b/src/main/java/com/ilya3point999k/thaumicconcilium/common/CommonProxy.java @@ -10,6 +10,7 @@ import com.ilya3point999k.thaumicconcilium.common.items.wands.foci.TCFociUpgrade import com.ilya3point999k.thaumicconcilium.common.network.TCPacketHandler; import com.ilya3point999k.thaumicconcilium.common.registry.*; import com.ilya3point999k.thaumicconcilium.common.tiles.LithographerTile; +import com.ilya3point999k.thaumicconcilium.common.world.CultistTowerWorldGen; import com.ilya3point999k.thaumicconcilium.common.world.ThaumicConciliumWorldGen; import com.ilya3point999k.thaumicconcilium.common.world.village.BurningSite; import com.ilya3point999k.thaumicconcilium.common.world.village.BurningSiteHandler; @@ -23,10 +24,15 @@ import cpw.mods.fml.common.registry.VillagerRegistry; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.World; import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraftforge.common.ChestGenHooks; import net.minecraftforge.common.MinecraftForge; +import thaumcraft.common.config.ConfigItems; import thaumcraft.common.entities.golems.ContainerGolem; import thaumcraft.common.entities.golems.EntityGolemBase; @@ -42,12 +48,12 @@ public class CommonProxy implements IGuiHandler { TCEntityRegistry.init(); TCConfig.configurate(event.getSuggestedConfigurationFile()); TCPacketHandler.init(); - GameRegistry.registerWorldGenerator(new ThaumicConciliumWorldGen(), 0); } public void init(FMLInitializationEvent event) { Integration.init(); + TCEntityEventHandler entityEventHandler = new TCEntityEventHandler(); MinecraftForge.EVENT_BUS.register(entityEventHandler); FMLCommonHandler.instance().bus().register(entityEventHandler); @@ -56,6 +62,44 @@ public class CommonProxy implements IGuiHandler { VillagerRegistry.instance().registerVillageCreationHandler(new BurningSiteHandler()); MapGenStructureIO.func_143031_a(BurningSite.class, "BurningSite"); } + if (Integration.dyes){ + ChestGenHooks chest = ChestGenHooks.getInfo(CultistTowerWorldGen.CULTIST_TOWER_LOOT); + + chest.setMin(2); + chest.setMax(8); + + chest.addItem(new WeightedRandomChestContent( + new ItemStack(ConfigItems.itemNugget, 1, 7), + 1, 3, + 10)); + + chest.addItem(new WeightedRandomChestContent( + new ItemStack(ConfigItems.itemEldritchObject, 1, 1), + 1, 1, + 6)); + + chest.addItem(new WeightedRandomChestContent( + new ItemStack(Items.bow), + 1, 1, + 8)); + + chest.addItem(new WeightedRandomChestContent( + new ItemStack(Items.arrow), + 1, 16, + 15)); + + chest.addItem(new WeightedRandomChestContent( + new ItemStack(ConfigItems.itemTripleMeatTreat), + 1, 3, + 10)); + + chest.addItem(new WeightedRandomChestContent( + new ItemStack(ConfigItems.itemResource, 1, 9), + 1, 3, + 12)); + + } + } public void postInit(FMLPostInitializationEvent event) { diff --git a/src/main/java/com/ilya3point999k/thaumicconcilium/common/TCConfig.java b/src/main/java/com/ilya3point999k/thaumicconcilium/common/TCConfig.java index 004dfcd..7af397a 100644 --- a/src/main/java/com/ilya3point999k/thaumicconcilium/common/TCConfig.java +++ b/src/main/java/com/ilya3point999k/thaumicconcilium/common/TCConfig.java @@ -67,6 +67,8 @@ public class TCConfig { public static int[] vengefulGolemBiomeBlacklist; public static int[] crimsonRangerBiomeBlacklist; public static int[] witheredBotanistBiomeBlacklist; + public static int[] sloppyAlchemistBiomeBlacklist; + public static int[] burnedWitchBiomeBlacklist; public static int crimsonRaidID; @@ -127,8 +129,10 @@ public class TCConfig { biomes = conf.getString("crimsonRangerBiomeBlacklist","mobs", "", "Comma separated IDs of biomes where spawn is not allowed"); crimsonRangerBiomeBlacklist = biomes.isEmpty() ? null : Arrays.stream(biomes.split(",")).mapToInt(Integer::parseInt).toArray(); - biomes = conf.getString("witheredBotanistBiomeBlacklist","mobs", "", "Comma separated IDs of biomes where spawn is not allowed"); - witheredBotanistBiomeBlacklist = biomes.isEmpty() ? null : Arrays.stream(biomes.split(",")).mapToInt(Integer::parseInt).toArray(); + biomes = conf.getString("sloppyAlchemistBiomeBlacklist","mobs", "", "Comma separated IDs of biomes where spawn is not allowed"); + sloppyAlchemistBiomeBlacklist = biomes.isEmpty() ? null : Arrays.stream(biomes.split(",")).mapToInt(Integer::parseInt).toArray(); + biomes = conf.getString("burnedWitchBiomeBlacklist","mobs", "", "Comma separated IDs of biomes where spawn is not allowed"); + burnedWitchBiomeBlacklist = biomes.isEmpty() ? null : Arrays.stream(biomes.split(",")).mapToInt(Integer::parseInt).toArray(); madThaumaturgeReplacesBrainyZombieChance = conf.getInt("madThaumaturgeReplacesBrainyZombieChance", "mobs", 20, 0, 100, "0 - never, 100 - always."); crimsonPaladinReplacesCultistWarriorChance = conf.getInt("crimsonPaladinReplacesCultistWarriorChance", "mobs", 20, 0, 100, "0 - never, 100 - always."); diff --git a/src/main/java/com/ilya3point999k/thaumicconcilium/common/ThaumicConcilium.java b/src/main/java/com/ilya3point999k/thaumicconcilium/common/ThaumicConcilium.java index c5011ac..1e2e121 100644 --- a/src/main/java/com/ilya3point999k/thaumicconcilium/common/ThaumicConcilium.java +++ b/src/main/java/com/ilya3point999k/thaumicconcilium/common/ThaumicConcilium.java @@ -13,7 +13,7 @@ import net.minecraft.creativetab.CreativeTabs; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -@Mod(modid = ThaumicConcilium.MODID, name = ThaumicConcilium.NAME, version = ThaumicConcilium.VERSION, dependencies = "after:Thaumcraft;after:ForbiddenMagic;after:ThaumicTinkerer;after:gadomancy;after:thaumicbases;after:Automagy;after:TaintedMagic;after:ThaumicHorizons;after:witchery;after:arsmagica2;after:BloodArsenal;after:alfheim;after:Avaritia") +@Mod(modid = ThaumicConcilium.MODID, name = ThaumicConcilium.NAME, version = ThaumicConcilium.VERSION, dependencies = "required-after:Thaumcraft;required-after:ForbiddenMagic;required-after:ThaumicTinkerer;after:gadomancy;after:thaumicbases;after:Automagy;after:TaintedMagic;after:ThaumicHorizons;after:witchery;after:arsmagica2;after:BloodArsenal;after:alfheim;after:Avaritia") public class ThaumicConcilium { public static final String MODID = "ThaumicConcilium"; diff --git a/src/main/java/com/ilya3point999k/thaumicconcilium/common/events/TCEntityEventHandler.java b/src/main/java/com/ilya3point999k/thaumicconcilium/common/events/TCEntityEventHandler.java index 7b91971..67121c0 100644 --- a/src/main/java/com/ilya3point999k/thaumicconcilium/common/events/TCEntityEventHandler.java +++ b/src/main/java/com/ilya3point999k/thaumicconcilium/common/events/TCEntityEventHandler.java @@ -182,7 +182,7 @@ public class TCEntityEventHandler { public void on(ItemTooltipEvent event) { if (event.itemStack == null) return; - if (ItemNBTHelper.verifyExistance(event.itemStack, ItemResource.TAG_MEMBRANE)){ + if (event.itemStack.hasTagCompound() && event.itemStack.getTagCompound().hasKey(ItemResource.TAG_MEMBRANE)){ event.toolTip.add(StatCollector.translateToLocal("tc.tooltip.nether_membrane")); } if (event.itemStack.getItem() instanceof ItemWandCasting) { @@ -413,7 +413,7 @@ public class TCEntityEventHandler { ItemStack stack = entityItem.getDataWatcher().getWatchableObjectItemStack(10); if (stack == null) return; if (stack.stackSize < 1) return; - if (ItemNBTHelper.getBoolean(stack, ItemResource.TAG_MEMBRANE, false)) { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(ItemResource.TAG_MEMBRANE)) { EntityItemFireResistant f = new EntityItemFireResistant(event.world, entityItem.posX, entityItem.posY, entityItem.posZ, stack); f.delayBeforeCanPickup = 40; f.motionX = entityItem.motionX; diff --git a/src/main/java/com/ilya3point999k/thaumicconcilium/common/registry/TCEntityRegistry.java b/src/main/java/com/ilya3point999k/thaumicconcilium/common/registry/TCEntityRegistry.java index 3f3f63c..6ae7251 100644 --- a/src/main/java/com/ilya3point999k/thaumicconcilium/common/registry/TCEntityRegistry.java +++ b/src/main/java/com/ilya3point999k/thaumicconcilium/common/registry/TCEntityRegistry.java @@ -23,6 +23,7 @@ import fox.spiteful.forbidden.DarkAspects; import fox.spiteful.forbidden.compat.Compat; import net.minecraft.entity.EnumCreatureType; import net.minecraft.world.biome.BiomeGenBase; +import net.minecraftforge.common.BiomeDictionary; import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; @@ -209,9 +210,9 @@ public class TCEntityRegistry { EntityRegistry.addSpawn(WitheredBotanist.class, TCConfig.witheredBotanistSpawnChance, 1, 1, EnumCreatureType.creature, (BiomeGenBase[]) Arrays.stream(BiomeGenBase.getBiomeGenArray()).filter(x -> x != null && (TCConfig.witheredBotanistBiomeBlacklist == null || Arrays.stream(TCConfig.witheredBotanistBiomeBlacklist).noneMatch(y -> y == x.biomeID))).toArray(BiomeGenBase[]::new)); } - if (Integration.witchery){ - EntityRegistry.addSpawn(SloppyAlchemist.class, TCConfig.sloppyAlchemistSpawnChance, 1, 1, EnumCreatureType.monster, BiomeGenBase.hell); - EntityRegistry.addSpawn(BurnedWitch.class, TCConfig.burnedWitchSpawnChance, 1, 1, EnumCreatureType.monster, BiomeGenBase.hell); + if (Integration.witchery && Compat.bm){ + EntityRegistry.addSpawn(SloppyAlchemist.class, TCConfig.sloppyAlchemistSpawnChance, 1, 1, EnumCreatureType.monster, Arrays.stream(BiomeDictionary.getBiomesForType(BiomeDictionary.Type.NETHER)).filter(x -> x != null && (TCConfig.sloppyAlchemistBiomeBlacklist == null || Arrays.stream(TCConfig.sloppyAlchemistBiomeBlacklist).noneMatch(y -> y == x.biomeID))).toArray(BiomeGenBase[]::new)); + EntityRegistry.addSpawn(BurnedWitch.class, TCConfig.burnedWitchSpawnChance, 1, 1, EnumCreatureType.monster, Arrays.stream(BiomeDictionary.getBiomesForType(BiomeDictionary.Type.NETHER)).filter(x -> x != null && (TCConfig.burnedWitchBiomeBlacklist == null || Arrays.stream(TCConfig.burnedWitchBiomeBlacklist).noneMatch(y -> y == x.biomeID))).toArray(BiomeGenBase[]::new)); } } diff --git a/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/CultistTowerWorldGen.java b/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/CultistTowerWorldGen.java index a77491b..478f8e6 100644 --- a/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/CultistTowerWorldGen.java +++ b/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/CultistTowerWorldGen.java @@ -1,5 +1,6 @@ package com.ilya3point999k.thaumicconcilium.common.world; +import com.ilya3point999k.thaumicconcilium.common.ThaumicConcilium; import com.ilya3point999k.thaumicconcilium.common.entities.mobs.CrimsonArcher; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -7,8 +8,10 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.ChestGenHooks; import thaumcraft.common.config.ConfigBlocks; import thaumcraft.common.config.ConfigItems; import thaumcraft.common.tiles.TileBanner; @@ -18,6 +21,7 @@ import java.util.List; import java.util.Random; public class CultistTowerWorldGen extends WorldGenerator { + public static final String CULTIST_TOWER_LOOT = ThaumicConcilium.MODID+":cultist_tower"; public static final List validTerrainList = new ArrayList(){{ add(Blocks.dirt); @@ -201,24 +205,14 @@ public class CultistTowerWorldGen extends WorldGenerator { world.setBlock(x + 5, y + 10, z - 2, Blocks.chest); TileEntityChest chest = (TileEntityChest) world.getTileEntity(x + 5, y + 10, z - 2); - ItemStack[] lootTable = new ItemStack[]{ - new ItemStack(ConfigItems.itemNugget, random.nextInt(3) + 1, 7), - new ItemStack(ConfigItems.itemEldritchObject, 1, 1), - new ItemStack(Items.bow), - new ItemStack(Items.arrow, random.nextInt(16) + 1), - new ItemStack(ConfigItems.itemTripleMeatTreat, random.nextInt(3) + 1), - new ItemStack(ConfigItems.itemResource, random.nextInt(3) + 1, 9) - }; + ChestGenHooks info = ChestGenHooks.getInfo(CULTIST_TOWER_LOOT); - int itemsToAdd = random.nextInt(8) + 2; - for (int i = 0; i < itemsToAdd; i++) { - int slot = random.nextInt(chest.getSizeInventory()); - ItemStack loot = lootTable[random.nextInt(lootTable.length)].copy(); - - if (chest.getStackInSlot(slot) == null) { - chest.setInventorySlotContents(slot, loot); - } - } + WeightedRandomChestContent.generateChestContents( + world.rand, + info.getItems(world.rand), + chest, + info.getCount(world.rand) + ); CrimsonArcher archer = new CrimsonArcher(world); archer.func_110163_bv(); diff --git a/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/village/BurningSite.java b/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/village/BurningSite.java index 326ccf3..9261125 100644 --- a/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/village/BurningSite.java +++ b/src/main/java/com/ilya3point999k/thaumicconcilium/common/world/village/BurningSite.java @@ -75,6 +75,12 @@ public class BurningSite extends StructureVillagePieces.Village { Blocks.gravel, Blocks.gravel, false); + this.fillWithBlocks(world, box, + 0, -1, 0, + 8, -1, 8, + Blocks.dirt, + Blocks.dirt, + false); for (int x = 3; x <= 5; x++) { for (int z = 3; z <= 5; z++) { diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 245d3bb..f1baabb 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "ThaumicConcilium", "name": "Thaumic Concilium", "description": "Addon for Thaumcraft about devices to assist in solo and coop gameplay", - "version": "1.1.0", + "version": "1.1.1", "mcversion": "1.7.10", "url": "", "updateUrl": "",