added the breathlessness effect

This commit is contained in:
Ellpeck 2018-11-29 17:58:47 +01:00
parent 3cf875cc7c
commit 3598e424b0
28 changed files with 260 additions and 137 deletions

View file

@ -1,14 +1,9 @@
package de.ellpeck.naturesaura;
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFlower;
import net.minecraft.block.BlockStoneBrick;
import net.minecraft.init.Blocks;
import net.minecraftforge.common.config.Config;
import net.minecraftforge.common.config.Config.Comment;
import net.minecraftforge.common.config.Config.RangeDouble;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
@Config(modid = NaturesAura.MOD_ID, category = "")
public final class ModConfig {
@ -40,6 +35,8 @@ public final class ModConfig {
public boolean plantBoostEffect = true;
@Comment("If the Aura Imbalance effect of explosions happening randomly if Aura levels are too low should occur")
public boolean explosionEffect = true;
@Comment("If the Aura Imbalance effect of breathlessness if Aura levels are too low should occur")
public boolean breathlessEffect = true;
}
public static class Client {

View file

@ -12,6 +12,7 @@ import de.ellpeck.naturesaura.compat.Compat;
import de.ellpeck.naturesaura.events.CommonEvents;
import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.potion.ModPotions;
import de.ellpeck.naturesaura.proxy.IProxy;
import de.ellpeck.naturesaura.recipes.ModRecipes;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -59,6 +60,7 @@ public final class NaturesAura {
new ModBlocks();
new ModItems();
new ModPotions();
Compat.preInit();
PacketHandler.init();

View file

@ -32,11 +32,11 @@ import java.util.List;
import java.util.Random;
public class BlockAncientLeaves extends BlockLeaves implements
IModItem, IModelProvider, IColorProvidingBlock, IColorProvidingItem, ITileEntityProvider {
IModItem, ICreativeItem, IModelProvider, IColorProvidingBlock, IColorProvidingItem, ITileEntityProvider {
public BlockAncientLeaves() {
this.leavesFancy = true;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -49,11 +49,6 @@ public class BlockAncientLeaves extends BlockLeaves implements
return "ancient_leaves";
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -1,25 +1,20 @@
package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.block.BlockLog;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import java.util.Collections;
import java.util.Map;
public class BlockAncientLog extends BlockLog implements IModItem, IModelProvider {
public class BlockAncientLog extends BlockLog implements IModItem, ICreativeItem, IModelProvider {
public BlockAncientLog() {
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -27,11 +22,6 @@ public class BlockAncientLog extends BlockLog implements IModItem, IModelProvide
return "ancient_log";
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -1,7 +1,7 @@
package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.gen.WorldGenAncientTree;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -11,8 +11,6 @@ import net.minecraft.block.IGrowable;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
@ -22,11 +20,9 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import java.util.Collections;
import java.util.Map;
import java.util.Random;
public class BlockAncientSapling extends BlockBush implements IGrowable, IModItem, IModelProvider {
public class BlockAncientSapling extends BlockBush implements IGrowable, IModItem, ICreativeItem, IModelProvider {
private static final AxisAlignedBB AABB = new AxisAlignedBB(
0.09999999403953552D, 0.0D, 0.09999999403953552D,
@ -36,7 +32,7 @@ public class BlockAncientSapling extends BlockBush implements IGrowable, IModIte
this.setHardness(0.0F);
this.setSoundType(SoundType.PLANT);
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -60,11 +56,6 @@ public class BlockAncientSapling extends BlockBush implements IGrowable, IModIte
return "ancient_sapling";
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -2,6 +2,7 @@ package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityImpl;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -26,7 +27,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
import javax.annotation.Nullable;
public class BlockContainerImpl extends BlockContainer implements IModItem, IModelProvider {
public class BlockContainerImpl extends BlockContainer implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
@ -40,7 +41,7 @@ public class BlockContainerImpl extends BlockContainer implements IModItem, IMod
this.tileClass = tileClass;
this.tileRegName = tileReg;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Nullable
@ -58,11 +59,6 @@ public class BlockContainerImpl extends BlockContainer implements IModItem, IMod
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {
}

View file

@ -37,7 +37,7 @@ public class BlockGoldenLeaves extends BlockLeaves implements
public BlockGoldenLeaves() {
this.leavesFancy = true;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -50,11 +50,6 @@ public class BlockGoldenLeaves extends BlockLeaves implements
return "golden_leaves";
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -1,5 +1,6 @@
package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -10,14 +11,14 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
public class BlockImpl extends Block implements IModItem, IModelProvider {
public class BlockImpl extends Block implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
public BlockImpl(String baseName, Material material) {
super(material);
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -25,11 +26,6 @@ public class BlockImpl extends Block implements IModItem, IModelProvider {
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -9,6 +9,7 @@ import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockFaceShape;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
@ -39,8 +40,8 @@ public abstract class BlockSlabsNA extends BlockImpl implements ICustomItemBlock
}
@Override
public boolean shouldAddCreative() {
return !this.isDouble();
public CreativeTabs getTabToAdd() {
return this.isDouble() ? null : super.getTabToAdd();
}
@Override

View file

@ -1,5 +1,6 @@
package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -11,14 +12,14 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
public class BlockStairsNA extends BlockStairs implements IModItem, IModelProvider {
public class BlockStairsNA extends BlockStairs implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
protected BlockStairsNA(String baseName, IBlockState modelState) {
super(modelState);
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
this.fullBlock = false;
this.lightOpacity = 0;
}
@ -28,11 +29,6 @@ public class BlockStairsNA extends BlockStairs implements IModItem, IModelProvid
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -0,0 +1,52 @@
package de.ellpeck.naturesaura.chunk.effect;
import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect;
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.potion.ModPotions;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import org.apache.commons.lang3.mutable.MutableInt;
import java.util.List;
public class BreathlessEffect implements IDrainSpotEffect {
public static final ResourceLocation NAME = new ResourceLocation(NaturesAura.MOD_ID, "breathless");
@Override
public void update(World world, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, MutableInt spot) {
if (spot.intValue() >= 0 || world.getTotalWorldTime() % 100 != 0)
return;
int aura = IAuraChunk.getAuraInArea(world, pos, 50);
if (aura > 0)
return;
int dist = Math.min(Math.abs(aura) / 500, 75);
if (dist < 10)
return;
int amp = Math.min(MathHelper.floor(Math.abs(aura) / 25000F), 3);
List<EntityLivingBase> entities = world.getEntitiesWithinAABB(EntityLivingBase.class,
new AxisAlignedBB(pos).grow(dist));
for (EntityLivingBase entity : entities)
entity.addPotionEffect(new PotionEffect(ModPotions.BREATHLESS, 300, amp));
}
@Override
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
return ModConfig.enabledFeatures.breathlessEffect;
}
@Override
public ResourceLocation getName() {
return NAME;
}
}

View file

@ -10,5 +10,6 @@ public final class DrainSpotEffects {
NaturesAuraAPI.DRAIN_SPOT_EFFECTS.put(ReplenishingEffect.NAME, ReplenishingEffect::new);
NaturesAuraAPI.DRAIN_SPOT_EFFECTS.put(BalanceEffect.NAME, BalanceEffect::new);
NaturesAuraAPI.DRAIN_SPOT_EFFECTS.put(ExplosionEffect.NAME, ExplosionEffect::new);
NaturesAuraAPI.DRAIN_SPOT_EFFECTS.put(BreathlessEffect.NAME, BreathlessEffect::new);
}
}

View file

@ -24,11 +24,11 @@ public class GrassDieEffect implements IDrainSpotEffect {
@Override
public void update(World world, Chunk chunk, IAuraChunk auraChunk, BlockPos pos, MutableInt spot) {
if (spot.intValue() < 0) {
int aura = IAuraChunk.getAuraInArea(world, pos, 25);
int aura = IAuraChunk.getAuraInArea(world, pos, 50);
if (aura < 0) {
int amount = Math.min(300, Math.abs(aura) / 1000);
if (amount > 1) {
int dist = MathHelper.clamp(Math.abs(aura) / 750, 5, 45);
int dist = MathHelper.clamp(Math.abs(aura) / 750, 5, 75);
for (int i = amount / 2 + world.rand.nextInt(amount / 2); i >= 0; i--) {
BlockPos grassPos = new BlockPos(
pos.getX() + world.rand.nextGaussian() * dist,

View file

@ -1,26 +1,21 @@
package de.ellpeck.naturesaura.items;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import java.util.Collections;
import java.util.Map;
public class ItemImpl extends Item implements IModItem, IModelProvider {
public class ItemImpl extends Item implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
public ItemImpl(String baseName) {
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -28,11 +23,6 @@ public class ItemImpl extends Item implements IModItem, IModelProvider {
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -2,6 +2,7 @@ package de.ellpeck.naturesaura.items.tools;
import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -17,13 +18,13 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import javax.annotation.Nullable;
public class ItemAxeNA extends ItemAxe implements IModItem, IModelProvider {
public class ItemAxeNA extends ItemAxe implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
public ItemAxeNA(String baseName, ToolMaterial material, float damage, float speed) {
super(material, damage, speed);
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -31,11 +32,6 @@ public class ItemAxeNA extends ItemAxe implements IModItem, IModelProvider {
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -1,7 +1,9 @@
package de.ellpeck.naturesaura.items.tools;
import crafttweaker.api.creativetabs.ICreativeTab;
import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -24,14 +26,14 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import javax.annotation.Nullable;
public class ItemHoeNA extends ItemHoe implements IModItem, IModelProvider {
public class ItemHoeNA extends ItemHoe implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
public ItemHoeNA(String baseName, ToolMaterial material) {
super(material);
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -66,11 +68,6 @@ public class ItemHoeNA extends ItemHoe implements IModItem, IModelProvider {
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -3,13 +3,12 @@ package de.ellpeck.naturesaura.items.tools;
import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.block.BlockStoneBrick;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.ItemPickaxe;
import net.minecraft.item.ItemStack;
@ -27,14 +26,14 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import javax.annotation.Nullable;
public class ItemPickaxeNA extends ItemPickaxe implements IModItem, IModelProvider {
public class ItemPickaxeNA extends ItemPickaxe implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
public ItemPickaxeNA(String baseName, ToolMaterial material) {
super(material);
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -42,11 +41,6 @@ public class ItemPickaxeNA extends ItemPickaxe implements IModItem, IModelProvid
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -2,6 +2,7 @@ package de.ellpeck.naturesaura.items.tools;
import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -27,13 +28,13 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import javax.annotation.Nullable;
public class ItemShovelNA extends ItemSpade implements IModItem, IModelProvider {
public class ItemShovelNA extends ItemSpade implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
public ItemShovelNA(String baseName, ToolMaterial material) {
super(material);
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -81,11 +82,6 @@ public class ItemShovelNA extends ItemSpade implements IModItem, IModelProvider
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -2,6 +2,7 @@ package de.ellpeck.naturesaura.items.tools;
import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.reg.ICreativeItem;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry;
@ -18,13 +19,13 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import javax.annotation.Nullable;
public class ItemSwordNA extends ItemSword implements IModItem, IModelProvider {
public class ItemSwordNA extends ItemSword implements IModItem, ICreativeItem, IModelProvider {
private final String baseName;
public ItemSwordNA(String baseName, ToolMaterial material) {
super(material);
this.baseName = baseName;
ModRegistry.addItemOrBlock(this);
ModRegistry.add(this);
}
@Override
@ -32,11 +33,6 @@ public class ItemSwordNA extends ItemSword implements IModItem, IModelProvider {
return this.baseName;
}
@Override
public boolean shouldAddCreative() {
return true;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {

View file

@ -0,0 +1,9 @@
package de.ellpeck.naturesaura.potion;
import net.minecraft.potion.Potion;
public final class ModPotions {
public static final Potion BREATHLESS = new PotionBreathless().setIconIndex(0, 0);
}

View file

@ -0,0 +1,42 @@
package de.ellpeck.naturesaura.potion;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingHealEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.Random;
public class PotionBreathless extends PotionImpl {
private final Random random = new Random();
protected PotionBreathless() {
super("breathless", true, 0);
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void onHeal(LivingHealEvent event) {
PotionEffect effect = event.getEntityLiving().getActivePotionEffect(this);
if (effect == null)
return;
float chance = (effect.getAmplifier() + 1) / 15F;
if (this.random.nextFloat() <= chance) {
event.setAmount(event.getAmount() / 4F);
}
}
@Override
public boolean isReady(int duration, int amplifier) {
int mod = 200 >> amplifier;
return mod > 0 && duration % mod == 0 && this.random.nextBoolean();
}
@Override
public void performEffect(EntityLivingBase entity, int amplifier) {
entity.attackEntityFrom(DamageSource.MAGIC, 1F);
}
}

View file

@ -0,0 +1,58 @@
package de.ellpeck.naturesaura.potion;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.client.Minecraft;
import net.minecraft.potion.Potion;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class PotionImpl extends Potion implements IModItem {
private static final ResourceLocation TEXTURE = new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/potions.png");
protected final String baseName;
protected PotionImpl(String baseName, boolean isBadEffectIn, int liquidColorIn) {
super(isBadEffectIn, liquidColorIn);
this.baseName = baseName;
ModRegistry.add(this);
}
@Override
public Potion setIconIndex(int x, int y) {
return super.setIconIndex(x, y);
}
@Override
@SideOnly(Side.CLIENT)
public int getStatusIconIndex() {
Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURE);
return super.getStatusIconIndex();
}
@Override
public String getBaseName() {
return this.baseName;
}
@Override
public void onPreInit(FMLPreInitializationEvent event) {
}
@Override
public void onInit(FMLInitializationEvent event) {
}
@Override
public void onPostInit(FMLPostInitializationEvent event) {
}
}

View file

@ -0,0 +1,11 @@
package de.ellpeck.naturesaura.reg;
import de.ellpeck.naturesaura.NaturesAura;
import net.minecraft.creativetab.CreativeTabs;
public interface ICreativeItem {
default CreativeTabs getTabToAdd() {
return NaturesAura.CREATIVE_TAB;
}
}

View file

@ -8,8 +8,6 @@ public interface IModItem {
String getBaseName();
boolean shouldAddCreative();
void onPreInit(FMLPreInitializationEvent event);
void onInit(FMLInitializationEvent event);

View file

@ -3,9 +3,11 @@ package de.ellpeck.naturesaura.reg;
import de.ellpeck.naturesaura.NaturesAura;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
@ -19,23 +21,27 @@ public final class ModRegistry {
private static final List<IModItem> ALL_ITEMS = new ArrayList<>();
public static void addItemOrBlock(IModItem item) {
public static void add(IModItem item) {
ALL_ITEMS.add(item);
}
private static void registerItem(Item item, String name, boolean addCreative) {
private static void registerPotion(Potion potion, String name) {
potion.setPotionName("potion." + NaturesAura.MOD_ID + "." + name + ".name");
potion.setRegistryName(NaturesAura.MOD_ID, name);
ForgeRegistries.POTIONS.register(potion);
}
private static void registerItem(Item item, String name, CreativeTabs tab) {
item.setTranslationKey(NaturesAura.MOD_ID + "." + name);
item.setRegistryName(NaturesAura.MOD_ID, name);
ForgeRegistries.ITEMS.register(item);
if (addCreative)
item.setCreativeTab(NaturesAura.CREATIVE_TAB);
else
item.setCreativeTab(null);
item.setCreativeTab(tab);
}
private static void registerBlock(Block block, String name, ItemBlock item, boolean addCreative) {
private static void registerBlock(Block block, String name, ItemBlock item, CreativeTabs tab) {
block.setTranslationKey(NaturesAura.MOD_ID + "." + name);
block.setRegistryName(NaturesAura.MOD_ID, name);
@ -46,17 +52,20 @@ public final class ModRegistry {
ForgeRegistries.ITEMS.register(item);
}
if (addCreative)
block.setCreativeTab(NaturesAura.CREATIVE_TAB);
else
block.setCreativeTab(null);
item.setCreativeTab(tab);
}
private static CreativeTabs getTab(IModItem item) {
if (item instanceof ICreativeItem)
return ((ICreativeItem) item).getTabToAdd();
return null;
}
public static void preInit(FMLPreInitializationEvent event) {
for (IModItem item : ALL_ITEMS) {
if (item instanceof Item)
registerItem((Item) item, item.getBaseName(), item.shouldAddCreative());
else if (item instanceof Block) {
if (item instanceof Item) {
registerItem((Item) item, item.getBaseName(), getTab(item));
} else if (item instanceof Block) {
Block block = (Block) item;
ItemBlock itemBlock;
@ -65,8 +74,9 @@ public final class ModRegistry {
else
itemBlock = new ItemBlock(block);
registerBlock(block, item.getBaseName(), itemBlock, item.shouldAddCreative());
}
registerBlock(block, item.getBaseName(), itemBlock, getTab(item));
} else if (item instanceof Potion)
registerPotion((Potion) item, item.getBaseName());
if (item instanceof IModelProvider) {
Map<ItemStack, ModelResourceLocation> models = ((IModelProvider) item).getModelLocations();

View file

@ -109,3 +109,5 @@ advancement.naturesaura.sky_ingot=Sturdy and light
advancement.naturesaura.sky_ingot.desc=Create an Ingot of the Skies using the Offering to the Gods
command.naturesaura.aura.usage=/naaura <action> <amount> <range>
potion.naturesaura.breathless.name=Breathless

View file

@ -0,0 +1,12 @@
{
"name": "Breathlessness",
"icon": "minecraft:wool",
"category": "effects",
"advancement": "naturesaura:furnace_heater",
"pages": [
{
"type": "text",
"text": "The removal of $(aura) from an area not only has an effect on plantlife around the effected area, but also on creatures that require $(item)oxygen$() to breathe. These creatures will quickly notice that, the more $(aura) is drained, the less easy it becomes to breathe: Their lungs will start producing an acute pain that stings in irregular intervals, and it becomes severely harder to regenerate health."
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB