diff --git a/src/main/java/com/cricketcraft/chisel/Chisel.java b/src/main/java/com/cricketcraft/chisel/Chisel.java index 0aad18e9..9cea1a51 100644 --- a/src/main/java/com/cricketcraft/chisel/Chisel.java +++ b/src/main/java/com/cricketcraft/chisel/Chisel.java @@ -1,16 +1,7 @@ package com.cricketcraft.chisel; -import java.io.File; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.config.Configuration; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - import com.cricketcraft.chisel.block.BlockCarvable; +import com.cricketcraft.chisel.client.player.PlayerSpecials; import com.cricketcraft.chisel.compat.Compatibility; import com.cricketcraft.chisel.config.Configurations; import com.cricketcraft.chisel.init.ChiselBlocks; @@ -21,7 +12,6 @@ import com.cricketcraft.chisel.network.PacketHandler; import com.cricketcraft.chisel.proxy.CommonProxy; import com.cricketcraft.chisel.utils.General; import com.cricketcraft.chisel.world.GeneratorChisel; - import cpw.mods.fml.client.event.ConfigChangedEvent; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; @@ -29,16 +19,20 @@ import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLInterModComms; -import cpw.mods.fml.common.event.FMLMissingMappingsEvent; +import cpw.mods.fml.common.event.*; import cpw.mods.fml.common.event.FMLMissingMappingsEvent.MissingMapping; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry.Type; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.File; @Mod(modid = Chisel.MOD_ID, name = Chisel.MOD_NAME, version = Chisel.VERSION, guiFactory = "com.cricketcraft.chisel.client.gui.GuiFactory", dependencies = "after:ForgeMultipart;after:Thaumcraft;after:appliedenergistics2;after:Railcraft;after:AWWayofTime;after:TwilightForest") public class Chisel { @@ -137,6 +131,9 @@ public class Chisel { MinecraftForge.EVENT_BUS.register(this); FMLCommonHandler.instance().bus().register(instance); + FMLCommonHandler.instance().bus().register(new PlayerSpecials()); + + FMLInterModComms.sendMessage("Waila", "register", "com.cricketcraft.chisel.compat.WailaCompat.register"); } diff --git a/src/main/java/com/cricketcraft/chisel/block/BlockSnakestoneObsidian.java b/src/main/java/com/cricketcraft/chisel/block/BlockSnakestoneObsidian.java index 84310e2b..0ea09f4d 100644 --- a/src/main/java/com/cricketcraft/chisel/block/BlockSnakestoneObsidian.java +++ b/src/main/java/com/cricketcraft/chisel/block/BlockSnakestoneObsidian.java @@ -1,16 +1,15 @@ package com.cricketcraft.chisel.block; -import java.util.Random; - +import com.cricketcraft.chisel.client.GeneralChiselClient; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.World; -import com.cricketcraft.chisel.client.GeneralChiselClient; +import java.util.Random; public class BlockSnakestoneObsidian extends BlockSnakestone { - public IIcon[] particles = new IIcon[8]; + public static IIcon[] particles = new IIcon[8]; public BlockSnakestoneObsidian(String iconPrefix) { super(iconPrefix); diff --git a/src/main/java/com/cricketcraft/chisel/client/GeneralChiselClient.java b/src/main/java/com/cricketcraft/chisel/client/GeneralChiselClient.java index 14f72411..cf9d103d 100644 --- a/src/main/java/com/cricketcraft/chisel/client/GeneralChiselClient.java +++ b/src/main/java/com/cricketcraft/chisel/client/GeneralChiselClient.java @@ -1,7 +1,14 @@ package com.cricketcraft.chisel.client; -import java.util.Random; - +import com.cricketcraft.chisel.block.BlockGrimstone; +import com.cricketcraft.chisel.block.BlockHolystone; +import com.cricketcraft.chisel.block.BlockLavastone; +import com.cricketcraft.chisel.block.BlockSnakestoneObsidian; +import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel; +import com.cricketcraft.chisel.carving.Carving; +import com.cricketcraft.chisel.config.Configurations; +import com.cricketcraft.chisel.entity.fx.*; +import com.cricketcraft.chisel.utils.GeneralClient; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; @@ -12,18 +19,7 @@ import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import com.cricketcraft.chisel.block.BlockGrimstone; -import com.cricketcraft.chisel.block.BlockHolystone; -import com.cricketcraft.chisel.block.BlockLavastone; -import com.cricketcraft.chisel.block.BlockSnakestoneObsidian; -import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel; -import com.cricketcraft.chisel.carving.Carving; -import com.cricketcraft.chisel.config.Configurations; -import com.cricketcraft.chisel.entity.fx.EntityBallOMossFX; -import com.cricketcraft.chisel.entity.fx.EntityGrimstoneFX; -import com.cricketcraft.chisel.entity.fx.EntityHolystoneFX; -import com.cricketcraft.chisel.entity.fx.EntitySnakestoneObsidianFX; -import com.cricketcraft.chisel.utils.GeneralClient; +import java.util.Random; public class GeneralChiselClient { @@ -171,6 +167,11 @@ public class GeneralChiselClient { } } + public static void spawnCricketFX(World world, double x, double y, double z) { + EntityCricketFX cricket = new EntityCricketFX(world, x, y, z); + Minecraft.getMinecraft().effectRenderer.addEffect(cricket); + } + public static void spawnBallOMossFX(World world, double x, double y, double z) { if (Configurations.particlesTickrate == 0 || tick++ % Configurations.particlesTickrate == 0) { EntityBallOMossFX res = new EntityBallOMossFX(world, x, y, z); diff --git a/src/main/java/com/cricketcraft/chisel/client/player/PlayerSpecials.java b/src/main/java/com/cricketcraft/chisel/client/player/PlayerSpecials.java new file mode 100644 index 00000000..da7cf4c3 --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/client/player/PlayerSpecials.java @@ -0,0 +1,38 @@ +package com.cricketcraft.chisel.client.player; + +import com.cricketcraft.chisel.client.GeneralChiselClient; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.model.ModelRenderer; +import net.minecraftforge.client.event.RenderPlayerEvent; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class PlayerSpecials { + + public PlayerSpecials() { + FMLCommonHandler.instance().bus().register(this); + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void renderCricket(RenderPlayerEvent event) { + if (!"TheCricket26".equals(event.entityPlayer.getDisplayName())) { + return; + } + if (event.entityPlayer.isInvisible()) { + return; + } + + ModelRenderer body = null; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPushMatrix(); + + GeneralChiselClient.spawnCricketFX(event.entityPlayer.getEntityWorld(), event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/cricketcraft/chisel/entity/fx/EntityCricketFX.java b/src/main/java/com/cricketcraft/chisel/entity/fx/EntityCricketFX.java new file mode 100644 index 00000000..f8e9a177 --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/entity/fx/EntityCricketFX.java @@ -0,0 +1,106 @@ +package com.cricketcraft.chisel.entity.fx; + +import com.cricketcraft.chisel.Chisel; +import com.cricketcraft.chisel.utils.General; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public class EntityCricketFX extends EntityFX { + + private double tx, ty, tz, speed; + + public EntityCricketFX(World world, double x, double y, double z) { + super(world, x + 1, y + 1, z + 1); + particleScale = 0.5F + 0.5F * General.rand.nextFloat(); + speed = 0.04 + 0.04 * General.rand.nextDouble(); + + particleMaxAge = (int) (Math.random() * 10.0D) + 40; + + tx = x + General.rand.nextDouble(); + ty = y + General.rand.nextDouble(); + tz = z + General.rand.nextDouble(); + + switch (General.rand.nextInt(6)) { + case 0: + tx = x; + break; + case 1: + tx = x + 1; + break; + case 2: + ty = y; + break; + case 3: + ty = y + 1; + break; + case 4: + tz = z; + break; + case 5: + tz = z + 1; + break; + } + + double dx = (tx - posX) * 3; + double dy = (ty - posY) * 3; + double dz = (tz - posZ) * 3; + + setPosition(posX + dx, posY + dy + 8, posZ + dz); + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + + noClip = true; + } + + @Override + public int getFXLayer() { + return 1; + } + + @Override + public void renderParticle(Tessellator tessellator, float partialTick, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) { + super.renderParticle(tessellator, partialTick, rotX, rotXZ, rotZ, rotYZ, rotXY); + Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(Chisel.MOD_ID + ":/assets/chisel/blocks/snakestone/obsidian/particles/" + General.rand.nextInt(8) + ".png")); + if (particleAge++ >= particleMaxAge) { + setDead(); + return; + } + + double dx = tx - posX; + double dy = ty - posY; + double dz = tz - posZ; + + double distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + + if (distance == 0) { + setDead(); + return; + } + + if (distance < 0.4) { + particleAlpha = (float) (distance / 0.4); + } else if (particleAge < 20) { + particleAlpha = 1.0F * particleAge / 20; + } else { + particleAlpha = 1.0F; + } + + if (distance < speed) { + speed = distance; + } + + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + + double px = posX + dx / distance * speed; + double py = posY + dy / distance * speed; + double pz = posZ + dz / distance * speed; + + setPosition(px, py, pz); + } +} diff --git a/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java b/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java index 9a57427d..d634fd6d 100644 --- a/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java +++ b/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java @@ -1,27 +1,8 @@ package com.cricketcraft.chisel.proxy; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderSnowball; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.world.World; -import net.minecraftforge.client.MinecraftForgeClient; - import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel; import com.cricketcraft.chisel.block.tileentity.TileEntityPresent; -import com.cricketcraft.chisel.client.render.BlockAdvancedMarbleRenderer; -import com.cricketcraft.chisel.client.render.BlockCTMNoLightRenderer; -import com.cricketcraft.chisel.client.render.BlockCarpetRenderer; -import com.cricketcraft.chisel.client.render.BlockEldritchRenderer; -import com.cricketcraft.chisel.client.render.BlockGlowRenderer; -import com.cricketcraft.chisel.client.render.BlockLayeredRenderer; -import com.cricketcraft.chisel.client.render.BlockMarblePaneRenderer; -import com.cricketcraft.chisel.client.render.BlockMarblePillarRenderer; -import com.cricketcraft.chisel.client.render.BlockMarbleStairsRenderer; -import com.cricketcraft.chisel.client.render.BlockRoadLineRenderer; -import com.cricketcraft.chisel.client.render.BlockSnakeStoneRenderer; -import com.cricketcraft.chisel.client.render.BlockTexturedOreRenderer; -import com.cricketcraft.chisel.client.render.RenderStandardBlockNoSunlight; +import com.cricketcraft.chisel.client.render.*; import com.cricketcraft.chisel.client.render.item.ItemChiselRenderer; import com.cricketcraft.chisel.client.render.item.ItemPresentRenderer; import com.cricketcraft.chisel.client.render.tile.RenderAutoChisel; @@ -31,9 +12,14 @@ import com.cricketcraft.chisel.entity.EntityCloudInABottle; import com.cricketcraft.chisel.entity.EntitySmashingRock; import com.cricketcraft.chisel.init.ChiselBlocks; import com.cricketcraft.chisel.init.ChiselItems; - import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.RenderSnowball; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import net.minecraftforge.client.MinecraftForgeClient; public class ClientProxy extends CommonProxy {