package net.minecraft.world.gen.structure;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
abstract class ComponentNetherBridgePiece extends StructureComponent
{
protected ComponentNetherBridgePiece(int par1)
{
super(par1);
}
private int getTotalWeight(List par1List)
{
boolean var2 = false;
int var3 = 0;
StructureNetherBridgePieceWeight var5;
for (Iterator var4 = par1List.iterator(); var4.hasNext(); var3 += var5.field_78826_b)
{
var5 = (StructureNetherBridgePieceWeight)var4.next();
if (var5.field_78824_d > 0 && var5.field_78827_c < var5.field_78824_d)
{
var2 = true;
}
}
return var2 ? var3 : -1;
}
private ComponentNetherBridgePiece getNextComponent(ComponentNetherBridgeStartPiece par1ComponentNetherBridgeStartPiece, List par2List, List par3List, Random par4Random, int par5, int par6, int par7, int par8, int par9)
{
int var10 = this.getTotalWeight(par2List);
boolean var11 = var10 > 0 && par9 <= 30;
int var12 = 0;
while (var12 < 5 && var11)
{
++var12;
int var13 = par4Random.nextInt(var10);
Iterator var14 = par2List.iterator();
while (var14.hasNext())
{
StructureNetherBridgePieceWeight var15 = (StructureNetherBridgePieceWeight)var14.next();
var13 -= var15.field_78826_b;
if (var13 < 0)
{
if (!var15.func_78822_a(par9) || var15 == par1ComponentNetherBridgeStartPiece.theNetherBridgePieceWeight && !var15.field_78825_e)
{
break;
}
ComponentNetherBridgePiece var16 = StructureNetherBridgePieces.createNextComponent(var15, par3List, par4Random, par5, par6, par7, par8, par9);
if (var16 != null)
{
++var15.field_78827_c;
par1ComponentNetherBridgeStartPiece.theNetherBridgePieceWeight = var15;
if (!var15.func_78823_a())
{
par2List.remove(var15);
}
return var16;
}
}
}
}
return ComponentNetherBridgeEnd.func_74971_a(par3List, par4Random, par5, par6, par7, par8, par9);
}
/**
* Finds a random component to tack on to the bridge. Or builds the end.
*/
private StructureComponent getNextComponent(ComponentNetherBridgeStartPiece par1ComponentNetherBridgeStartPiece, List par2List, Random par3Random, int par4, int par5, int par6, int par7, int par8, boolean par9)
{
if (Math.abs(par4 - par1ComponentNetherBridgeStartPiece.getBoundingBox().minX) <= 112 && Math.abs(par6 - par1ComponentNetherBridgeStartPiece.getBoundingBox().minZ) <= 112)
{
List var10 = par1ComponentNetherBridgeStartPiece.primaryWeights;
if (par9)
{
var10 = par1ComponentNetherBridgeStartPiece.secondaryWeights;
}
ComponentNetherBridgePiece var11 = this.getNextComponent(par1ComponentNetherBridgeStartPiece, var10, par2List, par3Random, par4, par5, par6, par7, par8 + 1);
if (var11 != null)
{
par2List.add(var11);
par1ComponentNetherBridgeStartPiece.field_74967_d.add(var11);
}
return var11;
}
else
{
return ComponentNetherBridgeEnd.func_74971_a(par2List, par3Random, par4, par5, par6, par7, par8);
}
}
/**
* Gets the next component in any cardinal direction
*/
protected StructureComponent getNextComponentNormal(ComponentNetherBridgeStartPiece par1ComponentNetherBridgeStartPiece, List par2List, Random par3Random, int par4, int par5, boolean par6)
{
switch (this.coordBaseMode)
{
case 0:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX + par4, this.boundingBox.minY + par5, this.boundingBox.maxZ + 1, this.coordBaseMode, this.getComponentType(), par6);
case 1:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par5, this.boundingBox.minZ + par4, this.coordBaseMode, this.getComponentType(), par6);
case 2:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX + par4, this.boundingBox.minY + par5, this.boundingBox.minZ - 1, this.coordBaseMode, this.getComponentType(), par6);
case 3:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par5, this.boundingBox.minZ + par4, this.coordBaseMode, this.getComponentType(), par6);
default:
return null;
}
}
/**
* Gets the next component in the +/- X direction
*/
protected StructureComponent getNextComponentX(ComponentNetherBridgeStartPiece par1ComponentNetherBridgeStartPiece, List par2List, Random par3Random, int par4, int par5, boolean par6)
{
switch (this.coordBaseMode)
{
case 0:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par4, this.boundingBox.minZ + par5, 1, this.getComponentType(), par6);
case 1:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, this.boundingBox.minZ - 1, 2, this.getComponentType(), par6);
case 2:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par4, this.boundingBox.minZ + par5, 1, this.getComponentType(), par6);
case 3:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, this.boundingBox.minZ - 1, 2, this.getComponentType(), par6);
default:
return null;
}
}
/**
* Gets the next component in the +/- Z direction
*/
protected StructureComponent getNextComponentZ(ComponentNetherBridgeStartPiece par1ComponentNetherBridgeStartPiece, List par2List, Random par3Random, int par4, int par5, boolean par6)
{
switch (this.coordBaseMode)
{
case 0:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par4, this.boundingBox.minZ + par5, 3, this.getComponentType(), par6);
case 1:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, this.boundingBox.maxZ + 1, 0, this.getComponentType(), par6);
case 2:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par4, this.boundingBox.minZ + par5, 3, this.getComponentType(), par6);
case 3:
return this.getNextComponent(par1ComponentNetherBridgeStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, this.boundingBox.maxZ + 1, 0, this.getComponentType(), par6);
default:
return null;
}
}
/**
* Checks if the bounding box's minY is > 10
*/
protected static boolean isAboveGround(StructureBoundingBox par0StructureBoundingBox)
{
return par0StructureBoundingBox != null && par0StructureBoundingBox.minY > 10;
}
}