diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/CrimsonRevelations.java b/src/main/java/com/mobiusflip/crimsonrevelations/CrimsonRevelations.java index 0721b70..0839276 100644 --- a/src/main/java/com/mobiusflip/crimsonrevelations/CrimsonRevelations.java +++ b/src/main/java/com/mobiusflip/crimsonrevelations/CrimsonRevelations.java @@ -9,6 +9,7 @@ import com.mobiusflip.crimsonrevelations.compat.CompatHandler; import com.mobiusflip.crimsonrevelations.init.CRCreativeTabs; +import com.mobiusflip.crimsonrevelations.init.RenderingHandler; import com.mobiusflip.crimsonrevelations.init.ResearchHandler; @Mod(modid = CrimsonRevelations.MODID, name = CrimsonRevelations.NAME, version = CrimsonRevelations.VERSION, dependencies = CrimsonRevelations.DEPENDENCIES) @@ -19,17 +20,21 @@ public class CrimsonRevelations { public static final String DEPENDENCIES = "required-after:thaumcraft@[1.12.2-6.1.BETA26,);after:thaumicaugmentation"; public static final CreativeTabs tabCR = new CRCreativeTabs(CreativeTabs.CREATIVE_TAB_ARRAY.length, "CrimsonRevelationsTab"); + @Mod.Instance + public static CrimsonRevelations instance; + @EventHandler public void preInit(FMLPreInitializationEvent event) { + RenderingHandler.preInit(); } @EventHandler public void init(FMLInitializationEvent event) { + CompatHandler.init(); ResearchHandler.init(); } @EventHandler public void postinit(FMLPostInitializationEvent event) { - CompatHandler.init(); } } diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/client/renderer/RenderOvergrownTaintacle.java b/src/main/java/com/mobiusflip/crimsonrevelations/client/renderer/RenderOvergrownTaintacle.java new file mode 100644 index 0000000..649f7ee --- /dev/null +++ b/src/main/java/com/mobiusflip/crimsonrevelations/client/renderer/RenderOvergrownTaintacle.java @@ -0,0 +1,25 @@ +package com.mobiusflip.crimsonrevelations.client.renderer; + +import com.mobiusflip.crimsonrevelations.CrimsonRevelations; +import com.mobiusflip.crimsonrevelations.entity.boss.EntityOvergrownTaintacle; + +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import thaumcraft.client.renderers.models.entity.ModelTaintacle; + +@SideOnly(Side.CLIENT) +public class RenderOvergrownTaintacle extends RenderLiving { + public static final ResourceLocation TEXTURES = new ResourceLocation(CrimsonRevelations.MODID, "textures/entity/overgrown_taintacle.png"); + + public RenderOvergrownTaintacle(RenderManager renderManager) { + super(renderManager, new ModelTaintacle(12, false), 0.8F); + } + + @Override + protected ResourceLocation getEntityTexture(EntityOvergrownTaintacle entity) { + return TEXTURES; + } +} diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/entity/boss/EntityOvergrownTaintacle.java b/src/main/java/com/mobiusflip/crimsonrevelations/entity/boss/EntityOvergrownTaintacle.java new file mode 100644 index 0000000..054165f --- /dev/null +++ b/src/main/java/com/mobiusflip/crimsonrevelations/entity/boss/EntityOvergrownTaintacle.java @@ -0,0 +1,170 @@ +package com.mobiusflip.crimsonrevelations.entity.boss; + +import net.minecraftforge.event.ForgeEventFactory; + +import javax.annotation.Nullable; + +import com.mobiusflip.crimsonrevelations.init.LootTableHandler; + +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.BossInfo; +import net.minecraft.world.BossInfoServer; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.util.ResourceLocation; +import thaumcraft.api.ThaumcraftApiHelper; +import thaumcraft.api.entities.ITaintedMob; +import thaumcraft.client.fx.FXDispatcher; +import thaumcraft.common.entities.monster.mods.ChampionModifier; +import thaumcraft.common.entities.monster.tainted.EntityTaintacle; +import thaumcraft.common.lib.SoundsTC; +import thaumcraft.common.lib.utils.EntityUtils; + +public class EntityOvergrownTaintacle extends EntityTaintacle implements ITaintedMob { + protected final BossInfoServer bossInfo; + + public EntityOvergrownTaintacle(World world) { + super(world); + this.bossInfo = new BossInfoServer(this.getDisplayName(), BossInfo.Color.PINK, BossInfo.Overlay.PROGRESS); + this.setSize(1.0F, 5.5F); + this.experienceValue = 50; + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(8.0D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(9.0D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(175.0D); + this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(1.0D); + } + + @Override + protected void updateAITasks() { + super.updateAITasks(); + this.bossInfo.setPercent(this.getHealth() / this.getMaxHealth()); + } + + @Override + public void removeTrackingPlayer(final EntityPlayerMP player) { + super.removeTrackingPlayer(player); + this.bossInfo.removePlayer(player); + } + + @Override + public void addTrackingPlayer(final EntityPlayerMP player) { + super.addTrackingPlayer(player); + this.bossInfo.addPlayer(player); + } + + // Fixes it spawning with lower health + protected void makeChampion() { + if (getEntityAttribute(ThaumcraftApiHelper.CHAMPION_MOD).getAttributeValue() > -2.0) return; + + int type = rand.nextInt(ChampionModifier.mods.length); + IAttributeInstance mod = getEntityAttribute(ThaumcraftApiHelper.CHAMPION_MOD); + mod.removeModifier(ChampionModifier.mods[type].attributeMod); + mod.applyModifier(ChampionModifier.mods[type].attributeMod); + + IAttributeInstance health = getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH); + health.removeModifier(EntityUtils.CHAMPION_HEALTH); + health.applyModifier(EntityUtils.CHAMPION_HEALTH); + + IAttributeInstance attackDamage = getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE); + attackDamage.removeModifier(EntityUtils.CHAMPION_DAMAGE); + attackDamage.applyModifier(EntityUtils.CHAMPION_DAMAGE); + + setHealth(getMaxHealth()); + setCustomNameTag(ChampionModifier.mods[type].getModNameLocalized() + " " + getName()); + enablePersistence(); + switch (type) { + // Bold + case 0: { + IAttributeInstance movementSpeed = getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + movementSpeed.removeModifier(EntityUtils.BOLDBUFF); + movementSpeed.applyModifier(EntityUtils.BOLDBUFF); + break; + } + + // Mighty + case 3: { + attackDamage.removeModifier(EntityUtils.MIGHTYBUFF); + attackDamage.applyModifier(EntityUtils.MIGHTYBUFF); + break; + } + + // Warded + case 5: { + int warding = (int) (getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).getBaseValue() / 2.0); + setAbsorptionAmount(getAbsorptionAmount() + warding); + break; + } + + default: + break; + } + } + + @Override + public boolean canBreatheUnderwater() { + return true; + } + + @Override + public boolean canBePushed() { + return false; + } + + @Override + protected int decreaseAirSupply(int air) { + return air; + } + + @Override + public void setInWeb() { + } + + @Override + public IEntityLivingData onInitialSpawn(DifficultyInstance diff, @Nullable IEntityLivingData data) { + this.makeChampion(); + this.bossInfo.setName(this.getDisplayName()); + return super.onInitialSpawn(diff, data); + } + + public boolean isNonBoss() { + return false; + } + + // Special taint death animation + @Override + protected void onDeathUpdate() { + if (!this.world.isRemote && (this.isPlayer() || this.recentlyHit > 0 && this.canDropLoot() && this.world.getGameRules().getBoolean("doMobLoot"))) { + int i = this.getExperiencePoints(this.attackingPlayer); + i = ForgeEventFactory.getExperienceDrop(this, this.attackingPlayer, i); + + while (i > 0) { + int j = EntityXPOrb.getXPSplit(i); + i -= j; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, j)); + } + } + + this.setDead(); + this.playSound(SoundsTC.gore, 1.0F, 0.65F / (rand.nextFloat() * 0.4F + 0.8F)); + + for (int k = 0; k < 40; ++k) { + FXDispatcher.INSTANCE.splooshFX(this); + FXDispatcher.INSTANCE.taintsplosionFX(this); + } + } + + @Override + @Nullable + protected ResourceLocation getLootTable() { + return LootTableHandler.OVERGROWN_TAINTACLE; + } +} diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/init/LootTableHandler.java b/src/main/java/com/mobiusflip/crimsonrevelations/init/LootTableHandler.java index 5417431..c6f3e28 100644 --- a/src/main/java/com/mobiusflip/crimsonrevelations/init/LootTableHandler.java +++ b/src/main/java/com/mobiusflip/crimsonrevelations/init/LootTableHandler.java @@ -13,7 +13,10 @@ @EventBusSubscriber(modid = CrimsonRevelations.MODID) public class LootTableHandler { public static final ResourceLocation CULTIST = new ResourceLocation(CrimsonRevelations.MODID, ("entities/cultist")); - + + // Bosses + public static final ResourceLocation OVERGROWN_TAINTACLE = new ResourceLocation(CrimsonRevelations.MODID, ("entities/boss/overgrown_taintacle")); + @SubscribeEvent(priority = EventPriority.LOWEST) public static void onLootTableLoad(LootTableLoadEvent event) { if (event.getName().equals(new ResourceLocation(Thaumcraft.MODID, "cultist"))) { diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/init/RecipeHandler.java b/src/main/java/com/mobiusflip/crimsonrevelations/init/RecipeHandler.java index e65929f..6b3556e 100644 --- a/src/main/java/com/mobiusflip/crimsonrevelations/init/RecipeHandler.java +++ b/src/main/java/com/mobiusflip/crimsonrevelations/init/RecipeHandler.java @@ -16,7 +16,7 @@ public class RecipeHandler { public static void initArcaneCrafting() { - // defaultGroup is meant for recipe books and is not really needed here. + // defaultGroup is meant for recipe books and is not really needed here. ResourceLocation defaultGroup = new ResourceLocation(""); ThaumcraftApi.addArcaneCraftingRecipe(new ResourceLocation("crimsonrevelations", "crimsonbanner"), new ShapedArcaneRecipe( @@ -144,7 +144,7 @@ public static void initCrucible() { ThaumcraftApi.addCrucibleRecipe(new ResourceLocation("crimsonrevelations", "orderquartz"), new CrucibleRecipe("ORDERED_DECONSTRUCTION", new ItemStack(Items.QUARTZ, 4, 0), "blockQuartz", new AspectList().add(Aspect.ORDER, 25))); - + ThaumcraftApi.addCrucibleRecipe(new ResourceLocation("crimsonrevelations", "ordersandstone"), new CrucibleRecipe("ORDERED_DECONSTRUCTION", new ItemStack(Blocks.SAND, 4, 0), "sandstone", new AspectList().add(Aspect.ORDER, 25))); diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/init/RegistryHandler.java b/src/main/java/com/mobiusflip/crimsonrevelations/init/RegistryHandler.java index 47cbd3c..e7965e5 100644 --- a/src/main/java/com/mobiusflip/crimsonrevelations/init/RegistryHandler.java +++ b/src/main/java/com/mobiusflip/crimsonrevelations/init/RegistryHandler.java @@ -4,11 +4,13 @@ import com.google.common.base.Preconditions; import com.mobiusflip.crimsonrevelations.CrimsonRevelations; +import com.mobiusflip.crimsonrevelations.entity.boss.EntityOvergrownTaintacle; import net.minecraft.block.Block; import net.minecraft.block.BlockDoor; import net.minecraft.block.BlockSlab; import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.entity.Entity; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.crafting.IRecipe; @@ -18,12 +20,19 @@ import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.EntityEntry; +import net.minecraftforge.fml.common.registry.EntityRegistry; import net.minecraftforge.fml.common.registry.ForgeRegistries; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.IForgeRegistryEntry; +import thaumcraft.api.ThaumcraftApi; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectEventProxy; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.aspects.AspectRegistryEvent; @SuppressWarnings("deprecation") @EventBusSubscriber(modid = CrimsonRevelations.MODID) @@ -49,6 +58,28 @@ public static void registerRecipes(RegistryEvent.Register event) { RecipeHandler.initInfusion(); } + @SubscribeEvent + public static void registerEntities(RegistryEvent.Register event) { + int id = 0; + + entityRegistryHelper("overgrown_taintacle", EntityOvergrownTaintacle.class, id++, 64, 3, true, 0x1C1A2F, 0x5649B4); + } + + @SubscribeEvent + public static void registerAspects(AspectRegistryEvent event) { + ThaumcraftApi.registerEntityTag(CrimsonRevelations.MODID + ".overgrown_taintacle", new AspectList().add(Aspect.FLUX, 30).add(Aspect.ELDRITCH, 30).add(Aspect.AVERSION, 30).add(Aspect.PLANT, 30)); + } + + public static void entityRegistryHelper(String name, Class clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates, int eggColor1, int eggColor2) { + EntityRegistry.registerModEntity(new ResourceLocation(CrimsonRevelations.MODID, name), clazz, CrimsonRevelations.MODID + "." + name, id, CrimsonRevelations.instance, trackingRange, + updateFrequency, sendVelocityUpdates, eggColor1, eggColor2); + } + + public static void egglessEntityRegistryHelper(String name, Class clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates) { + EntityRegistry.registerModEntity(new ResourceLocation(CrimsonRevelations.MODID, name), clazz, CrimsonRevelations.MODID + "." + name, id, CrimsonRevelations.instance, trackingRange, + updateFrequency, sendVelocityUpdates); + } + @SubscribeEvent public static void registerItemBlocks(RegistryEvent.Register event) { final IForgeRegistry registry = event.getRegistry(); diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/init/RenderingHandler.java b/src/main/java/com/mobiusflip/crimsonrevelations/init/RenderingHandler.java new file mode 100644 index 0000000..c33c5e0 --- /dev/null +++ b/src/main/java/com/mobiusflip/crimsonrevelations/init/RenderingHandler.java @@ -0,0 +1,15 @@ +package com.mobiusflip.crimsonrevelations.init; + +import com.mobiusflip.crimsonrevelations.client.renderer.RenderOvergrownTaintacle; +import com.mobiusflip.crimsonrevelations.entity.boss.EntityOvergrownTaintacle; + +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderingHandler { + public static void preInit() { + RenderingRegistry.registerEntityRenderingHandler(EntityOvergrownTaintacle.class, RenderOvergrownTaintacle::new); + } +} diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/init/ResearchHandler.java b/src/main/java/com/mobiusflip/crimsonrevelations/init/ResearchHandler.java index 1b51841..4096764 100644 --- a/src/main/java/com/mobiusflip/crimsonrevelations/init/ResearchHandler.java +++ b/src/main/java/com/mobiusflip/crimsonrevelations/init/ResearchHandler.java @@ -1,21 +1,34 @@ package com.mobiusflip.crimsonrevelations.init; import com.mobiusflip.crimsonrevelations.CrimsonRevelations; +import com.mobiusflip.crimsonrevelations.entity.boss.EntityOvergrownTaintacle; import com.mobiusflip.crimsonrevelations.item.foci.FocusEffectPoison; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.Loader; import thaumcraft.Thaumcraft; import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.aspects.AspectList; import thaumcraft.api.casters.FocusEngine; import thaumcraft.api.research.ResearchCategories; +import thaumcraft.api.research.ScanEntity; +import thaumcraft.api.research.ScanningManager; public class ResearchHandler { public static void init() { + // Focus Effects + FocusEngine.registerElement(FocusEffectPoison.class, new ResourceLocation(CrimsonRevelations.MODID, "textures/foci/poison.png"), 9039872); + + // Research Categories ResearchCategories.registerCategory("REVELATIONS", "CrimsonRites", new AspectList(), new ResourceLocation(Thaumcraft.MODID, "textures/items/crimson_rites.png"), new ResourceLocation(CrimsonRevelations.MODID, "textures/gui/research_background.jpg"), new ResourceLocation(Thaumcraft.MODID, "textures/gui/gui_research_back_over.png")); + + // Researches ThaumcraftApi.registerResearchLocation(new ResourceLocation(CrimsonRevelations.MODID, "research/revelations")); - - // Focus Effects - FocusEngine.registerElement(FocusEffectPoison.class, new ResourceLocation(CrimsonRevelations.MODID, "textures/foci/poison.png"), 9039872); + if (Loader.isModLoaded("thaumicaugmentation")) + ThaumcraftApi.registerResearchLocation(new ResourceLocation(CrimsonRevelations.MODID, "research/compat/thaumic_augmentation")); + + // Scanning + if (Loader.isModLoaded("thaumicaugmentation")) + ScanningManager.addScannableThing(new ScanEntity("!OVERGROWN_TAINTACLE", EntityOvergrownTaintacle.class, true)); } } diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/item/foci/FocusEffectPoison.java b/src/main/java/com/mobiusflip/crimsonrevelations/item/foci/FocusEffectPoison.java index 775966b..eca761d 100644 --- a/src/main/java/com/mobiusflip/crimsonrevelations/item/foci/FocusEffectPoison.java +++ b/src/main/java/com/mobiusflip/crimsonrevelations/item/foci/FocusEffectPoison.java @@ -88,8 +88,8 @@ public void renderParticleFX(World world, double posX, double posY, double posZ, pp.setGravity(-0.2F); pp.setMaxAge(7 + world.rand.nextInt(5)); pp.setAlphaF(0.7F); - pp.setSlowDown(0.75); - pp.setScale(new float[]{(float)(0.1F + world.rand.nextGaussian() * 0.2F), 2.0F}); + pp.setSlowDown(0.75D); + pp.setScale(new float[]{(float) (0.1F + world.rand.nextGaussian() * 0.2F), 2.0F}); pp.setParticles(575, 8, 8); pp.setRBGColorF(((color >> 16) & 0xFF) / 255.0F, ((color >> 8) & 0xFF) / 255.0F, (color & 0xFF) / 255.0F); ParticleEngine.addEffect(world, pp); diff --git a/src/main/resources/assets/crimsonrevelations/lang/en_us.lang b/src/main/resources/assets/crimsonrevelations/lang/en_us.lang index 352d198..7f6b0e1 100644 --- a/src/main/resources/assets/crimsonrevelations/lang/en_us.lang +++ b/src/main/resources/assets/crimsonrevelations/lang/en_us.lang @@ -1,5 +1,7 @@ itemGroup.CrimsonRevelationsTab=New Crimson Revelations +entity.crimsonrevelations.overgrown_taintacle.name=Overgrown Taintacle + item.crimsonrevelations.crimson_fabric.name=Crimson Fabric item.crimsonrevelations.crimson_plate.name=Crimson Plate @@ -41,6 +43,9 @@ crimsonrevelations.research.QUARTZ_PURIFICATION.text.stage.2=The key insight pro crimsonrevelations.research.FOCUS_POISON.title=Focus Effect: Poison crimsonrevelations.research.FOCUS_POISON.stage.0=The poison inflicted from this blast of noxious goo lasts twice as long when compared to other effects.
I must be wary however that a fair amount of monsters are resistant to being poisoned, such as the undead, spiders, and other rather fearsome opponents. +crimsonrevelations.research.OVERGROWN_TAINTACLE.title=Overgrown Taintacle +crimsonrevelations.research.OVERGROWN_TAINTACLE.stage.0=During one of my treks in the Emptiness, I have discovered a significantly stronger and more aggressive Taintacle variant. It seems to have a symbiotic relationship with the environment, which would explain the main source of its power.
Hunting these larger Taintacles would be ideal, I should be able to harvest whatever congealed energy it leaves off for my own purposes. + focus.crimsonrevelations.poison.name=Poison focus.crimsonrevelations.poison.text=Summons a blob of goo at your target and poisons it for double the usual duration. diff --git a/src/main/resources/assets/crimsonrevelations/loot_tables/entities/boss/overgrown_taintacle.json b/src/main/resources/assets/crimsonrevelations/loot_tables/entities/boss/overgrown_taintacle.json new file mode 100644 index 0000000..1693577 --- /dev/null +++ b/src/main/resources/assets/crimsonrevelations/loot_tables/entities/boss/overgrown_taintacle.json @@ -0,0 +1,83 @@ +{ + "pools": [ + { + "name": "loot_bag", + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "thaumcraft:loot_bag", + "weight": 1, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + } + ] + }, + { + "name": "primordial_pearl", + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "thaumcraft:primordial_pearl", + "entryName": "pearl_very_damaged", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": 0.125 + } + ] + }, + { + "type": "item", + "name": "thaumcraft:primordial_pearl", + "entryName": "pearl_damaged", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_damage", + "damage": 0.25 + } + ] + } + ] + }, + { + "name": "void_seed", + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "thaumcraft:void_seed", + "weight": 1, + "conditions": [ + { + "condition": "killed_by_player" + } + ], + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 2 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/crimsonrevelations/research/compat/thaumic_augmentation.json b/src/main/resources/assets/crimsonrevelations/research/compat/thaumic_augmentation.json new file mode 100644 index 0000000..9e3c7cb --- /dev/null +++ b/src/main/resources/assets/crimsonrevelations/research/compat/thaumic_augmentation.json @@ -0,0 +1,29 @@ +{ + "entries": [ + { + "key": "!OVERGROWN_TAINTACLE", + "name": "crimsonrevelations.research.OVERGROWN_TAINTACLE.title", + "icons": [ + "crimsonrevelations:textures/research/r_overgrown_taintacle.png" + ], + "category": "REVELATIONS", + "parents": [], + "siblings": [], + "meta": [ + "HEX", + "HIDDEN" + ], + "location": [ + -1, + -1 + ], + "reward_item": [], + "reward_knowledge": [], + "stages": [ + { + "text": "crimsonrevelations.research.OVERGROWN_TAINTACLE.stage.0" + } + ] + } + ] +} diff --git a/src/main/resources/assets/crimsonrevelations/research/revelations.json b/src/main/resources/assets/crimsonrevelations/research/revelations.json index b417b93..6d920a1 100644 --- a/src/main/resources/assets/crimsonrevelations/research/revelations.json +++ b/src/main/resources/assets/crimsonrevelations/research/revelations.json @@ -367,10 +367,14 @@ "CRIMSON_REVELATIONS", "FOCUSELEMENTAL" ], + "siblings": [], + "meta": [], "location": [ 0, -2 ], + "reward_item": [], + "reward_knowledge": [], "stages": [ { "text": "crimsonrevelations.research.FOCUS_POISON.stage.0", diff --git a/src/main/resources/assets/crimsonrevelations/textures/entity/overgrown_taintacle.png b/src/main/resources/assets/crimsonrevelations/textures/entity/overgrown_taintacle.png new file mode 100644 index 0000000..b573d35 Binary files /dev/null and b/src/main/resources/assets/crimsonrevelations/textures/entity/overgrown_taintacle.png differ diff --git a/src/main/resources/assets/crimsonrevelations/textures/research/r_overgrown_taintacle.png b/src/main/resources/assets/crimsonrevelations/textures/research/r_overgrown_taintacle.png new file mode 100644 index 0000000..e8eede0 Binary files /dev/null and b/src/main/resources/assets/crimsonrevelations/textures/research/r_overgrown_taintacle.png differ