/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.util.effects; import cpw.mods.fml.common.SidedProxy; import net.minecraft.entity.Entity; import net.minecraft.tileentity.TileEntity; /** * * @author CovertJaguar <http://www.railcraft.info> */ public class EffectManager { @SidedProxy(clientSide = "mods.railcraft.client.util.effects.ClientEffectProxy", serverSide = "mods.railcraft.common.util.effects.CommonEffectProxy") public static IEffectManager instance; public static interface IEffectSource { public double getX(); public double getY(); public double getZ(); public boolean isDead(); } public static class EffectSourceTile implements IEffectSource { private final TileEntity source; private EffectSourceTile(TileEntity source) { this.source = source; } @Override public double getX() { return source.xCoord + 0.5; } @Override public double getY() { return source.yCoord + 0.5; } @Override public double getZ() { return source.zCoord + 0.5; } @Override public boolean isDead() { return source.isInvalid(); } } public static class EffectSourceEntity implements IEffectSource { private final Entity source; private EffectSourceEntity(Entity source) { this.source = source; } @Override public double getX() { return source.posX; } @Override public double getY() { return source.posY + source.yOffset; } @Override public double getZ() { return source.posZ; } @Override public boolean isDead() { return source.isDead; } } public static IEffectSource getEffectSource(Object source) { if (source instanceof TileEntity) { return new EffectSourceTile((TileEntity) source); } else if (source instanceof Entity) { return new EffectSourceEntity((Entity) source); } return null; } }