Merge remote-tracking branch 'HbmMods/master'

This commit is contained in:
Vaern 2022-04-20 17:48:01 -07:00
commit c191374d51
49 changed files with 1930 additions and 208 deletions

View File

@ -0,0 +1,77 @@
package api.hbm.fluid;
import com.hbm.inventory.FluidTank;
import com.hbm.inventory.fluid.FluidType;
/**
* transceiver [trăn-vər], noun
*
* 1. A transmitter and receiver housed together in a single unit and having some circuits in common, often for portable or mobile use.
* 2. A combined radio transmitter and receiver.
* 3. A device that performs transmitting and receiving functions, especially if using common components.
*
* The American Heritage® Dictionary of the English Language, 5th Edition.
*
* @author hbm
*
*/
public interface IFluidStandardTransceiver extends IFluidUser {
public FluidTank[] getSendingTanks();
public FluidTank[] getReceivingTanks();
@Override
public default long getTotalFluidForSend(FluidType type) {
for(FluidTank tank : getSendingTanks()) {
if(tank.getTankType() == type) {
return tank.getFill();
}
}
return 0;
}
@Override
public default void removeFluidForTransfer(FluidType type, long amount) {
for(FluidTank tank : getSendingTanks()) {
if(tank.getTankType() == type) {
tank.setFill(tank.getFill() - (int) amount);
return;
}
}
}
@Override
public default long getDemand(FluidType type) {
for(FluidTank tank : getReceivingTanks()) {
if(tank.getTankType() == type) {
return tank.getMaxFill() - tank.getFill();
}
}
return 0;
}
@Override
public default long transferFluid(FluidType type, long amount) {
for(FluidTank tank : getReceivingTanks()) {
if(tank.getTankType() == type) {
tank.setFill(tank.getFill() + (int) amount);
if(tank.getFill() > tank.getMaxFill()) {
long overshoot = tank.getFill() - tank.getMaxFill();
tank.setFill(tank.getMaxFill());
return overshoot;
}
return 0;
}
}
return amount;
}
}

View File

@ -64,9 +64,23 @@ public interface IFluidUser extends IFluidConnector {
public default long getTotalFluidForSend(FluidType type) { return 0; }
public default void removeFluidForTransfer(FluidType type, long amount) { }
public default void updateStandardPipes(FluidType type, World world, int x, int y, int z) {
public default void subscribeToAllAround(FluidType type, TileEntity te) {
subscribeToAllAround(type, te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord);
}
public default void subscribeToAllAround(FluidType type, World world, int x, int y, int z) {
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
this.trySubscribe(type, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir);
}
public default void unsubscribeToAllAround(FluidType type, TileEntity te) {
unsubscribeToAllAround(type, te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord);
}
public default void unsubscribeToAllAround(FluidType type, World world, int x, int y, int z) {
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
this.tryUnsubscribe(type, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
}
}

View File

@ -2,6 +2,7 @@ package com.hbm.animloader;
import java.nio.FloatBuffer;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.vector.Matrix4f;
import org.lwjgl.util.vector.Quaternion;
@ -10,6 +11,15 @@ import com.hbm.util.BobMathUtil;
import net.minecraft.client.renderer.GLAllocation;
import net.minecraft.util.Vec3;
/**
* Bob:
* Ported from 1.12.2.
* Mostly gibberish to me, probably written in the ancient egyptian language.
* Any unmarked code comments are probably from Drillgon or code I had to throw out myself.
*
* @author Drillgon200 for the most part
*
*/
public class Transform {
protected static FloatBuffer auxGLMatrix = GLAllocation.createDirectFloatBuffer(16);
@ -49,37 +59,70 @@ public class Transform {
}
public void interpolateAndApply(Transform other, float inter){
Vec3 trans = BobMathUtil.interpVec(this.translation, other.translation, inter); //ORIGINAL: translation.interpolate(other.translation, inter);
Vec3 scale = BobMathUtil.interpVec(this.scale, other.scale, inter); //ORIGINAL: this.scale.interpolate(other.scale, inter);
Vec3 trans = BobMathUtil.interpVec(this.translation, other.translation, inter);
Vec3 scale = BobMathUtil.interpVec(this.scale, other.scale, inter);
Quaternion rot = slerp(rotation, other.rotation, inter);
//GlStateManager.quatToGlMatrix(auxGLMatrix, rot); TODO: find implementation
quatToGlMatrix(auxGLMatrix, rot);
scale(auxGLMatrix, scale);
auxGLMatrix.put(12, (float) trans.xCoord);
auxGLMatrix.put(13, (float) trans.yCoord);
auxGLMatrix.put(14, (float) trans.zCoord);
//for(int i = 0; i < 16; i ++){
//System.out.print(auxGLMatrix.get(i) + " ");
//}
//System.out.println();
//GlStateManager.multMatrix(auxGLMatrix); TODO: find implementation
GL11.glMultMatrix(auxGLMatrix);
}
private void scale(FloatBuffer matrix, Vec3 scale){
matrix.put(0, (float) (matrix.get(0)*scale.xCoord));
matrix.put(4, (float) (matrix.get(4)*scale.xCoord));
matrix.put(8, (float) (matrix.get(8)*scale.xCoord));
matrix.put(12, (float) (matrix.get(12)*scale.xCoord));
public static FloatBuffer quatToGlMatrix(FloatBuffer buf, Quaternion q) {
buf.clear();
float xx = q.x * q.x;
float xy = q.x * q.y;
float xz = q.x * q.z;
float xw = q.x * q.w;
float yy = q.y * q.y;
float yz = q.y * q.z;
float yw = q.y * q.w;
float zz = q.z * q.z;
float zw = q.z * q.w;
matrix.put(1, (float) (matrix.get(1)*scale.yCoord));
matrix.put(5, (float) (matrix.get(5)*scale.yCoord));
matrix.put(9, (float) (matrix.get(9)*scale.yCoord));
matrix.put(13, (float) (matrix.get(13)*scale.yCoord));
//Bob: i may not know what a quarternion is but grouping these in parts of 4 looks nice
buf.put(1.0F - 2.0F * (yy + zz));
buf.put(2.0F * (xy + zw));
buf.put(2.0F * (xz - yw));
buf.put(0.0F);
matrix.put(2, (float) (matrix.get(2)*scale.zCoord));
matrix.put(6, (float) (matrix.get(6)*scale.zCoord));
matrix.put(10, (float) (matrix.get(10)*scale.zCoord));
matrix.put(14, (float) (matrix.get(14)*scale.zCoord));
buf.put(2.0F * (xy - zw));
buf.put(1.0F - 2.0F * (xx + zz));
buf.put(2.0F * (yz + xw));
buf.put(0.0F);
buf.put(2.0F * (xz + yw));
buf.put(2.0F * (yz - xw));
buf.put(1.0F - 2.0F * (xx + yy));
buf.put(0.0F);
buf.put(0.0F);
buf.put(0.0F);
buf.put(0.0F);
buf.put(1.0F);
buf.rewind();
return buf;
}
private void scale(FloatBuffer matrix, Vec3 scale) {
matrix.put(0, (float) (matrix.get(0) * scale.xCoord));
matrix.put(4, (float) (matrix.get(4) * scale.xCoord));
matrix.put(8, (float) (matrix.get(8) * scale.xCoord));
matrix.put(12, (float) (matrix.get(12) * scale.xCoord));
matrix.put(1, (float) (matrix.get(1) * scale.yCoord));
matrix.put(5, (float) (matrix.get(5) * scale.yCoord));
matrix.put(9, (float) (matrix.get(9) * scale.yCoord));
matrix.put(13, (float) (matrix.get(13) * scale.yCoord));
matrix.put(2, (float) (matrix.get(2) * scale.zCoord));
matrix.put(6, (float) (matrix.get(6) * scale.zCoord));
matrix.put(10, (float) (matrix.get(10) * scale.zCoord));
matrix.put(14, (float) (matrix.get(14) * scale.zCoord));
}
//Thanks, wikipedia
@ -116,18 +159,18 @@ public class Transform {
}
// Since dot is in range [0, DOT_THRESHOLD], acos is safe
double theta_0 = Math.acos(dot); // theta_0 = angle between input vectors
double theta = theta_0*t; // theta = angle between v0 and result
double sin_theta = Math.sin(theta); // compute this value only once
double sin_theta_0 = Math.sin(theta_0); // compute this value only once
double theta_0 = Math.acos(dot); // theta_0 = angle between input vectors
double theta = theta_0*t; // theta = angle between v0 and result
double sin_theta = Math.sin(theta); // compute this value only once
double sin_theta_0 = Math.sin(theta_0); // compute this value only once
float s0 = (float) (Math.cos(theta) - dot * sin_theta / sin_theta_0); // == sin(theta_0 - theta) / sin(theta_0)
float s1 = (float) (sin_theta / sin_theta_0);
return new Quaternion(s0*v0.x + s1*v1.x,
s0*v0.y + s1*v1.y,
s0*v0.z + s1*v1.z,
s0*v0.w + s1*v1.w);
return new Quaternion(s0 * v0.x + s1 * v1.x,
s0 * v0.y + s1 * v1.y,
s0 * v0.z + s1 * v1.z,
s0 * v0.w + s1 * v1.w);
}
}

View File

@ -558,6 +558,8 @@ public class ModBlocks {
public static Block barbed_wire_ultradeath;
public static Block spikes;
public static Block charger;
public static Block tesla;
public static Block marker_structure;
@ -2010,6 +2012,8 @@ public class ModBlocks {
barbed_wire_ultradeath = new BarbedWire(Material.iron).setBlockName("barbed_wire_ultradeath").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":barbed_wire_ultradeath_model");
spikes = new Spikes(Material.iron).setBlockName("spikes").setHardness(2.5F).setResistance(5.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":spikes");
charger = new Charger(Material.iron).setBlockName("charger").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
tesla = new MachineTesla(Material.iron).setBlockName("tesla").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":tesla");
marker_structure = new BlockMarker(Material.iron).setBlockName("marker_structure").setHardness(0.0F).setResistance(0.0F).setLightLevel(1.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":marker_structure");
@ -2636,6 +2640,9 @@ public class ModBlocks {
GameRegistry.registerBlock(spikes, spikes.getUnlocalizedName());
GameRegistry.registerBlock(tesla, tesla.getUnlocalizedName());
//Charger
GameRegistry.registerBlock(charger, charger.getUnlocalizedName());
//Siege blocks
GameRegistry.registerBlock(siege_shield, ItemBlockLore.class, siege_shield.getUnlocalizedName());
GameRegistry.registerBlock(siege_internal, ItemBlockLore.class, siege_internal.getUnlocalizedName());

View File

@ -27,11 +27,11 @@ public class BarbedWire extends Block {
public void onEntityCollidedWithBlock(World p_149670_1_, int x, int y, int z, Entity ent) {
//ent.setInWeb();
ent.setInWeb();
ent.motionX *= 0.25D;
ent.motionX *= 0.15D;
ent.motionY *= 0.1D;
ent.motionZ *= 0.25D;
ent.motionZ *= 0.15D;
if(this == ModBlocks.barbed_wire) {
ent.attackEntityFrom(DamageSource.cactus, 2.0F);

View File

@ -0,0 +1,78 @@
package com.hbm.blocks.machine;
import com.hbm.tileentity.machine.TileEntityCharger;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class Charger extends BlockContainer {
public Charger(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityCharger();
}
@Override
public int getRenderType(){
return -1;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) {
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if(i == 0) {
world.setBlockMetadataWithNotify(x, y, z, 2, 2);
}
if(i == 1) {
world.setBlockMetadataWithNotify(x, y, z, 5, 2);
}
if(i == 2) {
world.setBlockMetadataWithNotify(x, y, z, 3, 2);
}
if(i == 3) {
world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
float f = 0.0625F;
switch(world.getBlockMetadata(x, y, z)) {
case 2: this.setBlockBounds(5 * f, 0.25F, 12 * f, 11 * f, 0.75F, 1F); break;
case 3: this.setBlockBounds(5 * f, 0.25F, 0F, 11 * f, 0.75F, 4 * f); break;
case 4: this.setBlockBounds(12 * f, 0.25F, 5 * f, 1F, 0.75F, 11 * f); break;
case 5: this.setBlockBounds(0F, 0.25F, 5 * f, 4 * f, 0.75F, 11 * f); break;
default: this.setBlockBounds(5 * f, 0.25F, 5 * f, 11 * f, 0.75F, 11 * f); break;
}
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
this.setBlockBoundsBasedOnState(world, x, y, z);
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
}

View File

@ -57,6 +57,8 @@ public class MachineChungus extends BlockDummyable {
if(!world.isRemote) {
FluidType type = entity.tanks[0].getTankType();
entity.onLeverPull(type);
if(type == Fluids.STEAM) {
entity.tanks[0].setTankType(Fluids.HOTSTEAM);
entity.tanks[1].setTankType(Fluids.STEAM);
@ -78,7 +80,6 @@ public class MachineChungus extends BlockDummyable {
entity.tanks[0].setFill(Math.min(entity.tanks[0].getFill() * 1000, entity.tanks[0].getMaxFill()));
entity.tanks[1].setFill(0);
}
entity.markDirty();
}
@ -108,10 +109,10 @@ public class MachineChungus extends BlockDummyable {
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 10, -7, 1, 1}, this, dir);
world.setBlock(x + dir.offsetX, y + 2, z + dir.offsetZ, this, dir.ordinal(), 3);
this.makeExtra(world, x + dir.offsetX, y + 2, z + dir.offsetZ);
this.makeExtra(world, x + dir.offsetX * (o - 10), y, z + dir.offsetZ * (o - 10));
this.makeExtra(world, x + dir.offsetX, y + 2, z + dir.offsetZ); //front connector
this.makeExtra(world, x + dir.offsetX * (o - 10), y, z + dir.offsetZ * (o - 10)); //back connector
ForgeDirection side = dir.getRotation(ForgeDirection.UP);
this.makeExtra(world, x + dir.offsetX * o + side.offsetX * 2 , y, z + dir.offsetZ * o + side.offsetZ * 2);
this.makeExtra(world, x + dir.offsetX * o + side.offsetX * 2 , y, z + dir.offsetZ * o + side.offsetZ * 2); //side connectors
this.makeExtra(world, x + dir.offsetX * o - side.offsetX * 2 , y, z + dir.offsetZ * o - side.offsetZ * 2);
}

View File

@ -1,5 +1,6 @@
package com.hbm.blocks.machine.rbmk;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKHeater;
import net.minecraft.entity.player.EntityPlayer;
@ -13,6 +14,9 @@ public class RBMKHeater extends RBMKBase {
if(meta >= this.offset)
return new TileEntityRBMKHeater();
if(hasExtra(meta))
return new TileEntityProxyCombo(false, false, true);
return null;
}

View File

@ -138,6 +138,11 @@ public class EntitySiegeCraft extends EntityUFOBase implements IBossDisplayData
);
}
@Override
protected int getScanRange() {
return 100;
}
@Override
protected int targetHeightOffset() {
return 7 + rand.nextInt(5);

View File

@ -60,17 +60,17 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
this.enableBackpack = !this.enableBackpack;
if(this.enableBackpack)
MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "Jetpack ON");
MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "Jetpack ON", MainRegistry.proxy.ID_JETPACK);
else
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Jetpack OFF");
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Jetpack OFF", MainRegistry.proxy.ID_JETPACK);
}
if(key == EnumKeybind.TOGGLE_HEAD) {
this.enableHUD = !this.enableHUD;
if(this.enableHUD)
MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "HUD ON");
MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "HUD ON", MainRegistry.proxy.ID_HUD);
else
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "HUD OFF");
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "HUD OFF", MainRegistry.proxy.ID_HUD);
}
}

