Merge branch 'miscchanges'

This commit is contained in:
Christian 2013-08-04 22:27:55 -04:00
commit 7d700916d9
10 changed files with 194 additions and 59 deletions

View file

@ -15,6 +15,16 @@ public abstract class RenderLivingEvent extends Event
this.entity = entity;
this.renderer = renderer;
}
@Cancelable
public static class Pre extends RenderLivingEvent
{
public Pre(EntityLivingBase entity, RendererLivingEntity renderer){ super(entity, renderer); }
}
public static class Post extends RenderLivingEvent
{
public Post(EntityLivingBase entity, RendererLivingEntity renderer){ super(entity, renderer); }
}
public abstract static class Specials extends RenderLivingEvent
{

View file

@ -15,11 +15,11 @@ import net.minecraft.world.World;
/**
* This is a base implementation for Fluid blocks.
*
*
* It is highly recommended that you extend this class or one of the Forge-provided child classes.
*
*
* @author King Lemming, OvermindDL1
*
*
*/
public abstract class BlockFluidBase extends Block implements IFluidBlock
{
@ -39,6 +39,7 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
protected float quantaPerBlockFloat = 8F;
protected int density = 1;
protected int densityDir = -1;
protected int temperature = 295;
protected int tickRate = 20;
protected int renderPass = 1;
@ -55,6 +56,7 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
this.fluidName = fluid.getName();
this.density = fluid.density;
this.temperature = fluid.temperature;
this.maxScaledLight = fluid.luminosity;
this.tickRate = fluid.viscosity / 200;
fluid.setBlockID(id);
@ -78,6 +80,12 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
return this;
}
public BlockFluidBase setTemperature(int temperature)
{
this.temperature = temperature;
return this;
}
public BlockFluidBase setTickRate(int tickRate)
{
if (tickRate <= 0) tickRate = 20;
@ -121,7 +129,15 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
{
return false;
}
return true;
if (this.density > getDensity(world, x, y, z))
{
return true;
}
else
{
return false;
}
}
/**
@ -156,7 +172,15 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
return false;
}
Block.blocksList[bId].dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
return true;
if (this.density > getDensity(world, x, y, z))
{
return true;
}
else
{
return false;
}
}
public abstract int getQuantaValue(IBlockAccess world, int x, int y, int z);
@ -272,7 +296,7 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
int lightUpBase = lightUp & 255;
int lightThisExt = lightThis >> 16 & 255;
int lightUpExt = lightUp >> 16 & 255;
return (lightThisBase > lightUpBase ? lightThisBase : lightUpBase) |
return (lightThisBase > lightUpBase ? lightThisBase : lightUpBase) |
((lightThisExt > lightUpExt ? lightThisExt : lightUpExt) << 16);
}
@ -303,11 +327,21 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
}
return ((BlockFluidBase)block).density;
}
public static final int getTemperature(IBlockAccess world, int x, int y, int z)
{
Block block = Block.blocksList[world.getBlockId(x, y, z)];
if (!(block instanceof BlockFluidBase))
{
return Integer.MAX_VALUE;
}
return ((BlockFluidBase)block).temperature;
}
public static double getFlowDirection(IBlockAccess world, int x, int y, int z)
{
Block block = Block.blocksList[world.getBlockId(x, y, z)];
if (!(block instanceof BlockFluidBase))
if (!world.getBlockMaterial(x, y, z).isLiquid())
{
return -1000.0;
}
@ -381,7 +415,7 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
if (world.getBlockId(x, y + 1, z) == blockID)
{
boolean flag =
boolean flag =
isBlockSolid(world, x, y, z - 1, 2) ||
isBlockSolid(world, x, y, z + 1, 3) ||
isBlockSolid(world, x - 1, y, z, 4) ||
@ -390,7 +424,7 @@ public abstract class BlockFluidBase extends Block implements IFluidBlock
isBlockSolid(world, x, y + 1, z + 1, 3) ||
isBlockSolid(world, x - 1, y + 1, z, 4) ||
isBlockSolid(world, x + 1, y + 1, z, 5);
if (flag)
{
vec = vec.normalize().addVector(0.0D, -6.0D, 0.0D);

View file

@ -10,11 +10,11 @@ import net.minecraft.world.World;
/**
* This is a fluid block implementation which emulates vanilla Minecraft fluid behavior.
*
*
* It is highly recommended that you use/extend this class for "classic" fluid blocks.
*
*
* @author King Lemming
*
*
*/
public class BlockFluidClassic extends BlockFluidBase
{
@ -92,8 +92,8 @@ public class BlockFluidClassic extends BlockFluidBase
{
int y2 = y - densityDir;
if (world.getBlockId(x, y2, z ) == blockID ||
world.getBlockId(x - 1, y2, z ) == blockID ||
if (world.getBlockId(x, y2, z ) == blockID ||
world.getBlockId(x - 1, y2, z ) == blockID ||
world.getBlockId(x + 1, y2, z ) == blockID ||
world.getBlockId(x, y2, z - 1) == blockID ||
world.getBlockId(x, y2, z + 1) == blockID)
@ -128,9 +128,10 @@ public class BlockFluidClassic extends BlockFluidBase
}
}
}
else if (quantaRemaining > quantaPerBlock)
// This is a "source" block, set meta to zero, and send a server only update
else if (quantaRemaining >= quantaPerBlock)
{
world.setBlockMetadataWithNotify(x, y, z, 0, 3);
world.setBlockMetadataWithNotify(x, y, z, 0, 2);
}
// Flow vertically if possible
@ -226,7 +227,7 @@ public class BlockFluidClassic extends BlockFluidBase
int cost = 1000;
for (int adjSide = 0; adjSide < 4; adjSide++)
{
if ((adjSide == 0 && side == 1) ||
if ((adjSide == 0 && side == 1) ||
(adjSide == 1 && side == 0) ||
(adjSide == 2 && side == 3) ||
(adjSide == 3 && side == 2))
@ -302,7 +303,15 @@ public class BlockFluidClassic extends BlockFluidBase
{
return false;
}
return true;
if (this.density > getDensity(world, x, y, z))
{
return true;
}
else
{
return false;
}
}
protected int getLargerQuanta(IBlockAccess world, int x, int y, int z, int compare)

View file

@ -2,6 +2,9 @@
package net.minecraftforge.fluids;
import java.util.Locale;
import java.util.Map;
import com.google.common.collect.Maps;
import net.minecraft.block.Block;
import net.minecraft.util.Icon;
@ -15,21 +18,21 @@ import cpw.mods.fml.relauncher.SideOnly;
/**
* Minecraft Forge Fluid Implementation
*
*
* This class is a fluid (liquid or gas) equivalent to "Item." It describes the nature of a fluid
* and contains its general properties.
*
*
* These properties do not have inherent gameplay mechanics - they are provided so that mods may
* choose to take advantage of them.
*
*
* Fluid implementations are not required to actively use these properties, nor are objects
* interfacing with fluids required to make use of them, but it is encouraged.
*
*
* The default values can be used as a reference point for mods adding fluids such as oil or heavy
* water.
*
*
* @author King Lemming
*
*
*/
public class Fluid
{
@ -45,7 +48,7 @@ public class Fluid
/**
* The light level emitted by this fluid.
*
*
* Default value is 0, as most fluids do not actively emit light.
*/
protected int luminosity = 0;
@ -53,31 +56,39 @@ public class Fluid
/**
* Density of the fluid - completely arbitrary; negative density indicates that the fluid is
* lighter than air.
*
*
* Default value is approximately the real-life density of water in kg/m^3.
*/
protected int density = 1000;
/**
* Temperature of the fluid - completely arbitrary; higher temperature indicates that the fluid is
* hotter than air.
*
* Default value is approximately the real-life room temperature of water in degrees Kelvin.
*/
protected int temperature = 295;
/**
* Viscosity ("thickness") of the fluid - completely arbitrary; negative values are not
* permissible.
*
*
* Default value is approximately the real-life density of water in m/s^2 (x10^-3).
*/
protected int viscosity = 1000;
/**
* This indicates if the fluid is gaseous.
*
*
* Useful for rendering the fluid in containers and the world.
*
*
* Generally this is associated with negative density fluids.
*/
protected boolean isGaseous;
/**
* If there is a Block implementation of the Fluid, the BlockID is linked here.
*
*
* The default value of -1 should remain for any Fluid without a Block implementation.
*/
protected int blockID = -1;
@ -132,6 +143,12 @@ public class Fluid
return this;
}
public Fluid setTemperature(int temperature)
{
this.temperature = temperature;
return this;
}
public Fluid setViscosity(int viscosity)
{
this.viscosity = viscosity;
@ -200,6 +217,11 @@ public class Fluid
return this.density;
}
public final int getTemperature()
{
return this.temperature;
}
public final int getViscosity()
{
return this.viscosity;
@ -252,6 +274,7 @@ public class Fluid
/* Stack-based Accessors */
public int getLuminosity(FluidStack stack){ return getLuminosity(); }
public int getDensity(FluidStack stack){ return getDensity(); }
public int getTemperature(FluidStack stack){ return getTemperature(); }
public int getViscosity(FluidStack stack){ return getViscosity(); }
public boolean isGaseous(FluidStack stack){ return isGaseous(); }
public int getColor(FluidStack stack){ return getColor(); }
@ -259,8 +282,25 @@ public class Fluid
/* World-based Accessors */
public int getLuminosity(World world, int x, int y, int z){ return getLuminosity(); }
public int getDensity(World world, int x, int y, int z){ return getDensity(); }
public int getTemperature(World world, int x, int y, int z){ return getTemperature(); }
public int getViscosity(World world, int x, int y, int z){ return getViscosity(); }
public boolean isGaseous(World world, int x, int y, int z){ return isGaseous(); }
public int getColor(World world, int x, int y, int z){ return getColor(); }
public Icon getIcon(World world, int x, int y, int z){ return getIcon(); }
private static Map<String, String> legacyNames = Maps.newHashMap();
static String convertLegacyName(String fluidName)
{
return fluidName != null && legacyNames.containsKey(fluidName) ? legacyNames.get(fluidName) : fluidName;
}
/**
* Register a legacy liquid name with the Fluids system
* @param legacyName The legacy name to recognize
* @param canonicalName The canonical fluid name it will become
*/
public static void registerLegacyName(String legacyName, String canonicalName)
{
legacyNames.put(legacyName.toLowerCase(Locale.ENGLISH), canonicalName);
}
}

View file

@ -14,9 +14,9 @@ import com.google.common.collect.ImmutableMap;
/**
* Handles Fluid registrations. Fluids MUST be registered in order to function.
*
*
* @author King Lemming, CovertJaguar (LiquidDictionary)
*
*
*/
public abstract class FluidRegistry
{
@ -25,8 +25,8 @@ public abstract class FluidRegistry
static HashMap<String, Fluid> fluids = new HashMap();
static BiMap<String, Integer> fluidIDs = HashBiMap.create();
public static final Fluid WATER = new Fluid("water").setBlockID(Block.waterStill.blockID);
public static final Fluid LAVA = new Fluid("lava").setBlockID(Block.lavaStill.blockID).setLuminosity(15).setDensity(3000).setViscosity(6000);
public static final Fluid WATER = new Fluid("water").setBlockID(Block.waterStill.blockID).setUnlocalizedName(Block.waterStill.getUnlocalizedName());
public static final Fluid LAVA = new Fluid("lava").setBlockID(Block.lavaStill.blockID).setLuminosity(15).setDensity(3000).setViscosity(6000).setUnlocalizedName(Block.lavaStill.getUnlocalizedName());
public static int renderIdFluid = -1;
@ -50,7 +50,7 @@ public abstract class FluidRegistry
/**
* Register a new Fluid. If a fluid with the same name already exists, registration is denied.
*
*
* @param fluid
* The fluid to register.
* @return True if the fluid was successfully registered; false if there is a name clash.

View file

@ -1,18 +1,20 @@
package net.minecraftforge.fluids;
import java.util.Locale;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
/**
* ItemStack substitute for Fluids.
*
*
* NOTE: Equality is based on the Fluid, not the amount. Use
* {@link #isFluidStackIdentical(FluidStack)} to determine if FluidID, Amount and NBT Tag are all
* equal.
*
*
* @author King Lemming, SirSengir (LiquidStack)
*
*
*/
public class FluidStack
{
@ -53,16 +55,31 @@ public class FluidStack
*/
public static FluidStack loadFluidStackFromNBT(NBTTagCompound nbt)
{
if (nbt == null || FluidRegistry.getFluid(nbt.getString("FluidName")) == null)
if (nbt == null)
{
return null;
}
FluidStack stack = new FluidStack(FluidRegistry.getFluidID(nbt.getString("FluidName")), nbt.getInteger("Amount"));
String fluidName = nbt.getString("FluidName");
if (fluidName == null)
{
fluidName = nbt.hasKey("LiquidName") ? nbt.getString("LiquidName").toLowerCase(Locale.ENGLISH) : null;
fluidName = Fluid.convertLegacyName(fluidName);
}
if (fluidName ==null || FluidRegistry.getFluid(fluidName) == null)
{
return null;
}
FluidStack stack = new FluidStack(FluidRegistry.getFluidID(fluidName), nbt.getInteger("Amount"));
if (nbt.hasKey("Tag"))
{
stack.tag = nbt.getCompoundTag("Tag");
}
else if (nbt.hasKey("extra"))
{
stack.tag = nbt.getCompoundTag("extra");
}
return stack;
}
@ -93,7 +110,7 @@ public class FluidStack
/**
* Determines if the FluidIDs and NBT Tags are equal. This does not check amounts.
*
*
* @param other
* The FluidStack for comparison
* @return true if the Fluids (IDs and NBT Tags) are the same
@ -118,7 +135,7 @@ public class FluidStack
/**
* Determines if the Fluids are equal and this stack is larger.
*
*
* @param other
* @return true if this FluidStack contains the other FluidStack (same fluid and >= amount)
*/
@ -129,7 +146,7 @@ public class FluidStack
/**
* Determines if the FluidIDs, Amounts, and NBT Tags are all equal.
*
*
* @param other
* - the FluidStack for comparison
* @return true if the two FluidStacks are exactly the same
@ -142,7 +159,7 @@ public class FluidStack
/**
* Determines if the FluidIDs and NBT Tags are equal compared to a registered container
* ItemStack. This does not check amounts.
*
*
* @param other
* The ItemStack for comparison
* @return true if the Fluids (IDs and NBT Tags) are the same
@ -170,7 +187,7 @@ public class FluidStack
/**
* Default equality comparison for a FluidStack. Same functionality as isFluidEqual().
*
*
* This is included for use in data structures.
*/
@Override

View file

@ -1,4 +1,3 @@
package net.minecraftforge.fluids;
import net.minecraft.block.Block;
@ -29,12 +28,14 @@ public class RenderBlockFluid implements ISimpleBlockRenderingHandler
{
float total = 0;
int count = 0;
float end = 0;
for (int i = 0; i < flow.length; i++)
{
if (flow[i] >= 0.875F)
if (flow[i] >= 0.875F && end != 1F)
{
return flow[i];
end = flow[i];
}
if (flow[i] >= 0)
@ -43,14 +44,18 @@ public class RenderBlockFluid implements ISimpleBlockRenderingHandler
count++;
}
}
return total / count;
if (end == 0)
end = total / count;
return end;
}
public float getFluidHeightForRender(IBlockAccess world, int x, int y, int z, BlockFluidBase block)
{
if (world.getBlockId(x, y, z) == block.blockID)
{
if (world.getBlockId(x, y - block.densityDir, z) == block.blockID)
if (world.getBlockMaterial(x, y - block.densityDir, z).isLiquid())
{
return 1;
}
@ -199,12 +204,12 @@ public class RenderBlockFluid implements ISimpleBlockRenderingHandler
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y - 1, z));
if (!rises)
{
tessellator.setColorOpaque_F(LIGHT_Y_NEG, LIGHT_Y_NEG, LIGHT_Y_NEG);
tessellator.setColorOpaque_F(LIGHT_Y_NEG * red, LIGHT_Y_NEG * green, LIGHT_Y_NEG * blue);
renderer.renderFaceYNeg(block, x, y + RENDER_OFFSET, z, block.getIcon(0, bMeta));
}
else
{
tessellator.setColorOpaque_F(LIGHT_Y_POS, LIGHT_Y_POS, LIGHT_Y_POS);
tessellator.setColorOpaque_F(LIGHT_Y_POS * red, LIGHT_Y_POS * green, LIGHT_Y_POS * blue);
renderer.renderFaceYPos(block, x, y + RENDER_OFFSET, z, block.getIcon(1, bMeta));
}
}
@ -319,4 +324,4 @@ public class RenderBlockFluid implements ISimpleBlockRenderingHandler
{
return FluidRegistry.renderIdFluid;
}
}
}

2
fml

@ -1 +1 @@
Subproject commit 10b16d32da4b7c32b15e69cf1c636505ebbe2540
Subproject commit 1d84e8063e9d0dc73928dba006e6001201285cad

View file

@ -33,19 +33,23 @@
if (flag)
{
@@ -347,6 +357,12 @@
@@ -347,8 +357,14 @@
float f2 = (float)par8Vec3.zCoord - (float)par6;
boolean flag = false;
int i1;
-
- if (!par1EntityPlayer.isSneaking() || par1EntityPlayer.getHeldItem() == null)
+ if (par3ItemStack != null &&
+ par3ItemStack.getItem() != null &&
+ par3ItemStack.getItem().onItemUseFirst(par3ItemStack, par1EntityPlayer, par2World, par4, par5, par6, par7, f, f1, f2))
+ {
+ return true;
+ }
if (!par1EntityPlayer.isSneaking() || par1EntityPlayer.getHeldItem() == null)
+
+ if (!par1EntityPlayer.isSneaking() || (par1EntityPlayer.getHeldItem() == null || par1EntityPlayer.getHeldItem().getItem().shouldPassSneakingClickToBlock(par2World, par4, par5, par6)))
{
i1 = par2World.getBlockId(par4, par5, par6);
@@ -389,7 +405,15 @@
}
else

View file

@ -20,7 +20,23 @@
public RendererLivingEntity(ModelBase par1ModelBase, float par2)
{
@@ -442,12 +448,13 @@
@@ -68,6 +74,7 @@
public void func_130000_a(EntityLivingBase par1EntityLivingBase, double par2, double par4, double par6, float par8, float par9)
{
+ if (MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Pre(par1EntityLivingBase, this))) return;
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_CULL_FACE);
this.mainModel.onGround = this.renderSwingProgress(par1EntityLivingBase, par9);
@@ -277,6 +284,7 @@
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();
this.passSpecialRender(par1EntityLivingBase, par2, par4, par6);
+ MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(par1EntityLivingBase, this));
}
/**
@@ -442,12 +450,13 @@
*/
protected void passSpecialRender(EntityLivingBase par1EntityLivingBase, double par2, double par4, double par6)
{
@ -35,7 +51,7 @@
if (d3 < (double)(f2 * f2))
{
@@ -491,6 +498,7 @@
@@ -491,6 +500,7 @@
}
}
}