resolved culling issues + crude heater voxel shape

This commit is contained in:
LordGrimmauld 2020-07-14 10:40:19 +02:00
parent 42b78b01eb
commit 7404972cf6
3 changed files with 27 additions and 13 deletions

View file

@ -114,6 +114,10 @@ public class AllShapes {
BASIN_BLOCK_SHAPE = shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 14, 14) BASIN_BLOCK_SHAPE = shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 14, 14)
.add(2, 0, 2, 14, 2, 14) .add(2, 0, 2, 14, 2, 14)
.build(), .build(),
HEATER_BLOCK_SHAPE =
shape(2, 0, 2, 14, 16, 14).add(0, 0, 0, 16, 2, 16)
.erase(3, 5, 3, 13, 16, 13)
.build(),
CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 22, 16), CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 22, 16),
MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12) MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12)
.build(), .build(),

View file

@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.processing;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import com.simibubi.create.AllShapes;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.ITE;
@ -20,6 +21,8 @@ import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -74,9 +77,15 @@ public class HeaterBlock extends Block implements ITE<HeaterTileEntity> {
@Override @Override
public BlockState getStateForPlacement(BlockItemUseContext context) { public BlockState getStateForPlacement(BlockItemUseContext context) {
ItemStack item = context.getItem(); ItemStack item = context.getItem();
return super.getStateForPlacement(context).with(HAS_BLAZE, item.hasTag() && item.getTag() BlockState state = super.getStateForPlacement(context);
.contains("has_blaze") return (state != null ? state : getDefaultState()).with(HAS_BLAZE,
&& item.getTag() item.hasTag() && item.getTag() != null && item.getTag()
.contains("has_blaze") && item.getTag()
.getBoolean("has_blaze")); .getBoolean("has_blaze"));
} }
@Override
public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext context) {
return AllShapes.HEATER_BLOCK_SHAPE;
}
} }

View file

@ -7,6 +7,7 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.ForgeHooks;
@ -64,13 +65,15 @@ public class HeaterTileEntity extends SmartTileEntity {
} }
boolean tryUpdateFuel(ItemStack itemStack) { boolean tryUpdateFuel(ItemStack itemStack) {
int burnTime = itemStack.getItem() int burnTime = itemStack.getItem() == Items.EGG ? 150 : itemStack.getItem()
.getBurnTime(itemStack); .getBurnTime(itemStack);
if (burnTime == -1) if (burnTime == -1)
burnTime = ForgeHooks.getBurnTime(itemStack); burnTime = ForgeHooks.getBurnTime(itemStack);
int newFuelLevel = (burnTime > burnTimeRemaining ? 1 : 0); // todo: + (itemStack.getItem() == AllItems.SUPER_SPECIAL_FUEL.get() ? 1 : 0); if (burnTime <= 0)
if (newFuelLevel <= fuelLevel) { return false;
int newFuelLevel = 1; // todo: + (itemStack.getItem() == AllItems.SUPER_SPECIAL_FUEL.get() ? 1 : 0);
if (newFuelLevel < fuelLevel ^ burnTime <= burnTimeRemaining) {
return false; return false;
} }
burnTimeRemaining = burnTime; burnTimeRemaining = burnTime;
@ -87,10 +90,8 @@ public class HeaterTileEntity extends SmartTileEntity {
int newHeatLevel = 1 + fuelLevel; int newHeatLevel = 1 + fuelLevel;
if (newHeatLevel != bufferedHeatLevel) { if (newHeatLevel != bufferedHeatLevel) {
bufferedHeatLevel = newHeatLevel; bufferedHeatLevel = newHeatLevel;
// Block block = getBlockState().getBlock();
// if (block instanceof HeaterBlock)
// ((HeaterBlock) block).setLightLevel();
markDirty(); markDirty();
if(world != null)
sendData(); sendData();
} }
} }