View File

@ -8,6 +8,7 @@ import com.hbm.handler.BulletConfiguration;
import com.hbm.handler.GunConfiguration;
import com.hbm.interfaces.IBomb;
import com.hbm.interfaces.IBomb.BombReturnCode;
import com.hbm.main.MainRegistry;
import com.hbm.interfaces.IBulletImpactBehavior;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.PlayerInformPacket;
@ -101,7 +102,7 @@ public class GunDetonatorFactory {
if(ret.wasSuccessful() && bullet.shooter instanceof EntityPlayerMP) {
EntityPlayerMP player = (EntityPlayerMP) bullet.shooter;
world.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(EnumChatFormatting.YELLOW).flush()), (EntityPlayerMP) player);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(EnumChatFormatting.YELLOW).flush(), MainRegistry.proxy.ID_DETONATOR), (EntityPlayerMP) player);
}
}
}

View File

@ -1,108 +1,16 @@
package com.hbm.handler.nei;
import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect;
import java.util.Arrays;
import java.util.List;
import java.util.Map.Entry;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.recipes.FuelPoolRecipes;
import com.hbm.lib.RefStrings;
import codechicken.nei.NEIServerUtils;
import codechicken.nei.PositionedStack;
import codechicken.nei.recipe.TemplateRecipeHandler;
import net.minecraft.item.ItemStack;
public class FuelPoolHandler extends NEIUniversalHandler {
public class FuelPoolHandler extends TemplateRecipeHandler {
public class RecipeSet extends TemplateRecipeHandler.CachedRecipe {
PositionedStack input;
PositionedStack output;
public RecipeSet(ItemStack in, ItemStack out) {
this.input = new PositionedStack(in, 48, 24);
this.output = new PositionedStack(out, 102, 24);
}
@Override
public List<PositionedStack> getIngredients() {
return getCycledIngredients(cycleticks / 48, Arrays.asList(input));
}
@Override
public PositionedStack getResult() {
return output;
}
@Override
public List<PositionedStack> getOtherStacks() {
return Arrays.asList(new PositionedStack(new ItemStack(ModBlocks.machine_waste_drum), 75, 31));
}
public FuelPoolHandler() {
super("Spent Fuel Pool Drum", ModBlocks.machine_waste_drum, FuelPoolRecipes.recipes);
}
@Override
public String getRecipeName() {
return "Spent Fuel Pool Drum";
}
@Override
public String getGuiTexture() {
return RefStrings.MODID + ":textures/gui/nei/gui_nei.png";
}
@Override
public void drawBackground(int recipe) {
super.drawBackground(recipe);
drawTexturedModalRect(47, 23, 5, 87, 18, 18);
drawTexturedModalRect(101, 23, 5, 87, 18, 18);
drawTexturedModalRect(74, 14, 59, 87, 18, 38);
}
@Override
public void loadCraftingRecipes(String outputId, Object... results) {
if(outputId.equals("ntmSpentDrum")) {
for(Entry<ComparableStack, ItemStack> recipe : FuelPoolRecipes.recipes.entrySet()) {
this.arecipes.add(new RecipeSet(recipe.getKey().toStack(), recipe.getValue()));
}
} else {
super.loadCraftingRecipes(outputId, results);
}
}
@Override
public void loadCraftingRecipes(ItemStack result) {
for(Entry<ComparableStack, ItemStack> recipe : FuelPoolRecipes.recipes.entrySet()) {
if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getValue(), result)) {
this.arecipes.add(new RecipeSet(recipe.getKey().toStack(), recipe.getValue()));
}
}
}
@Override
public void loadUsageRecipes(String inputId, Object... ingredients) {
if(inputId.equals("ntmSpentDrum")) {
loadCraftingRecipes("ntmSpentDrum", new Object[0]);
} else {
super.loadUsageRecipes(inputId, ingredients);
}
}
@Override
public void loadUsageRecipes(ItemStack ingredient) {
for(Entry<ComparableStack, ItemStack> recipe : FuelPoolRecipes.recipes.entrySet()) {
if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getKey().toStack(), ingredient)) {
this.arecipes.add(new RecipeSet(recipe.getKey().toStack(), recipe.getValue()));
}
}
public String getKey() {
return "ntmSpentDrum";
}
}

View File

@ -3,8 +3,6 @@ package com.hbm.handler.nei;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.recipes.SolidificationRecipes;
import codechicken.nei.recipe.TemplateRecipeHandler;
public class SolidificationHandler extends NEIUniversalHandler {
public SolidificationHandler() {

View File

@ -233,12 +233,18 @@ public class FluidTank {
}
}
public void setType(int in, ItemStack[] slots) {
setType(in, in, slots);
public boolean setType(int in, ItemStack[] slots) {
return setType(in, in, slots);
}
//Changes tank type
public void setType(int in, int out, ItemStack[] slots) {
/**
* Changes the tank type and returns true if successful
* @param in
* @param out
* @param slots
* @return
*/
public boolean setType(int in, int out, ItemStack[] slots) {
if(slots[in] != null && slots[in].getItem() instanceof ItemFluidIdentifier) {
@ -248,6 +254,7 @@ public class FluidTank {
if(type != newType) {
type = newType;
fluid = 0;
return true;
}
} else if(slots[out] == null) {
@ -257,9 +264,12 @@ public class FluidTank {
slots[out] = slots[in].copy();
slots[in] = null;
fluid = 0;
return true;
}
}
}
return false;
}
/**

View File

@ -210,6 +210,7 @@ public class GUIRBMKConsole extends GuiScreen {
}
}
@SuppressWarnings("incomplete-switch") //shut up
protected void drawGuiContainerBackgroundLayer(float interp, int mX, int mY) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
@ -286,6 +287,13 @@ public class GUIRBMKConsole extends GuiScreen {
drawTexturedModalRect(guiLeft + x + 4, guiTop + y + 7, 44, 189, 2, 2);
break;
case HEATEX:
int cc = (int)Math.ceil((col.data.getInteger("water")) * 8 / col.data.getDouble("maxWater"));
drawTexturedModalRect(guiLeft + x + 1, guiTop + y + size - cc - 1, 131, 191 - cc, 3, cc);
int hc = (int)Math.ceil((col.data.getInteger("steam")) * 8 / col.data.getDouble("maxSteam"));
drawTexturedModalRect(guiLeft + x + 6, guiTop + y + size - hc - 1, 136, 191 - hc, 3, hc);
break;
}
if(this.selection[i])

View File

@ -34,7 +34,7 @@ public class ItemColtanCompass extends Item {
lease = System.currentTimeMillis() + 1000;
Vec3 vec = Vec3.createVectorHelper(entity.posX - lastX, 0, entity.posZ - lastZ);
MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m");
MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m", MainRegistry.proxy.ID_COMPASS);
}
if(ItemColtanCompass.this.lease < System.currentTimeMillis()) {

View File

@ -47,11 +47,11 @@ public class ItemLaserDetonator extends Item implements IHoldableWeapon {
MainRegistry.logger.log(Level.INFO, "[DET] Tried to detonate block at " + x + " / " + y + " / " + z + " by " + player.getDisplayName() + "!");
world.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(ret.wasSuccessful() ? EnumChatFormatting.YELLOW : EnumChatFormatting.RED).flush()), (EntityPlayerMP) player);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(ret.wasSuccessful() ? EnumChatFormatting.YELLOW : EnumChatFormatting.RED).flush(), MainRegistry.proxy.ID_DETONATOR), (EntityPlayerMP) player);
} else {
world.playSoundAtEntity(player, "hbm:item.techBoop", 1.0F, 1.0F);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(BombReturnCode.ERROR_NO_BOMB.getUnlocalizedMessage()).color(EnumChatFormatting.RED).flush()), (EntityPlayerMP) player);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(BombReturnCode.ERROR_NO_BOMB.getUnlocalizedMessage()).color(EnumChatFormatting.RED).flush(), MainRegistry.proxy.ID_DETONATOR), (EntityPlayerMP) player);
}
} else {

View File

@ -111,7 +111,7 @@ public class ItemWiring extends Item {
entity.posY - stack.stackTagCompound.getInteger("y"),
entity.posZ - stack.stackTagCompound.getInteger("z"));
MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m");
MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m", MainRegistry.proxy.ID_CABLE);
}
}
}

View File

@ -69,6 +69,8 @@ import com.hbm.render.item.weapon.*;
import com.hbm.render.loader.HmfModelLoader;
import com.hbm.render.tileentity.*;
import com.hbm.render.util.MissilePart;
import com.hbm.render.util.RenderInfoSystem;
import com.hbm.render.util.RenderInfoSystem.InfoEntry;
import com.hbm.sound.AudioWrapper;
import com.hbm.sound.AudioWrapperClient;
import com.hbm.sound.nt.ISoundSourceTE;
@ -93,11 +95,14 @@ import cpw.mods.fml.relauncher.ReflectionHelper;
public class ClientProxy extends ServerProxy {
public RenderInfoSystem theInfoSystem = new RenderInfoSystem();
@Override
public void registerRenderInfo() {
registerClientEventHandler(new ModEventHandlerClient());
registerClientEventHandler(new ModEventHandlerRenderer());
registerClientEventHandler(theInfoSystem);
AdvancedModelLoader.registerModelHandler(new HmfModelLoader());
ResourceManager.loadAnimatedModels();
@ -271,6 +276,8 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConnector.class, new RenderConnector());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylonLarge.class, new RenderPylonLarge());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySubstation.class, new RenderSubstation());
//chargers
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCharger.class, new RenderCharger());
//multiblocks
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStructureMarker.class, new RenderStructureMaker());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMultiblock.class, new RenderMultiblock());
@ -1618,11 +1625,14 @@ public class ClientProxy extends ServerProxy {
@Override
public void playSound(String sound, Object data) { }
@Override
public void displayTooltip(String msg) {
public void displayTooltip(String msg, int time, int id) {
Minecraft.getMinecraft().ingameGUI.func_110326_a(msg, false);
if(id != 0)
this.theInfoSystem.push(new InfoEntry(msg, time), id);
else
this.theInfoSystem.push(new InfoEntry(msg, time));
}
@Override

View File

@ -871,6 +871,8 @@ public class CraftingManager {
addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.RBMK.ordinal()), new Object[] { Items.book, Items.potato });
addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.HADRON.ordinal()), new Object[] { Items.book, ModItems.fuse });
addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.STARTER.ordinal()), new Object[] { Items.book, Items.iron_ingot });
addRecipeAuto(new ItemStack(ModBlocks.charger), new Object[] { "IGI", "ICI", "PDP", 'I', STEEL.ingot(), 'G', Items.glowstone_dust, 'C', ModBlocks.red_wire_coated, 'P', IRON.plate(), 'D', ModItems.coil_copper });
addShapelessAuto(new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_RESTORED.ordinal()), new Object[] { new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_DIGAMMA.ordinal()), KEY_TOOL_SCREWDRIVER, ModItems.ducttape, ModItems.armor_polish });
addShapelessAuto(new ItemStack(ModItems.holotape_damaged), new Object[] { DictFrame.fromOne(ModItems.holotape_image, EnumHoloImage.HOLO_RESTORED), ModBlocks.muffler, ModItems.crt_display, ModItems.gem_alexandrite /* placeholder for amplifier */ });

View File

@ -178,7 +178,7 @@ public class ModEventHandler {
}
if(MobConfig.enableDucks && event.player instanceof EntityPlayerMP && !event.player.getEntityData().getCompoundTag(EntityPlayer.PERSISTED_NBT_TAG).getBoolean("hasDucked"))
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("Press O to Duck!"), (EntityPlayerMP) event.player);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("Press O to Duck!", MainRegistry.proxy.ID_DUCK), (EntityPlayerMP) event.player);
}
}

