Working Particles
This commit is contained in:
parent
dcc1c1b50c
commit
1aa5f2e85c
|
@ -35,7 +35,7 @@ archivesBaseName = "ironchest"
|
|||
|
||||
// Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here
|
||||
minecraft {
|
||||
version = "1.9-12.16.0.1781-1.9"
|
||||
version = "1.9-12.16.0.1802-1.9"
|
||||
mappings = "snapshot_20160319"
|
||||
runDir = "run"
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.util.Random;
|
|||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import cpw.mods.ironchest.client.IronChestTextureHandler;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.IProperty;
|
||||
|
@ -33,11 +34,13 @@ import net.minecraft.item.Item;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumBlockRenderType;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.world.Explosion;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
@ -78,6 +81,12 @@ public class BlockIronChest extends BlockContainer
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumBlockRenderType getRenderType(IBlockState state)
|
||||
{
|
||||
return EnumBlockRenderType.ENTITYBLOCK_ANIMATED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumHand hand, ItemStack heldItem,
|
||||
EnumFacing direction, float hitX, float hitY, float hitZ)
|
||||
|
@ -258,6 +267,22 @@ public class BlockIronChest extends BlockContainer
|
|||
return super.getExplosionResistance(world, pos, exploder, explosion);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean addHitEffects(IBlockState state, World worldObj, RayTraceResult target, net.minecraft.client.particle.EffectRenderer effectRenderer)
|
||||
{
|
||||
IronChestTextureHandler.addHitEffects(worldObj, target.getBlockPos(), target.sideHit);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean addDestroyEffects(World world, BlockPos pos, net.minecraft.client.particle.EffectRenderer effectRenderer)
|
||||
{
|
||||
IronChestTextureHandler.addDestroyEffects(world, pos, world.getBlockState(pos));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasComparatorInputOverride(IBlockState state)
|
||||
{
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
******************************************************************************/
|
||||
package cpw.mods.ironchest;
|
||||
|
||||
import cpw.mods.ironchest.client.IronChestEventHandler;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.Mod.EventHandler;
|
||||
|
@ -55,5 +56,7 @@ public class IronChest
|
|||
NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy);
|
||||
proxy.registerRenderInformation();
|
||||
MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler());
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(IronChestEventHandler.INSTANCE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package cpw.mods.ironchest.client;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
public class IronChestEventHandler
|
||||
{
|
||||
public static IronChestEventHandler INSTANCE = new IronChestEventHandler();
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPreTextureStiching(TextureStitchEvent.Pre event)
|
||||
{
|
||||
if (event.map == FMLClientHandler.instance().getClient().getTextureMapBlocks())
|
||||
{
|
||||
event.map.registerSprite(new ResourceLocation("ironchest:blocks/copperbreak"));
|
||||
event.map.registerSprite(new ResourceLocation("ironchest:blocks/crystalbreak"));
|
||||
event.map.registerSprite(new ResourceLocation("ironchest:blocks/diamondbreak"));
|
||||
event.map.registerSprite(new ResourceLocation("ironchest:blocks/goldbreak"));
|
||||
event.map.registerSprite(new ResourceLocation("ironchest:blocks/ironbreak"));
|
||||
event.map.registerSprite(new ResourceLocation("ironchest:blocks/silverbreak"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
package cpw.mods.ironchest.client;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableMap.Builder;
|
||||
|
||||
import cpw.mods.ironchest.IronChestType;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.particle.EntityDiggingFX;
|
||||
import net.minecraft.client.renderer.block.model.ModelManager;
|
||||
import net.minecraft.util.EnumBlockRenderType;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class IronChestTextureHandler
|
||||
{
|
||||
private static Map<IronChestType, ResourceLocation> locations;
|
||||
|
||||
static
|
||||
{
|
||||
Builder<IronChestType, ResourceLocation> builder = ImmutableMap.<IronChestType, ResourceLocation> builder();
|
||||
for (IronChestType typ : IronChestType.values())
|
||||
{
|
||||
if (typ != IronChestType.DIRTCHEST9000 && typ != IronChestType.OBSIDIAN)
|
||||
builder.put(typ, new ResourceLocation("ironchest", "blocks/" + typ.getModelTexture().replace("chest", "break").replace(".png", "")));
|
||||
else if (typ == IronChestType.DIRTCHEST9000)
|
||||
builder.put(typ, new ResourceLocation("minecraft", "blocks/dirt"));
|
||||
else if (typ == IronChestType.OBSIDIAN)
|
||||
builder.put(typ, new ResourceLocation("minecraft", "blocks/obsidian"));
|
||||
}
|
||||
locations = builder.build();
|
||||
}
|
||||
|
||||
public static void addHitEffects(World world, BlockPos pos, EnumFacing side)
|
||||
{
|
||||
IBlockState state = world.getBlockState(pos);
|
||||
Block block = state.getBlock();
|
||||
state = block.getActualState(state, world, pos);
|
||||
Random rand = new Random();
|
||||
IronChestType type = IronChestType.values()[IronChestType.validateMeta(block.getMetaFromState(state))];
|
||||
ModelManager modelmanager = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager();
|
||||
|
||||
if (block.getRenderType(state) != EnumBlockRenderType.INVISIBLE)
|
||||
{
|
||||
int i = pos.getX();
|
||||
int j = pos.getY();
|
||||
int k = pos.getZ();
|
||||
float f = 0.1F;
|
||||
AxisAlignedBB bb = block.getBoundingBox(state, world, pos);
|
||||
|
||||
double d0 = i + rand.nextDouble() * (bb.maxX - bb.minX - f * 2.0F) + f + bb.minX;
|
||||
double d1 = j + rand.nextDouble() * (bb.maxY - bb.minY - f * 2.0F) + f + bb.minY;
|
||||
double d2 = k + rand.nextDouble() * (bb.maxZ - bb.minZ - f * 2.0F) + f + bb.minZ;
|
||||
|
||||
if (side == EnumFacing.DOWN)
|
||||
{
|
||||
d1 = j + bb.minY - f;
|
||||
}
|
||||
|
||||
if (side == EnumFacing.UP)
|
||||
{
|
||||
d1 = j + bb.maxY + f;
|
||||
}
|
||||
|
||||
if (side == EnumFacing.NORTH)
|
||||
{
|
||||
d2 = k + bb.minZ - f;
|
||||
}
|
||||
|
||||
if (side == EnumFacing.SOUTH)
|
||||
{
|
||||
d2 = k + bb.maxZ + f;
|
||||
}
|
||||
|
||||
if (side == EnumFacing.WEST)
|
||||
{
|
||||
d0 = i + bb.minX - f;
|
||||
}
|
||||
|
||||
if (side == EnumFacing.EAST)
|
||||
{
|
||||
d0 = i + bb.maxX + f;
|
||||
}
|
||||
|
||||
EntityDiggingFX fx = ((EntityDiggingFX) Minecraft.getMinecraft().effectRenderer.spawnEffectParticle(EnumParticleTypes.BLOCK_CRACK.getParticleID(),
|
||||
d0, d1, d2, 0.0D, 0.0D, 0.0D, Block.getIdFromBlock(state.getBlock())));
|
||||
|
||||
fx.setBlockPos(pos);
|
||||
fx.multiplyVelocity(0.2F);
|
||||
fx.multipleParticleScaleBy(0.6F);
|
||||
|
||||
if (type != IronChestType.DIRTCHEST9000 && type != IronChestType.OBSIDIAN)
|
||||
fx.setParticleTexture(modelmanager.getTextureMap().getAtlasSprite("ironchest:" + locations.get(type).getResourcePath()));
|
||||
else if (type == IronChestType.DIRTCHEST9000)
|
||||
fx.setParticleTexture(modelmanager.getTextureMap().getAtlasSprite("minecraft:" + locations.get(type).getResourcePath()));
|
||||
else if (type == IronChestType.OBSIDIAN)
|
||||
fx.setParticleTexture(modelmanager.getTextureMap().getAtlasSprite("minecraft:" + locations.get(type).getResourcePath()));
|
||||
}
|
||||
}
|
||||
|
||||
public static void addDestroyEffects(World world, BlockPos pos, IBlockState state)
|
||||
{
|
||||
state = state.getBlock().getActualState(state, world, pos);
|
||||
int i = 4;
|
||||
IronChestType type = IronChestType.values()[IronChestType.validateMeta(state.getBlock().getMetaFromState(state))];
|
||||
ModelManager modelmanager = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager();
|
||||
|
||||
for (int j = 0; j < i; ++j)
|
||||
{
|
||||
for (int k = 0; k < i; ++k)
|
||||
{
|
||||
for (int l = 0; l < i; ++l)
|
||||
{
|
||||
double d0 = pos.getX() + (j + 0.5D) / i;
|
||||
double d1 = pos.getY() + (k + 0.5D) / i;
|
||||
double d2 = pos.getZ() + (l + 0.5D) / i;
|
||||
EntityDiggingFX fx = ((EntityDiggingFX) Minecraft.getMinecraft().effectRenderer.spawnEffectParticle(
|
||||
EnumParticleTypes.BLOCK_CRACK.getParticleID(), d0, d1, d2, d0 - pos.getX() - 0.5D, d1 - pos.getY() - 0.5D, d2 - pos.getZ() - 0.5D,
|
||||
Block.getIdFromBlock(state.getBlock())));
|
||||
fx.setBlockPos(pos);
|
||||
if (type != IronChestType.DIRTCHEST9000 && type != IronChestType.OBSIDIAN)
|
||||
fx.setParticleTexture(modelmanager.getTextureMap().getAtlasSprite("ironchest:" + locations.get(type).getResourcePath()));
|
||||
else if (type == IronChestType.DIRTCHEST9000)
|
||||
fx.setParticleTexture(modelmanager.getTextureMap().getAtlasSprite("minecraft:" + locations.get(type).getResourcePath()));
|
||||
else if (type == IronChestType.OBSIDIAN)
|
||||
fx.setParticleTexture(modelmanager.getTextureMap().getAtlasSprite("minecraft:" + locations.get(type).getResourcePath()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue