From a10210888cf19d89c5547463c2ce31f870e496e5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 12 Nov 2018 15:42:56 +0100 Subject: [PATCH] allow the extraneous firestarter to be placed on any side of a furnace --- .../blocks/BlockFurnaceHeater.java | 76 +++++++++++++++++-- .../blocks/tiles/TileEntityFurnaceHeater.java | 16 ++-- .../blockstates/furnace_heater.json | 22 +++++- .../en_us/entries/using/furnace_heater.json | 2 +- 4 files changed, 101 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java index ad8e55e6..87138f12 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java @@ -3,10 +3,14 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.blocks.tiles.TileEntityFurnaceHeater; import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; @@ -17,8 +21,14 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.Random; public class BlockFurnaceHeater extends BlockContainerImpl { + public static final PropertyDirection FACING = PropertyDirection.create("facing"); - private static final AxisAlignedBB AABB = new AxisAlignedBB(2 / 16F, 0F, 2 / 16F, 14 / 16F, 4 / 16F, 14 / 16F); + private static final AxisAlignedBB AABB_UP = new AxisAlignedBB(2 / 16F, 0F, 2 / 16F, 14 / 16F, 4 / 16F, 14 / 16F); + private static final AxisAlignedBB AABB_DOWN = new AxisAlignedBB(2 / 16F, 12 / 16F, 2 / 16F, 14 / 16F, 1F, 14 / 16F); + private static final AxisAlignedBB AABB_NORTH = new AxisAlignedBB(2 / 16F, 2 / 16F, 12 / 16F, 14 / 16F, 14 / 16F, 1F); + private static final AxisAlignedBB AABB_EAST = new AxisAlignedBB(0F, 2 / 16F, 2 / 16F, 4 / 16F, 14 / 16F, 14 / 16F); + private static final AxisAlignedBB AABB_SOUTH = new AxisAlignedBB(2 / 16F, 2 / 16F, 0F, 14 / 16F, 14 / 16F, 4 / 16F); + private static final AxisAlignedBB AABB_WEST = new AxisAlignedBB(12 / 16F, 2 / 16F, 2 / 16F, 1F, 14 / 16F, 14 / 16F); public BlockFurnaceHeater() { super(Material.ROCK, "furnace_heater", TileEntityFurnaceHeater.class, "furnace_heater"); @@ -31,18 +41,50 @@ public class BlockFurnaceHeater extends BlockContainerImpl { public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) { TileEntity tile = worldIn.getTileEntity(pos); if (tile instanceof TileEntityFurnaceHeater && ((TileEntityFurnaceHeater) tile).isActive) { + EnumFacing facing = stateIn.getValue(FACING); + + float x; + float y; + float z; + if (facing == EnumFacing.UP) { + x = 0.35F + rand.nextFloat() * 0.3F; + y = 0F; + z = 0.35F + rand.nextFloat() * 0.3F; + } else if (facing == EnumFacing.DOWN) { + x = 0.35F + rand.nextFloat() * 0.3F; + y = 1F; + z = 0.35F + rand.nextFloat() * 0.3F; + } else { + x = facing.getZOffset() != 0 ? (0.35F + rand.nextFloat() * 0.3F) : facing.getXOffset() < 0 ? 1 : 0; + y = 0.35F + rand.nextFloat() * 0.3F; + z = facing.getXOffset() != 0 ? (0.35F + rand.nextFloat() * 0.3F) : facing.getZOffset() < 0 ? 1 : 0; + } + NaturesAuraAPI.instance().spawnMagicParticle(worldIn, - pos.getX() + 0.35F + rand.nextFloat() * 0.3F, - pos.getY() + 0.2F, - pos.getZ() + 0.35F + rand.nextFloat() * 0.3F, - 0F, rand.nextFloat() * 0.016F + 0.01F, 0F, - rand.nextBoolean() ? 0xf46e42 : 0xf49541, rand.nextFloat() + 0.5F, 50, 0F, true, true); + pos.getX() + x, pos.getY() + y, pos.getZ() + z, + (rand.nextFloat() * 0.016F + 0.01F) * facing.getXOffset(), + (rand.nextFloat() * 0.016F + 0.01F) * facing.getYOffset(), + (rand.nextFloat() * 0.016F + 0.01F) * facing.getZOffset(), + 0xf46e42, rand.nextFloat() + 0.5F, 55, 0F, true, true); } } @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return AABB; + switch (state.getValue(FACING)) { + case DOWN: + return AABB_DOWN; + case NORTH: + return AABB_NORTH; + case EAST: + return AABB_EAST; + case SOUTH: + return AABB_SOUTH; + case WEST: + return AABB_WEST; + default: + return AABB_UP; + } } @Override @@ -69,4 +111,24 @@ public class BlockFurnaceHeater extends BlockContainerImpl { public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) { return BlockFaceShape.UNDEFINED; } + + @Override + protected BlockStateContainer createBlockState() { + return new BlockStateContainer(this, FACING); + } + + @Override + public int getMetaFromState(IBlockState state) { + return state.getValue(FACING).getIndex(); + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return this.getDefaultState().withProperty(FACING, EnumFacing.byIndex(meta)); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { + return this.getDefaultState().withProperty(FACING, facing); + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityFurnaceHeater.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityFurnaceHeater.java index bb25a641..775440f3 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityFurnaceHeater.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityFurnaceHeater.java @@ -2,7 +2,7 @@ package de.ellpeck.naturesaura.blocks.tiles; import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; -import de.ellpeck.naturesaura.aura.chunk.AuraChunk; +import de.ellpeck.naturesaura.blocks.BlockFurnaceHeater; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticleStream; import net.minecraft.block.BlockFurnace; @@ -11,6 +11,7 @@ import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -24,7 +25,9 @@ public class TileEntityFurnaceHeater extends TileEntityImpl implements ITickable if (!this.world.isRemote && this.world.getTotalWorldTime() % 5 == 0) { boolean did = false; - TileEntity tile = this.world.getTileEntity(this.pos.down()); + EnumFacing facing = this.world.getBlockState(this.pos).getValue(BlockFurnaceHeater.FACING); + BlockPos tilePos = this.pos.offset(facing.getOpposite()); + TileEntity tile = this.world.getTileEntity(tilePos); if (tile instanceof TileEntityFurnace) { TileEntityFurnace furnace = (TileEntityFurnace) tile; if (isReady(furnace)) { @@ -40,16 +43,17 @@ public class TileEntityFurnaceHeater extends TileEntityImpl implements ITickable chunk.drainAura(spot, MathHelper.ceil((200 - time) / 4F)); did = true; - if (this.world.getTotalWorldTime() % 15 == 0) + if (this.world.getTotalWorldTime() % 15 == 0) { PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream( this.pos.getX() + (float) this.world.rand.nextGaussian() * 5F, this.pos.getY() + 1 + this.world.rand.nextFloat() * 5F, this.pos.getZ() + (float) this.world.rand.nextGaussian() * 5F, - this.pos.getX() + 0.25F + this.world.rand.nextFloat() * 0.5F, - this.pos.getY() + 0.15F, - this.pos.getZ() + 0.25F + this.world.rand.nextFloat() * 0.5F, + tilePos.getX() + this.world.rand.nextFloat(), + tilePos.getY() + this.world.rand.nextFloat(), + tilePos.getZ() + this.world.rand.nextFloat(), this.world.rand.nextFloat() * 0.07F + 0.07F, 0x89cc37, this.world.rand.nextFloat() + 0.5F )); + } } } diff --git a/src/main/resources/assets/naturesaura/blockstates/furnace_heater.json b/src/main/resources/assets/naturesaura/blockstates/furnace_heater.json index ae8a883c..9cac4bd0 100644 --- a/src/main/resources/assets/naturesaura/blockstates/furnace_heater.json +++ b/src/main/resources/assets/naturesaura/blockstates/furnace_heater.json @@ -10,6 +10,26 @@ }, "variants": { "normal": [{}], - "inventory": [{}] + "inventory": [{}], + "facing": { + "down": { + "x": 180 + }, + "up": {}, + "north": { + "x": 90 + }, + "south": { + "x": 270 + }, + "west": { + "x": 90, + "y": 270 + }, + "east": { + "x": 270, + "y": 270 + } + } } } \ No newline at end of file diff --git a/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/using/furnace_heater.json b/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/using/furnace_heater.json index 5e129496..0ae62689 100644 --- a/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/using/furnace_heater.json +++ b/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/using/furnace_heater.json @@ -6,7 +6,7 @@ "pages": [ { "type": "text", - "text": "At some point, one realizes that a $(item)Furnace$() is just too slow and consuming of resources to use efficiently.$(br)The $(item)Extraneous Firestarter$() will speed up any $(item)Furnace$() it is placed on top of, along with giving it the necessary heat to smelt any sort of material. Note that, while consuming the required $(aura) for this, the natural levels might drop into the negatives, causing $(l:intro/aura)diminishing returns$()." + "text": "At some point, one realizes that a $(item)Furnace$() is just too slow and consuming of resources to use efficiently.$(br)The $(item)Extraneous Firestarter$() speeds up a $(item)Furnace$() it is placed on any side of, along with giving it the necessary heat to smelt any sort of material. Note that, while consuming the required $(aura) for this, the natural levels might drop into the negatives, causing $(l:intro/aura)diminishing returns$()." }, { "type": "naturesaura:tree_ritual",