View File

@ -686,7 +686,7 @@ public class ModEventHandlerClient {
}
if(ArmorUtil.isWearingEmptyMask(mc.thePlayer)) {
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Your mask has no filter!");
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Your mask has no filter!", MainRegistry.proxy.ID_FILTER);
}
}
}

View File

@ -294,6 +294,9 @@ public class ResourceManager {
//Electrolyser
public static final IModelCustom electrolyser = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/electrolyser.obj"));
//Belt
public static final IModelCustom charger = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/charger.obj"));
////Textures TEs
public static final ResourceLocation universal = new ResourceLocation(RefStrings.MODID, "textures/models/TheGadget3_.png");
@ -603,6 +606,9 @@ public class ResourceManager {
//Electrolyser
public static final ResourceLocation electrolyser_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/electrolyser.png");
//Charger
public static final ResourceLocation charger_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/charger.png");
////Obj Items
//Shimmer Sledge

View File

@ -10,6 +10,15 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
public class ServerProxy {
//sort by estimated time of display. longer lasting ones should be sortet at the top.
public static final int ID_DUCK = 0;
public static final int ID_FILTER = 1;
public static final int ID_COMPASS = 2;
public static final int ID_CABLE = 3;
public static final int ID_JETPACK = 4;
public static final int ID_HUD = 5;
public static final int ID_DETONATOR = 6;
public void registerRenderInfo() { }
public void registerTileEntitySpecialRenderer() { }
@ -28,8 +37,11 @@ public class ServerProxy {
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch) { return null; }
public void playSound(String sound, Object data) { }
public void displayTooltip(String msg) { }
public void displayTooltip(String msg, int id) {
displayTooltip(msg, 1000, id);
}
public void displayTooltip(String msg, int time, int id) { }
public boolean getIsKeyPressed(EnumKeybind key) {
return false;

View File

@ -15,22 +15,24 @@ public class PlayerInformPacket implements IMessage {
boolean fancy;
private String dmesg = "";
private int id;
private IChatComponent component;
public PlayerInformPacket() { }
public PlayerInformPacket(String dmesg) {
public PlayerInformPacket(String dmesg, int id) {
this.fancy = false;
this.dmesg = dmesg;
}
public PlayerInformPacket(IChatComponent component) {
public PlayerInformPacket(IChatComponent component, int id) {
this.fancy = true;
this.component = component;
}
@Override
public void fromBytes(ByteBuf buf) {
id = buf.readInt();
fancy = buf.readBoolean();
if(!fancy) {
@ -42,6 +44,7 @@ public class PlayerInformPacket implements IMessage {
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(id);
buf.writeBoolean(fancy);
if(!fancy) {
ByteBufUtils.writeUTF8String(buf, dmesg);
@ -57,7 +60,7 @@ public class PlayerInformPacket implements IMessage {
public IMessage onMessage(PlayerInformPacket m, MessageContext ctx) {
try {
MainRegistry.proxy.displayTooltip(m.fancy ? m.component.getFormattedText() : m.dmesg);
MainRegistry.proxy.displayTooltip(m.fancy ? m.component.getFormattedText() : m.dmesg, m.id);
} catch (Exception x) { }
return null;

View File

@ -0,0 +1,93 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import com.hbm.tileentity.machine.TileEntityCharger;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
public class RenderCharger extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y, z + 0.5);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glRotatef(90, 0F, 1F, 0F);
switch(tile.getBlockMetadata()) {
case 4: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(270, 0F, 1F, 0F); break;
case 2: GL11.glRotatef(0, 0F, 1F, 0F); break;
}
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.charger_tex);
ResourceManager.charger.renderPart("Base");
TileEntityCharger charger = (TileEntityCharger) tile;
double time = (charger.lastUsingTicks + (charger.usingTicks - charger.lastUsingTicks) * interp) / (double) charger.delay;
double extend = Math.min(1, time * 2);
double swivel = Math.max(0, (time - 0.5) * 2);
GL11.glPushMatrix();
GL11.glTranslated(-0.34375D, 0.25D, 0);
GL11.glRotated(10, 0, 0, 1);
GL11.glTranslated(0.34375D, -0.25D, 0);
GL11.glTranslated(0, -0.25 * extend, 0);
//ResourceManager.charger.renderPart("Slide");
GL11.glPushMatrix();
GL11.glTranslated(0, 0.28D, 0);
GL11.glRotated(30 * swivel, 1, 0, 0);
GL11.glTranslated(0, -0.28D, 0);
ResourceManager.charger.renderPart("Left");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(0, 0.28D, 0);
GL11.glRotated(-30 * swivel, 1, 0, 0);
GL11.glTranslated(0, -0.28D, 0);
ResourceManager.charger.renderPart("Right");
GL11.glPopMatrix();
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_CULL_FACE);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
GL11.glColor3f(1F, 0.75F, 0F);
ResourceManager.charger.renderPart("Light");
GL11.glColor3f(1F, 1F, 1F);
GL11.glTranslated(-0.34375D, 0.25D, 0);
GL11.glRotated(10, 0, 0, 1);
GL11.glTranslated(0.34375D, -0.25D, 0);
GL11.glTranslated(0, -0.25 * extend, 0);
GL11.glEnable(GL11.GL_TEXTURE_2D);
ResourceManager.charger.renderPart("Slide");
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
}
}

View File

@ -0,0 +1,175 @@
package com.hbm.render.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
public class RenderInfoSystem {
private static int nextID = 1000;
private static HashMap<Integer, InfoEntry> inbox = new HashMap();
private static HashMap<Integer, InfoEntry> messages = new HashMap();
@SubscribeEvent
public void clentTick(ClientTickEvent event) {
messages.putAll(inbox);
inbox.clear();
List<Integer> keys = new ArrayList(messages.keySet());
for(int i = 0; i < keys.size(); i++) {
Integer key = keys.get(i);
InfoEntry entry = messages.get(key);
if(entry.start + entry.millis < System.currentTimeMillis()) {
messages.remove(key);
keys = new ArrayList(messages.keySet());
i--;
}
}
}
@SubscribeEvent
public void onOverlayRender(RenderGameOverlayEvent.Pre event) {
if(event.type != ElementType.CROSSHAIRS)
return;
if(this.messages.isEmpty())
return;
Minecraft mc = Minecraft.getMinecraft();
ScaledResolution resolution = event.resolution;
List<InfoEntry> entries = new ArrayList(messages.values());
Collections.sort(entries);
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
int longest = 0;
for(InfoEntry entry : messages.values()) {
int length = mc.fontRenderer.getStringWidth(entry.text);
if(length > longest)
longest = length;
}
int mode = 0;
int pX = mode == 0 ? 15 : mode == 1 ? (resolution.getScaledWidth() - longest - 15) : mode == 2 ? (resolution.getScaledWidth() / 2 + 7) : (resolution.getScaledWidth() / 2 - longest - 6);
int pZ = mode == 0 ? 15 : mode == 1 ? 15 : resolution.getScaledHeight() / 2 + 7;
int side = pX + 5 + longest;
int height = messages.size() * 10 + pZ + 2;
int z = 0;
Tessellator tess = Tessellator.instance;
tess.startDrawingQuads();
tess.setColorRGBA_F(0.5F, 0.5F, 0.5F, 0.5F);
tess.addVertex(pX - 5, pZ - 5, z);
tess.addVertex(pX - 5, height, z);
tess.addVertex(side, height, z);
tess.addVertex(side, pZ - 5, z);
tess.draw();
int off = 0;
long now = System.currentTimeMillis();
for(InfoEntry entry : messages.values()) {
int elapsed = (int) (now - entry.start);
int alpha = Math.max(Math.min(510 * (entry.millis - elapsed) / entry.millis, 255), 5); //smoothly scales down from 510 to 0, then caps at 255
int color = entry.color + (alpha << 24 & -0xffffff);
mc.fontRenderer.drawString(entry.text, pX, pZ + off, color);
off += 10;
}
/*mc.fontRenderer.drawString(title, pX + 1, pZ - 9, bgCol);
mc.fontRenderer.drawString(title, pX, pZ - 10, titleCol);
try {
for(String line : text) {
int color = 0xFFFFFF;
if(line.startsWith("&[")) {
int end = line.lastIndexOf("&]");
color = Integer.parseInt(line.substring(2, end));
line = line.substring(end + 2);
}
mc.fontRenderer.drawStringWithShadow(line, pX, pZ, color);
pZ += 10;
}
} catch(Exception ex) {
mc.fontRenderer.drawStringWithShadow(ex.getClass().getSimpleName(), pX, pZ + 10, 0xff0000);
}*/
GL11.glColor3f(1F, 1F, 1F);
GL11.glPopMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons);
}
public static void push(InfoEntry entry) {
push(entry, nextID++); //range is so large, collisions are unlikely and if they do occur, not a big deal
}
public static void push(InfoEntry entry, int id) {
inbox.put(id, entry);
}
public static class InfoEntry implements Comparable {
String text;
int color = 0xffffff;
long start;
int millis;
public InfoEntry(String text) {
this(text, 3000);
}
public InfoEntry(String text, int millis) {
this.text = text;
this.millis = millis;
this.start = System.currentTimeMillis();
}
public InfoEntry withColor(int color) {
this.color = color;
return this;
}
@Override
public int compareTo(Object o) {
if(!(o instanceof InfoEntry)) {
return 0;
}
InfoEntry other = (InfoEntry) o;
return this.millis < other.millis ? -1 : this.millis > other.millis ? 1 : 0;
}
}
}

View File

@ -7,6 +7,7 @@ import com.hbm.inventory.fluid.FluidType;
import api.hbm.energy.IEnergyConnector;
import api.hbm.energy.IEnergyUser;
import api.hbm.fluid.IFluidConnector;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
@ -14,7 +15,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory {
public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector {
TileEntity tile;
boolean inventory;
@ -400,4 +401,40 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
nbt.setBoolean("power", power);
nbt.setBoolean("fluid", fluid);
}
@Override
public long transferFluid(FluidType type, long fluid) {
if(!this.fluid)
return fluid;
if(getTile() instanceof IFluidConnector) {
return ((IFluidConnector)getTile()).transferFluid(type, fluid);
}
return fluid;
}
@Override
public long getDemand(FluidType type) {
if(!this.fluid)
return 0;
if(getTile() instanceof IFluidConnector) {
return ((IFluidConnector)getTile()).getDemand(type);
}
return 0;
}
@Override
public boolean canConnect(FluidType type, ForgeDirection dir) {
if(!this.fluid)
return false;
if(getTile() instanceof IFluidConnector) {
return ((IFluidConnector)getTile()).canConnect(type, dir);
}
return false;
}
}

View File

@ -193,8 +193,10 @@ public class TileMappings {
put(TileEntityLoot.class, "tileentity_ntm_loot");
put(TileEntityBobble.class, "tileentity_ntm_bobblehead");
put(TileEntityEmitter.class, "tileentity_ntm_emitter");
put(TileEntityDoorGeneric.class, "tileentity_ntm_door");
put(TileEntityCharger.class, "tileentity_ntm_charger");
put(TileEntityProxyInventory.class, "tileentity_proxy_inventory");
put(TileEntityProxyEnergy.class, "tileentity_proxy_power");

View File

@ -0,0 +1,140 @@
package com.hbm.tileentity.machine;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.TileEntityLoadedBase;
import api.hbm.energy.IBatteryItem;
import api.hbm.energy.IEnergyUser;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUser, INBTPacketReceiver {
private List<EntityPlayer> players = new ArrayList();
private long charge = 0;
long lastOp = 0;
boolean particles = false;
public int usingTicks;
public int lastUsingTicks;
public static final int delay = 20;
@Override
public void updateEntity() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite();
if(!worldObj.isRemote) {
this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir);
players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5, yCoord, zCoord + 0.5, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).expand(0.5, 0.0, 0.5));
charge = 0;
for(EntityPlayer player : players) {
for(int i = 0; i < 5; i++) {
ItemStack stack = player.getEquipmentInSlot(i);
if(stack != null && stack.getItem() instanceof IBatteryItem) {
IBatteryItem battery = (IBatteryItem) stack.getItem();
charge += Math.min(battery.getMaxCharge() - battery.getCharge(stack), battery.getChargeRate());
}
}
}
particles = worldObj.getTotalWorldTime() - lastOp < 4;
if(particles) {
if(worldObj.getTotalWorldTime() % 20 == 0)
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "random.fizz", 0.2F, 0.5F);
}
NBTTagCompound data = new NBTTagCompound();
data.setLong("c", charge);
data.setBoolean("p", particles);
INBTPacketReceiver.networkPack(this, data, 50);
}
lastUsingTicks = usingTicks;
if((charge > 0 || particles) && usingTicks < delay) {
usingTicks++;
if(usingTicks == 2)
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "tile.piston.out", 0.5F, 0.5F);
}
if((charge <= 0 && !particles) && usingTicks > 0) {
usingTicks--;
if(usingTicks == 4)
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "tile.piston.in", 0.5F, 0.5F);
}
if(particles) {
Random rand = worldObj.rand;
worldObj.spawnParticle("magicCrit",
xCoord + 0.5 + rand.nextDouble() * 0.0625 + dir.offsetX * 0.75,
yCoord + 0.1,
zCoord + 0.5 + rand.nextDouble() * 0.0625 + dir.offsetZ * 0.75,
-dir.offsetX + rand.nextGaussian() * 0.1,
0,
-dir.offsetZ + rand.nextGaussian() * 0.1);
}
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
this.charge = nbt.getLong("c");
this.particles = nbt.getBoolean("p");
}
@Override
public long getPower() {
return 0;
}
@Override
public long getMaxPower() {
return charge;
}
@Override
public void setPower(long power) { }
@Override
public long transferPower(long power) {
if(this.usingTicks < delay || power == 0)
return power;
lastOp = worldObj.getTotalWorldTime();
for(EntityPlayer player : players) {
for(int i = 0; i < 5; i++) {
ItemStack stack = player.getEquipmentInSlot(i);
if(stack != null && stack.getItem() instanceof IBatteryItem) {
IBatteryItem battery = (IBatteryItem) stack.getItem();
long toCharge = Math.min(battery.getMaxCharge() - battery.getCharge(stack), battery.getChargeRate());
toCharge = Math.min(toCharge, power / 5);
battery.chargeBattery(stack, toCharge);
power -= toCharge;
}
}
}
return power;
}
}

View File

@ -16,8 +16,10 @@ import com.hbm.packet.NBTPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.fauxpointtwelve.BlockPos;
import api.hbm.energy.IEnergyGenerator;
import api.hbm.fluid.IFluidStandardTransceiver;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -26,7 +28,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyGenerator, INBTPacketReceiver {
public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyGenerator, INBTPacketReceiver, IFluidStandardTransceiver {
public long power;
public static final long maxPower = 100000000000L;
@ -75,6 +77,11 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
this.sendPower(worldObj, xCoord - dir.offsetX * 11, yCoord, zCoord - dir.offsetZ * 11, dir);
for(BlockPos pos : this.getConPos()) {
this.sendFluid(tanks[1].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), dir); //TODO: there's no directions for this yet because idc
this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), dir);
}
if(power > maxPower)
power = maxPower;
@ -119,6 +126,22 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
}
}
public void onLeverPull(FluidType previous) {
for(BlockPos pos : getConPos()) {
this.tryUnsubscribe(previous, worldObj, pos.getX(), pos.getY(), pos.getZ());
}
}
public BlockPos[] getConPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
return new BlockPos[] {
new BlockPos(xCoord - dir.offsetX * 4, yCoord + 2, zCoord - dir.offsetZ * 4),
new BlockPos(xCoord + rot.offsetX * 3, yCoord, zCoord + rot.offsetZ * 3),
new BlockPos(xCoord - rot.offsetZ * 3, yCoord, zCoord - rot.offsetZ * 3)
};
}
public void networkPack(NBTTagCompound nbt, int range) {
PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range));
}
@ -168,17 +191,17 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
@Override
public void setFluidFill(int i, FluidType type) {
if(type.name().equals(tanks[0].getTankType().name()))
if(type == tanks[0].getTankType())
tanks[0].setFill(i);
else if(type.name().equals(tanks[1].getTankType().name()))
else if(type == tanks[1].getTankType())
tanks[1].setFill(i);
}
@Override
public int getFluidFill(FluidType type) {
if(type.name().equals(tanks[0].getTankType().name()))
if(type == tanks[0].getTankType())
return tanks[0].getFill();
else if(type.name().equals(tanks[1].getTankType().name()))
else if(type == tanks[1].getTankType())
return tanks[1].getFill();
return 0;
@ -186,7 +209,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
@Override
public int getMaxFluidFill(FluidType type) {
if(type.name().equals(tanks[0].getTankType().name()))
if(type == tanks[0].getTankType())
return tanks[0].getMaxFill();
return 0;
@ -244,4 +267,14 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc
public void setPower(long power) {
this.power = power;
}
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[] {tanks[1]};
}
@Override
public FluidTank[] getReceivingTanks() {
return new FluidTank[] {tanks[0]};
}
}

