diff --git a/src/main/java/appeng/block/networking/CableBusBlock.java b/src/main/java/appeng/block/networking/CableBusBlock.java index 6a9794f33..ace257fa7 100644 --- a/src/main/java/appeng/block/networking/CableBusBlock.java +++ b/src/main/java/appeng/block/networking/CableBusBlock.java @@ -39,6 +39,8 @@ import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.DyeColor; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; +import net.minecraft.state.IntegerProperty; +import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; @@ -82,8 +84,12 @@ public class CableBusBlock extends AEBaseTileBlock implement private static final ICableBusContainer NULL_CABLE_BUS = new NullCableBusContainer(); + private static final IntegerProperty LIGHT_LEVEL = IntegerProperty.create("light_level", 0, 15); + public CableBusBlock() { - super(defaultProps(AEMaterials.GLASS).notSolid().noDrops().variableOpacity()); + super(defaultProps(AEMaterials.GLASS).notSolid().noDrops().variableOpacity() + .setLightLevel(state -> state.get(LIGHT_LEVEL))); + setDefaultState(getDefaultState().with(LIGHT_LEVEL, 0)); } @Override @@ -126,11 +132,9 @@ public class CableBusBlock extends AEBaseTileBlock implement } @Override - public int getLightValue(final BlockState state, final IBlockReader world, final BlockPos pos) { - if (state.getBlock() != this) { - return state.getBlock().getLightValue(state, world, pos); - } - return this.cb(world, pos).getLightValue(); + protected void fillStateContainer(StateContainer.Builder builder) { + super.fillStateContainer(builder); + builder.add(LIGHT_LEVEL); } @Override @@ -386,4 +390,13 @@ public class CableBusBlock extends AEBaseTileBlock implement } } + @Override + protected BlockState updateBlockStateFromTileEntity(BlockState currentState, CableBusTileEntity te) { + if (currentState.getBlock() != this) { + return currentState; + } + int lightLevel = te.getCableBus().getLightValue(); + return super.updateBlockStateFromTileEntity(currentState, te).with(LIGHT_LEVEL, lightLevel); + } + } diff --git a/src/main/java/appeng/tile/AEBaseTileEntity.java b/src/main/java/appeng/tile/AEBaseTileEntity.java index 02fc63c1d..9d8430c27 100644 --- a/src/main/java/appeng/tile/AEBaseTileEntity.java +++ b/src/main/java/appeng/tile/AEBaseTileEntity.java @@ -39,10 +39,13 @@ import net.minecraft.network.play.server.SUpdateTileEntityPacket; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.items.IItemHandler; @@ -458,4 +461,15 @@ public class AEBaseTileEntity extends TileEntity implements IOrientable, ICommon return new AEModelData(up, forward); } + /** + * AE Tile Entities will generally confine themselves to rendering within the + * bounding block. Forge however would retrieve the collision box here, which is + * very expensive. + */ + @OnlyIn(Dist.CLIENT) + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + }