diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index 6dbb9c3d5..a39f3b1c2 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -315,35 +315,8 @@ public class NoppesUtilServer { Server.sendAssociatedData(entity, EnumPacketClient.PARTICLE, entity.posX, entity.posY, entity.posZ, entity.height, entity.width, entity.yOffset, particle); } - public static void spawnScriptedParticle(String directory, - int HEXColor, int HEXColor2, float colorRate, int rateStart, - int amount, int maxAge, - double x, double y, double z, - double motionX, double motionY, double motionZ, float gravity, - float scale1, float scale2, float scaleRate, int scaleRateStart, - float alpha1, float alpha2, float alphaRate, int alphaRateStart, - float rotationX1, float rotationX2, float rotationXRate, int rotationXRateStart, - float rotationY1, float rotationY2, float rotationYRate, int rotationYRateStart, - float rotationZ1, float rotationZ2, float rotationZRate, int rotationZRateStart, - boolean facePlayer, boolean glows, int width, int height, int offsetX, int offsetY, - int animRate, boolean animLoop, int animStart, int animEnd, - int entityID, int dimensionID - ){ - Server.sendToAll(EnumPacketClient.SCRIPTED_PARTICLE, - directory, - HEXColor, HEXColor2, colorRate, rateStart, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - alpha1, alpha2, alphaRate, alphaRateStart, - rotationX1, rotationX2, rotationXRate, rotationXRateStart, - rotationY1, rotationY2, rotationYRate, rotationYRateStart, - rotationZ1, rotationZ2, rotationZRate, rotationZRateStart, - facePlayer, glows, width, height, offsetX, offsetY, - animRate, animLoop, animStart, animEnd, - entityID, dimensionID - ); + public static void spawnScriptedParticle(NBTTagCompound compound){ + Server.sendToAll(EnumPacketClient.SCRIPTED_PARTICLE, compound); } public static void deleteNpc(EntityNPCInterface npc,EntityPlayer player) { diff --git a/src/main/java/noppes/npcs/client/NoppesUtil.java b/src/main/java/noppes/npcs/client/NoppesUtil.java index 47bf01af2..71f95fa5d 100644 --- a/src/main/java/noppes/npcs/client/NoppesUtil.java +++ b/src/main/java/noppes/npcs/client/NoppesUtil.java @@ -39,7 +39,9 @@ import noppes.npcs.controllers.data.Quest; import noppes.npcs.controllers.data.SkinOverlay; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.scripted.ScriptParticle; import org.lwjgl.Sys; +import org.lwjgl.opengl.NVProgram; public class NoppesUtil { @@ -86,89 +88,27 @@ public class NoppesUtil { public static void spawnScriptedParticle(ByteBuf buffer){ Minecraft minecraft = Minecraft.getMinecraft(); - String directory = Server.readString(buffer); + NBTTagCompound compound; + ScriptParticle particle; + try { + compound = Server.readNBT(buffer); + particle = ScriptParticle.fromNBT(compound); + } catch (IOException ignored) { + return; + } - int HEXColor = buffer.readInt(); - int HEXColor2 = buffer.readInt(); - float colorRate = buffer.readFloat(); - int colorRateStart = buffer.readInt(); + World worldObj = DimensionManager.getWorld(compound.getInteger("DimensionID")); - int amount = buffer.readInt(); - int maxAge = buffer.readInt(); + Entity entity = null; + if (compound.hasKey("EntityID")) { + entity = worldObj.getEntityByID(compound.getInteger("EntityID")); + if (entity != null) + worldObj = entity.worldObj; + } - double x = buffer.readDouble(); - double y = buffer.readDouble(); - double z = buffer.readDouble(); + CustomFX fx = CustomFX.fromScriptedParticle(particle, worldObj, entity); - double motionX = buffer.readDouble(); - double motionY = buffer.readDouble(); - double motionZ = buffer.readDouble(); - float gravity = buffer.readFloat(); - - float scale1 = buffer.readFloat(); - float scale2 = buffer.readFloat(); - float scaleRate = buffer.readFloat(); - int scaleRateStart = buffer.readInt(); - - float alpha1 = buffer.readFloat(); - float alpha2 = buffer.readFloat(); - float alphaRate = buffer.readFloat(); - int alphaRateStart = buffer.readInt(); - - float rotationX1 = buffer.readFloat(); - float rotationX2 = buffer.readFloat(); - float rotationXRate = buffer.readFloat(); - int rotationXRateStart = buffer.readInt(); - - float rotationY1 = buffer.readFloat(); - float rotationY2 = buffer.readFloat(); - float rotationYRate = buffer.readFloat(); - int rotationYRateStart = buffer.readInt(); - - float rotationZ1 = buffer.readFloat(); - float rotationZ2 = buffer.readFloat(); - float rotationZRate = buffer.readFloat(); - int rotationZRateStart = buffer.readInt(); - - boolean facePlayer = buffer.readBoolean(); - boolean glows = buffer.readBoolean(); - - int width = buffer.readInt(); - int height = buffer.readInt(); - int offsetX = buffer.readInt(); - int offsetY = buffer.readInt(); - - int animRate = buffer.readInt(); - boolean animLoop = buffer.readBoolean(); - int animStart = buffer.readInt(); - int animEnd = buffer.readInt(); - - int entityID = buffer.readInt(); - int dimensionID = buffer.readInt(); - - World worldObj = DimensionManager.getWorld(dimensionID); - - Entity entity = worldObj.getEntityByID(entityID); - if(entity != null) - worldObj = entity.worldObj; - - CustomFX fx = new CustomFX( - worldObj, entity, - directory, - HEXColor,HEXColor2,colorRate,colorRateStart, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - alpha1, alpha2, alphaRate, alphaRateStart, - rotationX1, rotationX2, rotationXRate, rotationXRateStart, - rotationY1, rotationY2, rotationYRate, rotationYRateStart, - rotationZ1, rotationZ2, rotationZRate, rotationZRateStart, - maxAge, facePlayer, glows, - width, height, offsetX, offsetY, - animRate, animLoop, animStart, animEnd - ); - - for(int i = 0; i < amount; i++){ + for(int i = 0; i < particle.amount; i++){ minecraft.effectRenderer.addEffect(fx); } } diff --git a/src/main/java/noppes/npcs/client/fx/CustomFX.java b/src/main/java/noppes/npcs/client/fx/CustomFX.java index fa159a89d..649ae04d0 100644 --- a/src/main/java/noppes/npcs/client/fx/CustomFX.java +++ b/src/main/java/noppes/npcs/client/fx/CustomFX.java @@ -15,6 +15,7 @@ import net.minecraft.client.resources.SkinManager; import net.minecraft.client.resources.data.TextureMetadataSection; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.world.EnumSkyBlock; @@ -22,6 +23,7 @@ import net.minecraft.world.World; import noppes.npcs.client.ClientProxy; import noppes.npcs.client.ImageDownloadAlt; import noppes.npcs.client.renderer.ImageBufferDownloadAlt; +import noppes.npcs.scripted.ScriptParticle; import org.lwjgl.opengl.GL11; import javax.imageio.ImageIO; @@ -88,108 +90,102 @@ public class CustomFX extends EntityFX { double renderPosX, renderPosY, renderPosZ; - public CustomFX(World worldObj, Entity entity, String directory, - int HEXColor, int HEXColor2, float HEXColorRate, int HEXColorStart, - double x, double y, double z, - double motionX, double motionY, double motionZ, float gravity, - float scale1, float scale2, float scaleRate, int scaleRateStart, - float alpha1, float alpha2, float alphaRate, int alphaRateStart, - float rotationX1, float rotationX2, float rotationXRate, int rotationXRateStart, - float rotationY1, float rotationY2, float rotationYRate, int rotationYRateStart, - float rotationZ1, float rotationZ2, float rotationZRate, int rotationZRateStart, - int age, boolean facePlayer, boolean glows, int width, int height, int offsetX, int offsetY, - int animRate, boolean animLoop, int animStart, int animEnd - ) { - super(worldObj, x, y, z, motionX, motionY, motionZ); + public CustomFX(World worldObj, Entity entity, String directory, double x, double y, double z, double motionX, double motionY, double motionZ) { + super(worldObj, x, y, z, motionX, motionY, motionZ); + this.entity = entity; + this.location = new ResourceLocation(directory); + } - this.HEXColor = HEXColor; - this.HEXColor2 = HEXColor2; - this.HEXColorRate = HEXColorRate; - this.HEXColorStart = HEXColorStart; - particleRed = (HEXColor >> 16 & 255) / 255f; - particleGreen = (HEXColor >> 8 & 255) / 255f; - particleBlue = (HEXColor & 255) / 255f; + public static CustomFX fromScriptedParticle(ScriptParticle particle, World worldObj, Entity entity) { + CustomFX customFX = new CustomFX(worldObj, entity, particle.directory, particle.x, particle.y, particle.z, particle.motionX, particle.motionY, particle.motionZ); - this.scale1 = scale1; - this.scale2 = scale2; - this.scaleRate = Math.abs(scaleRate); - this.scaleRateStart = scaleRateStart; - particleScale = scale1; - if(scale1 > scale2) - this.scaleRate *= -1; + customFX.HEXColor = particle.HEXColor; + customFX.HEXColor2 = particle.HEXColor2; + customFX.HEXColorRate = particle.HEXColorRate; + customFX.HEXColorStart = particle.HEXColorStart; + customFX.particleRed = (customFX.HEXColor >> 16 & 255) / 255f; + customFX.particleGreen = (customFX.HEXColor >> 8 & 255) / 255f; + customFX.particleBlue = (customFX.HEXColor & 255) / 255f; - this.alpha1 = alpha1; - this.alpha2 = alpha2; - this.alphaRate = Math.abs(alphaRate); - this.alphaRateStart = alphaRateStart; - particleAlpha = alpha1; - if(alpha1 > alpha2) - this.alphaRate *= -1; + customFX.scale1 = particle.scale1; + customFX.scale2 = particle.scale2; + customFX.scaleRate = Math.abs(particle.scaleRate); + customFX.scaleRateStart = particle.scaleRateStart; + customFX.particleScale = customFX.scale1; + if(customFX.scale1 > customFX.scale2) + customFX.scaleRate *= -1; - this.rotationX1 = rotationX1; - this.rotationX2 = rotationX2; - this.rotationXRate = Math.abs(rotationXRate); - this.rotationXRateStart = rotationXRateStart; - rotationX = rotationX1; - if(rotationX1 > rotationX2) - this.rotationXRate *= -1; + customFX.alpha1 = particle.alpha1; + customFX.alpha2 = particle.alpha2; + customFX.alphaRate = Math.abs(particle.alphaRate); + customFX.alphaRateStart = particle.alphaRateStart; + customFX.particleAlpha = customFX.alpha1; + if(customFX.alpha1 > customFX.alpha2) + customFX.alphaRate *= -1; - this.rotationY1 = rotationY1; - this.rotationY2 = rotationY2; - this.rotationYRate = Math.abs(rotationYRate); - this.rotationYRateStart = rotationYRateStart; - rotationY = rotationY1; - if(rotationY1 > rotationY2) - this.rotationYRate *= -1; + customFX.rotationX1 = particle.rotationX1; + customFX.rotationX2 = particle.rotationX2; + customFX.rotationXRate = Math.abs(particle.rotationXRate); + customFX.rotationXRateStart = particle.rotationXRateStart; + customFX.rotationX = customFX.rotationX1; + if(customFX.rotationX1 > customFX.rotationX2) + customFX.rotationXRate *= -1; - this.rotationZ1 = rotationZ1; - this.rotationZ2 = rotationZ2; - this.rotationZRate = Math.abs(rotationZRate); - this.rotationZRateStart = rotationZRateStart; - rotationZ = rotationZ1; - if(rotationZ1 > rotationZ2) - this.rotationZRate *= -1; + customFX.rotationY1 = particle.rotationY1; + customFX.rotationY2 = particle.rotationY2; + customFX.rotationYRate = Math.abs(particle.rotationYRate); + customFX.rotationYRateStart = particle.rotationYRateStart; + customFX.rotationY = customFX.rotationY1; + if(customFX.rotationY1 > customFX.rotationY2) + customFX.rotationYRate *= -1; - particleGravity = gravity/0.04F; - particleMaxAge = age; + customFX.rotationZ1 = particle.rotationZ1; + customFX.rotationZ2 = particle.rotationZ2; + customFX.rotationZRate = Math.abs(particle.rotationZRate); + customFX.rotationZRateStart = particle.rotationZRateStart; + customFX.rotationZ = customFX.rotationZ1; + if(customFX.rotationZ1 > customFX.rotationZ2) + customFX.rotationZRate *= -1; - this.motionX = motionX; - this.motionY = motionY; - this.motionZ = motionZ; + customFX.particleGravity = particle.gravity/0.04F; + customFX.particleMaxAge = particle.maxAge; - this.entity = entity; - noClip = true; + customFX.motionX = particle.motionX; + customFX.motionY = particle.motionY; + customFX.motionZ = particle.motionZ; - location = new ResourceLocation(directory); + customFX.noClip = particle.noClip; - this.width = width; - this.height = height; - this.offsetX = offsetX; - this.offsetY = offsetY; + customFX.width = particle.width; + customFX.height = particle.height; + customFX.offsetX = particle.offsetX; + customFX.offsetY = particle.offsetY; - this.animRate = animRate; - this.animLoop = animLoop; - this.animStart = animStart; - this.animEnd = animEnd; - if(this.animEnd < this.animStart) - this.animEnd = this.animStart + this.particleMaxAge; + customFX.animRate = particle.animRate; + customFX.animLoop = particle.animLoop; + customFX.animStart = particle.animStart; + customFX.animEnd = particle.animEnd; + if(customFX.animEnd < customFX.animStart) + customFX.animEnd = customFX.animStart + customFX.particleMaxAge; - if(directory.startsWith("https://")){ - isUrl = true; + if(particle.directory.startsWith("https://")){ + customFX.isUrl = true; TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); - imageDownloadAlt = new ImageDownloadAlt(null, directory, new ResourceLocation("customnpcs:textures/gui/invisible.png"), new ImageBufferDownloadAlt(true,false)); - texturemanager.loadTexture(this.location, imageDownloadAlt); + customFX.imageDownloadAlt = new ImageDownloadAlt(null, particle.directory, new ResourceLocation("customnpcs:textures/gui/invisible.png"), new ImageBufferDownloadAlt(true,false)); + texturemanager.loadTexture(customFX.location, customFX.imageDownloadAlt); } else { try { - getWidthHeight(); + customFX.getWidthHeight(); } catch (IOException e) { e.printStackTrace(); } } - this.facePlayer = facePlayer; - this.glows = glows; - } + customFX.facePlayer = particle.facePlayer; + customFX.glows = particle.glows; + + return customFX; + } @Override public void onUpdate() { @@ -350,13 +346,15 @@ public class CustomFX extends EntityFX { InputStream inputstream = null; try { - IResource iresource = Minecraft.getMinecraft().getResourceManager().getResource(location); + IResource iresource = Minecraft.getMinecraft().getResourceManager().getResource(this.location); inputstream = iresource.getInputStream(); BufferedImage bufferedimage = ImageIO.read(inputstream); gotWidthHeight = true; this.totalWidth = bufferedimage.getWidth(); this.totalHeight = bufferedimage.getHeight(); correctWidthHeight(); + } catch (Exception e) { + e.printStackTrace(); } finally { if (inputstream != null) { inputstream.close(); diff --git a/src/main/java/noppes/npcs/scripted/ScriptParticle.java b/src/main/java/noppes/npcs/scripted/ScriptParticle.java index ec2e9edf2..12dddddac 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptParticle.java +++ b/src/main/java/noppes/npcs/scripted/ScriptParticle.java @@ -1,25 +1,28 @@ package noppes.npcs.scripted; +import net.minecraft.nbt.*; import noppes.npcs.NoppesUtilServer; import noppes.npcs.scripted.interfaces.IParticle; import noppes.npcs.scripted.interfaces.entity.IEntity; +import java.lang.reflect.Field; + public class ScriptParticle implements IParticle { - private String directory; + public String directory; - private int HEXColor = 0xFFFFFF; - private int HEXColor2 = 0xFFFFFF; - private float HEXColorRate = 0.0f; - private int HEXColorStart = 0; + public int HEXColor = 0xFFFFFF; + public int HEXColor2 = 0xFFFFFF; + public float HEXColorRate = 0.0f; + public int HEXColorStart = 0; - private int amount = 1; - private int maxAge = 20; - private double x = 0,y = 0,z = 0; - private double motionX = 0,motionY = 0,motionZ = 0; - private float gravity = 0; - private float scale1 = 20.0f,scale2 = 20.0f,scaleRate = 0.0f; - private float alpha1 = 1.0f,alpha2 = 1.0f,alphaRate = 0.0f; - private int scaleRateStart = 0, alphaRateStart = 0; + public int amount = 1; + public int maxAge = 20; + public double x = 0,y = 0,z = 0; + public double motionX = 0,motionY = 0,motionZ = 0; + public float gravity = 0; + public float scale1 = 20.0f,scale2 = 20.0f,scaleRate = 0.0f; + public float alpha1 = 1.0f,alpha2 = 1.0f,alphaRate = 0.0f; + public int scaleRateStart = 0, alphaRateStart = 0; public float rotationX1 = 0; public float rotationX2 = 0; @@ -45,66 +48,116 @@ public class ScriptParticle implements IParticle { public boolean facePlayer = true; public boolean glows = true; + public boolean noClip = true; public ScriptParticle(String directory){ this.directory = directory; } + public NBTTagCompound writeToNBT() { + NBTTagCompound compound = new NBTTagCompound(); + ScriptParticle newParticle = new ScriptParticle(""); + + //Iterate through fields, check if they're not equal to a new object, write to NBT + for (Field field : ScriptParticle.class.getDeclaredFields()) { + try { + if (!field.get(this).equals(field.get(newParticle))) { + compound = writeNBTTag(compound, field.getType(), field.getName(), field.get(this)); + } + } catch (Exception ignored) {} + } + + return compound; + } + + public NBTTagCompound writeNBTTag(NBTTagCompound compound, Class c, String key, Object value) { + if (c == boolean.class) { + compound.setBoolean(key, (Boolean) value); + } + if (c == int.class) { + compound.setInteger(key, (Integer) value); + } + if (c == double.class) { + compound.setDouble(key, (Double) value); + } + if (c == float.class) { + compound.setFloat(key, (Float) value); + } + if (c == String.class) { + compound.setString(key, (String) value); + } + + return compound; + } + + private static Object readNBTTag(NBTTagCompound compound, String key) { + if (compound.getTag(key) instanceof NBTTagByte) { + return compound.getBoolean(key); + } + if (compound.getTag(key) instanceof NBTTagInt) { + return compound.getInteger(key); + } + if (compound.getTag(key) instanceof NBTTagDouble) { + return compound.getDouble(key); + } + if (compound.getTag(key) instanceof NBTTagFloat) { + return compound.getFloat(key); + } + if (compound.getTag(key) instanceof NBTTagString) { + return compound.getString(key); + } + + return null; + } + + public static ScriptParticle fromNBT(NBTTagCompound compound) { + ScriptParticle particle = new ScriptParticle(compound.getString("directory")); + + //Iterate through fields, check if compound has a key equal to the field's name, and if so set the field equal to that value from NBT. + for (Field field : ScriptParticle.class.getDeclaredFields()) { + try { + if (compound.hasKey(field.getName())) { + Object val = ScriptParticle.readNBTTag(compound,field.getName()); + if (val != null) { + field.set(particle, val); + } + } + } catch (Exception ignored) {} + } + + return particle; + } + public void spawnOnEntity(IEntity entity){ int entityID = entity.getMCEntity().getEntityId(); - NoppesUtilServer.spawnScriptedParticle(directory, - HEXColor, HEXColor2, HEXColorRate, HEXColorStart, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - alpha1, alpha2, alphaRate, alphaRateStart, - rotationX1, rotationX2, rotationXRate, rotationXRateStart, - rotationY1, rotationY2, rotationYRate, rotationYRateStart, - rotationZ1, rotationZ2, rotationZRate, rotationZRateStart, - facePlayer, glows, width, height, offsetX, offsetY, - animRate, animLoop, animStart, animEnd, - entityID, entity.getWorld().getDimensionID() - ); + + NBTTagCompound compound = this.writeToNBT(); + compound.setInteger("EntityID", entityID); + compound.setInteger("DimensionID", entity.getWorld().getDimensionID()); + + NoppesUtilServer.spawnScriptedParticle(compound); } public void spawnInWorld(ScriptWorld world){ - NoppesUtilServer.spawnScriptedParticle(directory, - HEXColor, HEXColor2, HEXColorRate, HEXColorStart, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - alpha1, alpha2, alphaRate, alphaRateStart, - rotationX1, rotationX2, rotationXRate, rotationXRateStart, - rotationY1, rotationY2, rotationYRate, rotationYRateStart, - rotationZ1, rotationZ2, rotationZRate, rotationZRateStart, - facePlayer, glows, width, height, offsetX, offsetY, - animRate, animLoop, animStart, animEnd, - -1, world.getDimensionID() - ); + NBTTagCompound compound = this.writeToNBT(); + compound.setInteger("DimensionID", world.getDimensionID()); + + NoppesUtilServer.spawnScriptedParticle(compound); } public void spawnInWorld(ScriptWorld world, double x, double y, double z){ - NoppesUtilServer.spawnScriptedParticle(directory, - HEXColor, HEXColor2, HEXColorRate, HEXColorStart, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - alpha1, alpha2, alphaRate, alphaRateStart, - rotationX1, rotationX2, rotationXRate, rotationXRateStart, - rotationY1, rotationY2, rotationYRate, rotationYRateStart, - rotationZ1, rotationZ2, rotationZRate, rotationZRateStart, - facePlayer, glows, width, height, offsetX, offsetY, - animRate, animLoop, animStart, animEnd, - -1, world.getDimensionID() - ); + NBTTagCompound compound = this.writeToNBT(); + compound.setInteger("DimensionID", world.getDimensionID()); + + NoppesUtilServer.spawnScriptedParticle(compound); } public void setGlows(boolean glows) { this.glows = glows; } public boolean getGlows() { return this.glows; } + public void setNoClip(boolean noClip) { this.noClip = noClip; } + public boolean getNoClip() { return this.noClip; } + public void setFacePlayer(boolean facePlayer) { this.facePlayer = facePlayer; } public boolean getFacePlayer() { return facePlayer; } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java index 8c6de080d..22e91a1b4 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java @@ -23,10 +23,7 @@ import net.minecraft.world.WorldServer; import noppes.npcs.NoppesUtilServer; import noppes.npcs.controllers.ServerCloneController; import noppes.npcs.entity.EntityNPCInterface; -import noppes.npcs.scripted.CustomNPCsException; -import noppes.npcs.scripted.NpcAPI; -import noppes.npcs.scripted.ScriptBlockPos; -import noppes.npcs.scripted.ScriptWorld; +import noppes.npcs.scripted.*; import noppes.npcs.scripted.constants.EntityType; import noppes.npcs.scripted.interfaces.IParticle; import noppes.npcs.scripted.interfaces.IWorld; @@ -43,33 +40,8 @@ public class ScriptEntity implements IEntity { this.entity = entity; } - /** - * @param directory The particle's directory. Use only forward slashes when writing a directory. Example: "customnpcs:textures/particle/tail.png" - * @param HEXcolor The particle's color as a HEX integer - * @param amount The amount of particles to spawn - * @param maxAge The particle's maximum age in MC ticks - - * @param x The particle's x position - * @param y The particle's y position - * @param z The particle's z position - - * @param motionX The particle's speed in the x axis - * @param motionY The particle's speed in the y axis - * @param motionZ The particle's speed in the z axis - * @param gravity The particle's gravity - - * @param scale1 The particle's starting scale - * @param scale2 The particle's ending scale - * @param scaleRate Multiplier for the particle's scale growth rate - * @param scaleRateStart The time at which the particle begins growing/shrinking - - * @param alpha1 The particle's starting transparency - * @param alpha2 The particle's ending transparency - * @param scaleRate Multiplier for the particle's transparency growth rate - * @param alphaRateStart The time at which the particle begins appearing/fading - */ @Deprecated - public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge, + public void spawnParticle(String directory, int HEXColor, int amount, int maxAge, double x, double y, double z, double motionX, double motionY, double motionZ, float gravity, float scale1, float scale2, float scaleRate, int scaleRateStart, @@ -80,130 +52,206 @@ public class ScriptEntity implements IEntity { float rotationZ1, float rotationZ2, float rotationZRate, int rotationZRateStart ) { int entityID = entity.getEntityId(); - NoppesUtilServer.spawnScriptedParticle(directory, - HEXcolor, HEXcolor, 0, 0, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - alpha1, alpha2, alphaRate, alphaRateStart, - rotationX1, rotationX2, rotationXRate, rotationXRateStart, - rotationY1, rotationY2, rotationYRate, rotationYRateStart, - rotationZ1, rotationZ2, rotationZRate, rotationZRateStart, - true, true, -1, -1, 0,0, - 0, true, 0, 0, - entityID, entity.dimension - ); + ScriptParticle particle = new ScriptParticle(directory); + + particle.HEXColor = HEXColor; + particle.HEXColor2 = HEXColor; + particle.HEXColorRate = 0; + particle.HEXColorStart = 0; + + particle.amount = amount; + particle.maxAge = maxAge; + + particle.x = x; + particle.y = y; + particle.z = z; + particle.motionX = motionX; + particle.motionY = motionY; + particle.motionZ = motionZ; + particle.gravity = gravity; + + particle.scale1 = scale1; + particle.scale2 = scale2; + particle.scaleRate = scaleRate; + particle.scaleRateStart = scaleRateStart; + + particle.alpha1 = alpha1; + particle.alpha2 = alpha2; + particle.alphaRate = alphaRate; + particle.alphaRateStart = alphaRateStart; + + particle.rotationX1 = rotationX1; + particle.rotationX2 = rotationX2; + particle.rotationXRate = rotationXRate; + particle.rotationXRateStart = rotationXRateStart; + + particle.rotationY1 = rotationY1; + particle.rotationY2 = rotationY2; + particle.rotationYRate = rotationYRate; + particle.rotationYRateStart = rotationYRateStart; + + particle.rotationZ1 = rotationZ1; + particle.rotationZ2 = rotationZ2; + particle.rotationZRate = rotationZRate; + particle.rotationZRateStart = rotationZRateStart; + + NBTTagCompound compound = particle.writeToNBT(); + compound.setInteger("EntityID", entityID); + compound.setInteger("DimensionID", this.getWorld().getDimensionID()); + NoppesUtilServer.spawnScriptedParticle(compound); } @Deprecated - public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge, + public void spawnParticle(String directory, int HEXColor, int amount, int maxAge, double x, double y, double z, double motionX, double motionY, double motionZ, float gravity, float scale1, float scale2, float scaleRate, int scaleRateStart, float alpha1, float alpha2, float alphaRate, int alphaRateStart ) { int entityID = entity.getEntityId(); - NoppesUtilServer.spawnScriptedParticle(directory, - HEXcolor, HEXcolor, 0, 0, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - alpha1, alpha2, alphaRate, alphaRateStart, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - true, true, -1, -1, 0,0, - 0, true, 0, 0, - entityID, entity.dimension - ); + ScriptParticle particle = new ScriptParticle(directory); + + particle.HEXColor = HEXColor; + particle.HEXColor2 = HEXColor; + particle.HEXColorRate = 0; + particle.HEXColorStart = 0; + + particle.amount = amount; + particle.maxAge = maxAge; + + particle.x = x; + particle.y = y; + particle.z = z; + particle.motionX = motionX; + particle.motionY = motionY; + particle.motionZ = motionZ; + particle.gravity = gravity; + + particle.scale1 = scale1; + particle.scale2 = scale2; + particle.scaleRate = scaleRate; + particle.scaleRateStart = scaleRateStart; + + particle.alpha1 = alpha1; + particle.alpha2 = alpha2; + particle.alphaRate = alphaRate; + particle.alphaRateStart = alphaRateStart; + + NBTTagCompound compound = particle.writeToNBT(); + compound.setInteger("EntityID", entityID); + compound.setInteger("DimensionID", this.getWorld().getDimensionID()); + NoppesUtilServer.spawnScriptedParticle(compound); } @Deprecated - public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge, + public void spawnParticle(String directory, int HEXColor, int amount, int maxAge, double x, double y, double z, double motionX, double motionY, double motionZ, float gravity, float scale1, float scale2, float scaleRate, int scaleRateStart ) { int entityID = entity.getEntityId(); - NoppesUtilServer.spawnScriptedParticle(directory, - HEXcolor, HEXcolor, 0, 0, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - scale1, scale2, scaleRate, scaleRateStart, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - true, true, -1, -1, 0,0, - 0, true, 0, 0, - entityID, entity.dimension - ); + ScriptParticle particle = new ScriptParticle(directory); + + particle.HEXColor = HEXColor; + particle.HEXColor2 = HEXColor; + particle.HEXColorRate = 0; + particle.HEXColorStart = 0; + + particle.amount = amount; + particle.maxAge = maxAge; + + particle.x = x; + particle.y = y; + particle.z = z; + particle.motionX = motionX; + particle.motionY = motionY; + particle.motionZ = motionZ; + particle.gravity = gravity; + + particle.scale1 = scale1; + particle.scale2 = scale2; + particle.scaleRate = scaleRate; + particle.scaleRateStart = scaleRateStart; + + NBTTagCompound compound = particle.writeToNBT(); + compound.setInteger("EntityID", entityID); + compound.setInteger("DimensionID", this.getWorld().getDimensionID()); + NoppesUtilServer.spawnScriptedParticle(compound); } @Deprecated - public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge, + public void spawnParticle(String directory, int HEXColor, int amount, int maxAge, double x, double y, double z, double motionX, double motionY, double motionZ, float gravity ) { int entityID = entity.getEntityId(); - NoppesUtilServer.spawnScriptedParticle(directory, - HEXcolor, HEXcolor, 0, 0, - amount, maxAge, - x, y, z, - motionX, motionY, motionZ, gravity, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - true, true, -1, -1, 0,0, - 0, true, 0, 0, - entityID, entity.dimension - ); + ScriptParticle particle = new ScriptParticle(directory); + + particle.HEXColor = HEXColor; + particle.HEXColor2 = HEXColor; + particle.HEXColorRate = 0; + particle.HEXColorStart = 0; + + particle.amount = amount; + particle.maxAge = maxAge; + + particle.x = x; + particle.y = y; + particle.z = z; + particle.motionX = motionX; + particle.motionY = motionY; + particle.motionZ = motionZ; + particle.gravity = gravity; + + NBTTagCompound compound = particle.writeToNBT(); + compound.setInteger("EntityID", entityID); + compound.setInteger("DimensionID", this.getWorld().getDimensionID()); + NoppesUtilServer.spawnScriptedParticle(compound); } @Deprecated - public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge, + public void spawnParticle(String directory, int HEXColor, int amount, int maxAge, double x, double y, double z ) { int entityID = entity.getEntityId(); - NoppesUtilServer.spawnScriptedParticle(directory, - HEXcolor, HEXcolor, 0, 0, - amount, maxAge, - x, y, z, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - true, true, -1, -1, 0,0, - 0, true, 0, 0, - entityID, entity.dimension - ); + ScriptParticle particle = new ScriptParticle(directory); + + particle.HEXColor = HEXColor; + particle.HEXColor2 = HEXColor; + particle.HEXColorRate = 0; + particle.HEXColorStart = 0; + + particle.amount = amount; + particle.maxAge = maxAge; + + particle.x = x; + particle.y = y; + particle.z = z; + + NBTTagCompound compound = particle.writeToNBT(); + compound.setInteger("EntityID", entityID); + compound.setInteger("DimensionID", this.getWorld().getDimensionID()); + NoppesUtilServer.spawnScriptedParticle(compound); } @Deprecated - public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge + public void spawnParticle(String directory, int HEXColor, int amount, int maxAge ) { int entityID = entity.getEntityId(); - NoppesUtilServer.spawnScriptedParticle(directory, - HEXcolor, HEXcolor, 0, 0, - amount, maxAge, - 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - true, true, -1, -1, 0,0, - 0, true, 0, 0, - entityID, entity.dimension - ); + ScriptParticle particle = new ScriptParticle(directory); + + particle.HEXColor = HEXColor; + particle.HEXColor2 = HEXColor; + particle.HEXColorRate = 0; + particle.HEXColorStart = 0; + + particle.amount = amount; + particle.maxAge = maxAge; + + NBTTagCompound compound = particle.writeToNBT(); + compound.setInteger("EntityID", entityID); + compound.setInteger("DimensionID", this.getWorld().getDimensionID()); + NoppesUtilServer.spawnScriptedParticle(compound); } public void spawnParticle(IParticle entityParticle) { entityParticle.spawnOnEntity(this); } diff --git a/src/main/java/noppes/npcs/scripted/interfaces/IParticle.java b/src/main/java/noppes/npcs/scripted/interfaces/IParticle.java index c8d0fca03..a231d4a98 100644 --- a/src/main/java/noppes/npcs/scripted/interfaces/IParticle.java +++ b/src/main/java/noppes/npcs/scripted/interfaces/IParticle.java @@ -1,6 +1,5 @@ package noppes.npcs.scripted.interfaces; -import noppes.npcs.NoppesUtilServer; import noppes.npcs.scripted.ScriptWorld; import noppes.npcs.scripted.interfaces.entity.IEntity; @@ -49,6 +48,9 @@ public interface IParticle { void setGlows(boolean glows); boolean getGlows(); + void setNoClip(boolean noClip); + boolean getNoClip(); + /** * * @param facePlayer Whether the particle is always facing the player's camera. If this is disabled, the particle will appear to be laying flat face down on the ground if its rotation is unchanged. diff --git a/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java b/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java index 5c9be11ff..b546934c8 100644 --- a/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java +++ b/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java @@ -1,7 +1,5 @@ package noppes.npcs.scripted.interfaces; -import net.minecraft.util.ResourceLocation; - /** * A skin overlay object for both NPCs and players. Several skin overlays at a time can be layered on top of each other. * In an NPC's case, the old overlay texture is now the skin overlay with ID 0.