View File

@ -11,12 +11,13 @@ import com.hbm.inventory.fluid.Fluids;
import com.hbm.lib.Library;
import com.hbm.main.ModEventHandler;
import api.hbm.fluid.IFluidStandardTransceiver;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.EnumSkyBlock;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, IFluidSource {
public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
public int age = 0;
public FluidTank[] tanks;
@ -53,6 +54,9 @@ public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, I
tanks[1].setFill(tanks[1].getFill() + convert);
}
this.subscribeToAllAround(tanks[0].getTankType(), this);
this.sendFluidToAll(tanks[1].getTankType(), this);
fillFluidInit(tanks[1].getTankType());
} else {
@ -148,4 +152,14 @@ public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, I
public void clearFluidList(FluidType type) {
list.clear();
}
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[] {tanks [1]};
}
@Override
public FluidTank[] getReceivingTanks() {
return new FluidTank[] {tanks [0]};
}
}

View File

@ -14,11 +14,13 @@ import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.TileEntityMachineBase;
import api.hbm.energy.IEnergyUser;
import api.hbm.fluid.IFluidStandardTransceiver;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IEnergyUser {
public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IEnergyUser, IFluidStandardTransceiver {
public int age = 0;
public long power = 0;
@ -61,8 +63,9 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen
data.setLong("power", power);
this.networkPack(data, 25);
}
this.subscribeToAllAround(tanks[0].getTankType(), this);
this.sendFluidToAll(tanks[1].getTankType(), this);
if(power < 0)
power = 0;
@ -196,4 +199,14 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen
public long getMaxPower() {
return maxPower;
}
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[] {tanks [1]};
}
@Override
public FluidTank[] getReceivingTanks() {
return new FluidTank[] {tanks [0]};
}
}

View File

@ -4,10 +4,13 @@ import com.hbm.blocks.BlockDummyable;
import com.hbm.inventory.FluidTank;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.util.fauxpointtwelve.BlockPos;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityDeuteriumTower extends TileEntityDeuteriumExtractor {
@ -71,6 +74,27 @@ public class TileEntityDeuteriumTower extends TileEntityDeuteriumExtractor {
}
protected void updateConnections() {
for(BlockPos pos : getConPos()) {
this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), ForgeDirection.UNKNOWN);
}
}
public void subscribeToAllAround(FluidType type, World world, int x, int y, int z) {
for(BlockPos pos : getConPos()) {
this.trySubscribe(type, world, pos.getX(), pos.getY(), pos.getZ(), ForgeDirection.UNKNOWN);
}
}
public void sendFluidToAll(FluidType type, TileEntity te) {
for(BlockPos pos : getConPos()) {
this.sendFluid(type, worldObj, pos.getX(), pos.getY(), pos.getZ(), ForgeDirection.UNKNOWN);
}
}
private BlockPos[] getConPos() {
int offsetX = 0;
int offsetZ = 0;
@ -85,14 +109,16 @@ public class TileEntityDeuteriumTower extends TileEntityDeuteriumExtractor {
offsetZ = dir.offsetZ;
}
this.trySubscribe(worldObj, this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 1, ForgeDirection.UNKNOWN); //TODO: figure this one out without dying
this.trySubscribe(worldObj, this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 0, ForgeDirection.UNKNOWN);
this.trySubscribe(worldObj, this.xCoord + offsetX * 1, this.yCoord, this.zCoord - offsetZ * 2, ForgeDirection.UNKNOWN);
this.trySubscribe(worldObj, this.xCoord + offsetX * 0, this.yCoord, this.zCoord - offsetZ * 2, ForgeDirection.UNKNOWN);
this.trySubscribe(worldObj, this.xCoord + offsetX * 1, this.yCoord, this.zCoord + offsetZ * 1, ForgeDirection.UNKNOWN);
this.trySubscribe(worldObj, this.xCoord + offsetX * 0, this.yCoord, this.zCoord + offsetZ * 1, ForgeDirection.UNKNOWN);
this.trySubscribe(worldObj, this.xCoord - offsetX * 1, this.yCoord, this.zCoord + offsetZ * 0, ForgeDirection.UNKNOWN);
this.trySubscribe(worldObj, this.xCoord - offsetX * 1, this.yCoord, this.zCoord - offsetZ * 1, ForgeDirection.UNKNOWN);
return new BlockPos[] {
new BlockPos(this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 1),
new BlockPos(this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 0),
new BlockPos(this.xCoord + offsetX * 1, this.yCoord, this.zCoord - offsetZ * 2),
new BlockPos(this.xCoord + offsetX * 0, this.yCoord, this.zCoord - offsetZ * 2),
new BlockPos(this.xCoord + offsetX * 1, this.yCoord, this.zCoord + offsetZ * 1),
new BlockPos(this.xCoord + offsetX * 0, this.yCoord, this.zCoord + offsetZ * 1),
new BlockPos(this.xCoord - offsetX * 1, this.yCoord, this.zCoord + offsetZ * 0),
new BlockPos(this.xCoord - offsetX * 1, this.yCoord, this.zCoord - offsetZ * 1)
};
}
AxisAlignedBB bb = null;

View File

@ -226,7 +226,7 @@ public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISide
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
this.updateStandardPipes(Fluids.WATER, worldObj, xCoord, yCoord, zCoord);
this.subscribeToAllAround(Fluids.WATER, worldObj, xCoord, yCoord, zCoord);
//Water
tank.loadTank(0, 3, slots);

View File

@ -101,13 +101,14 @@ public class TileEntityMachineDiesel extends TileEntityMachineBase implements IE
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
this.updateStandardPipes(Fluids.WATER, worldObj, xCoord, yCoord, zCoord);
//Tank Management
tank.setType(3, 4, slots);
FluidType last = tank.getTankType();
if(tank.setType(3, 4, slots)) this.unsubscribeToAllAround(last, this);
tank.loadTank(0, 1, slots);
tank.updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId);
this.subscribeToAllAround(tank.getTankType(), this);
FluidType type = tank.getTankType();
if(type == Fluids.NITAN)

View File

@ -35,7 +35,6 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;

View File

@ -254,6 +254,13 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon
case CONTROL_AUTO:
stats.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.control.level", ((int)((this.data.getDouble("level") * 100D))) + "%"));
break;
case HEATEX:
stats.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey(I18nUtil.resolveKey(Fluids.fromID(this.data.getShort("type")).getUnlocalizedName()) + " " +
this.data.getInteger("water") + "/" + this.data.getInteger("maxWater") + "mB"));
stats.add(EnumChatFormatting.RED + I18nUtil.resolveKey(I18nUtil.resolveKey(Fluids.fromID(this.data.getShort("hottype")).getUnlocalizedName()) + " " +
this.data.getInteger("steam") + "/" + this.data.getInteger("maxSteam") + "mB"));
break;
}
if(data.getBoolean("moderated"))

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidSource;
import com.hbm.inventory.FluidTank;
@ -12,6 +13,8 @@ import com.hbm.inventory.fluid.Fluids;
import com.hbm.lib.Library;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType;
import net.minecraft.nbt.NBTTagCompound;
public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements IFluidAcceptor, IFluidSource {
public FluidTank feed;
@ -28,11 +31,6 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I
public String getName() {
return "container.rbmkHeater";
}
@Override
public ColumnType getConsoleType() {
return ColumnType.HEATEX;
}
@Override
public void updateEntity() {
@ -166,4 +164,49 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I
public void clearFluidList(FluidType type) {
list.clear();
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
feed.readFromNBT(nbt, "feed");
steam.readFromNBT(nbt, "steam");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
feed.writeToNBT(nbt, "feed");
steam.writeToNBT(nbt, "steam");
}
@Override
public void onMelt(int reduce) {
int count = 1 + worldObj.rand.nextInt(2);
for(int i = 0; i < count; i++) {
spawnDebris(DebrisType.BLANK);
}
super.onMelt(reduce);
}
@Override
public ColumnType getConsoleType() {
return ColumnType.HEATEX;
}
@Override
public NBTTagCompound getNBTForConsole() {
NBTTagCompound data = new NBTTagCompound();
data.setInteger("water", this.feed.getFill());
data.setInteger("maxWater", this.feed.getMaxFill());
data.setInteger("steam", this.steam.getFill());
data.setInteger("maxSteam", this.steam.getMaxFill());
data.setShort("type", (short)this.feed.getTankType().getID());
data.setShort("hottype", (short)this.steam.getTankType().getID());
return data;
}
}

View File

@ -15,7 +15,6 @@ import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import scala.actors.threadpool.Arrays;
public class TileEntityRBMKOutlet extends TileEntity implements IFluidSource {

View File

@ -14,13 +14,13 @@ import com.hbm.lib.Library;
import com.hbm.main.ModEventHandler;
import com.hbm.tileentity.TileEntityMachineBase;
import api.hbm.fluid.IFluidUser;
import api.hbm.fluid.IFluidStandardTransceiver;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.EnumSkyBlock;
public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IFluidUser {
public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
public FluidTank tank;
public short mode = 0;
@ -57,9 +57,11 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc
this.sendFluidToAll(tank.getTankType(), this);
}
/*
* TODO: these don't work as receivers yet, don't forget how the subscription system works
*/
if(this.mode == 0 || this.mode == 1) {
this.subscribeToAllAround(tank.getTankType(), worldObj, xCoord, yCoord, zCoord);
} else {
this.unsubscribeToAllAround(tank.getTankType(), worldObj, xCoord, yCoord, zCoord);
}
age++;
if(age >= 20)
@ -126,7 +128,6 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc
}
public void networkUnpack(NBTTagCompound data) {
mode = data.getShort("mode");
}
@ -211,18 +212,12 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc
}
@Override
public long transferFluid(FluidType type, long fluid) {
long toTransfer = Math.min(getDemand(type), fluid);
tank.setFill(tank.getFill() + (int) toTransfer);
return fluid - toTransfer;
public FluidTank[] getSendingTanks() {
return (mode == 1 || mode == 2) ? new FluidTank[] {tank} : new FluidTank[0];
}
@Override
public long getDemand(FluidType type) {
if(this.mode == 2 || this.mode == 3)
return 0;
return type == tank.getTankType() ? tank.getMaxFill() - tank.getFill() : 0;
public FluidTank[] getReceivingTanks() {
return (mode == 0 || mode == 1) ? new FluidTank[] {tank} : new FluidTank[0];
}
}

View File

@ -7,6 +7,7 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class TileEntityMachineBAT9000 extends TileEntityBarrel {
@ -28,6 +29,30 @@ public class TileEntityMachineBAT9000 extends TileEntityBarrel {
}
}
@Override
public void subscribeToAllAround(FluidType type, World world, int x, int y, int z) {
this.trySubscribe(type, world, xCoord + 1, yCoord, zCoord + 3, Library.POS_Z);
this.trySubscribe(type, world, xCoord - 1, yCoord, zCoord + 3, Library.POS_Z);
this.trySubscribe(type, world, xCoord + 1, yCoord, zCoord - 3, Library.NEG_Z);
this.trySubscribe(type, world, xCoord - 1, yCoord, zCoord - 3, Library.NEG_Z);
this.trySubscribe(type, world, xCoord + 3, yCoord, zCoord + 1, Library.POS_X);
this.trySubscribe(type, world, xCoord - 3, yCoord, zCoord + 1, Library.POS_X);
this.trySubscribe(type, world, xCoord + 3, yCoord, zCoord - 1, Library.NEG_X);
this.trySubscribe(type, world, xCoord - 3, yCoord, zCoord - 1, Library.NEG_X);
}
@Override
public void unsubscribeToAllAround(FluidType type, World world, int x, int y, int z) {
this.tryUnsubscribe(type, world, xCoord + 1, yCoord, zCoord + 3);
this.tryUnsubscribe(type, world, xCoord - 1, yCoord, zCoord + 3);
this.tryUnsubscribe(type, world, xCoord + 1, yCoord, zCoord - 3);
this.tryUnsubscribe(type, world, xCoord - 1, yCoord, zCoord - 3);
this.tryUnsubscribe(type, world, xCoord + 3, yCoord, zCoord + 1);
this.tryUnsubscribe(type, world, xCoord - 3, yCoord, zCoord + 1);
this.tryUnsubscribe(type, world, xCoord + 3, yCoord, zCoord - 1);
this.tryUnsubscribe(type, world, xCoord - 3, yCoord, zCoord - 1);
}
@Override
public void fillFluidInit(FluidType type) {
fillFluid(this.xCoord + 1, this.yCoord, this.zCoord + 3, getTact(), type);

View File

@ -7,6 +7,7 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityMachineOrbus extends TileEntityBarrel {
@ -29,7 +30,7 @@ public class TileEntityMachineOrbus extends TileEntityBarrel {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite();
ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN);
for(int i = -1; i < 7; i += 7) {
for(int i = -1; i < 6; i += 6) {
this.fillFluid(xCoord, yCoord + i, zCoord, this.getTact(), this.tank.getTankType());
this.fillFluid(xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ, this.getTact(), this.tank.getTankType());
this.fillFluid(xCoord + rot.offsetX, yCoord + i, zCoord + rot.offsetZ, this.getTact(), this.tank.getTankType());
@ -42,7 +43,7 @@ public class TileEntityMachineOrbus extends TileEntityBarrel {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite();
ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN);
for(int i = -1; i < 7; i += 7) {
for(int i = -1; i < 6; i += 6) {
ForgeDirection out = i == -1 ? ForgeDirection.DOWN : ForgeDirection.UP;
sendFluid(type, worldObj, xCoord, yCoord + i, zCoord, out);
sendFluid(type, worldObj, xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ, out);
@ -50,6 +51,35 @@ public class TileEntityMachineOrbus extends TileEntityBarrel {
sendFluid(type, worldObj, xCoord + dir.offsetX + rot.offsetX, yCoord + i, zCoord + dir.offsetZ + rot.offsetZ, out);
}
}
@Override
public void subscribeToAllAround(FluidType type, World world, int x, int y, int z) {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite();
ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN);
for(int i = -1; i < 6; i += 6) {
ForgeDirection out = i == -1 ? ForgeDirection.DOWN : ForgeDirection.UP;
this.trySubscribe(type, world, xCoord, yCoord + i, zCoord, out);
this.trySubscribe(type, world, xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ, out);
this.trySubscribe(type, world, xCoord + rot.offsetX, yCoord + i, zCoord + rot.offsetZ, out);
this.trySubscribe(type, world, xCoord + dir.offsetX + rot.offsetX, yCoord + i, zCoord + dir.offsetZ + rot.offsetZ, out);
}
}
@Override
public void unsubscribeToAllAround(FluidType type, World world, int x, int y, int z) {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite();
ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN);
for(int i = -1; i < 7; i += 7) {
this.tryUnsubscribe(type, world, xCoord, yCoord + i, zCoord);
this.tryUnsubscribe(type, world, xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ);
this.tryUnsubscribe(type, world, xCoord + rot.offsetX, yCoord + i, zCoord + rot.offsetZ);
this.tryUnsubscribe(type, world, xCoord + dir.offsetX + rot.offsetX, yCoord + i, zCoord + dir.offsetZ + rot.offsetZ);
}
}
AxisAlignedBB bb = null;

View File

@ -0,0 +1,903 @@
# Blender v2.79 (sub 0) OBJ File: 'charger.blend'
# www.blender.org
o Light
v -0.266762 0.501450 -0.023437
v -0.269068 0.517861 -0.016573
v -0.270024 0.524659 0.000000
v -0.269068 0.517861 0.016573
v -0.266762 0.501450 0.023438
v -0.264455 0.485038 0.016573
v -0.263500 0.478240 0.000000
v -0.264455 0.485038 -0.016573
vn 0.9903 0.1392 0.0000
s off
f 3//1 5//1 7//1
f 1//1 2//1 3//1
f 3//1 4//1 5//1
f 5//1 6//1 7//1
f 7//1 8//1 1//1
f 1//1 3//1 7//1
o Left
v -0.406250 0.281250 0.000000
v -0.387944 0.281250 0.044194
v -0.343750 0.281250 0.062500
v -0.299556 0.281250 0.044194
v -0.281250 0.281250 0.000000
v -0.375000 0.281250 0.000000
v -0.365847 0.281250 0.022097
v -0.343750 0.281250 0.031250
v -0.321653 0.281250 0.022097
v -0.312500 0.281250 0.000000
v -0.387944 0.531250 0.044194
v -0.406250 0.531250 0.000000
v -0.343750 0.531250 0.062500
v -0.299556 0.531250 0.044194
v -0.281250 0.531250 0.000000
v -0.365847 0.531250 0.022097
v -0.375000 0.531250 0.000000
v -0.343750 0.531250 0.031250
v -0.321653 0.531250 0.022097
v -0.312500 0.531250 0.000000
v -0.406250 0.281250 0.000000
v -0.387944 0.281250 0.044194
v -0.343750 0.281250 0.062500
v -0.299556 0.281250 0.044194
v -0.281250 0.281250 0.000000
v -0.375000 0.281250 0.000000
v -0.365847 0.281250 0.022097
v -0.343750 0.281250 0.031250
v -0.321653 0.281250 0.022097
v -0.312500 0.281250 0.000000
v -0.387944 0.531250 0.044194
v -0.406250 0.531250 0.000000
v -0.343750 0.531250 0.062500
v -0.299556 0.531250 0.044194
v -0.281250 0.531250 0.000000
v -0.365847 0.531250 0.022097
v -0.375000 0.531250 0.000000
v -0.343750 0.531250 0.031250
v -0.321653 0.531250 0.022097
v -0.312500 0.531250 0.000000
vt 0.486486 0.026316
vt 0.513514 -0.000000
vt 0.540541 0.026316
vt 0.378378 -0.000000
vt 0.432432 0.026316
vt 0.378378 0.026316
vt 0.540541 -0.000000
vt 0.594595 0.026316
vt 0.459459 -0.000000
vt 0.486486 0.236842
vt 0.513514 0.263158
vt 0.486486 0.263158
vt 0.432432 0.236842
vt 0.378378 0.263158
vt 0.378378 0.236842
vt 0.594595 0.236842
vt 0.540541 0.263158
vt 0.540541 0.236842
vt 0.459459 0.263158
vt 0.432432 0.263158
vt 0.621622 0.026316
vt 0.351351 0.236842
vt 0.351351 0.026316
vt 0.486486 -0.000000
vt 0.405405 -0.000000
vt 0.567568 -0.000000
vt 0.432432 -0.000000
vt 0.405405 0.263158
vt 0.567568 0.263158
vt 0.621622 0.236842
vt 0.378378 0.473684
vt 0.405405 0.263158
vt 0.405405 0.473684
vt 0.486486 0.026316
vt 0.432432 0.236842
vt 0.432432 0.026316
vt 0.432432 0.473684
vt 0.459459 0.263158
vt 0.459459 0.473684
vt 0.540541 0.026316
vt 0.486486 0.236842
vt 0.486486 0.473684
vt 0.513514 0.263158
vt 0.513514 0.473684
vt 0.594595 0.026316
vt 0.540541 0.236842
vt 0.378378 0.236842
vt 0.378378 0.026316
vt 0.540541 0.473684
vt 0.567568 0.263158
vt 0.567568 0.473684
vt 0.378378 0.263158
vt 0.432432 0.263158
vt 0.486486 0.263158
vt 0.594595 0.236842
vt 0.540541 0.263158
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.9239 0.0000 -0.3827
vn 0.7071 0.0000 -0.7071
vn 0.0000 0.0000 1.0000
vn -0.7071 0.0000 0.7071
vn 0.7071 0.0000 0.7071
vn -0.7071 0.0000 -0.7071
vn 0.9239 0.0000 0.3827
vn -0.9239 0.0000 0.3827
vn -0.9239 0.0000 -0.3827
s off
f 11/1/2 17/2/2 12/3/2
f 14/4/2 10/5/2 9/6/2
f 17/7/2 13/8/2 12/3/2
f 10/5/2 16/9/2 11/1/2
f 21/10/3 27/11/3 26/12/3
f 19/13/3 25/14/3 20/15/3
f 23/16/3 27/17/3 22/18/3
f 19/13/3 26/19/3 24/20/3
f 18/21/4 23/16/4 13/8/4
f 9/6/4 25/22/4 14/23/4
f 11/1/2 16/24/2 17/2/2
f 14/4/2 15/25/2 10/5/2
f 17/7/2 18/26/2 13/8/2
f 10/5/2 15/27/2 16/9/2
f 21/10/3 22/18/3 27/11/3
f 19/13/3 24/28/3 25/14/3
f 23/16/3 28/29/3 27/17/3
f 19/13/3 21/10/3 26/19/3
f 18/21/4 28/30/4 23/16/4
f 9/6/4 20/15/4 25/22/4
s 1
f 34/31/5 44/32/6 35/33/6
f 31/34/7 39/35/8 30/36/8
f 35/37/6 46/38/4 36/39/4
f 32/40/9 41/41/7 31/34/7
f 36/42/4 47/43/10 37/44/10
f 33/45/11 42/46/9 32/40/9
f 30/36/8 40/47/12 29/48/12
f 37/49/10 48/50/13 38/51/13
f 34/31/5 45/52/5 44/32/6
f 31/34/7 41/41/7 39/35/8
f 35/37/6 44/53/6 46/38/4
f 32/40/9 42/46/9 41/41/7
f 36/42/4 46/54/4 47/43/10
f 33/45/11 43/55/11 42/46/9
f 30/36/8 39/35/8 40/47/12
f 37/49/10 47/56/10 48/50/13
o Right
v -0.343750 0.281250 -0.062500
v -0.387944 0.281250 -0.044194
v -0.406250 0.281250 0.000000
v -0.281250 0.281250 0.000000
v -0.299556 0.281250 -0.044194
v -0.343750 0.281250 -0.031250
v -0.365847 0.281250 -0.022097
v -0.375000 0.281250 0.000000
v -0.312500 0.281250 0.000000
v -0.321653 0.281250 -0.022097
v -0.387944 0.531250 -0.044194
v -0.343750 0.531250 -0.062500
v -0.406250 0.531250 0.000000
v -0.299556 0.531250 -0.044194
v -0.281250 0.531250 0.000000
v -0.365847 0.531250 -0.022097
v -0.343750 0.531250 -0.031250
v -0.375000 0.531250 0.000000
v -0.321653 0.531250 -0.022097
v -0.312500 0.531250 0.000000
v -0.343750 0.281250 -0.031250
v -0.365847 0.281250 -0.022097
v -0.375000 0.281250 0.000000
v -0.312500 0.281250 0.000000
v -0.321653 0.281250 -0.022097
v -0.365847 0.531250 -0.022097
v -0.343750 0.531250 -0.031250
v -0.375000 0.531250 0.000000
v -0.321653 0.531250 -0.022097
v -0.312500 0.531250 0.000000
v -0.343750 0.281250 -0.062500
v -0.387944 0.281250 -0.044194
v -0.406250 0.281250 0.000000
v -0.281250 0.281250 0.000000
v -0.299556 0.281250 -0.044194
v -0.387944 0.531250 -0.044194
v -0.343750 0.531250 -0.062500
v -0.406250 0.531250 0.000000
v -0.299556 0.531250 -0.044194
v -0.281250 0.531250 0.000000
vt 0.486486 0.026316
vt 0.513514 -0.000000
vt 0.540541 0.026316
vt 0.432432 -0.000000
vt 0.432432 0.026316
vt 0.567568 0.000000
vt 0.594595 0.026316
vt 0.378378 0.026316
vt 0.405405 -0.000000
vt 0.486486 0.236842
vt 0.513514 0.263158
vt 0.486486 0.263158
vt 0.432432 0.263158
vt 0.432432 0.236842
vt 0.540541 0.236842
vt 0.567568 0.263158
vt 0.540541 0.263158
vt 0.378378 0.236842
vt 0.405405 0.263158
vt 0.378378 0.263158
vt 0.351351 0.236842
vt 0.351351 0.026316
vt 0.621622 0.026316
vt 0.594595 0.236842
vt 0.486486 -0.000000
vt 0.459459 -0.000000
vt 0.540541 0.000000
vt 0.378378 -0.000000
vt 0.459459 0.263158
vt 0.621622 0.236842
vt 0.594595 0.026316
vt 0.540541 0.236842
vt 0.540541 0.026316
vt 0.486486 0.236842
vt 0.486486 0.026316
vt 0.432432 0.236842
vt 0.432432 0.026316
vt 0.378378 0.236842
vt 0.378378 0.026316
vt 0.378378 0.473684
vt 0.405405 0.263158
vt 0.405405 0.473684
vt 0.432432 0.473684
vt 0.459459 0.263158
vt 0.459459 0.473684
vt 0.486486 0.473684
vt 0.513514 0.263158
vt 0.513514 0.473684
vt 0.540541 0.473684
vt 0.567568 0.263158
vt 0.567568 0.473684
vt 0.594595 0.236842
vt 0.378378 0.263158
vt 0.432432 0.263158
vt 0.486486 0.263158
vt 0.540541 0.263158
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.9239 0.0000 -0.3827
vn -0.7071 0.0000 -0.7071
vn 0.0000 0.0000 -1.0000
vn 0.7071 0.0000 -0.7071
vn 0.9239 0.0000 -0.3827
vn -0.9239 0.0000 0.3827
vn -0.7071 0.0000 0.7071
vn 0.7071 0.0000 0.7071
vn 0.9239 0.0000 0.3827
s off
f 49/57/14 55/58/14 50/59/14
f 58/60/14 49/57/14 53/61/14
f 50/59/14 56/62/14 51/63/14
f 52/64/14 58/65/14 53/61/14
f 60/66/15 64/67/15 65/68/15
f 60/66/15 67/69/15 62/70/15
f 59/71/15 66/72/15 64/73/15
f 63/74/15 67/75/15 68/76/15
f 52/64/16 68/77/16 57/78/16
f 56/79/16 61/80/16 51/63/16
f 49/57/14 54/81/14 55/58/14
f 58/60/14 54/82/14 49/57/14
f 50/59/14 55/83/14 56/62/14
f 52/64/14 57/84/14 58/65/14
f 60/66/15 59/71/15 64/67/15
f 60/66/15 65/85/15 67/69/15
f 59/71/15 61/80/15 66/72/15
f 63/74/15 62/70/15 67/75/15
f 52/64/16 63/74/16 68/77/16
f 56/79/16 66/86/16 61/80/16
s 1
f 81/87/17 84/88/18 80/89/18
f 80/89/18 85/90/19 79/91/19
f 79/91/19 87/92/20 83/93/20
f 83/93/20 88/94/21 82/95/21
f 72/96/22 77/97/23 73/98/23
f 73/99/23 75/100/16 69/101/16
f 69/102/16 74/103/24 70/104/24
f 70/105/24 76/106/25 71/107/25
f 81/87/17 86/108/17 84/88/18
f 80/89/18 84/88/18 85/90/19
f 79/91/19 85/90/19 87/92/20
f 83/93/20 87/92/20 88/94/21
f 72/96/22 78/109/22 77/97/23
f 73/99/23 77/110/23 75/100/16
f 69/102/16 75/111/16 74/103/24
f 70/105/24 74/112/24 76/106/25
o Slide
v -0.343750 0.281250 -0.062500
v -0.387944 0.281250 -0.044194
v -0.406250 0.281250 0.000000
v -0.387944 0.281250 0.044194
v -0.343750 0.281250 0.062500
v -0.299556 0.281250 0.044194
v -0.281250 0.281250 0.000000
v -0.299556 0.281250 -0.044194
v -0.343750 0.250000 -0.062500
v -0.387944 0.250000 -0.044194
v -0.406250 0.250000 0.000000
v -0.387944 0.250000 0.044194
v -0.343750 0.250000 0.062500
v -0.299556 0.250000 0.044194
v -0.281250 0.250000 0.000000
v -0.299556 0.250000 -0.044194
v -0.343750 0.281250 -0.031250
v -0.365847 0.281250 -0.022097
v -0.375000 0.281250 0.000000
v -0.365847 0.281250 0.022097
v -0.343750 0.281250 0.031250
v -0.321653 0.281250 0.022097
v -0.312500 0.281250 0.000000
v -0.321653 0.281250 -0.022097
v -0.343750 0.656250 -0.031250
v -0.365847 0.656250 -0.022097
v -0.375000 0.656250 0.000000
v -0.365847 0.656250 0.022097
v -0.343750 0.656250 0.031250
v -0.321653 0.656250 0.022097
v -0.312500 0.656250 0.000000
v -0.321653 0.656250 -0.022097
v -0.343750 0.250000 -0.062500
v -0.387944 0.250000 -0.044194
v -0.406250 0.250000 0.000000
v -0.387944 0.250000 0.044194
v -0.343750 0.250000 0.062500
v -0.299556 0.250000 0.044194
v -0.281250 0.250000 0.000000
v -0.299556 0.250000 -0.044194
v -0.343750 0.281250 -0.062500
v -0.387944 0.281250 -0.044194
v -0.406250 0.281250 0.000000
v -0.387944 0.281250 0.044194
v -0.343750 0.281250 0.062500
v -0.299556 0.281250 0.044194
v -0.281250 0.281250 0.000000
v -0.299556 0.281250 -0.044194
v -0.343750 0.281250 -0.031250
v -0.365847 0.281250 -0.022097
v -0.375000 0.281250 0.000000
v -0.365847 0.281250 0.022097
v -0.343750 0.281250 0.031250
v -0.321653 0.281250 0.022097
v -0.312500 0.281250 0.000000
v -0.321653 0.281250 -0.022097
vt 0.151586 0.089245
vt 0.136010 0.052632
vt 0.242368 0.052632
vt 0.189189 0.131579
vt 0.216216 0.157895
vt 0.189189 0.157895
vt 0.162162 0.131579
vt 0.135135 0.157895
vt 0.135135 0.131579
vt 0.297297 0.131579
vt 0.324324 0.157895
vt 0.297297 0.157895
vt 0.270270 0.157895
vt 0.270270 0.131579
vt 0.243243 0.131579
vt 0.216216 0.131579
vt 0.162162 0.157895
vt 0.324324 0.131579
vt 0.351351 0.157895
vt 0.243243 0.157895
vt 0.151586 0.016018
vt 0.189189 0.000852
vt 0.226792 0.016018
vt 0.226792 0.089245
vt 0.189189 0.104411
vt 0.351351 0.131579
vt 0.135135 0.105263
vt 0.162162 0.131579
vt 0.135135 0.131579
vt 0.297297 0.105263
vt 0.324324 0.131579
vt 0.297297 0.131579
vt 0.270270 0.105263
vt 0.270270 0.131579
vt 0.216216 0.105263
vt 0.243243 0.131579
vt 0.216216 0.131579
vt 0.162162 0.105263
vt 0.189189 0.131579
vt 0.324324 0.105263
vt 0.351351 0.131579
vt 0.243243 0.105263
vt 0.189189 0.105263
vt 0.162162 0.157895
vt 0.135135 0.473684
vt 0.135135 0.157895
vt 0.324324 0.157895
vt 0.297297 0.473684
vt 0.297297 0.157895
vt 0.270270 0.473684
vt 0.270270 0.157895
vt 0.243243 0.157895
vt 0.216216 0.473684
vt 0.216216 0.157895
vt 0.189189 0.157895
vt 0.162162 0.473684
vt 0.351351 0.157895
vt 0.324324 0.473684
vt 0.243243 0.473684
vt 0.189189 0.473684
vt 0.351351 0.105263
vt 0.351351 0.473684
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn -0.7071 0.0000 0.7071
vn 0.0000 0.0000 -1.0000
vn -0.7071 0.0000 -0.7071
vn 0.7071 0.0000 -0.7071
vn 0.7071 0.0000 0.7071
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
s off
f 124/113/26 123/114/26 127/115/26
f 133/116/27 142/117/27 141/118/27
f 132/119/27 139/120/27 131/121/27
f 129/122/27 138/123/27 137/124/27
f 129/122/27 144/125/27 136/126/27
f 135/127/27 142/117/27 134/128/27
f 132/119/27 141/118/27 140/129/27
f 130/130/27 139/131/27 138/123/27
f 135/127/27 144/125/27 143/132/27
f 123/114/26 122/133/26 127/115/26
f 122/133/26 121/134/26 127/115/26
f 121/134/26 128/135/26 127/115/26
f 127/115/26 126/136/26 125/137/26
f 125/137/26 124/113/26 127/115/26
f 133/116/27 134/128/27 142/117/27
f 132/119/27 140/129/27 139/120/27
f 129/122/27 130/130/27 138/123/27
f 129/122/27 137/124/27 144/125/27
f 135/127/27 143/132/27 142/117/27
f 132/119/27 133/116/27 141/118/27
f 130/130/27 131/138/27 139/131/27
f 135/127/27 136/126/27 144/125/27
s 1
f 99/139/28 92/140/29 91/141/28
f 97/142/30 90/143/31 89/144/30
f 104/145/32 89/144/30 96/146/32
f 102/147/33 95/148/34 94/149/33
f 100/150/29 93/151/35 92/140/29
f 98/152/31 91/153/28 90/143/31
f 103/154/34 96/146/32 95/148/34
f 101/155/35 94/149/33 93/151/35
f 108/156/29 115/157/28 107/158/28
f 106/159/31 113/160/30 105/161/30
f 105/161/30 120/162/32 112/163/32
f 111/164/34 118/165/33 110/166/33
f 109/167/35 116/168/29 108/156/29
f 107/169/28 114/170/31 106/159/31
f 112/163/32 119/171/34 111/164/34
f 110/166/33 117/172/35 109/167/35
f 99/139/28 100/150/29 92/140/29
f 97/142/30 98/152/31 90/143/31
f 104/145/32 97/142/30 89/144/30
f 102/147/33 103/154/34 95/148/34
f 100/150/29 101/155/35 93/151/35
f 98/152/31 99/173/28 91/153/28
f 103/154/34 104/145/32 96/146/32
f 101/155/35 102/147/33 94/149/33
f 108/156/29 116/168/29 115/157/28
f 106/159/31 114/170/31 113/160/30
f 105/161/30 113/160/30 120/162/32
f 111/164/34 119/171/34 118/165/33
f 109/167/35 117/172/35 116/168/29
f 107/169/28 115/174/28 114/170/31
f 112/163/32 120/162/32 119/171/34
f 110/166/33 118/165/33 117/172/35
o Base
v -0.375000 0.468750 -0.187500
v -0.375000 0.468750 0.187500
v -0.375000 0.531250 0.187500
v -0.375000 0.531250 -0.187500
v -0.500000 0.750000 0.187500
v -0.500000 0.250000 0.187500
v -0.500000 0.750000 -0.187500
v -0.500000 0.250000 -0.187500
v -0.437500 0.750000 -0.187500
v -0.437500 0.750000 0.187500
v -0.437500 0.250000 0.187500
v -0.437500 0.250000 -0.187500
v -0.437500 0.406250 -0.187500
v -0.437500 0.406250 0.187500
v -0.437500 0.593750 0.187500
v -0.437500 0.593750 -0.187500
v -0.437500 0.718750 0.125000
v -0.437500 0.281250 0.125000
v -0.437500 0.718750 -0.125000
v -0.437500 0.281250 -0.125000
v -0.375000 0.718750 -0.125000
v -0.375000 0.718750 0.125000
v -0.312500 0.281250 0.125000
v -0.312500 0.281250 -0.125000
v -0.268306 0.281250 -0.088388
v -0.330806 0.718750 -0.088388
v -0.250000 0.281250 0.000000
v -0.312500 0.718750 0.000000
v -0.268306 0.281250 0.088388
v -0.330806 0.718750 0.088388
v -0.437500 0.625000 -0.125000
v -0.375000 0.625000 -0.125000
v -0.437500 0.625000 -0.156250
v -0.406250 0.625000 -0.156250
v -0.375000 0.656250 -0.125000
v -0.437500 0.656250 -0.156250
v -0.406250 0.656250 -0.156250
v -0.437500 0.656250 -0.125000
v -0.437500 0.343750 -0.125000
v -0.375000 0.343750 -0.125000
v -0.437500 0.343750 -0.156250
v -0.406250 0.343750 -0.156250
v -0.375000 0.375000 -0.125000
v -0.437500 0.375000 -0.156250
v -0.406250 0.375000 -0.156250
v -0.437500 0.375000 -0.125000
v -0.437500 0.625000 0.125000
v -0.375000 0.625000 0.125000
v -0.437500 0.625000 0.156250
v -0.406250 0.625000 0.156250
v -0.375000 0.656250 0.125000
v -0.437500 0.656250 0.156250
v -0.406250 0.656250 0.156250
v -0.437500 0.656250 0.125000
v -0.437500 0.343750 0.125000
v -0.375000 0.343750 0.125000
v -0.437500 0.343750 0.156250
v -0.406250 0.343750 0.156250
v -0.375000 0.375000 0.125000
v -0.437500 0.375000 0.156250
v -0.406250 0.375000 0.156250
v -0.437500 0.375000 0.125000
v -0.297708 0.497101 -0.046875
v -0.302321 0.529924 -0.033146
v -0.304231 0.543519 0.000000
v -0.302321 0.529924 0.033146
v -0.297708 0.497101 0.046875
v -0.293095 0.464278 0.033146
v -0.291184 0.450682 0.000000
v -0.293095 0.464278 -0.033146
v -0.266762 0.501450 -0.046875
v -0.271375 0.534273 -0.033146
v -0.273285 0.547869 0.000000
v -0.271375 0.534273 0.033146
v -0.266762 0.501450 0.046875
v -0.262149 0.468627 0.033146
v -0.260238 0.455031 0.000000
v -0.262149 0.468627 -0.033146
v -0.437500 0.281250 0.125000
v -0.437500 0.281250 -0.125000
v -0.312500 0.281250 0.125000
v -0.312500 0.281250 -0.125000
v -0.268306 0.281250 -0.088388
v -0.250000 0.281250 0.000000
v -0.268306 0.281250 0.088388
v -0.437500 0.718750 0.125000
v -0.437500 0.718750 -0.125000
v -0.375000 0.718750 -0.125000
v -0.375000 0.718750 0.125000
v -0.330806 0.718750 -0.088388
v -0.312500 0.718750 0.000000
v -0.330806 0.718750 0.088388
v -0.375000 0.468750 -0.187500
v -0.375000 0.468750 0.187500
v -0.375000 0.531250 0.187500
v -0.375000 0.531250 -0.187500
v -0.437500 0.406250 -0.187500
v -0.437500 0.406250 0.187500
v -0.437500 0.593750 0.187500
v -0.437500 0.593750 -0.187500
v -0.266762 0.501450 -0.046875
v -0.271375 0.534273 -0.033146
v -0.273285 0.547869 0.000000
v -0.271375 0.534273 0.033146
v -0.266762 0.501450 0.046875
v -0.262149 0.468627 0.033146
v -0.260238 0.455031 0.000000
v -0.262149 0.468627 -0.033146
v -0.266762 0.501450 -0.023437
v -0.269068 0.517861 -0.016573
v -0.270024 0.524659 0.000000
v -0.269068 0.517861 0.016573
v -0.266762 0.501450 0.023438
v -0.264455 0.485038 0.016573
v -0.263500 0.478240 0.000000
v -0.264455 0.485038 -0.016573
vt 0.027027 0.263158
vt 0.054054 0.289474
vt 0.027027 0.289474
vt 0.540541 0.947368
vt 0.864865 0.526316
vt 0.864865 0.947368
vt 0.432432 0.526316
vt 0.108108 0.657895
vt 0.108108 0.526316
vt 0.108108 0.815789
vt 0.432432 0.947368
vt 0.108108 0.947368
vt 0.432432 0.710526
vt 0.486486 0.815789
vt 0.432432 0.763158
vt 0.432432 0.473684
vt 0.108108 0.473684
vt 0.108108 1.000000
vt 0.432432 1.000000
vt 0.027027 0.447368
vt 0.054054 0.421053
vt 0.054054 0.447368
vt 0.027027 0.421053
vt 0.054054 0.394737
vt 0.054054 0.815789
vt 0.108108 0.710526
vt 0.108108 0.763158
vt 0.486486 0.657895
vt 0.486486 0.526316
vt 0.540541 0.526316
vt 0.000000 0.526316
vt 0.054054 0.657895
vt 0.891892 0.447368
vt 0.918919 0.473684
vt 0.918919 0.526316
vt 0.054054 0.263158
vt 0.081081 0.289474
vt 0.054054 0.315789
vt 0.108108 0.289474
vt 0.081081 0.315789
vt 0.108108 0.263158
vt 0.081081 0.263158
vt 0.135135 0.263158
vt 0.054054 0.263158
vt 0.081081 0.289474
vt 0.054054 0.315789
vt 0.108108 0.289474
vt 0.081081 0.315789
vt 0.108108 0.263158
vt 0.081081 0.263158
vt 0.135135 0.263158
vt 0.135135 0.263158
vt 0.108108 0.289474
vt 0.108108 0.263158
vt 0.108108 0.315789
vt 0.081081 0.289474
vt 0.081081 0.263158
vt 0.054054 0.263158
vt 0.054054 0.315789
vt 0.135135 0.263158
vt 0.108108 0.289474
vt 0.108108 0.263158
vt 0.108108 0.315789
vt 0.081081 0.289474
vt 0.081081 0.263158
vt 0.054054 0.263158
vt 0.054054 0.315789
vt 0.918919 0.184211
vt 0.891892 0.210526
vt 0.810811 0.236842
vt 0.027027 0.315789
vt 0.054054 0.342105
vt 0.027027 0.342105
vt 0.027027 0.394737
vt 0.054054 0.368421
vt 0.027027 0.473684
vt 0.054054 0.473684
vt 0.054054 0.315789
vt 0.027027 0.368421
vt 0.054054 0.263158
vt 0.432432 0.657895
vt 0.432432 0.815789
vt 0.486486 0.947368
vt 0.054054 0.947368
vt 0.000000 0.947368
vt 0.054054 0.526316
vt 0.702703 0.526316
vt 0.810811 0.421053
vt 0.702703 0.473684
vt 0.729730 0.447368
vt 0.108108 0.315789
vt 0.135135 0.315789
vt 0.108108 0.315789
vt 0.135135 0.315789
vt 0.135135 0.315789
vt 0.081081 0.315789
vt 0.135135 0.315789
vt 0.081081 0.315789
vt 0.729730 0.210526
vt 0.702703 0.184211
vt 0.702703 0.078947
vt 0.918919 0.078947
vt 0.621622 0.236842
vt 0.675676 0.421053
vt 0.621622 0.421053
vt 1.000000 0.236842
vt 0.945946 0.421053
vt 0.891892 0.236842
vt 0.864865 0.236842
vt 0.810811 0.421053
vt 0.810811 0.236842
vt 0.756757 0.236842
vt 0.864865 0.421053
vt 0.729730 0.236842
vt 0.756757 0.421053
vt 0.729730 0.421053
vt 0.000000 0.447368
vt 0.027027 0.473684
vt 0.000000 0.473684
vt 0.000000 0.315789
vt 0.027027 0.289474
vt 0.027027 0.315789
vt 0.000000 0.368421
vt 0.027027 0.342105
vt 0.027027 0.368421
vt 0.000000 0.394737
vt 0.027027 0.421053
vt 0.000000 0.421053
vt 0.027027 0.447368
vt 0.000000 0.289474
vt 0.027027 0.263158
vt 0.000000 0.342105
vt 0.027027 0.394737
vt 0.108108 0.710526
vt 0.432432 0.763158
vt 0.108108 0.763158
vt 0.108108 0.657895
vt 0.432432 0.710526
vt 0.432432 0.815789
vt 1.000000 0.421053
vt 0.891892 0.421053
vt 0.000000 0.263158
vt 0.432432 0.657895
vt 0.108108 0.815789
vn 0.9903 0.1392 0.0000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.7071 0.0000 -0.7071
vn 0.7071 0.0000 0.7071
vn 0.3111 0.0444 0.9493
vn 0.3111 0.0444 -0.9493
vn 0.3651 0.0522 -0.9295
vn 0.8579 0.1225 -0.4989
vn 0.9899 0.1414 0.0000
vn 0.8579 0.1225 0.4989
vn 0.8424 0.1203 -0.5253
vn 0.3651 0.0522 0.9295
vn 0.8424 0.1203 0.5253
vn 0.0984 -0.7002 -0.7071
vn 0.1392 -0.9903 0.0000
vn 0.0984 -0.7002 0.7071
vn -0.1392 0.9903 0.0000
vn -0.0984 0.7002 0.7071
vn -0.0984 0.7002 -0.7071
vn 0.9239 -0.3827 0.0000
vn 0.9239 0.3827 0.0000
vn 0.7071 -0.7071 0.0000
vn 0.7071 0.7071 0.0000
s off
f 251/175/36 258/176/36 250/177/36
f 151/178/37 150/179/37 149/180/37
f 156/181/38 158/182/38 155/183/38
f 159/184/38 153/185/38 154/186/38
f 145/187/39 160/188/39 148/189/39
f 152/190/40 155/183/40 150/191/40
f 149/192/41 153/185/41 151/193/41
f 252/194/36 253/195/36 260/196/36
f 245/197/36 254/198/36 253/195/36
f 159/199/42 146/200/42 147/201/42
f 157/202/39 156/203/39 152/204/39
f 150/205/42 158/206/42 159/199/42
f 234/207/41 232/208/41 231/209/41
f 175/210/40 178/211/40 176/212/40
f 181/213/43 176/214/43 178/211/43
f 180/215/39 178/211/39 177/216/39
f 182/217/41 181/213/41 180/215/41
f 183/218/40 186/219/40 184/220/40
f 189/221/43 184/222/43 186/219/43
f 188/223/39 186/219/39 185/224/39
f 190/225/41 189/221/41 188/223/41
f 191/226/40 194/227/40 193/228/40
f 192/229/44 197/230/44 194/227/44
f 194/227/42 196/231/42 193/228/42
f 198/232/41 197/230/41 195/233/41
f 199/234/40 202/235/40 201/236/40
f 200/237/44 205/238/44 202/235/44
f 202/235/42 204/239/42 201/236/42
f 206/240/41 205/238/41 203/241/41
f 226/242/40 227/243/40 228/244/40
f 249/245/36 256/246/36 248/247/36
f 246/248/36 255/249/36 254/198/36
f 251/250/36 260/196/36 259/251/36
f 250/177/36 257/252/36 249/245/36
f 248/247/36 255/249/36 247/253/36
f 251/175/36 259/254/36 258/176/36
f 151/178/37 152/204/37 150/179/37
f 156/181/38 157/255/38 158/182/38
f 159/184/38 160/256/38 153/185/38
f 145/187/39 157/202/39 160/188/39
f 152/190/40 156/181/40 155/183/40
f 149/192/41 154/186/41 153/185/41
f 252/194/36 245/197/36 253/195/36
f 245/197/36 246/248/36 254/198/36
f 159/199/42 158/206/42 146/200/42
f 152/204/39 151/178/39 160/188/39
f 151/178/39 153/257/39 160/188/39
f 160/188/39 157/202/39 152/204/39
f 154/258/42 149/259/42 159/199/42
f 149/259/42 150/205/42 159/199/42
f 150/205/42 155/260/42 158/206/42
f 231/209/41 230/261/41 235/262/41
f 230/261/41 233/263/41 236/264/41
f 235/262/41 230/261/41 236/264/41
f 235/262/41 234/207/41 231/209/41
f 175/210/40 177/216/40 178/211/40
f 181/213/43 179/265/43 176/214/43
f 180/215/39 181/213/39 178/211/39
f 182/217/41 179/266/41 181/213/41
f 183/218/40 185/224/40 186/219/40
f 189/221/43 187/267/43 184/222/43
f 188/223/39 189/221/39 186/219/39
f 190/225/41 187/268/41 189/221/41
f 191/226/40 192/269/40 194/227/40
f 192/229/44 195/270/44 197/230/44
f 194/227/42 197/230/42 196/231/42
f 198/232/41 196/231/41 197/230/41
f 199/234/40 200/271/40 202/235/40
f 200/237/44 203/272/44 205/238/44
f 202/235/42 205/238/42 204/239/42
f 206/240/41 204/239/41 205/238/41
f 229/273/40 225/274/40 228/244/40
f 225/274/40 223/275/40 228/244/40
f 223/275/40 224/276/40 228/244/40
f 224/276/40 226/242/40 228/244/40
f 249/245/36 257/252/36 256/246/36
f 246/248/36 247/253/36 255/249/36
f 251/250/36 252/194/36 260/196/36
f 250/177/36 258/176/36 257/252/36
f 248/247/36 256/246/36 255/249/36
s 1
f 162/277/42 166/278/45 161/279/42
f 164/280/39 165/281/46 168/282/47
f 169/283/48 172/284/49 171/285/49
f 172/284/49 173/286/50 171/285/49
f 168/282/47 170/287/51 169/283/48
f 167/288/52 174/289/53 166/290/45
f 214/291/54 221/292/55 213/293/55
f 211/294/42 220/295/56 219/296/42
f 209/297/57 218/298/58 217/299/57
f 208/300/59 215/301/39 207/302/39
f 214/291/54 215/301/39 222/303/54
f 212/304/56 221/305/55 220/295/56
f 211/294/42 218/298/58 210/306/58
f 209/297/57 216/307/59 208/300/59
f 238/308/60 240/309/61 239/310/61
f 242/311/62 237/312/60 238/308/60
f 244/313/63 239/310/61 240/309/61
f 162/277/42 167/288/52 166/278/45
f 164/280/39 163/314/39 165/281/46
f 169/283/48 170/287/51 172/284/49
f 172/284/49 174/289/53 173/286/50
f 168/282/47 165/315/46 170/287/51
f 167/288/52 173/286/50 174/289/53
f 214/291/54 222/303/54 221/292/55
f 211/294/42 212/304/56 220/295/56
f 209/297/57 210/306/58 218/298/58
f 208/300/59 216/307/59 215/301/39
f 214/291/54 207/302/39 215/301/39
f 212/304/56 213/316/55 221/305/55
f 211/294/42 219/296/42 218/298/58
f 209/297/57 217/299/57 216/307/59
f 238/308/60 237/312/60 240/309/61
f 242/311/62 241/317/62 237/312/60
f 244/313/63 243/318/63 239/310/61

Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB